Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/python-nbxmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Leboulanger <asterix@lagaule.org>2012-05-08 16:19:11 +0400
committerYann Leboulanger <asterix@lagaule.org>2012-05-08 16:19:11 +0400
commit97ac572c20083fe0283c4621dc6e54603a32a310 (patch)
tree42c7b0d6121e71538d804136a8929b7b25adb96c
initial revisionnbxmpp-0.1
-rw-r--r--COPYING674
-rw-r--r--ChangeLog3
-rw-r--r--MANIFEST.in3
-rw-r--r--README17
-rw-r--r--doc/apidocs/api-objects.txt1615
-rw-r--r--doc/apidocs/class-tree.html427
-rw-r--r--doc/apidocs/crarr.pngbin0 -> 340 bytes
-rw-r--r--doc/apidocs/epydoc.css322
-rw-r--r--doc/apidocs/epydoc.js293
-rw-r--r--doc/apidocs/frames.html17
-rw-r--r--doc/apidocs/help.html278
-rw-r--r--doc/apidocs/identifier-index.html2839
-rw-r--r--doc/apidocs/index.html17
-rw-r--r--doc/apidocs/module-tree.html148
-rw-r--r--doc/apidocs/nbxmpp-module.html1829
-rw-r--r--doc/apidocs/nbxmpp-pysrc.html148
-rw-r--r--doc/apidocs/nbxmpp.auth_nb-module.html726
-rw-r--r--doc/apidocs/nbxmpp.auth_nb-pysrc.html1310
-rw-r--r--doc/apidocs/nbxmpp.auth_nb.NonBlockingBind-class.html475
-rw-r--r--doc/apidocs/nbxmpp.auth_nb.NonBlockingNonSASL-class.html401
-rw-r--r--doc/apidocs/nbxmpp.auth_nb.SASL-class.html578
-rw-r--r--doc/apidocs/nbxmpp.bosh-module.html424
-rw-r--r--doc/apidocs/nbxmpp.bosh-pysrc.html910
-rw-r--r--doc/apidocs/nbxmpp.bosh.AckChecker-class.html339
-rw-r--r--doc/apidocs/nbxmpp.bosh.KeyStack-class.html262
-rw-r--r--doc/apidocs/nbxmpp.bosh.NonBlockingBOSH-class.html1298
-rw-r--r--doc/apidocs/nbxmpp.c14n-module.html325
-rw-r--r--doc/apidocs/nbxmpp.c14n-pysrc.html183
-rw-r--r--doc/apidocs/nbxmpp.client_nb-module.html243
-rw-r--r--doc/apidocs/nbxmpp.client_nb-pysrc.html1054
-rw-r--r--doc/apidocs/nbxmpp.client_nb.NonBlockingClient-class.html1232
-rw-r--r--doc/apidocs/nbxmpp.dispatcher_nb-module.html344
-rw-r--r--doc/apidocs/nbxmpp.dispatcher_nb-pysrc.html1063
-rw-r--r--doc/apidocs/nbxmpp.dispatcher_nb.BOSHDispatcher-class.html469
-rw-r--r--doc/apidocs/nbxmpp.dispatcher_nb.Dispatcher-class.html262
-rw-r--r--doc/apidocs/nbxmpp.dispatcher_nb.XMPPDispatcher-class.html1411
-rw-r--r--doc/apidocs/nbxmpp.features_nb-module.html982
-rw-r--r--doc/apidocs/nbxmpp.features_nb-pysrc.html344
-rw-r--r--doc/apidocs/nbxmpp.idlequeue-module.html551
-rw-r--r--doc/apidocs/nbxmpp.idlequeue-pysrc.html812
-rw-r--r--doc/apidocs/nbxmpp.idlequeue.GlibIdleQueue-class.html467
-rw-r--r--doc/apidocs/nbxmpp.idlequeue.IdleCommand-class.html685
-rw-r--r--doc/apidocs/nbxmpp.idlequeue.IdleObject-class.html408
-rw-r--r--doc/apidocs/nbxmpp.idlequeue.IdleQueue-class.html801
-rw-r--r--doc/apidocs/nbxmpp.idlequeue.SelectIdleQueue-class.html390
-rw-r--r--doc/apidocs/nbxmpp.plugin-module.html233
-rw-r--r--doc/apidocs/nbxmpp.plugin-pysrc.html271
-rw-r--r--doc/apidocs/nbxmpp.plugin.PlugIn-class.html363
-rw-r--r--doc/apidocs/nbxmpp.protocol-module.html5651
-rw-r--r--doc/apidocs/nbxmpp.protocol-pysrc.html2183
-rw-r--r--doc/apidocs/nbxmpp.protocol.Acks-class.html497
-rw-r--r--doc/apidocs/nbxmpp.protocol.BOSHBody-class.html348
-rw-r--r--doc/apidocs/nbxmpp.protocol.BadFormat-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.BadNamespacePrefix-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.Conflict-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.ConnectionTimeout-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.DataField-class.html950
-rw-r--r--doc/apidocs/nbxmpp.protocol.DataForm-class.html817
-rw-r--r--doc/apidocs/nbxmpp.protocol.Error-class.html410
-rw-r--r--doc/apidocs/nbxmpp.protocol.ErrorNode-class.html337
-rw-r--r--doc/apidocs/nbxmpp.protocol.Hashes-class.html475
-rw-r--r--doc/apidocs/nbxmpp.protocol.HostGone-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.HostUnknown-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.ImproperAddressing-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.InternalServerError-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.InvalidFrom-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.InvalidID-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.InvalidNamespace-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.InvalidXML-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.Iq-class.html765
-rw-r--r--doc/apidocs/nbxmpp.protocol.JID-class.html657
-rw-r--r--doc/apidocs/nbxmpp.protocol.Message-class.html776
-rw-r--r--doc/apidocs/nbxmpp.protocol.NodeProcessed-class.html216
-rw-r--r--doc/apidocs/nbxmpp.protocol.NotAuthorized-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.PolicyViolation-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.Presence-class.html950
-rw-r--r--doc/apidocs/nbxmpp.protocol.Protocol-class.html1040
-rw-r--r--doc/apidocs/nbxmpp.protocol.RemoteConnectionFailed-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.ResourceConstraint-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.RestrictedXML-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.SeeOtherHost-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.StreamError-class.html239
-rw-r--r--doc/apidocs/nbxmpp.protocol.SystemShutdown-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.UndefinedCondition-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.UnsupportedEncoding-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.UnsupportedStanzaType-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.UnsupportedVersion-class.html214
-rw-r--r--doc/apidocs/nbxmpp.protocol.XMLNotWellFormed-class.html214
-rw-r--r--doc/apidocs/nbxmpp.proxy_connectors-module.html255
-rw-r--r--doc/apidocs/nbxmpp.proxy_connectors-pysrc.html574
-rw-r--r--doc/apidocs/nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html278
-rw-r--r--doc/apidocs/nbxmpp.proxy_connectors.ProxyConnector-class.html365
-rw-r--r--doc/apidocs/nbxmpp.proxy_connectors.SOCKS5Connector-class.html350
-rw-r--r--doc/apidocs/nbxmpp.roster_nb-module.html245
-rw-r--r--doc/apidocs/nbxmpp.roster_nb-pysrc.html647
-rw-r--r--doc/apidocs/nbxmpp.roster_nb.NonBlockingRoster-class.html1467
-rw-r--r--doc/apidocs/nbxmpp.simplexml-module.html488
-rw-r--r--doc/apidocs/nbxmpp.simplexml-pysrc.html983
-rw-r--r--doc/apidocs/nbxmpp.simplexml.NT-class.html258
-rw-r--r--doc/apidocs/nbxmpp.simplexml.Node-class.html1777
-rw-r--r--doc/apidocs/nbxmpp.simplexml.NodeBuilder-class.html700
-rw-r--r--doc/apidocs/nbxmpp.simplexml.T-class.html319
-rw-r--r--doc/apidocs/nbxmpp.smacks-module.html233
-rw-r--r--doc/apidocs/nbxmpp.smacks-pysrc.html329
-rw-r--r--doc/apidocs/nbxmpp.smacks.Smacks-class.html500
-rw-r--r--doc/apidocs/nbxmpp.stringprepare-module.html664
-rw-r--r--doc/apidocs/nbxmpp.stringprepare-pysrc.html372
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.EmptyMappingTable-class.html253
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.ILookupTable-class.html192
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.IMappingTable-class.html192
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.LookupTable-class.html253
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.LookupTableFromFunction-class.html216
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.MappingTableFromFunction-class.html216
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.NamePrep-class.htmlbin0 -> 16404 bytes
-rw-r--r--doc/apidocs/nbxmpp.stringprepare.Profile-class.html383
-rw-r--r--doc/apidocs/nbxmpp.tls_nb-module.html412
-rw-r--r--doc/apidocs/nbxmpp.tls_nb-pysrc.html1193
-rw-r--r--doc/apidocs/nbxmpp.tls_nb.NonBlockingTLS-class.html679
-rw-r--r--doc/apidocs/nbxmpp.tls_nb.PyOpenSSLWrapper-class.html367
-rw-r--r--doc/apidocs/nbxmpp.tls_nb.SSLWrapper-class.html321
-rw-r--r--doc/apidocs/nbxmpp.tls_nb.SSLWrapper.Error-class.html338
-rw-r--r--doc/apidocs/nbxmpp.tls_nb.StdlibSSLWrapper-class.html328
-rw-r--r--doc/apidocs/nbxmpp.transports_nb-module.html698
-rw-r--r--doc/apidocs/nbxmpp.transports_nb-pysrc.html1486
-rw-r--r--doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTP-class.html544
-rw-r--r--doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html385
-rw-r--r--doc/apidocs/nbxmpp.transports_nb.NonBlockingTCP-class.html1061
-rw-r--r--doc/apidocs/nbxmpp.transports_nb.NonBlockingTransport-class.html1102
-rw-r--r--doc/apidocs/redirect.html38
-rw-r--r--doc/apidocs/toc-everything.html496
-rw-r--r--doc/apidocs/toc-nbxmpp-module.html86
-rw-r--r--doc/apidocs/toc-nbxmpp.auth_nb-module.html51
-rw-r--r--doc/apidocs/toc-nbxmpp.bosh-module.html41
-rw-r--r--doc/apidocs/toc-nbxmpp.c14n-module.html35
-rw-r--r--doc/apidocs/toc-nbxmpp.client_nb-module.html34
-rw-r--r--doc/apidocs/toc-nbxmpp.dispatcher_nb-module.html39
-rw-r--r--doc/apidocs/toc-nbxmpp.features_nb-module.html58
-rw-r--r--doc/apidocs/toc-nbxmpp.idlequeue-module.html48
-rw-r--r--doc/apidocs/toc-nbxmpp.plugin-module.html34
-rw-r--r--doc/apidocs/toc-nbxmpp.protocol-module.html273
-rw-r--r--doc/apidocs/toc-nbxmpp.proxy_connectors-module.html36
-rw-r--r--doc/apidocs/toc-nbxmpp.roster_nb-module.html34
-rw-r--r--doc/apidocs/toc-nbxmpp.simplexml-module.html43
-rw-r--r--doc/apidocs/toc-nbxmpp.smacks-module.html34
-rw-r--r--doc/apidocs/toc-nbxmpp.stringprepare-module.html56
-rw-r--r--doc/apidocs/toc-nbxmpp.tls_nb-module.html42
-rw-r--r--doc/apidocs/toc-nbxmpp.transports_nb-module.html52
-rw-r--r--doc/apidocs/toc.html49
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_a.gifbin0 -> 8618 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_a_2.gifbin0 -> 7050 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_a_3.gifbin0 -> 9936 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_b.gifbin0 -> 26446 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_d.gifbin0 -> 22695 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_d_2.gifbin0 -> 18037 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_i.gifbin0 -> 9233 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_i_2.gifbin0 -> 6306 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_i_3.gifbin0 -> 8891 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_i_4.gifbin0 -> 10136 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_i_5.gifbin0 -> 9567 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p.gifbin0 -> 21383 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_10.gifbin0 -> 21535 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_11.gifbin0 -> 13514 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_12.gifbin0 -> 14869 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_13.gifbin0 -> 8490 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_14.gifbin0 -> 8600 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_15.gifbin0 -> 8861 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_16.gifbin0 -> 8760 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_17.gifbin0 -> 8516 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_18.gifbin0 -> 8416 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_19.gifbin0 -> 8811 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_2.gifbin0 -> 15522 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_20.gifbin0 -> 8519 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_21.gifbin0 -> 30199 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_22.gifbin0 -> 31721 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_23.gifbin0 -> 7900 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_24.gifbin0 -> 8626 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_25.gifbin0 -> 8656 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_26.gifbin0 -> 31991 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_27.gifbin0 -> 24268 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_28.gifbin0 -> 8927 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_29.gifbin0 -> 8822 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_3.gifbin0 -> 13525 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_30.gifbin0 -> 8668 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_31.gifbin0 -> 8659 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_32.gifbin0 -> 44547 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_33.gifbin0 -> 8841 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_34.gifbin0 -> 8741 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_35.gifbin0 -> 8856 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_36.gifbin0 -> 9037 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_37.gifbin0 -> 8852 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_38.gifbin0 -> 8846 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_39.gifbin0 -> 7961 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_4.gifbin0 -> 8523 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_40.gifbin0 -> 8575 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_41.gifbin0 -> 7935 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_5.gifbin0 -> 8960 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_6.gifbin0 -> 8388 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_7.gifbin0 -> 8717 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_8.gifbin0 -> 21026 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_p_9.gifbin0 -> 19603 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_r.gifbin0 -> 13035 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_s.gifbin0 -> 4213 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_s_2.gifbin0 -> 24702 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_s_3.gifbin0 -> 3762 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t.gifbin0 -> 6495 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_2.gifbin0 -> 6050 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_3.gifbin0 -> 6677 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_4.gifbin0 -> 14119 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_5.gifbin0 -> 5419 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_6.gifbin0 -> 33193 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_7.gifbin0 -> 34037 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_8.gifbin0 -> 26674 bytes
-rw-r--r--doc/apidocs/uml_class_diagram_for_nbxmpp_t_9.gifbin0 -> 19007 bytes
-rw-r--r--doc/epydoc.conf26
-rwxr-xr-xdoc/examples/xsend.py80
-rw-r--r--nbxmpp/__init__.py18
-rw-r--r--nbxmpp/auth_nb.py724
-rw-r--r--nbxmpp/bosh.py581
-rw-r--r--nbxmpp/c14n.py59
-rw-r--r--nbxmpp/client_nb.py614
-rw-r--r--nbxmpp/dispatcher_nb.py636
-rw-r--r--nbxmpp/features_nb.py218
-rw-r--r--nbxmpp/idlequeue.py551
-rw-r--r--nbxmpp/plugin.py96
-rw-r--r--nbxmpp/protocol.py1494
-rw-r--r--nbxmpp/proxy_connectors.py238
-rw-r--r--nbxmpp/roster_nb.py368
-rw-r--r--nbxmpp/simplexml.py693
-rw-r--r--nbxmpp/smacks.py132
-rw-r--r--nbxmpp/stringprepare.py238
-rw-r--r--nbxmpp/tls_nb.py461
-rw-r--r--nbxmpp/transports_nb.py785
-rwxr-xr-xsetup.py12
233 files changed, 80719 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..49bae30
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,3 @@
+python-nbxmpp 0.1 (XX)
+
+ * Initial release
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..a620608
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,3 @@
+include ChangeLog COPYING README
+recursive-include doc *
+recursive-include nbxmpp *.py
diff --git a/README b/README
new file mode 100644
index 0000000..aee0441
--- /dev/null
+++ b/README
@@ -0,0 +1,17 @@
+ python-nbxmpp
+ http://python-nbxmpp.gajim.org
+
+ The goal of this python library is to provide a way for python applications
+to use Jabber/XMPP networks in a non-blocking way. This library is initialy a
+fork of xmpppy one, but using non-blocking sockets.
+
+ Installation
+
+Simply run 'python setup.py install' as root
+
+ Usage
+
+You have to 'import xmpppy' in your program. Then look at examples in ths doc
+folder.
+
+2012-05-08 Yann Leboulanger
diff --git a/doc/apidocs/api-objects.txt b/doc/apidocs/api-objects.txt
new file mode 100644
index 0000000..6375d63
--- /dev/null
+++ b/doc/apidocs/api-objects.txt
@@ -0,0 +1,1615 @@
+nbxmpp nbxmpp-module.html
+nbxmpp.STREAM_NOT_AUTHORIZED nbxmpp-module.html#STREAM_NOT_AUTHORIZED
+nbxmpp.STREAM_RESTRICTED_XML nbxmpp-module.html#STREAM_RESTRICTED_XML
+nbxmpp.isResultNode nbxmpp.protocol-module.html#isResultNode
+nbxmpp.STREAM_CONNECTION_TIMEOUT nbxmpp-module.html#STREAM_CONNECTION_TIMEOUT
+nbxmpp.STREAM_IMPROPER_ADDRESSING nbxmpp-module.html#STREAM_IMPROPER_ADDRESSING
+nbxmpp.STREAM_UNSUPPORTED_STANZA_TYPE nbxmpp-module.html#STREAM_UNSUPPORTED_STANZA_TYPE
+nbxmpp.ERR_GONE nbxmpp-module.html#ERR_GONE
+nbxmpp.ERR_CONFLICT nbxmpp-module.html#ERR_CONFLICT
+nbxmpp.ERR_NOT_AUTHORIZED nbxmpp-module.html#ERR_NOT_AUTHORIZED
+nbxmpp.ERR_REGISTRATION_REQUIRED nbxmpp-module.html#ERR_REGISTRATION_REQUIRED
+nbxmpp.ERR_INTERNAL_SERVER_ERROR nbxmpp-module.html#ERR_INTERNAL_SERVER_ERROR
+nbxmpp.SASL_INCORRECT_ENCODING nbxmpp-module.html#SASL_INCORRECT_ENCODING
+nbxmpp.STREAM_INTERNAL_SERVER_ERROR nbxmpp-module.html#STREAM_INTERNAL_SERVER_ERROR
+nbxmpp.ERR_REDIRECT nbxmpp-module.html#ERR_REDIRECT
+nbxmpp.isErrorNode nbxmpp.protocol-module.html#isErrorNode
+nbxmpp.ERR_FEATURE_NOT_IMPLEMENTED nbxmpp-module.html#ERR_FEATURE_NOT_IMPLEMENTED
+nbxmpp.name nbxmpp-module.html#name
+nbxmpp.ERR_RESOURCE_CONSTRAINT nbxmpp-module.html#ERR_RESOURCE_CONSTRAINT
+nbxmpp.SASL_INVALID_AUTHZID nbxmpp-module.html#SASL_INVALID_AUTHZID
+nbxmpp.ERR_JID_MALFORMED nbxmpp-module.html#ERR_JID_MALFORMED
+nbxmpp.ERR_SERVICE_UNAVAILABLE nbxmpp-module.html#ERR_SERVICE_UNAVAILABLE
+nbxmpp.STREAM_UNDEFINED_CONDITION nbxmpp-module.html#STREAM_UNDEFINED_CONDITION
+nbxmpp.STREAM_BAD_NAMESPACE_PREFIX nbxmpp-module.html#STREAM_BAD_NAMESPACE_PREFIX
+nbxmpp.ERRORS nbxmpp-module.html#ERRORS
+nbxmpp.STREAM_BAD_FORMAT nbxmpp-module.html#STREAM_BAD_FORMAT
+nbxmpp.SASL_ABORTED nbxmpp-module.html#SASL_ABORTED
+nbxmpp.STREAM_HOST_GONE nbxmpp-module.html#STREAM_HOST_GONE
+nbxmpp.ERR_UNDEFINED_CONDITION nbxmpp-module.html#ERR_UNDEFINED_CONDITION
+nbxmpp.STREAM_INVALID_FROM nbxmpp-module.html#STREAM_INVALID_FROM
+nbxmpp.ERR_REMOTE_SERVER_TIMEOUT nbxmpp-module.html#ERR_REMOTE_SERVER_TIMEOUT
+nbxmpp.STREAM_UNSUPPORTED_VERSION nbxmpp-module.html#STREAM_UNSUPPORTED_VERSION
+nbxmpp.SASL_NOT_AUTHORIZED nbxmpp-module.html#SASL_NOT_AUTHORIZED
+nbxmpp.ERR_REMOTE_SERVER_NOT_FOUND nbxmpp-module.html#ERR_REMOTE_SERVER_NOT_FOUND
+nbxmpp.ERR_SUBSCRIPTION_REQUIRED nbxmpp-module.html#ERR_SUBSCRIPTION_REQUIRED
+nbxmpp.SASL_MECHANISM_TOO_WEAK nbxmpp-module.html#SASL_MECHANISM_TOO_WEAK
+nbxmpp.STREAM_SYSTEM_SHUTDOWN nbxmpp-module.html#STREAM_SYSTEM_SHUTDOWN
+nbxmpp.STREAM_INVALID_XML nbxmpp-module.html#STREAM_INVALID_XML
+nbxmpp.STREAM_UNSUPPORTED_ENCODING nbxmpp-module.html#STREAM_UNSUPPORTED_ENCODING
+nbxmpp.ERR_NOT_ALLOWED nbxmpp-module.html#ERR_NOT_ALLOWED
+nbxmpp.STREAM_SEE_OTHER_HOST nbxmpp-module.html#STREAM_SEE_OTHER_HOST
+nbxmpp.ascii_upper nbxmpp.protocol-module.html#ascii_upper
+nbxmpp.STREAM_HOST_UNKNOWN nbxmpp-module.html#STREAM_HOST_UNKNOWN
+nbxmpp.ERR_BAD_REQUEST nbxmpp-module.html#ERR_BAD_REQUEST
+nbxmpp.STREAM_XML_NOT_WELL_FORMED nbxmpp-module.html#STREAM_XML_NOT_WELL_FORMED
+nbxmpp.STREAM_POLICY_VIOLATION nbxmpp-module.html#STREAM_POLICY_VIOLATION
+nbxmpp.__package__ nbxmpp-module.html#__package__
+nbxmpp.ERR_UNEXPECTED_REQUEST nbxmpp-module.html#ERR_UNEXPECTED_REQUEST
+nbxmpp.ERR_RECIPIENT_UNAVAILABLE nbxmpp-module.html#ERR_RECIPIENT_UNAVAILABLE
+nbxmpp.SASL_TEMPORARY_AUTH_FAILURE nbxmpp-module.html#SASL_TEMPORARY_AUTH_FAILURE
+nbxmpp.SASL_INVALID_MECHANISM nbxmpp-module.html#SASL_INVALID_MECHANISM
+nbxmpp.ERR_PAYMENT_REQUIRED nbxmpp-module.html#ERR_PAYMENT_REQUIRED
+nbxmpp.STREAM_CONFLICT nbxmpp-module.html#STREAM_CONFLICT
+nbxmpp.STREAM_RESOURCE_CONSTRAINT nbxmpp-module.html#STREAM_RESOURCE_CONSTRAINT
+nbxmpp.ERR_ITEM_NOT_FOUND nbxmpp-module.html#ERR_ITEM_NOT_FOUND
+nbxmpp.STREAM_INVALID_NAMESPACE nbxmpp-module.html#STREAM_INVALID_NAMESPACE
+nbxmpp.STREAM_REMOTE_CONNECTION_FAILED nbxmpp-module.html#STREAM_REMOTE_CONNECTION_FAILED
+nbxmpp.STREAM_INVALID_ID nbxmpp-module.html#STREAM_INVALID_ID
+nbxmpp.ERR_NOT_ACCEPTABLE nbxmpp-module.html#ERR_NOT_ACCEPTABLE
+nbxmpp.ERR_FORBIDDEN nbxmpp-module.html#ERR_FORBIDDEN
+nbxmpp.auth_nb nbxmpp.auth_nb-module.html
+nbxmpp.auth_nb.challenge_splitter nbxmpp.auth_nb-module.html#challenge_splitter
+nbxmpp.auth_nb.HH nbxmpp.auth_nb-module.html#HH
+nbxmpp.auth_nb.SASL_IN_PROCESS nbxmpp.auth_nb-module.html#SASL_IN_PROCESS
+nbxmpp.auth_nb.GSS_STATE_WRAP nbxmpp.auth_nb-module.html#GSS_STATE_WRAP
+nbxmpp.auth_nb.have_kerberos nbxmpp.auth_nb-module.html#have_kerberos
+nbxmpp.auth_nb.scram_parse nbxmpp.auth_nb-module.html#scram_parse
+nbxmpp.auth_nb.SASL_FAILURE nbxmpp.auth_nb-module.html#SASL_FAILURE
+nbxmpp.auth_nb.log nbxmpp.auth_nb-module.html#log
+nbxmpp.auth_nb.__package__ nbxmpp.auth_nb-module.html#__package__
+nbxmpp.auth_nb.C nbxmpp.auth_nb-module.html#C
+nbxmpp.auth_nb.H nbxmpp.auth_nb-module.html#H
+nbxmpp.auth_nb.kerberos nbxmpp.auth_nb-module.html#kerberos
+nbxmpp.auth_nb.SASL_SUCCESS nbxmpp.auth_nb-module.html#SASL_SUCCESS
+nbxmpp.auth_nb.isResultNode nbxmpp.protocol-module.html#isResultNode
+nbxmpp.auth_nb.GSS_STATE_STEP nbxmpp.auth_nb-module.html#GSS_STATE_STEP
+nbxmpp.auth_nb.SASL_UNSUPPORTED nbxmpp.auth_nb-module.html#SASL_UNSUPPORTED
+nbxmpp.auth_nb.SASL_FAILURE_IN_PROGRESS nbxmpp.auth_nb-module.html#SASL_FAILURE_IN_PROGRESS
+nbxmpp.bosh nbxmpp.bosh-module.html
+nbxmpp.bosh.FAKE_DESCRIPTOR nbxmpp.bosh-module.html#FAKE_DESCRIPTOR
+nbxmpp.bosh.KEY_COUNT nbxmpp.bosh-module.html#KEY_COUNT
+nbxmpp.bosh.get_rand_number nbxmpp.bosh-module.html#get_rand_number
+nbxmpp.bosh.bosh_errors nbxmpp.bosh-module.html#bosh_errors
+nbxmpp.bosh.__package__ nbxmpp.bosh-module.html#__package__
+nbxmpp.bosh.log nbxmpp.bosh-module.html#log
+nbxmpp.bosh.urisplit nbxmpp.transports_nb-module.html#urisplit
+nbxmpp.c14n nbxmpp.c14n-module.html
+nbxmpp.c14n.ustr nbxmpp.simplexml-module.html#ustr
+nbxmpp.c14n.normalise_attr nbxmpp.c14n-module.html#normalise_attr
+nbxmpp.c14n.normalise_text nbxmpp.c14n-module.html#normalise_text
+nbxmpp.c14n.c14n nbxmpp.c14n-module.html#c14n
+nbxmpp.c14n.__package__ nbxmpp.c14n-module.html#__package__
+nbxmpp.client_nb nbxmpp.client_nb-module.html
+nbxmpp.client_nb.log nbxmpp.client_nb-module.html#log
+nbxmpp.client_nb.__package__ nbxmpp.client_nb-module.html#__package__
+nbxmpp.dispatcher_nb nbxmpp.dispatcher_nb-module.html
+nbxmpp.dispatcher_nb.XML_DECLARATION nbxmpp.dispatcher_nb-module.html#XML_DECLARATION
+nbxmpp.dispatcher_nb.DEFAULT_TIMEOUT_SECONDS nbxmpp.dispatcher_nb-module.html#DEFAULT_TIMEOUT_SECONDS
+nbxmpp.dispatcher_nb.log nbxmpp.dispatcher_nb-module.html#log
+nbxmpp.dispatcher_nb.__package__ nbxmpp.dispatcher_nb-module.html#__package__
+nbxmpp.dispatcher_nb.outgoingID nbxmpp.dispatcher_nb-module.html#outgoingID
+nbxmpp.features_nb nbxmpp.features_nb-module.html
+nbxmpp.features_nb.getPrivacyList nbxmpp.features_nb-module.html#getPrivacyList
+nbxmpp.features_nb.register nbxmpp.features_nb-module.html#register
+nbxmpp.features_nb._ReceivedRegInfo nbxmpp.features_nb-module.html#_ReceivedRegInfo
+nbxmpp.features_nb.setDefaultPrivacyList nbxmpp.features_nb-module.html#setDefaultPrivacyList
+nbxmpp.features_nb.isResultNode nbxmpp.protocol-module.html#isResultNode
+nbxmpp.features_nb.setActivePrivacyList nbxmpp.features_nb-module.html#setActivePrivacyList
+nbxmpp.features_nb.getActiveAndDefaultPrivacyLists nbxmpp.features_nb-module.html#getActiveAndDefaultPrivacyLists
+nbxmpp.features_nb.PL_ACT_DENY nbxmpp.features_nb-module.html#PL_ACT_DENY
+nbxmpp.features_nb.__package__ nbxmpp.features_nb-module.html#__package__
+nbxmpp.features_nb.delPrivacyList nbxmpp.features_nb-module.html#delPrivacyList
+nbxmpp.features_nb.setPrivacyList nbxmpp.features_nb-module.html#setPrivacyList
+nbxmpp.features_nb.REGISTER_DATA_RECEIVED nbxmpp.features_nb-module.html#REGISTER_DATA_RECEIVED
+nbxmpp.features_nb.PRIVACY_LISTS_RECEIVED nbxmpp.features_nb-module.html#PRIVACY_LISTS_RECEIVED
+nbxmpp.features_nb.PL_ACT_ALLOW nbxmpp.features_nb-module.html#PL_ACT_ALLOW
+nbxmpp.features_nb.getPrivacyLists nbxmpp.features_nb-module.html#getPrivacyLists
+nbxmpp.features_nb.PL_TYPE_JID nbxmpp.features_nb-module.html#PL_TYPE_JID
+nbxmpp.features_nb.PRIVACY_LISTS_ACTIVE_DEFAULT nbxmpp.features_nb-module.html#PRIVACY_LISTS_ACTIVE_DEFAULT
+nbxmpp.features_nb.getRegInfo nbxmpp.features_nb-module.html#getRegInfo
+nbxmpp.features_nb._on_default_response nbxmpp.features_nb-module.html#_on_default_response
+nbxmpp.features_nb.PL_TYPE_GROUP nbxmpp.features_nb-module.html#PL_TYPE_GROUP
+nbxmpp.features_nb.changePasswordTo nbxmpp.features_nb-module.html#changePasswordTo
+nbxmpp.features_nb.unregister nbxmpp.features_nb-module.html#unregister
+nbxmpp.features_nb.PRIVACY_LIST_RECEIVED nbxmpp.features_nb-module.html#PRIVACY_LIST_RECEIVED
+nbxmpp.features_nb.PL_TYPE_SUBC nbxmpp.features_nb-module.html#PL_TYPE_SUBC
+nbxmpp.idlequeue nbxmpp.idlequeue-module.html
+nbxmpp.idlequeue.PENDING_WRITE nbxmpp.idlequeue-module.html#PENDING_WRITE
+nbxmpp.idlequeue.FLAG_READ_WRITE nbxmpp.idlequeue-module.html#FLAG_READ_WRITE
+nbxmpp.idlequeue.PENDING_READ nbxmpp.idlequeue-module.html#PENDING_READ
+nbxmpp.idlequeue.FLAG_READ nbxmpp.idlequeue-module.html#FLAG_READ
+nbxmpp.idlequeue.FLAG_CLOSE nbxmpp.idlequeue-module.html#FLAG_CLOSE
+nbxmpp.idlequeue.__package__ nbxmpp.idlequeue-module.html#__package__
+nbxmpp.idlequeue.HAVE_GOBJECT nbxmpp.idlequeue-module.html#HAVE_GOBJECT
+nbxmpp.idlequeue.IS_CLOSED nbxmpp.idlequeue-module.html#IS_CLOSED
+nbxmpp.idlequeue.log nbxmpp.idlequeue-module.html#log
+nbxmpp.idlequeue.FLAG_WRITE nbxmpp.idlequeue-module.html#FLAG_WRITE
+nbxmpp.idlequeue.get_idlequeue nbxmpp.idlequeue-module.html#get_idlequeue
+nbxmpp.plugin nbxmpp.plugin-module.html
+nbxmpp.plugin.__package__ nbxmpp.plugin-module.html#__package__
+nbxmpp.plugin.log nbxmpp.plugin-module.html#log
+nbxmpp.protocol nbxmpp.protocol-module.html
+nbxmpp.protocol.NS_MUC_ADMIN nbxmpp.protocol-module.html#NS_MUC_ADMIN
+nbxmpp.protocol.STREAM_NOT_AUTHORIZED nbxmpp.protocol-module.html#STREAM_NOT_AUTHORIZED
+nbxmpp.protocol.NS_FILE nbxmpp.protocol-module.html#NS_FILE
+nbxmpp.protocol.NS_VCARD_UPDATE nbxmpp.protocol-module.html#NS_VCARD_UPDATE
+nbxmpp.protocol.NS_PUBSUB_EVENT nbxmpp.protocol-module.html#NS_PUBSUB_EVENT
+nbxmpp.protocol.isResultNode nbxmpp.protocol-module.html#isResultNode
+nbxmpp.protocol.NS_RECEIPTS nbxmpp.protocol-module.html#NS_RECEIPTS
+nbxmpp.protocol.STREAM_CONNECTION_TIMEOUT nbxmpp.protocol-module.html#STREAM_CONNECTION_TIMEOUT
+nbxmpp.protocol.STREAM_IMPROPER_ADDRESSING nbxmpp.protocol-module.html#STREAM_IMPROPER_ADDRESSING
+nbxmpp.protocol.STREAM_UNSUPPORTED_STANZA_TYPE nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_STANZA_TYPE
+nbxmpp.protocol.NS_PING nbxmpp.protocol-module.html#NS_PING
+nbxmpp.protocol.ERR_GONE nbxmpp.protocol-module.html#ERR_GONE
+nbxmpp.protocol.NS_PHYSLOC nbxmpp.protocol-module.html#NS_PHYSLOC
+nbxmpp.protocol.NS_CHATTING nbxmpp.protocol-module.html#NS_CHATTING
+nbxmpp.protocol.ERR_CONFLICT nbxmpp.protocol-module.html#ERR_CONFLICT
+nbxmpp.protocol.NS_COMPRESS nbxmpp.protocol-module.html#NS_COMPRESS
+nbxmpp.protocol.NS_HASHES_SHA1 nbxmpp.protocol-module.html#NS_HASHES_SHA1
+nbxmpp.protocol.NS_AGENTS nbxmpp.protocol-module.html#NS_AGENTS
+nbxmpp.protocol.NS_CAPTCHA nbxmpp.protocol-module.html#NS_CAPTCHA
+nbxmpp.protocol.NS_MOOD nbxmpp.protocol-module.html#NS_MOOD
+nbxmpp.protocol.ERR_NOT_AUTHORIZED nbxmpp.protocol-module.html#ERR_NOT_AUTHORIZED
+nbxmpp.protocol.ERR_REGISTRATION_REQUIRED nbxmpp.protocol-module.html#ERR_REGISTRATION_REQUIRED
+nbxmpp.protocol.ERR_INTERNAL_SERVER_ERROR nbxmpp.protocol-module.html#ERR_INTERNAL_SERVER_ERROR
+nbxmpp.protocol.SASL_INCORRECT_ENCODING nbxmpp.protocol-module.html#SASL_INCORRECT_ENCODING
+nbxmpp.protocol.NS_MUC_OWNER nbxmpp.protocol-module.html#NS_MUC_OWNER
+nbxmpp.protocol.NS_ACTIVITY nbxmpp.protocol-module.html#NS_ACTIVITY
+nbxmpp.protocol.NS_ARCHIVE_MANUAL nbxmpp.protocol-module.html#NS_ARCHIVE_MANUAL
+nbxmpp.protocol.NS_JINGLE_RTP_AUDIO nbxmpp.protocol-module.html#NS_JINGLE_RTP_AUDIO
+nbxmpp.protocol.NS_PRESENCE nbxmpp.protocol-module.html#NS_PRESENCE
+nbxmpp.protocol.STREAM_INTERNAL_SERVER_ERROR nbxmpp.protocol-module.html#STREAM_INTERNAL_SERVER_ERROR
+nbxmpp.protocol.NS_CHATSTATES nbxmpp.protocol-module.html#NS_CHATSTATES
+nbxmpp.protocol.ERR_REDIRECT nbxmpp.protocol-module.html#ERR_REDIRECT
+nbxmpp.protocol.isErrorNode nbxmpp.protocol-module.html#isErrorNode
+nbxmpp.protocol.NS_GROUPCHAT nbxmpp.protocol-module.html#NS_GROUPCHAT
+nbxmpp.protocol.ERR_FEATURE_NOT_IMPLEMENTED nbxmpp.protocol-module.html#ERR_FEATURE_NOT_IMPLEMENTED
+nbxmpp.protocol.NS_GATEWAY nbxmpp.protocol-module.html#NS_GATEWAY
+nbxmpp.protocol.NS_DISCO_ITEMS nbxmpp.protocol-module.html#NS_DISCO_ITEMS
+nbxmpp.protocol.NS_MUC_CONFIG nbxmpp.protocol-module.html#NS_MUC_CONFIG
+nbxmpp.protocol.name nbxmpp.protocol-module.html#name
+nbxmpp.protocol.NS_BIND nbxmpp.protocol-module.html#NS_BIND
+nbxmpp.protocol.NS_JINGLE_ERRORS nbxmpp.protocol-module.html#NS_JINGLE_ERRORS
+nbxmpp.protocol.NS_XMPP_STREAMS nbxmpp.protocol-module.html#NS_XMPP_STREAMS
+nbxmpp.protocol.NS_IQ nbxmpp.protocol-module.html#NS_IQ
+nbxmpp.protocol.ERR_RESOURCE_CONSTRAINT nbxmpp.protocol-module.html#ERR_RESOURCE_CONSTRAINT
+nbxmpp.protocol.NS_CLIENT nbxmpp.protocol-module.html#NS_CLIENT
+nbxmpp.protocol.NS_FORWARD nbxmpp.protocol-module.html#NS_FORWARD
+nbxmpp.protocol.SASL_INVALID_AUTHZID nbxmpp.protocol-module.html#SASL_INVALID_AUTHZID
+nbxmpp.protocol.NS_EVENT nbxmpp.protocol-module.html#NS_EVENT
+nbxmpp.protocol.NS_AVATAR nbxmpp.protocol-module.html#NS_AVATAR
+nbxmpp.protocol.NS_JINGLE_IBB nbxmpp.protocol-module.html#NS_JINGLE_IBB
+nbxmpp.protocol.NS_DATA_LAYOUT nbxmpp.protocol-module.html#NS_DATA_LAYOUT
+nbxmpp.protocol.NS_TUNE nbxmpp.protocol-module.html#NS_TUNE
+nbxmpp.protocol.stream_exceptions nbxmpp.protocol-module.html#stream_exceptions
+nbxmpp.protocol.xmpp_stanza_error_conditions nbxmpp.protocol-module.html#xmpp_stanza_error_conditions
+nbxmpp.protocol.NS_HASHES_SHA256 nbxmpp.protocol-module.html#NS_HASHES_SHA256
+nbxmpp.protocol.NS_CARBONS nbxmpp.protocol-module.html#NS_CARBONS
+nbxmpp.protocol.NS_ROSTER nbxmpp.protocol-module.html#NS_ROSTER
+nbxmpp.protocol.NS_STANZAS nbxmpp.protocol-module.html#NS_STANZAS
+nbxmpp.protocol.ERR_JID_MALFORMED nbxmpp.protocol-module.html#ERR_JID_MALFORMED
+nbxmpp.protocol.NS_ROSTER_VER nbxmpp.protocol-module.html#NS_ROSTER_VER
+nbxmpp.protocol.NS_TIME_REVISED nbxmpp.protocol-module.html#NS_TIME_REVISED
+nbxmpp.protocol.NS_MUC_UNIQUE nbxmpp.protocol-module.html#NS_MUC_UNIQUE
+nbxmpp.protocol.ERR_SERVICE_UNAVAILABLE nbxmpp.protocol-module.html#ERR_SERVICE_UNAVAILABLE
+nbxmpp.protocol.NS_PUBKEY_PUBKEY nbxmpp.protocol-module.html#NS_PUBKEY_PUBKEY
+nbxmpp.protocol.NS_AMP nbxmpp.protocol-module.html#NS_AMP
+nbxmpp.protocol.STREAM_UNDEFINED_CONDITION nbxmpp.protocol-module.html#STREAM_UNDEFINED_CONDITION
+nbxmpp.protocol.NS_CONFERENCE nbxmpp.protocol-module.html#NS_CONFERENCE
+nbxmpp.protocol.NS_DISCO nbxmpp.protocol-module.html#NS_DISCO
+nbxmpp.protocol.NS_RSM nbxmpp.protocol-module.html#NS_RSM
+nbxmpp.protocol.STREAM_BAD_NAMESPACE_PREFIX nbxmpp.protocol-module.html#STREAM_BAD_NAMESPACE_PREFIX
+nbxmpp.protocol.ERRORS nbxmpp.protocol-module.html#ERRORS
+nbxmpp.protocol.NS_STREAM nbxmpp.protocol-module.html#NS_STREAM
+nbxmpp.protocol.NS_ESESSION nbxmpp.protocol-module.html#NS_ESESSION
+nbxmpp.protocol.STREAM_BAD_FORMAT nbxmpp.protocol-module.html#STREAM_BAD_FORMAT
+nbxmpp.protocol.NS_JINGLE_FILE_TRANSFER nbxmpp.protocol-module.html#NS_JINGLE_FILE_TRANSFER
+nbxmpp.protocol.NS_LOCATION nbxmpp.protocol-module.html#NS_LOCATION
+nbxmpp.protocol.NS_ARCHIVE_AUTO nbxmpp.protocol-module.html#NS_ARCHIVE_AUTO
+nbxmpp.protocol.NS_DIALBACK nbxmpp.protocol-module.html#NS_DIALBACK
+nbxmpp.protocol.SASL_ABORTED nbxmpp.protocol-module.html#SASL_ABORTED
+nbxmpp.protocol.NS_AUTH nbxmpp.protocol-module.html#NS_AUTH
+nbxmpp.protocol.NS_BOOKMARKS nbxmpp.protocol-module.html#NS_BOOKMARKS
+nbxmpp.protocol.NS_VCARD nbxmpp.protocol-module.html#NS_VCARD
+nbxmpp.protocol.STREAM_HOST_GONE nbxmpp.protocol-module.html#STREAM_HOST_GONE
+nbxmpp.protocol.NS_XHTML nbxmpp.protocol-module.html#NS_XHTML
+nbxmpp.protocol.NS_JINGLE_RTP nbxmpp.protocol-module.html#NS_JINGLE_RTP
+nbxmpp.protocol.NS_SI nbxmpp.protocol-module.html#NS_SI
+nbxmpp.protocol.NS_SASL nbxmpp.protocol-module.html#NS_SASL
+nbxmpp.protocol.ERR_UNDEFINED_CONDITION nbxmpp.protocol-module.html#ERR_UNDEFINED_CONDITION
+nbxmpp.protocol.STREAM_INVALID_FROM nbxmpp.protocol-module.html#STREAM_INVALID_FROM
+nbxmpp.protocol.NS_CAPS nbxmpp.protocol-module.html#NS_CAPS
+nbxmpp.protocol.NS_PUBSUB_OWNER nbxmpp.protocol-module.html#NS_PUBSUB_OWNER
+nbxmpp.protocol.NS_AMP_ERRORS nbxmpp.protocol-module.html#NS_AMP_ERRORS
+nbxmpp.protocol.NS_BROWSE nbxmpp.protocol-module.html#NS_BROWSE
+nbxmpp.protocol.NS_ROSTERX nbxmpp.protocol-module.html#NS_ROSTERX
+nbxmpp.protocol.NS_JINGLE_RAW_UDP nbxmpp.protocol-module.html#NS_JINGLE_RAW_UDP
+nbxmpp.protocol.NS_TLS nbxmpp.protocol-module.html#NS_TLS
+nbxmpp.protocol.NS_ATTENTION nbxmpp.protocol-module.html#NS_ATTENTION
+nbxmpp.protocol.NS_DATA nbxmpp.protocol-module.html#NS_DATA
+nbxmpp.protocol.NS_SERVER nbxmpp.protocol-module.html#NS_SERVER
+nbxmpp.protocol.NS_SESSION nbxmpp.protocol-module.html#NS_SESSION
+nbxmpp.protocol.ERR_REMOTE_SERVER_TIMEOUT nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_TIMEOUT
+nbxmpp.protocol.NS_JINGLE_ICE_UDP nbxmpp.protocol-module.html#NS_JINGLE_ICE_UDP
+nbxmpp.protocol.NS_IBB nbxmpp.protocol-module.html#NS_IBB
+nbxmpp.protocol.NS_TIME nbxmpp.protocol-module.html#NS_TIME
+nbxmpp.protocol.NS_PROFILE nbxmpp.protocol-module.html#NS_PROFILE
+nbxmpp.protocol.NS_SECLABEL nbxmpp.protocol-module.html#NS_SECLABEL
+nbxmpp.protocol.NS_PRIVACY nbxmpp.protocol-module.html#NS_PRIVACY
+nbxmpp.protocol.NS_GMAILNOTIFY nbxmpp.protocol-module.html#NS_GMAILNOTIFY
+nbxmpp.protocol.NS_CONDITIONS nbxmpp.protocol-module.html#NS_CONDITIONS
+nbxmpp.protocol.NS_MESSAGE nbxmpp.protocol-module.html#NS_MESSAGE
+nbxmpp.protocol.NS_FEATURE nbxmpp.protocol-module.html#NS_FEATURE
+nbxmpp.protocol.STREAM_UNSUPPORTED_VERSION nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_VERSION
+nbxmpp.protocol.SASL_NOT_AUTHORIZED nbxmpp.protocol-module.html#SASL_NOT_AUTHORIZED
+nbxmpp.protocol.ERR_REMOTE_SERVER_NOT_FOUND nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_NOT_FOUND
+nbxmpp.protocol.NS_DELAY2 nbxmpp.protocol-module.html#NS_DELAY2
+nbxmpp.protocol.NS_WAITINGLIST nbxmpp.protocol-module.html#NS_WAITINGLIST
+nbxmpp.protocol.NS_ARCHIVE_MANAGE nbxmpp.protocol-module.html#NS_ARCHIVE_MANAGE
+nbxmpp.protocol.NS_VERSION nbxmpp.protocol-module.html#NS_VERSION
+nbxmpp.protocol.NS_SSN nbxmpp.protocol-module.html#NS_SSN
+nbxmpp.protocol.ERR_SUBSCRIPTION_REQUIRED nbxmpp.protocol-module.html#ERR_SUBSCRIPTION_REQUIRED
+nbxmpp.protocol.SASL_MECHANISM_TOO_WEAK nbxmpp.protocol-module.html#SASL_MECHANISM_TOO_WEAK
+nbxmpp.protocol.NS_COMPONENT_1 nbxmpp.protocol-module.html#NS_COMPONENT_1
+nbxmpp.protocol.NS_ARCHIVE_PREF nbxmpp.protocol-module.html#NS_ARCHIVE_PREF
+nbxmpp.protocol.STREAM_SYSTEM_SHUTDOWN nbxmpp.protocol-module.html#STREAM_SYSTEM_SHUTDOWN
+nbxmpp.protocol.NS_HTTP_BIND nbxmpp.protocol-module.html#NS_HTTP_BIND
+nbxmpp.protocol.STREAM_INVALID_XML nbxmpp.protocol-module.html#STREAM_INVALID_XML
+nbxmpp.protocol.NS_INVISIBLE nbxmpp.protocol-module.html#NS_INVISIBLE
+nbxmpp.protocol.NS_JINGLE_RTP_VIDEO nbxmpp.protocol-module.html#NS_JINGLE_RTP_VIDEO
+nbxmpp.protocol.NS_HASHES nbxmpp.protocol-module.html#NS_HASHES
+nbxmpp.protocol.STREAM_UNSUPPORTED_ENCODING nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_ENCODING
+nbxmpp.protocol.ERR_NOT_ALLOWED nbxmpp.protocol-module.html#ERR_NOT_ALLOWED
+nbxmpp.protocol.STREAM_SEE_OTHER_HOST nbxmpp.protocol-module.html#STREAM_SEE_OTHER_HOST
+nbxmpp.protocol.NS_BROWSING nbxmpp.protocol-module.html#NS_BROWSING
+nbxmpp.protocol.NS_GAMING nbxmpp.protocol-module.html#NS_GAMING
+nbxmpp.protocol.NS_OFFLINE nbxmpp.protocol-module.html#NS_OFFLINE
+nbxmpp.protocol.NS_PUBSUB nbxmpp.protocol-module.html#NS_PUBSUB
+nbxmpp.protocol.NS_MUC_USER nbxmpp.protocol-module.html#NS_MUC_USER
+nbxmpp.protocol.NS_ATOM nbxmpp.protocol-module.html#NS_ATOM
+nbxmpp.protocol.ascii_upper nbxmpp.protocol-module.html#ascii_upper
+nbxmpp.protocol.NS_STREAMS nbxmpp.protocol-module.html#NS_STREAMS
+nbxmpp.protocol.STREAM_HOST_UNKNOWN nbxmpp.protocol-module.html#STREAM_HOST_UNKNOWN
+nbxmpp.protocol.ERR_BAD_REQUEST nbxmpp.protocol-module.html#ERR_BAD_REQUEST
+nbxmpp.protocol.NS_GTALKSETTING nbxmpp.protocol-module.html#NS_GTALKSETTING
+nbxmpp.protocol.NS_DELAY nbxmpp.protocol-module.html#NS_DELAY
+nbxmpp.protocol.NS_ENCRYPTED nbxmpp.protocol-module.html#NS_ENCRYPTED
+nbxmpp.protocol.NS_RPC nbxmpp.protocol-module.html#NS_RPC
+nbxmpp.protocol.NS_SECLABEL_CATALOG nbxmpp.protocol-module.html#NS_SECLABEL_CATALOG
+nbxmpp.protocol.NS_SIGNED nbxmpp.protocol-module.html#NS_SIGNED
+nbxmpp.protocol.NS_NICK nbxmpp.protocol-module.html#NS_NICK
+nbxmpp.protocol._errorcodes nbxmpp.protocol-module.html#_errorcodes
+nbxmpp.protocol.NS_PUBKEY_REVOKE nbxmpp.protocol-module.html#NS_PUBKEY_REVOKE
+nbxmpp.protocol.NS_JINGLE_XTLS nbxmpp.protocol-module.html#NS_JINGLE_XTLS
+nbxmpp.protocol.NS_DATA_MEDIA nbxmpp.protocol-module.html#NS_DATA_MEDIA
+nbxmpp.protocol.STREAM_XML_NOT_WELL_FORMED nbxmpp.protocol-module.html#STREAM_XML_NOT_WELL_FORMED
+nbxmpp.protocol.STREAM_POLICY_VIOLATION nbxmpp.protocol-module.html#STREAM_POLICY_VIOLATION
+nbxmpp.protocol.NS_REGISTER nbxmpp.protocol-module.html#NS_REGISTER
+nbxmpp.protocol.NS_BYTESTREAM nbxmpp.protocol-module.html#NS_BYTESTREAM
+nbxmpp.protocol.NS_VACATION nbxmpp.protocol-module.html#NS_VACATION
+nbxmpp.protocol.NS_PUBSUB_PUBLISH_OPTIONS nbxmpp.protocol-module.html#NS_PUBSUB_PUBLISH_OPTIONS
+nbxmpp.protocol.NS_XHTML_IM nbxmpp.protocol-module.html#NS_XHTML_IM
+nbxmpp.protocol.__package__ nbxmpp.protocol-module.html#__package__
+nbxmpp.protocol.NS_GEOLOC nbxmpp.protocol-module.html#NS_GEOLOC
+nbxmpp.protocol.NS_ARCHIVE nbxmpp.protocol-module.html#NS_ARCHIVE
+nbxmpp.protocol.NS_ROSTERNOTES nbxmpp.protocol-module.html#NS_ROSTERNOTES
+nbxmpp.protocol.ERR_UNEXPECTED_REQUEST nbxmpp.protocol-module.html#ERR_UNEXPECTED_REQUEST
+nbxmpp.protocol.NS_DATA_VALIDATE nbxmpp.protocol-module.html#NS_DATA_VALIDATE
+nbxmpp.protocol.ERR_RECIPIENT_UNAVAILABLE nbxmpp.protocol-module.html#ERR_RECIPIENT_UNAVAILABLE
+nbxmpp.protocol.NS_ESESSION_INIT nbxmpp.protocol-module.html#NS_ESESSION_INIT
+nbxmpp.protocol.SASL_TEMPORARY_AUTH_FAILURE nbxmpp.protocol-module.html#SASL_TEMPORARY_AUTH_FAILURE
+nbxmpp.protocol.NS_PRIVATE nbxmpp.protocol-module.html#NS_PRIVATE
+nbxmpp.protocol.NS_JINGLE_BYTESTREAM nbxmpp.protocol-module.html#NS_JINGLE_BYTESTREAM
+nbxmpp.protocol.SASL_INVALID_MECHANISM nbxmpp.protocol-module.html#SASL_INVALID_MECHANISM
+nbxmpp.protocol.xmpp_stream_error_conditions nbxmpp.protocol-module.html#xmpp_stream_error_conditions
+nbxmpp.protocol.NS_VIEWING nbxmpp.protocol-module.html#NS_VIEWING
+nbxmpp.protocol.NS_COMMANDS nbxmpp.protocol-module.html#NS_COMMANDS
+nbxmpp.protocol.ERR_PAYMENT_REQUIRED nbxmpp.protocol-module.html#ERR_PAYMENT_REQUIRED
+nbxmpp.protocol.STREAM_CONFLICT nbxmpp.protocol-module.html#STREAM_CONFLICT
+nbxmpp.protocol.STREAM_RESOURCE_CONSTRAINT nbxmpp.protocol-module.html#STREAM_RESOURCE_CONSTRAINT
+nbxmpp.protocol.NS_STREAM_MGMT nbxmpp.protocol-module.html#NS_STREAM_MGMT
+nbxmpp.protocol.NS_SI_PUB nbxmpp.protocol-module.html#NS_SI_PUB
+nbxmpp.protocol.NS_MUC nbxmpp.protocol-module.html#NS_MUC
+nbxmpp.protocol.ERR_ITEM_NOT_FOUND nbxmpp.protocol-module.html#ERR_ITEM_NOT_FOUND
+nbxmpp.protocol.STREAM_INVALID_NAMESPACE nbxmpp.protocol-module.html#STREAM_INVALID_NAMESPACE
+nbxmpp.protocol.NS_SEARCH nbxmpp.protocol-module.html#NS_SEARCH
+nbxmpp.protocol.STREAM_REMOTE_CONNECTION_FAILED nbxmpp.protocol-module.html#STREAM_REMOTE_CONNECTION_FAILED
+nbxmpp.protocol.NS_ADDRESS nbxmpp.protocol-module.html#NS_ADDRESS
+nbxmpp.protocol.NS_COMPONENT_ACCEPT nbxmpp.protocol-module.html#NS_COMPONENT_ACCEPT
+nbxmpp.protocol.STREAM_INVALID_ID nbxmpp.protocol-module.html#STREAM_INVALID_ID
+nbxmpp.protocol.STREAM_RESTRICTED_XML nbxmpp.protocol-module.html#STREAM_RESTRICTED_XML
+nbxmpp.protocol.NS_DISCO_INFO nbxmpp.protocol-module.html#NS_DISCO_INFO
+nbxmpp.protocol.sasl_error_conditions nbxmpp.protocol-module.html#sasl_error_conditions
+nbxmpp.protocol.NS_STANZA_CRYPTO nbxmpp.protocol-module.html#NS_STANZA_CRYPTO
+nbxmpp.protocol.NS_LAST nbxmpp.protocol-module.html#NS_LAST
+nbxmpp.protocol.NS_PUBKEY_ATTEST nbxmpp.protocol-module.html#NS_PUBKEY_ATTEST
+nbxmpp.protocol.NS_HASHES_SHA512 nbxmpp.protocol-module.html#NS_HASHES_SHA512
+nbxmpp.protocol.ERR_NOT_ACCEPTABLE nbxmpp.protocol-module.html#ERR_NOT_ACCEPTABLE
+nbxmpp.protocol.NS_JINGLE nbxmpp.protocol-module.html#NS_JINGLE
+nbxmpp.protocol.NS_BOB nbxmpp.protocol-module.html#NS_BOB
+nbxmpp.protocol.NS_HASHES_MD5 nbxmpp.protocol-module.html#NS_HASHES_MD5
+nbxmpp.protocol.NS_HTTP_AUTH nbxmpp.protocol-module.html#NS_HTTP_AUTH
+nbxmpp.protocol.ERR_FORBIDDEN nbxmpp.protocol-module.html#ERR_FORBIDDEN
+nbxmpp.proxy_connectors nbxmpp.proxy_connectors-module.html
+nbxmpp.proxy_connectors.log nbxmpp.proxy_connectors-module.html#log
+nbxmpp.proxy_connectors.__package__ nbxmpp.proxy_connectors-module.html#__package__
+nbxmpp.roster_nb nbxmpp.roster_nb-module.html
+nbxmpp.roster_nb.log nbxmpp.roster_nb-module.html#log
+nbxmpp.roster_nb.__package__ nbxmpp.roster_nb-module.html#__package__
+nbxmpp.simplexml nbxmpp.simplexml-module.html
+nbxmpp.simplexml.BadXML2Node nbxmpp.simplexml-module.html#BadXML2Node
+nbxmpp.simplexml.ustr nbxmpp.simplexml-module.html#ustr
+nbxmpp.simplexml.ENCODING nbxmpp.simplexml-module.html#ENCODING
+nbxmpp.simplexml.__package__ nbxmpp.simplexml-module.html#__package__
+nbxmpp.simplexml.XMLescape nbxmpp.simplexml-module.html#XMLescape
+nbxmpp.simplexml.XML2Node nbxmpp.simplexml-module.html#XML2Node
+nbxmpp.simplexml.log nbxmpp.simplexml-module.html#log
+nbxmpp.smacks nbxmpp.smacks-module.html
+nbxmpp.smacks.log nbxmpp.smacks-module.html#log
+nbxmpp.smacks.__package__ nbxmpp.smacks-module.html#__package__
+nbxmpp.stringprepare nbxmpp.stringprepare-module.html
+nbxmpp.stringprepare.nodeprep nbxmpp.stringprepare-module.html#nodeprep
+nbxmpp.stringprepare.C_21 nbxmpp.stringprepare-module.html#C_21
+nbxmpp.stringprepare.C_22 nbxmpp.stringprepare-module.html#C_22
+nbxmpp.stringprepare.C_5 nbxmpp.stringprepare-module.html#C_5
+nbxmpp.stringprepare.__package__ nbxmpp.stringprepare-module.html#__package__
+nbxmpp.stringprepare.resourceprep nbxmpp.stringprepare-module.html#resourceprep
+nbxmpp.stringprepare.C_3 nbxmpp.stringprepare-module.html#C_3
+nbxmpp.stringprepare.C_4 nbxmpp.stringprepare-module.html#C_4
+nbxmpp.stringprepare.C_7 nbxmpp.stringprepare-module.html#C_7
+nbxmpp.stringprepare.C_6 nbxmpp.stringprepare-module.html#C_6
+nbxmpp.stringprepare.C_9 nbxmpp.stringprepare-module.html#C_9
+nbxmpp.stringprepare.C_8 nbxmpp.stringprepare-module.html#C_8
+nbxmpp.stringprepare.B_2 nbxmpp.stringprepare-module.html#B_2
+nbxmpp.stringprepare.B_1 nbxmpp.stringprepare-module.html#B_1
+nbxmpp.stringprepare.C_11 nbxmpp.stringprepare-module.html#C_11
+nbxmpp.stringprepare.C_12 nbxmpp.stringprepare-module.html#C_12
+nbxmpp.stringprepare.nameprep nbxmpp.stringprepare-module.html#nameprep
+nbxmpp.tls_nb nbxmpp.tls_nb-module.html
+nbxmpp.tls_nb.log nbxmpp.tls_nb-module.html#log
+nbxmpp.tls_nb.PYOPENSSL nbxmpp.tls_nb-module.html#PYOPENSSL
+nbxmpp.tls_nb.USE_PYOPENSSL nbxmpp.tls_nb-module.html#USE_PYOPENSSL
+nbxmpp.tls_nb.PYSTDLIB nbxmpp.tls_nb-module.html#PYSTDLIB
+nbxmpp.tls_nb.gattr nbxmpp.tls_nb-module.html#gattr
+nbxmpp.tls_nb.__package__ nbxmpp.tls_nb-module.html#__package__
+nbxmpp.transports_nb nbxmpp.transports_nb-module.html
+nbxmpp.transports_nb.DATA_SENT nbxmpp.transports_nb-module.html#DATA_SENT
+nbxmpp.transports_nb.STATES nbxmpp.transports_nb-module.html#STATES
+nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS nbxmpp.transports_nb-module.html#DISCONNECT_TIMEOUT_SECONDS
+nbxmpp.transports_nb.get_proxy_data_from_dict nbxmpp.transports_nb-module.html#get_proxy_data_from_dict
+nbxmpp.transports_nb.DISCONNECTING nbxmpp.transports_nb-module.html#DISCONNECTING
+nbxmpp.transports_nb.DISCONNECTED nbxmpp.transports_nb-module.html#DISCONNECTED
+nbxmpp.transports_nb.__package__ nbxmpp.transports_nb-module.html#__package__
+nbxmpp.transports_nb.DATA_ERROR nbxmpp.transports_nb-module.html#DATA_ERROR
+nbxmpp.transports_nb.CONNECT_TIMEOUT_SECONDS nbxmpp.transports_nb-module.html#CONNECT_TIMEOUT_SECONDS
+nbxmpp.transports_nb.CONNECTING nbxmpp.transports_nb-module.html#CONNECTING
+nbxmpp.transports_nb.ustr nbxmpp.simplexml-module.html#ustr
+nbxmpp.transports_nb.RECV_BUFSIZE nbxmpp.transports_nb-module.html#RECV_BUFSIZE
+nbxmpp.transports_nb.log nbxmpp.transports_nb-module.html#log
+nbxmpp.transports_nb.PROXY_CONNECTING nbxmpp.transports_nb-module.html#PROXY_CONNECTING
+nbxmpp.transports_nb.urisplit nbxmpp.transports_nb-module.html#urisplit
+nbxmpp.transports_nb.DATA_RECEIVED nbxmpp.transports_nb-module.html#DATA_RECEIVED
+nbxmpp.transports_nb.CONNECTED nbxmpp.transports_nb-module.html#CONNECTED
+nbxmpp.auth_nb.NonBlockingBind nbxmpp.auth_nb.NonBlockingBind-class.html
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.auth_nb.NonBlockingBind.plugin nbxmpp.auth_nb.NonBlockingBind-class.html#plugin
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.auth_nb.NonBlockingBind.plugout nbxmpp.auth_nb.NonBlockingBind-class.html#plugout
+nbxmpp.auth_nb.NonBlockingBind._on_bound nbxmpp.auth_nb.NonBlockingBind-class.html#_on_bound
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler nbxmpp.auth_nb.NonBlockingBind-class.html#FeaturesHandler
+nbxmpp.auth_nb.NonBlockingBind.__init__ nbxmpp.auth_nb.NonBlockingBind-class.html#__init__
+nbxmpp.auth_nb.NonBlockingBind._on_session nbxmpp.auth_nb.NonBlockingBind-class.html#_on_session
+nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind nbxmpp.auth_nb.NonBlockingBind-class.html#NonBlockingBind
+nbxmpp.auth_nb.NonBlockingNonSASL nbxmpp.auth_nb.NonBlockingNonSASL-class.html
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin
+nbxmpp.auth_nb.NonBlockingNonSASL._on_username nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_username
+nbxmpp.auth_nb.NonBlockingNonSASL._on_password nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_password
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.auth_nb.NonBlockingNonSASL._on_auth nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_auth
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__ nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__
+nbxmpp.auth_nb.SASL nbxmpp.auth_nb.SASL-class.html
+nbxmpp.auth_nb.SASL.SASLHandler nbxmpp.auth_nb.SASL-class.html#SASLHandler
+nbxmpp.auth_nb.SASL.MechanismHandler nbxmpp.auth_nb.SASL-class.html#MechanismHandler
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.auth_nb.SASL._convert_to_iso88591 nbxmpp.auth_nb.SASL-class.html#_convert_to_iso88591
+nbxmpp.auth_nb.SASL.plugin nbxmpp.auth_nb.SASL-class.html#plugin
+nbxmpp.auth_nb.SASL.auth nbxmpp.auth_nb.SASL-class.html#auth
+nbxmpp.auth_nb.SASL.FeaturesHandler nbxmpp.auth_nb.SASL-class.html#FeaturesHandler
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.auth_nb.SASL.plugout nbxmpp.auth_nb.SASL-class.html#plugout
+nbxmpp.auth_nb.SASL.set_password nbxmpp.auth_nb.SASL-class.html#set_password
+nbxmpp.auth_nb.SASL.__init__ nbxmpp.auth_nb.SASL-class.html#__init__
+nbxmpp.bosh.AckChecker nbxmpp.bosh.AckChecker-class.html
+nbxmpp.bosh.AckChecker.get_not_acked_rids nbxmpp.bosh.AckChecker-class.html#get_not_acked_rids
+nbxmpp.bosh.AckChecker.process_incoming_ack nbxmpp.bosh.AckChecker-class.html#process_incoming_ack
+nbxmpp.bosh.AckChecker.get_rid nbxmpp.bosh.AckChecker-class.html#get_rid
+nbxmpp.bosh.AckChecker.__init__ nbxmpp.bosh.AckChecker-class.html#__init__
+nbxmpp.bosh.AckChecker.backup_stanza nbxmpp.bosh.AckChecker-class.html#backup_stanza
+nbxmpp.bosh.KeyStack nbxmpp.bosh.KeyStack-class.html
+nbxmpp.bosh.KeyStack.reset nbxmpp.bosh.KeyStack-class.html#reset
+nbxmpp.bosh.KeyStack.__init__ nbxmpp.bosh.KeyStack-class.html#__init__
+nbxmpp.bosh.KeyStack.get nbxmpp.bosh.KeyStack-class.html#get
+nbxmpp.bosh.NonBlockingBOSH nbxmpp.bosh.NonBlockingBOSH-class.html
+nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started
+nbxmpp.transports_nb.NonBlockingTransport.set_state nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state
+nbxmpp.bosh.NonBlockingBOSH.get_free_socket nbxmpp.bosh.NonBlockingBOSH-class.html#get_free_socket
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout
+nbxmpp.transports_nb.NonBlockingTransport.plugout nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout
+nbxmpp.bosh.NonBlockingBOSH._on_connect nbxmpp.bosh.NonBlockingBOSH-class.html#_on_connect
+nbxmpp.transports_nb.NonBlockingTransport.get_state nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state
+nbxmpp.bosh.NonBlockingBOSH.on_persistent_fallback nbxmpp.bosh.NonBlockingBOSH-class.html#on_persistent_fallback
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2
+nbxmpp.bosh.NonBlockingBOSH.renew_bosh_wait_timeout nbxmpp.bosh.NonBlockingBOSH-class.html#renew_bosh_wait_timeout
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout
+nbxmpp.bosh.NonBlockingBOSH.send_BOSH nbxmpp.bosh.NonBlockingBOSH-class.html#send_BOSH
+nbxmpp.bosh.NonBlockingBOSH.start_disconnect nbxmpp.bosh.NonBlockingBOSH-class.html#start_disconnect
+nbxmpp.bosh.NonBlockingBOSH.get_new_http_socket nbxmpp.bosh.NonBlockingBOSH-class.html#get_new_http_socket
+nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible nbxmpp.bosh.NonBlockingBOSH-class.html#on_http_request_possible
+nbxmpp.bosh.NonBlockingBOSH.plug_socket nbxmpp.bosh.NonBlockingBOSH-class.html#plug_socket
+nbxmpp.bosh.NonBlockingBOSH.disconnect nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect
+nbxmpp.bosh.NonBlockingBOSH.remove_bosh_wait_timeout nbxmpp.bosh.NonBlockingBOSH-class.html#remove_bosh_wait_timeout
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.bosh.NonBlockingBOSH.send nbxmpp.bosh.NonBlockingBOSH-class.html#send
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2
+nbxmpp.bosh.NonBlockingBOSH.build_stanza nbxmpp.bosh.NonBlockingBOSH-class.html#build_stanza
+nbxmpp.bosh.NonBlockingBOSH.__init__ nbxmpp.bosh.NonBlockingBOSH-class.html#__init__
+nbxmpp.bosh.NonBlockingBOSH.connect_and_flush nbxmpp.bosh.NonBlockingBOSH-class.html#connect_and_flush
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.bosh.NonBlockingBOSH.onreceive nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive
+nbxmpp.bosh.NonBlockingBOSH.send_init nbxmpp.bosh.NonBlockingBOSH-class.html#send_init
+nbxmpp.bosh.NonBlockingBOSH.get_socket_in nbxmpp.bosh.NonBlockingBOSH-class.html#get_socket_in
+nbxmpp.bosh.NonBlockingBOSH.boshify_stanzas nbxmpp.bosh.NonBlockingBOSH-class.html#boshify_stanzas
+nbxmpp.bosh.NonBlockingBOSH.on_bosh_wait_timeout nbxmpp.bosh.NonBlockingBOSH-class.html#on_bosh_wait_timeout
+nbxmpp.bosh.NonBlockingBOSH.append_stanza nbxmpp.bosh.NonBlockingBOSH-class.html#append_stanza
+nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure
+nbxmpp.transports_nb.NonBlockingTransport.plugin nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2
+nbxmpp.transports_nb.NonBlockingTransport.get_fd nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd
+nbxmpp.bosh.NonBlockingBOSH.get_current_state nbxmpp.bosh.NonBlockingBOSH-class.html#get_current_state
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2
+nbxmpp.bosh.NonBlockingBOSH.set_timeout nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout
+nbxmpp.bosh.NonBlockingBOSH.handle_body_attrs nbxmpp.bosh.NonBlockingBOSH-class.html#handle_body_attrs
+nbxmpp.bosh.NonBlockingBOSH.on_received_http nbxmpp.bosh.NonBlockingBOSH-class.html#on_received_http
+nbxmpp.bosh.NonBlockingBOSH.connect nbxmpp.bosh.NonBlockingBOSH-class.html#connect
+nbxmpp.client_nb.NonBlockingClient nbxmpp.client_nb.NonBlockingClient-class.html
+nbxmpp.client_nb.NonBlockingClient._on_start_sasl nbxmpp.client_nb.NonBlockingClient-class.html#_on_start_sasl
+nbxmpp.client_nb.NonBlockingClient._on_connect nbxmpp.client_nb.NonBlockingClient-class.html#_on_connect
+nbxmpp.client_nb.NonBlockingClient._on_old_auth nbxmpp.client_nb.NonBlockingClient-class.html#_on_old_auth
+nbxmpp.client_nb.NonBlockingClient.sendPresence nbxmpp.client_nb.NonBlockingClient-class.html#sendPresence
+nbxmpp.client_nb.NonBlockingClient.connect nbxmpp.client_nb.NonBlockingClient-class.html#connect
+nbxmpp.client_nb.NonBlockingClient._on_stream_start nbxmpp.client_nb.NonBlockingClient-class.html#_on_stream_start
+nbxmpp.client_nb.NonBlockingClient.incoming_stream_version nbxmpp.client_nb.NonBlockingClient-class.html#incoming_stream_version
+nbxmpp.client_nb.NonBlockingClient.__init__ nbxmpp.client_nb.NonBlockingClient-class.html#__init__
+nbxmpp.client_nb.NonBlockingClient.get_peerhost nbxmpp.client_nb.NonBlockingClient-class.html#get_peerhost
+nbxmpp.client_nb.NonBlockingClient.disconnect nbxmpp.client_nb.NonBlockingClient-class.html#disconnect
+nbxmpp.client_nb.NonBlockingClient.raise_event nbxmpp.client_nb.NonBlockingClient-class.html#raise_event
+nbxmpp.client_nb.NonBlockingClient.RegisterDisconnectHandler nbxmpp.client_nb.NonBlockingClient-class.html#RegisterDisconnectHandler
+nbxmpp.client_nb.NonBlockingClient._on_sasl_auth nbxmpp.client_nb.NonBlockingClient-class.html#_on_sasl_auth
+nbxmpp.client_nb.NonBlockingClient.initRoster nbxmpp.client_nb.NonBlockingClient-class.html#initRoster
+nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect_machine
+nbxmpp.client_nb.NonBlockingClient.auth nbxmpp.client_nb.NonBlockingClient-class.html#auth
+nbxmpp.client_nb.NonBlockingClient.getRoster nbxmpp.client_nb.NonBlockingClient-class.html#getRoster
+nbxmpp.client_nb.NonBlockingClient._on_auth_bind nbxmpp.client_nb.NonBlockingClient-class.html#_on_auth_bind
+nbxmpp.client_nb.NonBlockingClient.get_connect_type nbxmpp.client_nb.NonBlockingClient-class.html#get_connect_type
+nbxmpp.client_nb.NonBlockingClient._on_doc_attrs nbxmpp.client_nb.NonBlockingClient-class.html#_on_doc_attrs
+nbxmpp.client_nb.NonBlockingClient.UnregisterDisconnectHandler nbxmpp.client_nb.NonBlockingClient-class.html#UnregisterDisconnectHandler
+nbxmpp.client_nb.NonBlockingClient._tls_negotiation_handler nbxmpp.client_nb.NonBlockingClient-class.html#_tls_negotiation_handler
+nbxmpp.client_nb.NonBlockingClient._try_next_ip nbxmpp.client_nb.NonBlockingClient-class.html#_try_next_ip
+nbxmpp.client_nb.NonBlockingClient.DisconnectHandler nbxmpp.client_nb.NonBlockingClient-class.html#DisconnectHandler
+nbxmpp.client_nb.NonBlockingClient._xmpp_connect nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect
+nbxmpp.client_nb.NonBlockingClient._resolve_hostname nbxmpp.client_nb.NonBlockingClient-class.html#_resolve_hostname
+nbxmpp.dispatcher_nb.BOSHDispatcher nbxmpp.dispatcher_nb.BOSHDispatcher-class.html
+nbxmpp.dispatcher_nb.XMPPDispatcher.restoreHandlers nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugout nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout
+nbxmpp.dispatcher_nb.XMPPDispatcher._WaitForData nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_WaitForData
+nbxmpp.dispatcher_nb.BOSHDispatcher.StreamTerminate nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamTerminate
+nbxmpp.dispatcher_nb.XMPPDispatcher._init nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_init
+nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandlerOnce nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__ nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterDefaultHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterDefaultHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse
+nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace
+nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn
+nbxmpp.dispatcher_nb.XMPPDispatcher.dumpHandlers nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers
+nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterCycleHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterCycleHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse
+nbxmpp.dispatcher_nb.XMPPDispatcher.send nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterEventHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterEventHandler
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.dispatcher_nb.BOSHDispatcher.StreamInit nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamInit
+nbxmpp.dispatcher_nb.XMPPDispatcher.replace_non_character nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterCycleHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterCycleHandler
+nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespaceHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol
+nbxmpp.dispatcher_nb.XMPPDispatcher._check_stream_start nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_check_stream_start
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.returnStanzaHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#returnStanzaHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.Event nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event
+nbxmpp.dispatcher_nb.Dispatcher nbxmpp.dispatcher_nb.Dispatcher-class.html
+nbxmpp.dispatcher_nb.Dispatcher.get_instance nbxmpp.dispatcher_nb.Dispatcher-class.html#get_instance
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn
+nbxmpp.dispatcher_nb.XMPPDispatcher nbxmpp.dispatcher_nb.XMPPDispatcher-class.html
+nbxmpp.dispatcher_nb.XMPPDispatcher.restoreHandlers nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugout nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout
+nbxmpp.dispatcher_nb.XMPPDispatcher._WaitForData nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_WaitForData
+nbxmpp.dispatcher_nb.XMPPDispatcher._init nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_init
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandlerOnce nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__ nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterDefaultHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterDefaultHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse
+nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.dispatcher_nb.XMPPDispatcher.dumpHandlers nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers
+nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterCycleHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterCycleHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse
+nbxmpp.dispatcher_nb.XMPPDispatcher.send nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterEventHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterEventHandler
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.dispatcher_nb.XMPPDispatcher.StreamInit nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#StreamInit
+nbxmpp.dispatcher_nb.XMPPDispatcher.replace_non_character nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterCycleHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterCycleHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespaceHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol
+nbxmpp.dispatcher_nb.XMPPDispatcher._check_stream_start nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_check_stream_start
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.returnStanzaHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#returnStanzaHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID
+nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler
+nbxmpp.dispatcher_nb.XMPPDispatcher.Event nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event
+nbxmpp.idlequeue.GlibIdleQueue nbxmpp.idlequeue.GlibIdleQueue-class.html
+nbxmpp.idlequeue.IdleQueue.current_time nbxmpp.idlequeue.IdleQueue-class.html#current_time
+nbxmpp.idlequeue.IdleQueue.remove_alarm nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm
+nbxmpp.idlequeue.GlibIdleQueue.PROCESS_TIMEOUT nbxmpp.idlequeue.GlibIdleQueue-class.html#PROCESS_TIMEOUT
+nbxmpp.idlequeue.IdleQueue._check_time_events nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events
+nbxmpp.idlequeue.GlibIdleQueue._init_idle nbxmpp.idlequeue.GlibIdleQueue-class.html#_init_idle
+nbxmpp.idlequeue.GlibIdleQueue._process_events nbxmpp.idlequeue.GlibIdleQueue-class.html#_process_events
+nbxmpp.idlequeue.GlibIdleQueue._add_idle nbxmpp.idlequeue.GlibIdleQueue-class.html#_add_idle
+nbxmpp.idlequeue.GlibIdleQueue.process nbxmpp.idlequeue.GlibIdleQueue-class.html#process
+nbxmpp.idlequeue.GlibIdleQueue._remove_idle nbxmpp.idlequeue.GlibIdleQueue-class.html#_remove_idle
+nbxmpp.idlequeue.IdleQueue.remove_timeout nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout
+nbxmpp.idlequeue.IdleQueue.unplug_idle nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle
+nbxmpp.idlequeue.IdleQueue.set_read_timeout nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout
+nbxmpp.idlequeue.IdleQueue.plug_idle nbxmpp.idlequeue.IdleQueue-class.html#plug_idle
+nbxmpp.idlequeue.IdleQueue.__init__ nbxmpp.idlequeue.IdleQueue-class.html#__init__
+nbxmpp.idlequeue.IdleQueue.set_alarm nbxmpp.idlequeue.IdleQueue-class.html#set_alarm
+nbxmpp.idlequeue.IdleCommand nbxmpp.idlequeue.IdleCommand-class.html
+nbxmpp.idlequeue.IdleCommand._compose_command_args nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_args
+nbxmpp.idlequeue.IdleCommand.set_idlequeue nbxmpp.idlequeue.IdleCommand-class.html#set_idlequeue
+nbxmpp.idlequeue.IdleCommand.end nbxmpp.idlequeue.IdleCommand-class.html#end
+nbxmpp.idlequeue.IdleCommand.start nbxmpp.idlequeue.IdleCommand-class.html#start
+nbxmpp.idlequeue.IdleCommand._compose_command_line nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_line
+nbxmpp.idlequeue.IdleCommand.pollend nbxmpp.idlequeue.IdleCommand-class.html#pollend
+nbxmpp.idlequeue.IdleCommand.pollin nbxmpp.idlequeue.IdleCommand-class.html#pollin
+nbxmpp.idlequeue.IdleCommand._start_posix nbxmpp.idlequeue.IdleCommand-class.html#_start_posix
+nbxmpp.idlequeue.IdleCommand.read_timeout nbxmpp.idlequeue.IdleCommand-class.html#read_timeout
+nbxmpp.idlequeue.IdleObject.fd nbxmpp.idlequeue.IdleObject-class.html#fd
+nbxmpp.idlequeue.IdleCommand.wait_child nbxmpp.idlequeue.IdleCommand-class.html#wait_child
+nbxmpp.idlequeue.IdleCommand._start_nt nbxmpp.idlequeue.IdleCommand-class.html#_start_nt
+nbxmpp.idlequeue.IdleObject.pollout nbxmpp.idlequeue.IdleObject-class.html#pollout
+nbxmpp.idlequeue.IdleCommand.__init__ nbxmpp.idlequeue.IdleCommand-class.html#__init__
+nbxmpp.idlequeue.IdleCommand._return_result nbxmpp.idlequeue.IdleCommand-class.html#_return_result
+nbxmpp.idlequeue.IdleObject nbxmpp.idlequeue.IdleObject-class.html
+nbxmpp.idlequeue.IdleObject.pollend nbxmpp.idlequeue.IdleObject-class.html#pollend
+nbxmpp.idlequeue.IdleObject.fd nbxmpp.idlequeue.IdleObject-class.html#fd
+nbxmpp.idlequeue.IdleObject.read_timeout nbxmpp.idlequeue.IdleObject-class.html#read_timeout
+nbxmpp.idlequeue.IdleObject.pollin nbxmpp.idlequeue.IdleObject-class.html#pollin
+nbxmpp.idlequeue.IdleObject.pollout nbxmpp.idlequeue.IdleObject-class.html#pollout
+nbxmpp.idlequeue.IdleObject.__init__ nbxmpp.idlequeue.IdleObject-class.html#__init__
+nbxmpp.idlequeue.IdleQueue nbxmpp.idlequeue.IdleQueue-class.html
+nbxmpp.idlequeue.IdleQueue.current_time nbxmpp.idlequeue.IdleQueue-class.html#current_time
+nbxmpp.idlequeue.IdleQueue.remove_alarm nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm
+nbxmpp.idlequeue.IdleQueue.PROCESS_TIMEOUT nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT
+nbxmpp.idlequeue.IdleQueue.set_alarm nbxmpp.idlequeue.IdleQueue-class.html#set_alarm
+nbxmpp.idlequeue.IdleQueue._init_idle nbxmpp.idlequeue.IdleQueue-class.html#_init_idle
+nbxmpp.idlequeue.IdleQueue.unplug_idle nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle
+nbxmpp.idlequeue.IdleQueue._add_idle nbxmpp.idlequeue.IdleQueue-class.html#_add_idle
+nbxmpp.idlequeue.IdleQueue.process nbxmpp.idlequeue.IdleQueue-class.html#process
+nbxmpp.idlequeue.IdleQueue._remove_idle nbxmpp.idlequeue.IdleQueue-class.html#_remove_idle
+nbxmpp.idlequeue.IdleQueue.remove_timeout nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout
+nbxmpp.idlequeue.IdleQueue._process_events nbxmpp.idlequeue.IdleQueue-class.html#_process_events
+nbxmpp.idlequeue.IdleQueue.set_read_timeout nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout
+nbxmpp.idlequeue.IdleQueue.plug_idle nbxmpp.idlequeue.IdleQueue-class.html#plug_idle
+nbxmpp.idlequeue.IdleQueue.__init__ nbxmpp.idlequeue.IdleQueue-class.html#__init__
+nbxmpp.idlequeue.IdleQueue._check_time_events nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events
+nbxmpp.idlequeue.SelectIdleQueue nbxmpp.idlequeue.SelectIdleQueue-class.html
+nbxmpp.idlequeue.IdleQueue.current_time nbxmpp.idlequeue.IdleQueue-class.html#current_time
+nbxmpp.idlequeue.IdleQueue.remove_alarm nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm
+nbxmpp.idlequeue.IdleQueue.PROCESS_TIMEOUT nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT
+nbxmpp.idlequeue.IdleQueue._check_time_events nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events
+nbxmpp.idlequeue.SelectIdleQueue._init_idle nbxmpp.idlequeue.SelectIdleQueue-class.html#_init_idle
+nbxmpp.idlequeue.IdleQueue.unplug_idle nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle
+nbxmpp.idlequeue.SelectIdleQueue._add_idle nbxmpp.idlequeue.SelectIdleQueue-class.html#_add_idle
+nbxmpp.idlequeue.SelectIdleQueue.process nbxmpp.idlequeue.SelectIdleQueue-class.html#process
+nbxmpp.idlequeue.SelectIdleQueue._remove_idle nbxmpp.idlequeue.SelectIdleQueue-class.html#_remove_idle
+nbxmpp.idlequeue.IdleQueue.remove_timeout nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout
+nbxmpp.idlequeue.IdleQueue._process_events nbxmpp.idlequeue.IdleQueue-class.html#_process_events
+nbxmpp.idlequeue.IdleQueue.set_read_timeout nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout
+nbxmpp.idlequeue.IdleQueue.plug_idle nbxmpp.idlequeue.IdleQueue-class.html#plug_idle
+nbxmpp.idlequeue.IdleQueue.__init__ nbxmpp.idlequeue.IdleQueue-class.html#__init__
+nbxmpp.idlequeue.IdleQueue.set_alarm nbxmpp.idlequeue.IdleQueue-class.html#set_alarm
+nbxmpp.plugin.PlugIn nbxmpp.plugin.PlugIn-class.html
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.plugin.PlugIn.__init__ nbxmpp.plugin.PlugIn-class.html#__init__
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.protocol.Acks nbxmpp.protocol.Acks-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.Acks.buildEnable nbxmpp.protocol.Acks-class.html#buildEnable
+nbxmpp.protocol.Acks.buildAnswer nbxmpp.protocol.Acks-class.html#buildAnswer
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.protocol.Acks.__init__ nbxmpp.protocol.Acks-class.html#__init__
+nbxmpp.protocol.Acks.buildRequest nbxmpp.protocol.Acks-class.html#buildRequest
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.simplexml.Node.__setitem__ nbxmpp.simplexml.Node-class.html#__setitem__
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.Acks.buildResume nbxmpp.protocol.Acks-class.html#buildResume
+nbxmpp.protocol.BOSHBody nbxmpp.protocol.BOSHBody-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.BOSHBody.__init__ nbxmpp.protocol.BOSHBody-class.html#__init__
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.simplexml.Node.__setitem__ nbxmpp.simplexml.Node-class.html#__setitem__
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.BadFormat nbxmpp.protocol.BadFormat-class.html
+nbxmpp.protocol.BadNamespacePrefix nbxmpp.protocol.BadNamespacePrefix-class.html
+nbxmpp.protocol.Conflict nbxmpp.protocol.Conflict-class.html
+nbxmpp.protocol.ConnectionTimeout nbxmpp.protocol.ConnectionTimeout-class.html
+nbxmpp.protocol.DataField nbxmpp.protocol.DataField-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.protocol.DataField.addOption nbxmpp.protocol.DataField-class.html#addOption
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.protocol.DataField.getValues nbxmpp.protocol.DataField-class.html#getValues
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.DataField.getOptions nbxmpp.protocol.DataField-class.html#getOptions
+nbxmpp.protocol.DataField.setVar nbxmpp.protocol.DataField-class.html#setVar
+nbxmpp.protocol.DataField.__init__ nbxmpp.protocol.DataField-class.html#__init__
+nbxmpp.protocol.DataField.setType nbxmpp.protocol.DataField-class.html#setType
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.protocol.DataField.getDesc nbxmpp.protocol.DataField-class.html#getDesc
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.protocol.DataField.getVar nbxmpp.protocol.DataField-class.html#getVar
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.protocol.DataField.setDesc nbxmpp.protocol.DataField-class.html#setDesc
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.protocol.DataField.setValue nbxmpp.protocol.DataField-class.html#setValue
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.DataField.setRequired nbxmpp.protocol.DataField-class.html#setRequired
+nbxmpp.protocol.DataField.getType nbxmpp.protocol.DataField-class.html#getType
+nbxmpp.protocol.DataField.setOptions nbxmpp.protocol.DataField-class.html#setOptions
+nbxmpp.protocol.DataField.isRequired nbxmpp.protocol.DataField-class.html#isRequired
+nbxmpp.simplexml.Node.__setitem__ nbxmpp.simplexml.Node-class.html#__setitem__
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.protocol.DataField.setValues nbxmpp.protocol.DataField-class.html#setValues
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.protocol.DataField.getValue nbxmpp.protocol.DataField-class.html#getValue
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.DataField.addValue nbxmpp.protocol.DataField-class.html#addValue
+nbxmpp.protocol.DataForm nbxmpp.protocol.DataForm-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.protocol.DataForm.setTitle nbxmpp.protocol.DataForm-class.html#setTitle
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.DataForm.setField nbxmpp.protocol.DataForm-class.html#setField
+nbxmpp.protocol.DataForm.__init__ nbxmpp.protocol.DataForm-class.html#__init__
+nbxmpp.protocol.DataForm.setType nbxmpp.protocol.DataForm-class.html#setType
+nbxmpp.protocol.DataForm.__getitem__ nbxmpp.protocol.DataForm-class.html#__getitem__
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.protocol.DataForm.setInstructions nbxmpp.protocol.DataForm-class.html#setInstructions
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.protocol.DataForm.asDict nbxmpp.protocol.DataForm-class.html#asDict
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.DataForm.getType nbxmpp.protocol.DataForm-class.html#getType
+nbxmpp.protocol.DataForm.__setitem__ nbxmpp.protocol.DataForm-class.html#__setitem__
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.protocol.DataForm.getTitle nbxmpp.protocol.DataForm-class.html#getTitle
+nbxmpp.protocol.DataForm.getInstructions nbxmpp.protocol.DataForm-class.html#getInstructions
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.protocol.DataForm.getField nbxmpp.protocol.DataForm-class.html#getField
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.protocol.DataForm.addInstructions nbxmpp.protocol.DataForm-class.html#addInstructions
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.Error nbxmpp.protocol.Error-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.protocol.Protocol.setFrom nbxmpp.protocol.Protocol-class.html#setFrom
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.protocol.Protocol.getID nbxmpp.protocol.Protocol-class.html#getID
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.Protocol.setTo nbxmpp.protocol.Protocol-class.html#setTo
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.protocol.Protocol.setError nbxmpp.protocol.Protocol-class.html#setError
+nbxmpp.protocol.Error.__init__ nbxmpp.protocol.Error-class.html#__init__
+nbxmpp.protocol.Protocol.setType nbxmpp.protocol.Protocol-class.html#setType
+nbxmpp.protocol.Protocol.getTo nbxmpp.protocol.Protocol-class.html#getTo
+nbxmpp.protocol.Protocol.getTimestamp2 nbxmpp.protocol.Protocol-class.html#getTimestamp2
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.protocol.Protocol.getError nbxmpp.protocol.Protocol-class.html#getError
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.protocol.Protocol.getFrom nbxmpp.protocol.Protocol-class.html#getFrom
+nbxmpp.protocol.Protocol.setTimestamp nbxmpp.protocol.Protocol-class.html#setTimestamp
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.protocol.Protocol.getTimestamp nbxmpp.protocol.Protocol-class.html#getTimestamp
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.protocol.Protocol.getErrorCode nbxmpp.protocol.Protocol-class.html#getErrorCode
+nbxmpp.protocol.Error.__dupstr__ nbxmpp.protocol.Error-class.html#__dupstr__
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.Protocol.getType nbxmpp.protocol.Protocol-class.html#getType
+nbxmpp.protocol.Protocol.__setitem__ nbxmpp.protocol.Protocol-class.html#__setitem__
+nbxmpp.protocol.Protocol.getStatusConditions nbxmpp.protocol.Protocol-class.html#getStatusConditions
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.protocol.Protocol.setID nbxmpp.protocol.Protocol-class.html#setID
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.protocol.Protocol.getErrorMsg nbxmpp.protocol.Protocol-class.html#getErrorMsg
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.protocol.Protocol.getProperties nbxmpp.protocol.Protocol-class.html#getProperties
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.protocol.ErrorNode nbxmpp.protocol.ErrorNode-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.ErrorNode.__init__ nbxmpp.protocol.ErrorNode-class.html#__init__
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.simplexml.Node.__setitem__ nbxmpp.simplexml.Node-class.html#__setitem__
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.Hashes nbxmpp.protocol.Hashes-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.protocol.Hashes.supported nbxmpp.protocol.Hashes-class.html#supported
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.Hashes.__init__ nbxmpp.protocol.Hashes-class.html#__init__
+nbxmpp.protocol.Hashes.addHash nbxmpp.protocol.Hashes-class.html#addHash
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.Hashes.calculateHash nbxmpp.protocol.Hashes-class.html#calculateHash
+nbxmpp.simplexml.Node.__setitem__ nbxmpp.simplexml.Node-class.html#__setitem__
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.HostGone nbxmpp.protocol.HostGone-class.html
+nbxmpp.protocol.HostUnknown nbxmpp.protocol.HostUnknown-class.html
+nbxmpp.protocol.ImproperAddressing nbxmpp.protocol.ImproperAddressing-class.html
+nbxmpp.protocol.InternalServerError nbxmpp.protocol.InternalServerError-class.html
+nbxmpp.protocol.InvalidFrom nbxmpp.protocol.InvalidFrom-class.html
+nbxmpp.protocol.InvalidID nbxmpp.protocol.InvalidID-class.html
+nbxmpp.protocol.InvalidNamespace nbxmpp.protocol.InvalidNamespace-class.html
+nbxmpp.protocol.InvalidXML nbxmpp.protocol.InvalidXML-class.html
+nbxmpp.protocol.Iq nbxmpp.protocol.Iq-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.protocol.Protocol.setFrom nbxmpp.protocol.Protocol-class.html#setFrom
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.protocol.Protocol.getID nbxmpp.protocol.Protocol-class.html#getID
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.Protocol.setTo nbxmpp.protocol.Protocol-class.html#setTo
+nbxmpp.protocol.Iq.getQueryNS nbxmpp.protocol.Iq-class.html#getQueryNS
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.protocol.Protocol.setError nbxmpp.protocol.Protocol-class.html#setError
+nbxmpp.protocol.Iq.__init__ nbxmpp.protocol.Iq-class.html#__init__
+nbxmpp.protocol.Protocol.setType nbxmpp.protocol.Protocol-class.html#setType
+nbxmpp.protocol.Protocol.getTo nbxmpp.protocol.Protocol-class.html#getTo
+nbxmpp.protocol.Protocol.getTimestamp2 nbxmpp.protocol.Protocol-class.html#getTimestamp2
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.protocol.Protocol.getError nbxmpp.protocol.Protocol-class.html#getError
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.protocol.Protocol.getFrom nbxmpp.protocol.Protocol-class.html#getFrom
+nbxmpp.protocol.Protocol.setTimestamp nbxmpp.protocol.Protocol-class.html#setTimestamp
+nbxmpp.protocol.Iq.getQueryPayload nbxmpp.protocol.Iq-class.html#getQueryPayload
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.protocol.Protocol.getTimestamp nbxmpp.protocol.Protocol-class.html#getTimestamp
+nbxmpp.protocol.Iq.setQueryPayload nbxmpp.protocol.Iq-class.html#setQueryPayload
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.protocol.Iq.getQuery nbxmpp.protocol.Iq-class.html#getQuery
+nbxmpp.protocol.Protocol.getErrorCode nbxmpp.protocol.Protocol-class.html#getErrorCode
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.Iq.buildReply nbxmpp.protocol.Iq-class.html#buildReply
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.Protocol.getType nbxmpp.protocol.Protocol-class.html#getType
+nbxmpp.protocol.Iq.getQueryChildren nbxmpp.protocol.Iq-class.html#getQueryChildren
+nbxmpp.protocol.Protocol.__setitem__ nbxmpp.protocol.Protocol-class.html#__setitem__
+nbxmpp.protocol.Protocol.getStatusConditions nbxmpp.protocol.Protocol-class.html#getStatusConditions
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.protocol.Protocol.setID nbxmpp.protocol.Protocol-class.html#setID
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.protocol.Protocol.getErrorMsg nbxmpp.protocol.Protocol-class.html#getErrorMsg
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.protocol.Iq.getQuerynode nbxmpp.protocol.Iq-class.html#getQuerynode
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.protocol.Iq.setQuery nbxmpp.protocol.Iq-class.html#setQuery
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.protocol.Protocol.getProperties nbxmpp.protocol.Protocol-class.html#getProperties
+nbxmpp.protocol.Iq.setQueryNS nbxmpp.protocol.Iq-class.html#setQueryNS
+nbxmpp.protocol.Iq.setQuerynode nbxmpp.protocol.Iq-class.html#setQuerynode
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.protocol.JID nbxmpp.protocol.JID-class.html
+nbxmpp.protocol.JID.getDomain nbxmpp.protocol.JID-class.html#getDomain
+nbxmpp.protocol.JID.bareMatch nbxmpp.protocol.JID-class.html#bareMatch
+nbxmpp.protocol.JID.setNode nbxmpp.protocol.JID-class.html#setNode
+nbxmpp.protocol.JID.getStripped nbxmpp.protocol.JID-class.html#getStripped
+nbxmpp.protocol.JID.setResource nbxmpp.protocol.JID-class.html#setResource
+nbxmpp.protocol.JID.__str__ nbxmpp.protocol.JID-class.html#__str__
+nbxmpp.protocol.JID.getResource nbxmpp.protocol.JID-class.html#getResource
+nbxmpp.protocol.JID.setDomain nbxmpp.protocol.JID-class.html#setDomain
+nbxmpp.protocol.JID.__hash__ nbxmpp.protocol.JID-class.html#__hash__
+nbxmpp.protocol.JID.__ne__ nbxmpp.protocol.JID-class.html#__ne__
+nbxmpp.protocol.JID.__eq__ nbxmpp.protocol.JID-class.html#__eq__
+nbxmpp.protocol.JID.__init__ nbxmpp.protocol.JID-class.html#__init__
+nbxmpp.protocol.JID.getNode nbxmpp.protocol.JID-class.html#getNode
+nbxmpp.protocol.Message nbxmpp.protocol.Message-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.protocol.Message.getStatusCode nbxmpp.protocol.Message-class.html#getStatusCode
+nbxmpp.protocol.Protocol.setTo nbxmpp.protocol.Protocol-class.html#setTo
+nbxmpp.protocol.Protocol.setFrom nbxmpp.protocol.Protocol-class.html#setFrom
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.protocol.Protocol.getID nbxmpp.protocol.Protocol-class.html#getID
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.Message.getSubject nbxmpp.protocol.Message-class.html#getSubject
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.protocol.Protocol.setError nbxmpp.protocol.Protocol-class.html#setError
+nbxmpp.protocol.Message.__init__ nbxmpp.protocol.Message-class.html#__init__
+nbxmpp.protocol.Protocol.setType nbxmpp.protocol.Protocol-class.html#setType
+nbxmpp.protocol.Protocol.getTo nbxmpp.protocol.Protocol-class.html#getTo
+nbxmpp.protocol.Message.setBody nbxmpp.protocol.Message-class.html#setBody
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.protocol.Protocol.getError nbxmpp.protocol.Protocol-class.html#getError
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.protocol.Protocol.getFrom nbxmpp.protocol.Protocol-class.html#getFrom
+nbxmpp.protocol.Protocol.setTimestamp nbxmpp.protocol.Protocol-class.html#setTimestamp
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.protocol.Protocol.getTimestamp nbxmpp.protocol.Protocol-class.html#getTimestamp
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.protocol.Protocol.getErrorCode nbxmpp.protocol.Protocol-class.html#getErrorCode
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.protocol.Message.buildReply nbxmpp.protocol.Message-class.html#buildReply
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.Message.setThread nbxmpp.protocol.Message-class.html#setThread
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.protocol.Protocol.getType nbxmpp.protocol.Protocol-class.html#getType
+nbxmpp.protocol.Protocol.__setitem__ nbxmpp.protocol.Protocol-class.html#__setitem__
+nbxmpp.protocol.Protocol.getTimestamp2 nbxmpp.protocol.Protocol-class.html#getTimestamp2
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.protocol.Message.setXHTML nbxmpp.protocol.Message-class.html#setXHTML
+nbxmpp.protocol.Protocol.setID nbxmpp.protocol.Protocol-class.html#setID
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.protocol.Protocol.getErrorMsg nbxmpp.protocol.Protocol-class.html#getErrorMsg
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.protocol.Message.getThread nbxmpp.protocol.Message-class.html#getThread
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.protocol.Message.setSubject nbxmpp.protocol.Message-class.html#setSubject
+nbxmpp.protocol.Protocol.getStatusConditions nbxmpp.protocol.Protocol-class.html#getStatusConditions
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.protocol.Protocol.getProperties nbxmpp.protocol.Protocol-class.html#getProperties
+nbxmpp.protocol.Message.getXHTML nbxmpp.protocol.Message-class.html#getXHTML
+nbxmpp.protocol.Message.getBody nbxmpp.protocol.Message-class.html#getBody
+nbxmpp.protocol.NodeProcessed nbxmpp.protocol.NodeProcessed-class.html
+nbxmpp.protocol.NotAuthorized nbxmpp.protocol.NotAuthorized-class.html
+nbxmpp.protocol.PolicyViolation nbxmpp.protocol.PolicyViolation-class.html
+nbxmpp.protocol.Presence nbxmpp.protocol.Presence-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.protocol.Protocol.getFrom nbxmpp.protocol.Protocol-class.html#getFrom
+nbxmpp.protocol.Presence.getStatusCode nbxmpp.protocol.Presence-class.html#getStatusCode
+nbxmpp.protocol.Presence.getPriority nbxmpp.protocol.Presence-class.html#getPriority
+nbxmpp.protocol.Presence.getAffiliation nbxmpp.protocol.Presence-class.html#getAffiliation
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.protocol.Protocol.getID nbxmpp.protocol.Protocol-class.html#getID
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.protocol.Presence.setPriority nbxmpp.protocol.Presence-class.html#setPriority
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.Protocol.setTo nbxmpp.protocol.Protocol-class.html#setTo
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.protocol.Presence.setStatus nbxmpp.protocol.Presence-class.html#setStatus
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.protocol.Protocol.setError nbxmpp.protocol.Protocol-class.html#setError
+nbxmpp.protocol.Presence.__init__ nbxmpp.protocol.Presence-class.html#__init__
+nbxmpp.protocol.Protocol.setType nbxmpp.protocol.Protocol-class.html#setType
+nbxmpp.protocol.Presence.getShow nbxmpp.protocol.Presence-class.html#getShow
+nbxmpp.protocol.Protocol.getTo nbxmpp.protocol.Protocol-class.html#getTo
+nbxmpp.protocol.Protocol.getTimestamp2 nbxmpp.protocol.Protocol-class.html#getTimestamp2
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.protocol.Protocol.getError nbxmpp.protocol.Protocol-class.html#getError
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.protocol.Presence.getStatus nbxmpp.protocol.Presence-class.html#getStatus
+nbxmpp.protocol.Protocol.setTimestamp nbxmpp.protocol.Protocol-class.html#setTimestamp
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.protocol.Presence.getActor nbxmpp.protocol.Presence-class.html#getActor
+nbxmpp.protocol.Protocol.getTimestamp nbxmpp.protocol.Protocol-class.html#getTimestamp
+nbxmpp.protocol.Presence.getRole nbxmpp.protocol.Presence-class.html#getRole
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.protocol.Protocol.getErrorCode nbxmpp.protocol.Protocol-class.html#getErrorCode
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.Protocol.getType nbxmpp.protocol.Protocol-class.html#getType
+nbxmpp.protocol.Protocol.__setitem__ nbxmpp.protocol.Protocol-class.html#__setitem__
+nbxmpp.protocol.Presence.getJid nbxmpp.protocol.Presence-class.html#getJid
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.protocol.Protocol.setID nbxmpp.protocol.Protocol-class.html#setID
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.protocol.Protocol.getErrorMsg nbxmpp.protocol.Protocol-class.html#getErrorMsg
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.protocol.Presence.setShow nbxmpp.protocol.Presence-class.html#setShow
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.protocol.Presence._muc_getSubTagDataAttr nbxmpp.protocol.Presence-class.html#_muc_getSubTagDataAttr
+nbxmpp.protocol.Presence.getReason nbxmpp.protocol.Presence-class.html#getReason
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.protocol.Protocol.getStatusConditions nbxmpp.protocol.Protocol-class.html#getStatusConditions
+nbxmpp.protocol.Presence.getNewNick nbxmpp.protocol.Presence-class.html#getNewNick
+nbxmpp.protocol.Protocol.getProperties nbxmpp.protocol.Protocol-class.html#getProperties
+nbxmpp.protocol.Protocol.setFrom nbxmpp.protocol.Protocol-class.html#setFrom
+nbxmpp.protocol.Presence._muc_getItemAttr nbxmpp.protocol.Presence-class.html#_muc_getItemAttr
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.protocol.Protocol nbxmpp.protocol.Protocol-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.protocol.Protocol.setFrom nbxmpp.protocol.Protocol-class.html#setFrom
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.protocol.Protocol.getID nbxmpp.protocol.Protocol-class.html#getID
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.protocol.Protocol.setTo nbxmpp.protocol.Protocol-class.html#setTo
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.protocol.Protocol.setError nbxmpp.protocol.Protocol-class.html#setError
+nbxmpp.protocol.Protocol.__init__ nbxmpp.protocol.Protocol-class.html#__init__
+nbxmpp.protocol.Protocol.setType nbxmpp.protocol.Protocol-class.html#setType
+nbxmpp.protocol.Protocol.getTo nbxmpp.protocol.Protocol-class.html#getTo
+nbxmpp.protocol.Protocol.getTimestamp2 nbxmpp.protocol.Protocol-class.html#getTimestamp2
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.protocol.Protocol.getError nbxmpp.protocol.Protocol-class.html#getError
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.protocol.Protocol.getFrom nbxmpp.protocol.Protocol-class.html#getFrom
+nbxmpp.protocol.Protocol.setTimestamp nbxmpp.protocol.Protocol-class.html#setTimestamp
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.protocol.Protocol.getTimestamp nbxmpp.protocol.Protocol-class.html#getTimestamp
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.protocol.Protocol.getErrorCode nbxmpp.protocol.Protocol-class.html#getErrorCode
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.protocol.Protocol.getType nbxmpp.protocol.Protocol-class.html#getType
+nbxmpp.protocol.Protocol.__setitem__ nbxmpp.protocol.Protocol-class.html#__setitem__
+nbxmpp.protocol.Protocol.getStatusConditions nbxmpp.protocol.Protocol-class.html#getStatusConditions
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.protocol.Protocol.setID nbxmpp.protocol.Protocol-class.html#setID
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.protocol.Protocol.getErrorMsg nbxmpp.protocol.Protocol-class.html#getErrorMsg
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.protocol.Protocol.getProperties nbxmpp.protocol.Protocol-class.html#getProperties
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.protocol.RemoteConnectionFailed nbxmpp.protocol.RemoteConnectionFailed-class.html
+nbxmpp.protocol.ResourceConstraint nbxmpp.protocol.ResourceConstraint-class.html
+nbxmpp.protocol.RestrictedXML nbxmpp.protocol.RestrictedXML-class.html
+nbxmpp.protocol.SeeOtherHost nbxmpp.protocol.SeeOtherHost-class.html
+nbxmpp.protocol.StreamError nbxmpp.protocol.StreamError-class.html
+nbxmpp.protocol.SystemShutdown nbxmpp.protocol.SystemShutdown-class.html
+nbxmpp.protocol.UndefinedCondition nbxmpp.protocol.UndefinedCondition-class.html
+nbxmpp.protocol.UnsupportedEncoding nbxmpp.protocol.UnsupportedEncoding-class.html
+nbxmpp.protocol.UnsupportedStanzaType nbxmpp.protocol.UnsupportedStanzaType-class.html
+nbxmpp.protocol.UnsupportedVersion nbxmpp.protocol.UnsupportedVersion-class.html
+nbxmpp.protocol.XMLNotWellFormed nbxmpp.protocol.XMLNotWellFormed-class.html
+nbxmpp.proxy_connectors.HTTPCONNECTConnector nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html
+nbxmpp.proxy_connectors.HTTPCONNECTConnector._on_headers_sent nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#_on_headers_sent
+nbxmpp.proxy_connectors.HTTPCONNECTConnector.start_connecting nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#start_connecting
+nbxmpp.proxy_connectors.ProxyConnector.connecting_over nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over
+nbxmpp.proxy_connectors.ProxyConnector.__init__ nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__
+nbxmpp.proxy_connectors.ProxyConnector.get_instance nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance
+nbxmpp.proxy_connectors.ProxyConnector nbxmpp.proxy_connectors.ProxyConnector-class.html
+nbxmpp.proxy_connectors.ProxyConnector.connecting_over nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over
+nbxmpp.proxy_connectors.ProxyConnector.start_connecting nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting
+nbxmpp.proxy_connectors.ProxyConnector.get_instance nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance
+nbxmpp.proxy_connectors.ProxyConnector.__init__ nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__
+nbxmpp.proxy_connectors.SOCKS5Connector nbxmpp.proxy_connectors.SOCKS5Connector-class.html
+nbxmpp.proxy_connectors.ProxyConnector.connecting_over nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over
+nbxmpp.proxy_connectors.SOCKS5Connector._on_proxy_auth nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_proxy_auth
+nbxmpp.proxy_connectors.SOCKS5Connector.start_connecting nbxmpp.proxy_connectors.SOCKS5Connector-class.html#start_connecting
+nbxmpp.proxy_connectors.SOCKS5Connector._on_req_sent nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_req_sent
+nbxmpp.proxy_connectors.SOCKS5Connector._on_greeting_sent nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_greeting_sent
+nbxmpp.proxy_connectors.ProxyConnector.__init__ nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__
+nbxmpp.proxy_connectors.ProxyConnector.get_instance nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance
+nbxmpp.roster_nb.NonBlockingRoster nbxmpp.roster_nb.NonBlockingRoster-class.html
+nbxmpp.roster_nb.NonBlockingRoster.getRaw nbxmpp.roster_nb.NonBlockingRoster-class.html#getRaw
+nbxmpp.roster_nb.NonBlockingRoster._getResourceData nbxmpp.roster_nb.NonBlockingRoster-class.html#_getResourceData
+nbxmpp.roster_nb.NonBlockingRoster.getGroups nbxmpp.roster_nb.NonBlockingRoster-class.html#getGroups
+nbxmpp.roster_nb.NonBlockingRoster.getPriority nbxmpp.roster_nb.NonBlockingRoster-class.html#getPriority
+nbxmpp.roster_nb.NonBlockingRoster._on_roster_set nbxmpp.roster_nb.NonBlockingRoster-class.html#_on_roster_set
+nbxmpp.roster_nb.NonBlockingRoster.getRawRoster nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawRoster
+nbxmpp.roster_nb.NonBlockingRoster.PresenceHandler nbxmpp.roster_nb.NonBlockingRoster-class.html#PresenceHandler
+nbxmpp.roster_nb.NonBlockingRoster._getItemData nbxmpp.roster_nb.NonBlockingRoster-class.html#_getItemData
+nbxmpp.roster_nb.NonBlockingRoster.__init__ nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__
+nbxmpp.roster_nb.NonBlockingRoster.getShow nbxmpp.roster_nb.NonBlockingRoster-class.html#getShow
+nbxmpp.roster_nb.NonBlockingRoster.getRoster nbxmpp.roster_nb.NonBlockingRoster-class.html#getRoster
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.roster_nb.NonBlockingRoster.getName nbxmpp.roster_nb.NonBlockingRoster-class.html#getName
+nbxmpp.roster_nb.NonBlockingRoster.getStatus nbxmpp.roster_nb.NonBlockingRoster-class.html#getStatus
+nbxmpp.roster_nb.NonBlockingRoster.Unauthorize nbxmpp.roster_nb.NonBlockingRoster-class.html#Unauthorize
+nbxmpp.roster_nb.NonBlockingRoster.Unsubscribe nbxmpp.roster_nb.NonBlockingRoster-class.html#Unsubscribe
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.roster_nb.NonBlockingRoster.RosterIqHandler nbxmpp.roster_nb.NonBlockingRoster-class.html#RosterIqHandler
+nbxmpp.roster_nb.NonBlockingRoster.getRawItem nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawItem
+nbxmpp.roster_nb.NonBlockingRoster.getItems nbxmpp.roster_nb.NonBlockingRoster-class.html#getItems
+nbxmpp.roster_nb.NonBlockingRoster.__getitem__ nbxmpp.roster_nb.NonBlockingRoster-class.html#__getitem__
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.roster_nb.NonBlockingRoster.keys nbxmpp.roster_nb.NonBlockingRoster-class.html#keys
+nbxmpp.roster_nb.NonBlockingRoster.Request nbxmpp.roster_nb.NonBlockingRoster-class.html#Request
+nbxmpp.roster_nb.NonBlockingRoster.getAsk nbxmpp.roster_nb.NonBlockingRoster-class.html#getAsk
+nbxmpp.roster_nb.NonBlockingRoster.setItem nbxmpp.roster_nb.NonBlockingRoster-class.html#setItem
+nbxmpp.roster_nb.NonBlockingRoster.setItemMulti nbxmpp.roster_nb.NonBlockingRoster-class.html#setItemMulti
+nbxmpp.roster_nb.NonBlockingRoster.getItem nbxmpp.roster_nb.NonBlockingRoster-class.html#getItem
+nbxmpp.roster_nb.NonBlockingRoster.Authorize nbxmpp.roster_nb.NonBlockingRoster-class.html#Authorize
+nbxmpp.roster_nb.NonBlockingRoster.plugin nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin
+nbxmpp.roster_nb.NonBlockingRoster.Subscribe nbxmpp.roster_nb.NonBlockingRoster-class.html#Subscribe
+nbxmpp.roster_nb.NonBlockingRoster.setRaw nbxmpp.roster_nb.NonBlockingRoster-class.html#setRaw
+nbxmpp.roster_nb.NonBlockingRoster.delItem nbxmpp.roster_nb.NonBlockingRoster-class.html#delItem
+nbxmpp.roster_nb.NonBlockingRoster.getSubscription nbxmpp.roster_nb.NonBlockingRoster-class.html#getSubscription
+nbxmpp.roster_nb.NonBlockingRoster.getResources nbxmpp.roster_nb.NonBlockingRoster-class.html#getResources
+nbxmpp.simplexml.NT nbxmpp.simplexml.NT-class.html
+nbxmpp.simplexml.T.__delattr__ nbxmpp.simplexml.T-class.html#__delattr__
+nbxmpp.simplexml.NT.__setattr__ nbxmpp.simplexml.NT-class.html#__setattr__
+nbxmpp.simplexml.T.__init__ nbxmpp.simplexml.T-class.html#__init__
+nbxmpp.simplexml.NT.__getattr__ nbxmpp.simplexml.NT-class.html#__getattr__
+nbxmpp.simplexml.Node nbxmpp.simplexml.Node-class.html
+nbxmpp.simplexml.Node.addChild nbxmpp.simplexml.Node-class.html#addChild
+nbxmpp.simplexml.Node.getAttrs nbxmpp.simplexml.Node-class.html#getAttrs
+nbxmpp.simplexml.Node.delAttr nbxmpp.simplexml.Node-class.html#delAttr
+nbxmpp.simplexml.Node.setNamespace nbxmpp.simplexml.Node-class.html#setNamespace
+nbxmpp.simplexml.Node.__str__ nbxmpp.simplexml.Node-class.html#__str__
+nbxmpp.simplexml.Node.getNamespace nbxmpp.simplexml.Node-class.html#getNamespace
+nbxmpp.simplexml.Node.getChildren nbxmpp.simplexml.Node-class.html#getChildren
+nbxmpp.simplexml.Node.has_attr nbxmpp.simplexml.Node-class.html#has_attr
+nbxmpp.simplexml.Node.__init__ nbxmpp.simplexml.Node-class.html#__init__
+nbxmpp.simplexml.Node.__getitem__ nbxmpp.simplexml.Node-class.html#__getitem__
+nbxmpp.simplexml.Node.clearData nbxmpp.simplexml.Node-class.html#clearData
+nbxmpp.simplexml.Node.__contains__ nbxmpp.simplexml.Node-class.html#__contains__
+nbxmpp.simplexml.Node.setParent nbxmpp.simplexml.Node-class.html#setParent
+nbxmpp.simplexml.Node.getName nbxmpp.simplexml.Node-class.html#getName
+nbxmpp.simplexml.Node.__getattr__ nbxmpp.simplexml.Node-class.html#__getattr__
+nbxmpp.simplexml.Node.getData nbxmpp.simplexml.Node-class.html#getData
+nbxmpp.simplexml.Node.lookup_nsp nbxmpp.simplexml.Node-class.html#lookup_nsp
+nbxmpp.simplexml.Node.setData nbxmpp.simplexml.Node-class.html#setData
+nbxmpp.simplexml.Node.setTagData nbxmpp.simplexml.Node-class.html#setTagData
+nbxmpp.simplexml.Node.setName nbxmpp.simplexml.Node-class.html#setName
+nbxmpp.simplexml.Node.getTagAttr nbxmpp.simplexml.Node-class.html#getTagAttr
+nbxmpp.simplexml.Node.__setitem__ nbxmpp.simplexml.Node-class.html#__setitem__
+nbxmpp.simplexml.Node.getPayload nbxmpp.simplexml.Node-class.html#getPayload
+nbxmpp.simplexml.Node.iterTags nbxmpp.simplexml.Node-class.html#iterTags
+nbxmpp.simplexml.Node.getTag nbxmpp.simplexml.Node-class.html#getTag
+nbxmpp.simplexml.Node.setTagAttr nbxmpp.simplexml.Node-class.html#setTagAttr
+nbxmpp.simplexml.Node.getTags nbxmpp.simplexml.Node-class.html#getTags
+nbxmpp.simplexml.Node.__delitem__ nbxmpp.simplexml.Node-class.html#__delitem__
+nbxmpp.simplexml.Node.getTagData nbxmpp.simplexml.Node-class.html#getTagData
+nbxmpp.simplexml.Node.getParent nbxmpp.simplexml.Node-class.html#getParent
+nbxmpp.simplexml.Node.delChild nbxmpp.simplexml.Node-class.html#delChild
+nbxmpp.simplexml.Node.setAttr nbxmpp.simplexml.Node-class.html#setAttr
+nbxmpp.simplexml.Node.getAttr nbxmpp.simplexml.Node-class.html#getAttr
+nbxmpp.simplexml.Node.addData nbxmpp.simplexml.Node-class.html#addData
+nbxmpp.simplexml.Node.setPayload nbxmpp.simplexml.Node-class.html#setPayload
+nbxmpp.simplexml.Node.FORCE_NODE_RECREATION nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION
+nbxmpp.simplexml.Node.setTag nbxmpp.simplexml.Node-class.html#setTag
+nbxmpp.simplexml.NodeBuilder nbxmpp.simplexml.NodeBuilder-class.html
+nbxmpp.simplexml.NodeBuilder.stream_header_received nbxmpp.simplexml.NodeBuilder-class.html#stream_header_received
+nbxmpp.simplexml.NodeBuilder._dec_depth nbxmpp.simplexml.NodeBuilder-class.html#_dec_depth
+nbxmpp.simplexml.NodeBuilder.starttag nbxmpp.simplexml.NodeBuilder-class.html#starttag
+nbxmpp.simplexml.NodeBuilder.endtag nbxmpp.simplexml.NodeBuilder-class.html#endtag
+nbxmpp.simplexml.NodeBuilder.check_data_buffer nbxmpp.simplexml.NodeBuilder-class.html#check_data_buffer
+nbxmpp.simplexml.NodeBuilder.handle_cdata nbxmpp.simplexml.NodeBuilder-class.html#handle_cdata
+nbxmpp.simplexml.NodeBuilder.getDom nbxmpp.simplexml.NodeBuilder-class.html#getDom
+nbxmpp.simplexml.NodeBuilder.dispatch nbxmpp.simplexml.NodeBuilder-class.html#dispatch
+nbxmpp.simplexml.NodeBuilder.stream_footer_received nbxmpp.simplexml.NodeBuilder-class.html#stream_footer_received
+nbxmpp.simplexml.NodeBuilder.has_received_endtag nbxmpp.simplexml.NodeBuilder-class.html#has_received_endtag
+nbxmpp.simplexml.NodeBuilder.destroy nbxmpp.simplexml.NodeBuilder-class.html#destroy
+nbxmpp.simplexml.NodeBuilder._inc_depth nbxmpp.simplexml.NodeBuilder-class.html#_inc_depth
+nbxmpp.simplexml.NodeBuilder.__init__ nbxmpp.simplexml.NodeBuilder-class.html#__init__
+nbxmpp.simplexml.NodeBuilder.handle_namespace_start nbxmpp.simplexml.NodeBuilder-class.html#handle_namespace_start
+nbxmpp.simplexml.T nbxmpp.simplexml.T-class.html
+nbxmpp.simplexml.T.__delattr__ nbxmpp.simplexml.T-class.html#__delattr__
+nbxmpp.simplexml.T.__setattr__ nbxmpp.simplexml.T-class.html#__setattr__
+nbxmpp.simplexml.T.__init__ nbxmpp.simplexml.T-class.html#__init__
+nbxmpp.simplexml.T.__getattr__ nbxmpp.simplexml.T-class.html#__getattr__
+nbxmpp.smacks.Smacks nbxmpp.smacks.Smacks-class.html
+nbxmpp.smacks.Smacks.resume_request nbxmpp.smacks.Smacks-class.html#resume_request
+nbxmpp.smacks.Smacks.send_ack nbxmpp.smacks.Smacks-class.html#send_ack
+nbxmpp.smacks.Smacks.check_ack nbxmpp.smacks.Smacks-class.html#check_ack
+nbxmpp.smacks.Smacks.negociate nbxmpp.smacks.Smacks-class.html#negociate
+nbxmpp.smacks.Smacks.request_ack nbxmpp.smacks.Smacks-class.html#request_ack
+nbxmpp.smacks.Smacks._neg_response nbxmpp.smacks.Smacks-class.html#_neg_response
+nbxmpp.smacks.Smacks.error_handling nbxmpp.smacks.Smacks-class.html#error_handling
+nbxmpp.smacks.Smacks.set_owner nbxmpp.smacks.Smacks-class.html#set_owner
+nbxmpp.smacks.Smacks.__init__ nbxmpp.smacks.Smacks-class.html#__init__
+nbxmpp.stringprepare.EmptyMappingTable nbxmpp.stringprepare.EmptyMappingTable-class.html
+nbxmpp.stringprepare.EmptyMappingTable.__implements__ nbxmpp.stringprepare.IMappingTable-class.html
+nbxmpp.stringprepare.EmptyMappingTable.map nbxmpp.stringprepare.EmptyMappingTable-class.html#map
+nbxmpp.stringprepare.EmptyMappingTable.__init__ nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__
+nbxmpp.stringprepare.ILookupTable nbxmpp.stringprepare.ILookupTable-class.html
+nbxmpp.stringprepare.ILookupTable.lookup nbxmpp.stringprepare.ILookupTable-class.html#lookup
+nbxmpp.stringprepare.IMappingTable nbxmpp.stringprepare.IMappingTable-class.html
+nbxmpp.stringprepare.IMappingTable.map nbxmpp.stringprepare.IMappingTable-class.html#map
+nbxmpp.stringprepare.LookupTable nbxmpp.stringprepare.LookupTable-class.html
+nbxmpp.stringprepare.LookupTable.__implements__ nbxmpp.stringprepare.ILookupTable-class.html
+nbxmpp.stringprepare.LookupTable.lookup nbxmpp.stringprepare.LookupTable-class.html#lookup
+nbxmpp.stringprepare.LookupTable.__init__ nbxmpp.stringprepare.LookupTable-class.html#__init__
+nbxmpp.stringprepare.LookupTableFromFunction nbxmpp.stringprepare.LookupTableFromFunction-class.html
+nbxmpp.stringprepare.LookupTableFromFunction.__implements__ nbxmpp.stringprepare.ILookupTable-class.html
+nbxmpp.stringprepare.LookupTableFromFunction.__init__ nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__
+nbxmpp.stringprepare.MappingTableFromFunction nbxmpp.stringprepare.MappingTableFromFunction-class.html
+nbxmpp.stringprepare.MappingTableFromFunction.__implements__ nbxmpp.stringprepare.IMappingTable-class.html
+nbxmpp.stringprepare.MappingTableFromFunction.__init__ nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__
+nbxmpp.stringprepare.NamePrep nbxmpp.stringprepare.NamePrep-class.html
+nbxmpp.stringprepare.NamePrep.prohibiteds nbxmpp.stringprepare.NamePrep-class.html#prohibiteds
+nbxmpp.stringprepare.NamePrep.nameprep nbxmpp.stringprepare.NamePrep-class.html#nameprep
+nbxmpp.stringprepare.NamePrep.check_prohibiteds nbxmpp.stringprepare.NamePrep-class.html#check_prohibiteds
+nbxmpp.stringprepare.NamePrep.prepare nbxmpp.stringprepare.NamePrep-class.html#prepare
+nbxmpp.stringprepare.NamePrep.n nbxmpp.stringprepare.NamePrep-class.html#n
+nbxmpp.stringprepare.Profile nbxmpp.stringprepare.Profile-class.html
+nbxmpp.stringprepare.Profile.check_unassigneds nbxmpp.stringprepare.Profile-class.html#check_unassigneds
+nbxmpp.stringprepare.Profile.map nbxmpp.stringprepare.Profile-class.html#map
+nbxmpp.stringprepare.Profile.check_prohibiteds nbxmpp.stringprepare.Profile-class.html#check_prohibiteds
+nbxmpp.stringprepare.Profile.prepare nbxmpp.stringprepare.Profile-class.html#prepare
+nbxmpp.stringprepare.Profile.check_bidirectionals nbxmpp.stringprepare.Profile-class.html#check_bidirectionals
+nbxmpp.stringprepare.Profile.__init__ nbxmpp.stringprepare.Profile-class.html#__init__
+nbxmpp.tls_nb.NonBlockingTLS nbxmpp.tls_nb.NonBlockingTLS-class.html
+nbxmpp.tls_nb.NonBlockingTLS._dumpX509 nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509
+nbxmpp.tls_nb.NonBlockingTLS.ssl_h_bits nbxmpp.tls_nb.NonBlockingTLS-class.html#ssl_h_bits
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.tls_nb.NonBlockingTLS._startSSL_pyOpenSSL nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_pyOpenSSL
+nbxmpp.tls_nb.NonBlockingTLS.plugin nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.tls_nb.NonBlockingTLS._dumpX509Name nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509Name
+nbxmpp.tls_nb.NonBlockingTLS._load_cert_file nbxmpp.tls_nb.NonBlockingTLS-class.html#_load_cert_file
+nbxmpp.tls_nb.NonBlockingTLS._dumpPKey nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpPKey
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.tls_nb.NonBlockingTLS._startSSL nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL
+nbxmpp.tls_nb.NonBlockingTLS._startSSL_stdlib nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_stdlib
+nbxmpp.tls_nb.NonBlockingTLS._ssl_verify_callback nbxmpp.tls_nb.NonBlockingTLS-class.html#_ssl_verify_callback
+nbxmpp.tls_nb.NonBlockingTLS.__init__ nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper nbxmpp.tls_nb.PyOpenSSLWrapper-class.html
+nbxmpp.tls_nb.PyOpenSSLWrapper.recv nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#recv
+nbxmpp.tls_nb.PyOpenSSLWrapper.is_numtoolarge nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#is_numtoolarge
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__ nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.send nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send
+nbxmpp.tls_nb.SSLWrapper.Error nbxmpp.tls_nb.SSLWrapper.Error-class.html
+nbxmpp.tls_nb.SSLWrapper nbxmpp.tls_nb.SSLWrapper-class.html
+nbxmpp.tls_nb.SSLWrapper.recv nbxmpp.tls_nb.SSLWrapper-class.html#recv
+nbxmpp.tls_nb.SSLWrapper.__init__ nbxmpp.tls_nb.SSLWrapper-class.html#__init__
+nbxmpp.tls_nb.SSLWrapper.send nbxmpp.tls_nb.SSLWrapper-class.html#send
+nbxmpp.tls_nb.SSLWrapper.Error nbxmpp.tls_nb.SSLWrapper.Error-class.html
+nbxmpp.tls_nb.SSLWrapper.Error nbxmpp.tls_nb.SSLWrapper.Error-class.html
+nbxmpp.tls_nb.SSLWrapper.Error.__str__ nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__ nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__
+nbxmpp.tls_nb.StdlibSSLWrapper nbxmpp.tls_nb.StdlibSSLWrapper-class.html
+nbxmpp.tls_nb.StdlibSSLWrapper.recv nbxmpp.tls_nb.StdlibSSLWrapper-class.html#recv
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__ nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.send nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send
+nbxmpp.tls_nb.SSLWrapper.Error nbxmpp.tls_nb.SSLWrapper.Error-class.html
+nbxmpp.transports_nb.NonBlockingHTTP nbxmpp.transports_nb.NonBlockingHTTP-class.html
+nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started
+nbxmpp.transports_nb.NonBlockingTransport.set_state nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout
+nbxmpp.transports_nb.NonBlockingTransport.plugout nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout
+nbxmpp.transports_nb.NonBlockingTCP._on_connect nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.connect nbxmpp.transports_nb.NonBlockingTCP-class.html#connect
+nbxmpp.transports_nb.NonBlockingHTTP.parse_http_message nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message
+nbxmpp.transports_nb.NonBlockingTCP.read_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout
+nbxmpp.transports_nb.NonBlockingTCP.encode_stanza nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2
+nbxmpp.transports_nb.NonBlockingHTTP.__init__ nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__
+nbxmpp.transports_nb.NonBlockingTCP._do_receive nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive
+nbxmpp.transports_nb.NonBlockingTCP.disconnect nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect
+nbxmpp.transports_nb.NonBlockingHTTP.build_http_message nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message
+nbxmpp.transports_nb.NonBlockingTCP._do_send nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send
+nbxmpp.transports_nb.NonBlockingTCP.send nbxmpp.transports_nb.NonBlockingTCP-class.html#send
+nbxmpp.transports_nb.NonBlockingTCP.tls_init nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init
+nbxmpp.transports_nb.NonBlockingTCP._connect_to_proxy nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy
+nbxmpp.transports_nb.NonBlockingTCP.pollin nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.transports_nb.NonBlockingHTTP._on_receive nbxmpp.transports_nb.NonBlockingHTTP-class.html#_on_receive
+nbxmpp.transports_nb.NonBlockingHTTP.http_send nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.transports_nb.NonBlockingTCP._plug_idle nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle
+nbxmpp.transports_nb.NonBlockingTransport.onreceive nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive
+nbxmpp.idlequeue.IdleObject.fd nbxmpp.idlequeue.IdleObject-class.html#fd
+nbxmpp.transports_nb.NonBlockingTransport.get_state nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state
+nbxmpp.transports_nb.NonBlockingTCP.pollout nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout
+nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure
+nbxmpp.transports_nb.NonBlockingTransport.plugin nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.pollend nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend
+nbxmpp.transports_nb.NonBlockingTransport.get_fd nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.start_disconnect nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect
+nbxmpp.transports_nb.NonBlockingHTTPBOSH nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html
+nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started
+nbxmpp.transports_nb.NonBlockingTransport.set_state nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout
+nbxmpp.transports_nb.NonBlockingTransport.plugout nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout
+nbxmpp.transports_nb.NonBlockingTCP._on_connect nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.connect nbxmpp.transports_nb.NonBlockingTCP-class.html#connect
+nbxmpp.transports_nb.NonBlockingHTTP.parse_http_message nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message
+nbxmpp.transports_nb.NonBlockingTCP.read_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout
+nbxmpp.transports_nb.NonBlockingTCP.encode_stanza nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2
+nbxmpp.transports_nb.NonBlockingHTTP.__init__ nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__
+nbxmpp.transports_nb.NonBlockingHTTPBOSH.set_stanza_build_cb nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#set_stanza_build_cb
+nbxmpp.transports_nb.NonBlockingTCP._do_receive nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive
+nbxmpp.transports_nb.NonBlockingTCP.disconnect nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect
+nbxmpp.transports_nb.NonBlockingHTTP.build_http_message nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message
+nbxmpp.transports_nb.NonBlockingHTTPBOSH._do_send nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#_do_send
+nbxmpp.transports_nb.NonBlockingTCP.send nbxmpp.transports_nb.NonBlockingTCP-class.html#send
+nbxmpp.transports_nb.NonBlockingTCP.tls_init nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init
+nbxmpp.transports_nb.NonBlockingTCP._connect_to_proxy nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy
+nbxmpp.transports_nb.NonBlockingTCP.pollin nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.transports_nb.NonBlockingHTTP._on_receive nbxmpp.transports_nb.NonBlockingHTTP-class.html#_on_receive
+nbxmpp.transports_nb.NonBlockingHTTP.http_send nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.transports_nb.NonBlockingTCP._plug_idle nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle
+nbxmpp.transports_nb.NonBlockingTransport.onreceive nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive
+nbxmpp.idlequeue.IdleObject.fd nbxmpp.idlequeue.IdleObject-class.html#fd
+nbxmpp.transports_nb.NonBlockingTransport.get_state nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state
+nbxmpp.transports_nb.NonBlockingTCP.pollout nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout
+nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure
+nbxmpp.transports_nb.NonBlockingTransport.plugin nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.pollend nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend
+nbxmpp.transports_nb.NonBlockingTransport.get_fd nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.start_disconnect nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect
+nbxmpp.transports_nb.NonBlockingTCP nbxmpp.transports_nb.NonBlockingTCP-class.html
+nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started
+nbxmpp.transports_nb.NonBlockingTransport.set_state nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout
+nbxmpp.transports_nb.NonBlockingTransport.plugout nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout
+nbxmpp.transports_nb.NonBlockingTCP._on_connect nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.connect nbxmpp.transports_nb.NonBlockingTCP-class.html#connect
+nbxmpp.transports_nb.NonBlockingTCP.read_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout
+nbxmpp.transports_nb.NonBlockingTCP.encode_stanza nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.__init__ nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__
+nbxmpp.transports_nb.NonBlockingTCP._do_receive nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive
+nbxmpp.transports_nb.NonBlockingTCP.disconnect nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect
+nbxmpp.transports_nb.NonBlockingTCP.pollend nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend
+nbxmpp.transports_nb.NonBlockingTCP.send nbxmpp.transports_nb.NonBlockingTCP-class.html#send
+nbxmpp.transports_nb.NonBlockingTCP.tls_init nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init
+nbxmpp.transports_nb.NonBlockingTCP._connect_to_proxy nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy
+nbxmpp.transports_nb.NonBlockingTCP.pollin nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.transports_nb.NonBlockingTCP._on_receive nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_receive
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.transports_nb.NonBlockingTCP._plug_idle nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle
+nbxmpp.transports_nb.NonBlockingTransport.onreceive nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive
+nbxmpp.idlequeue.IdleObject.fd nbxmpp.idlequeue.IdleObject-class.html#fd
+nbxmpp.transports_nb.NonBlockingTransport.get_state nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state
+nbxmpp.transports_nb.NonBlockingTCP.pollout nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout
+nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure
+nbxmpp.transports_nb.NonBlockingTransport.plugin nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2
+nbxmpp.transports_nb.NonBlockingTCP._do_send nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send
+nbxmpp.transports_nb.NonBlockingTransport.get_fd nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.start_disconnect nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect
+nbxmpp.transports_nb.NonBlockingTransport nbxmpp.transports_nb.NonBlockingTransport-class.html
+nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started
+nbxmpp.transports_nb.NonBlockingTransport.set_state nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout
+nbxmpp.transports_nb.NonBlockingTransport.plugout nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout
+nbxmpp.transports_nb.NonBlockingTransport._on_connect nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2
+nbxmpp.transports_nb.NonBlockingTransport.connect nbxmpp.transports_nb.NonBlockingTransport-class.html#connect
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout
+nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2
+nbxmpp.transports_nb.NonBlockingTransport.__init__ nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__
+nbxmpp.transports_nb.NonBlockingTransport.disconnect nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect
+nbxmpp.plugin.PlugIn.PlugIn nbxmpp.plugin.PlugIn-class.html#PlugIn
+nbxmpp.transports_nb.NonBlockingTransport.send nbxmpp.transports_nb.NonBlockingTransport-class.html#send
+nbxmpp.plugin.PlugIn.get_instance nbxmpp.plugin.PlugIn-class.html#get_instance
+nbxmpp.plugin.PlugIn.PlugOut nbxmpp.plugin.PlugIn-class.html#PlugOut
+nbxmpp.transports_nb.NonBlockingTransport.onreceive nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive
+nbxmpp.transports_nb.NonBlockingTransport.get_state nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state
+nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure
+nbxmpp.transports_nb.NonBlockingTransport.plugin nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2
+nbxmpp.transports_nb.NonBlockingTransport.get_fd nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2 nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout
+nbxmpp.transports_nb.NonBlockingTransport.start_disconnect nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect
diff --git a/doc/apidocs/class-tree.html b/doc/apidocs/class-tree.html
new file mode 100644
index 0000000..335045c
--- /dev/null
+++ b/doc/apidocs/class-tree.html
@@ -0,0 +1,427 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Class Hierarchy</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">&nbsp;</td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="class-tree.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Class Hierarchy</h1>
+<ul class="nomargin-top">
+ <li> <strong class="uidlink"><a href="nbxmpp.bosh.AckChecker-class.html">nbxmpp.bosh.AckChecker</a></strong>:
+ <em class="summary">Class for generating rids and generating and checking acknowledgements in
+BOSH messages</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.dispatcher_nb.Dispatcher-class.html">nbxmpp.dispatcher_nb.Dispatcher</a></strong>:
+ <em class="summary">Why is this here - I needed to redefine Dispatcher for BOSH and easiest way
+was to inherit original Dispatcher (now renamed to XMPPDispatcher). Trouble
+is that reference used to access dispatcher instance is in Client attribute
+named by __class__.__name__ of the dispatcher instance .. long story short:</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.EmptyMappingTable-class.html">nbxmpp.stringprepare.EmptyMappingTable</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.ILookupTable-class.html">nbxmpp.stringprepare.ILookupTable</a></strong>:
+ <em class="summary">Interface for character lookup classes</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.IMappingTable-class.html">nbxmpp.stringprepare.IMappingTable</a></strong>:
+ <em class="summary">Interface for character mapping classes</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.idlequeue.IdleObject-class.html">nbxmpp.idlequeue.IdleObject</a></strong>:
+ <em class="summary">Idle listener interface. Listed methods are called by IdleQueue.</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.idlequeue.IdleCommand-class.html">nbxmpp.idlequeue.IdleCommand</a></strong>:
+ <em class="summary">Can be subclassed to execute commands asynchronously by the idlequeue.
+Result will be optained via file descriptor of created pipe</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">nbxmpp.transports_nb.NonBlockingTCP</a></strong>:
+ <em class="summary">Non-blocking TCP socket wrapper</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">nbxmpp.transports_nb.NonBlockingHTTP</a></strong>:
+ <em class="summary">Socket wrapper that creates HTTP message out of sent data and peels-off HTTP
+headers from incoming messages</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html">nbxmpp.transports_nb.NonBlockingHTTPBOSH</a></strong>:
+ <em class="summary">Class for BOSH HTTP connections. Slightly redefines HTTP transport by
+calling bosh bodytag generating callback before putting data on wire</em>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.idlequeue.IdleQueue-class.html">nbxmpp.idlequeue.IdleQueue</a></strong>:
+ <em class="summary">IdleQueue provide three distinct time based features. Uses select.poll()</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">nbxmpp.idlequeue.GlibIdleQueue</a></strong>:
+ <em class="summary">Extends IdleQueue to use glib io_add_wath, instead of select/poll In another
+'non gui' implementation of Gajim IdleQueue can be used safetly</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html">nbxmpp.idlequeue.SelectIdleQueue</a></strong>:
+ <em class="summary">Extends IdleQueue to use select.select() for polling</em>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.JID-class.html">nbxmpp.protocol.JID</a></strong>:
+ <em class="summary">JID can be built from string, modified, compared, serialised into string</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.bosh.KeyStack-class.html">nbxmpp.bosh.KeyStack</a></strong>:
+ <em class="summary">Class implementing key sequences for BOSH messages</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.LookupTable-class.html">nbxmpp.stringprepare.LookupTable</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.LookupTableFromFunction-class.html">nbxmpp.stringprepare.LookupTableFromFunction</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.MappingTableFromFunction-class.html">nbxmpp.stringprepare.MappingTableFromFunction</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.NamePrep-class.html">nbxmpp.stringprepare.NamePrep</a></strong>:
+ <em class="summary">Implements preparation of internationalized domain names</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.simplexml.NodeBuilder-class.html">nbxmpp.simplexml.NodeBuilder</a></strong>:
+ <em class="summary">Builds a Node class minidom from data parsed to it. This class used for two
+purposes:</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.client_nb.NonBlockingClient-class.html">nbxmpp.client_nb.NonBlockingClient</a></strong>:
+ <em class="summary">Client class is XMPP connection mountpoint. Objects for authentication,
+network communication, roster, xml parsing ... are plugged to client object.
+Client implements the abstract behavior - mostly negotioation and callbacks
+handling, whereas underlying modules take care of feature-specific logic</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.plugin.PlugIn-class.html">nbxmpp.plugin.PlugIn</a></strong>:
+ <em class="summary">Abstract xmpppy plugin infrastructure code, providing plugging in/out and
+debugging functionality</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html">nbxmpp.auth_nb.NonBlockingBind</a></strong>:
+ <em class="summary">Bind some JID to the current connection to allow router know of our
+location. Must be plugged after successful SASL auth</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">nbxmpp.auth_nb.NonBlockingNonSASL</a></strong>:
+ <em class="summary">Implements old Non-SASL (JEP-0078) authentication used in jabberd1.4 and
+transport authentication</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">nbxmpp.roster_nb.NonBlockingRoster</a></strong>:
+ <em class="summary">Defines a plenty of methods that will allow you to manage roster. Also
+automatically track presences from remote JIDs taking into account that
+every JID can have multiple resources connected. Does not currently support
+'error' presences. You can also use mapping interface for access to the
+internal representation of contacts in roster</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">nbxmpp.tls_nb.NonBlockingTLS</a></strong>:
+ <em class="summary">TLS connection used to encrypts already estabilished tcp connection</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">nbxmpp.transports_nb.NonBlockingTransport</a></strong>:
+ <em class="summary">Abstract class representing a transport</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html">nbxmpp.bosh.NonBlockingBOSH</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">nbxmpp.transports_nb.NonBlockingTCP</a></strong>:
+ <em class="summary">Non-blocking TCP socket wrapper</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">nbxmpp.transports_nb.NonBlockingHTTP</a></strong>:
+ <em class="summary">Socket wrapper that creates HTTP message out of sent data and peels-off HTTP
+headers from incoming messages</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html">nbxmpp.transports_nb.NonBlockingHTTPBOSH</a></strong>:
+ <em class="summary">Class for BOSH HTTP connections. Slightly redefines HTTP transport by
+calling bosh bodytag generating callback before putting data on wire</em>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.auth_nb.SASL-class.html">nbxmpp.auth_nb.SASL</a></strong>:
+ <em class="summary">Implements SASL authentication. Can be plugged into NonBlockingClient
+to start authentication</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">nbxmpp.dispatcher_nb.XMPPDispatcher</a></strong>:
+ <em class="summary">Handles XMPP stream and is the first who takes control over a fresh stanza</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">nbxmpp.dispatcher_nb.BOSHDispatcher</a></strong>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare.Profile-class.html">nbxmpp.stringprepare.Profile</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">nbxmpp.proxy_connectors.ProxyConnector</a></strong>:
+ <em class="summary">Interface for proxy-connecting object - when tunnneling XMPP over proxies,
+some connecting process usually has to be done before opening stream. Proxy
+connectors are used right after TCP connection is estabilished</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html">nbxmpp.proxy_connectors.HTTPCONNECTConnector</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html">nbxmpp.proxy_connectors.SOCKS5Connector</a></strong>:
+ <em class="summary">SOCKS5 proxy connection class. Allows to use SOCKS5 proxies with
+(optionally) simple authentication (only USERNAME/PASSWORD auth)</em>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.tls_nb.SSLWrapper-class.html">nbxmpp.tls_nb.SSLWrapper</a></strong>:
+ <em class="summary">Abstract SSLWrapper base class</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html">nbxmpp.tls_nb.PyOpenSSLWrapper</a></strong>:
+ <em class="summary">Wrapper class for PyOpenSSL's recv() and send() methods</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html">nbxmpp.tls_nb.StdlibSSLWrapper</a></strong>:
+ <em class="summary">Wrapper class for Python socket.ssl read() and write() methods</em>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.smacks.Smacks-class.html">nbxmpp.smacks.Smacks</a></strong>:
+ <em class="summary">This is Smacks is the Stream Management class. It takes care of requesting
+and sending acks. Also, it keeps track of the unhandled outgoing stanzas.</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.simplexml.T-class.html">nbxmpp.simplexml.T</a></strong>:
+ <em class="summary">Auxiliary class used to quick access to node's child nodes</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.simplexml.NT-class.html">nbxmpp.simplexml.NT</a></strong>:
+ <em class="summary">Auxiliary class used to quick create node's child nodes</em>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink">object</strong>:
+ <em class="summary">The most base type</em>
+ <ul>
+ <li> <strong class="uidlink">exceptions.BaseException</strong>:
+ <em class="summary">Common base class for all exceptions</em>
+ <ul>
+ <li> <strong class="uidlink">exceptions.Exception</strong>:
+ <em class="summary">Common base class for all non-exit exceptions.</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.NodeProcessed-class.html">nbxmpp.protocol.NodeProcessed</a></strong>:
+ <em class="summary">Exception that should be raised by handler when the handling should be
+stopped</em>
+ </li>
+ <li> <strong class="uidlink">exceptions.StandardError</strong>:
+ <em class="summary">Base class for all standard Python exceptions that do not represent
+interpreter exiting.</em>
+ <ul>
+ <li> <strong class="uidlink">exceptions.EnvironmentError</strong>:
+ <em class="summary">Base class for I/O related errors.</em>
+ <ul>
+ <li> <strong class="uidlink">exceptions.IOError</strong>:
+ <em class="summary">I/O operation failed.</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html">nbxmpp.tls_nb.SSLWrapper.Error</a></strong>:
+ <em class="summary">Generic SSL Error Wrapper</em>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.StreamError-class.html">nbxmpp.protocol.StreamError</a></strong>:
+ <em class="summary">Base exception class for stream errors</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.BadFormat-class.html">nbxmpp.protocol.BadFormat</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.BadNamespacePrefix-class.html">nbxmpp.protocol.BadNamespacePrefix</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Conflict-class.html">nbxmpp.protocol.Conflict</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.ConnectionTimeout-class.html">nbxmpp.protocol.ConnectionTimeout</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.HostGone-class.html">nbxmpp.protocol.HostGone</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.HostUnknown-class.html">nbxmpp.protocol.HostUnknown</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.ImproperAddressing-class.html">nbxmpp.protocol.ImproperAddressing</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.InternalServerError-class.html">nbxmpp.protocol.InternalServerError</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.InvalidFrom-class.html">nbxmpp.protocol.InvalidFrom</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.InvalidID-class.html">nbxmpp.protocol.InvalidID</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.InvalidNamespace-class.html">nbxmpp.protocol.InvalidNamespace</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.InvalidXML-class.html">nbxmpp.protocol.InvalidXML</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.NotAuthorized-class.html">nbxmpp.protocol.NotAuthorized</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.PolicyViolation-class.html">nbxmpp.protocol.PolicyViolation</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.RemoteConnectionFailed-class.html">nbxmpp.protocol.RemoteConnectionFailed</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.ResourceConstraint-class.html">nbxmpp.protocol.ResourceConstraint</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.RestrictedXML-class.html">nbxmpp.protocol.RestrictedXML</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.SeeOtherHost-class.html">nbxmpp.protocol.SeeOtherHost</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.SystemShutdown-class.html">nbxmpp.protocol.SystemShutdown</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.UndefinedCondition-class.html">nbxmpp.protocol.UndefinedCondition</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.UnsupportedEncoding-class.html">nbxmpp.protocol.UnsupportedEncoding</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.UnsupportedStanzaType-class.html">nbxmpp.protocol.UnsupportedStanzaType</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.UnsupportedVersion-class.html">nbxmpp.protocol.UnsupportedVersion</a></strong>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.XMLNotWellFormed-class.html">nbxmpp.protocol.XMLNotWellFormed</a></strong>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.simplexml.Node-class.html">nbxmpp.simplexml.Node</a></strong>:
+ <em class="summary">Node class describes syntax of separate XML Node. It have a constructor that
+permits node creation from set of &quot;namespace name&quot;, attributes and payload
+of text strings and other nodes. It does not natively support building node
+from text string and uses NodeBuilder class for that purpose. After
+creation node can be mangled in many ways so it can be completely changed.
+Also node can be serialised into string in one of two modes: default (where
+the textual representation of node describes it exactly) and &quot;fancy&quot; - with
+whitespace added to make indentation and thus make result more readable by
+human.</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Acks-class.html">nbxmpp.protocol.Acks</a></strong>:
+ <em class="summary">Acknowledgement elements for Stream Management</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.BOSHBody-class.html">nbxmpp.protocol.BOSHBody</a></strong>:
+ <em class="summary">&lt;body&gt; tag that wraps usual XMPP stanzas in XMPP over BOSH</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.DataField-class.html">nbxmpp.protocol.DataField</a></strong>:
+ <em class="summary">This class is used in the DataForm class to describe the single data item</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.DataForm-class.html">nbxmpp.protocol.DataForm</a></strong>:
+ <em class="summary">Used for manipulating dataforms in XMPP</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.ErrorNode-class.html">nbxmpp.protocol.ErrorNode</a></strong>:
+ <em class="summary">XMPP-style error element</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Hashes-class.html">nbxmpp.protocol.Hashes</a></strong>:
+ <em class="summary">Hash elements for various XEPs as defined in XEP-300</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Protocol-class.html">nbxmpp.protocol.Protocol</a></strong>:
+ <em class="summary">A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs
+and messages</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Error-class.html">nbxmpp.protocol.Error</a></strong>:
+ <em class="summary">Used to quickly transform received stanza into error reply</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Iq-class.html">nbxmpp.protocol.Iq</a></strong>:
+ <em class="summary">XMPP Iq object - get/set dialog mechanism</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Message-class.html">nbxmpp.protocol.Message</a></strong>:
+ <em class="summary">XMPP Message stanza - &quot;push&quot; mechanism</em>
+ </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol.Presence-class.html">nbxmpp.protocol.Presence</a></strong>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/crarr.png b/doc/apidocs/crarr.png
new file mode 100644
index 0000000..26b43c5
--- /dev/null
+++ b/doc/apidocs/crarr.png
Binary files differ
diff --git a/doc/apidocs/epydoc.css b/doc/apidocs/epydoc.css
new file mode 100644
index 0000000..86d4170
--- /dev/null
+++ b/doc/apidocs/epydoc.css
@@ -0,0 +1,322 @@
+
+
+/* Epydoc CSS Stylesheet
+ *
+ * This stylesheet can be used to customize the appearance of epydoc's
+ * HTML output.
+ *
+ */
+
+/* Default Colors & Styles
+ * - Set the default foreground & background color with 'body'; and
+ * link colors with 'a:link' and 'a:visited'.
+ * - Use bold for decision list terms.
+ * - The heading styles defined here are used for headings *within*
+ * docstring descriptions. All headings used by epydoc itself use
+ * either class='epydoc' or class='toc' (CSS styles for both
+ * defined below).
+ */
+body { background: #ffffff; color: #000000; }
+p { margin-top: 0.5em; margin-bottom: 0.5em; }
+a:link { color: #0000ff; }
+a:visited { color: #204080; }
+dt { font-weight: bold; }
+h1 { font-size: +140%; font-style: italic;
+ font-weight: bold; }
+h2 { font-size: +125%; font-style: italic;
+ font-weight: bold; }
+h3 { font-size: +110%; font-style: italic;
+ font-weight: normal; }
+code { font-size: 100%; }
+/* N.B.: class, not pseudoclass */
+a.link { font-family: monospace; }
+
+/* Page Header & Footer
+ * - The standard page header consists of a navigation bar (with
+ * pointers to standard pages such as 'home' and 'trees'); a
+ * breadcrumbs list, which can be used to navigate to containing
+ * classes or modules; options links, to show/hide private
+ * variables and to show/hide frames; and a page title (using
+ * <h1>). The page title may be followed by a link to the
+ * corresponding source code (using 'span.codelink').
+ * - The footer consists of a navigation bar, a timestamp, and a
+ * pointer to epydoc's homepage.
+ */
+h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; }
+h2.epydoc { font-size: +130%; font-weight: bold; }
+h3.epydoc { font-size: +115%; font-weight: bold;
+ margin-top: 0.2em; }
+td h3.epydoc { font-size: +115%; font-weight: bold;
+ margin-bottom: 0; }
+table.navbar { background: #a0c0ff; color: #000000;
+ border: 2px groove #c0d0d0; }
+table.navbar table { color: #000000; }
+th.navbar-select { background: #70b0ff;
+ color: #000000; }
+table.navbar a { text-decoration: none; }
+table.navbar a:link { color: #0000ff; }
+table.navbar a:visited { color: #204080; }
+span.breadcrumbs { font-size: 85%; font-weight: bold; }
+span.options { font-size: 70%; }
+span.codelink { font-size: 85%; }
+td.footer { font-size: 85%; }
+
+/* Table Headers
+ * - Each summary table and details section begins with a 'header'
+ * row. This row contains a section title (marked by
+ * 'span.table-header') as well as a show/hide private link
+ * (marked by 'span.options', defined above).
+ * - Summary tables that contain user-defined groups mark those
+ * groups using 'group header' rows.
+ */
+td.table-header { background: #70b0ff; color: #000000;
+ border: 1px solid #608090; }
+td.table-header table { color: #000000; }
+td.table-header table a:link { color: #0000ff; }
+td.table-header table a:visited { color: #204080; }
+span.table-header { font-size: 120%; font-weight: bold; }
+th.group-header { background: #c0e0f8; color: #000000;
+ text-align: left; font-style: italic;
+ font-size: 115%;
+ border: 1px solid #608090; }
+
+/* Summary Tables (functions, variables, etc)
+ * - Each object is described by a single row of the table with
+ * two cells. The left cell gives the object's type, and is
+ * marked with 'code.summary-type'. The right cell gives the
+ * object's name and a summary description.
+ * - CSS styles for the table's header and group headers are
+ * defined above, under 'Table Headers'
+ */
+table.summary { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin-bottom: 0.5em; }
+td.summary { border: 1px solid #608090; }
+code.summary-type { font-size: 85%; }
+table.summary a:link { color: #0000ff; }
+table.summary a:visited { color: #204080; }
+
+
+/* Details Tables (functions, variables, etc)
+ * - Each object is described in its own div.
+ * - A single-row summary table w/ table-header is used as
+ * a header for each details section (CSS style for table-header
+ * is defined above, under 'Table Headers').
+ */
+table.details { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin: .2em 0 0 0; }
+table.details table { color: #000000; }
+table.details a:link { color: #0000ff; }
+table.details a:visited { color: #204080; }
+
+/* Fields */
+dl.fields { margin-left: 2em; margin-top: 1em;
+ margin-bottom: 1em; }
+dl.fields dd ul { margin-left: 0em; padding-left: 0em; }
+dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; }
+div.fields { margin-left: 2em; }
+div.fields p { margin-bottom: 0.5em; }
+
+/* Index tables (identifier index, term index, etc)
+ * - link-index is used for indices containing lists of links
+ * (namely, the identifier index & term index).
+ * - index-where is used in link indices for the text indicating
+ * the container/source for each link.
+ * - metadata-index is used for indices containing metadata
+ * extracted from fields (namely, the bug index & todo index).
+ */
+table.link-index { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090; }
+td.link-index { border-width: 0px; }
+table.link-index a:link { color: #0000ff; }
+table.link-index a:visited { color: #204080; }
+span.index-where { font-size: 70%; }
+table.metadata-index { border-collapse: collapse;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #608090;
+ margin: .2em 0 0 0; }
+td.metadata-index { border-width: 1px; border-style: solid; }
+table.metadata-index a:link { color: #0000ff; }
+table.metadata-index a:visited { color: #204080; }
+
+/* Function signatures
+ * - sig* is used for the signature in the details section.
+ * - .summary-sig* is used for the signature in the summary
+ * table, and when listing property accessor functions.
+ * */
+.sig-name { color: #006080; }
+.sig-arg { color: #008060; }
+.sig-default { color: #602000; }
+.summary-sig { font-family: monospace; }
+.summary-sig-name { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:link
+ { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:visited
+ { color: #006080; font-weight: bold; }
+.summary-sig-arg { color: #006040; }
+.summary-sig-default { color: #501800; }
+
+/* Subclass list
+ */
+ul.subclass-list { display: inline; }
+ul.subclass-list li { display: inline; }
+
+/* To render variables, classes etc. like functions */
+table.summary .summary-name { color: #006080; font-weight: bold;
+ font-family: monospace; }
+table.summary
+ a.summary-name:link { color: #006080; font-weight: bold;
+ font-family: monospace; }
+table.summary
+ a.summary-name:visited { color: #006080; font-weight: bold;
+ font-family: monospace; }
+
+/* Variable values
+ * - In the 'variable details' sections, each varaible's value is
+ * listed in a 'pre.variable' box. The width of this box is
+ * restricted to 80 chars; if the value's repr is longer than
+ * this it will be wrapped, using a backslash marked with
+ * class 'variable-linewrap'. If the value's repr is longer
+ * than 3 lines, the rest will be ellided; and an ellipsis
+ * marker ('...' marked with 'variable-ellipsis') will be used.
+ * - If the value is a string, its quote marks will be marked
+ * with 'variable-quote'.
+ * - If the variable is a regexp, it is syntax-highlighted using
+ * the re* CSS classes.
+ */
+pre.variable { padding: .5em; margin: 0;
+ background: #dce4ec; color: #000000;
+ border: 1px solid #708890; }
+.variable-linewrap { color: #604000; font-weight: bold; }
+.variable-ellipsis { color: #604000; font-weight: bold; }
+.variable-quote { color: #604000; font-weight: bold; }
+.variable-group { color: #008000; font-weight: bold; }
+.variable-op { color: #604000; font-weight: bold; }
+.variable-string { color: #006030; }
+.variable-unknown { color: #a00000; font-weight: bold; }
+.re { color: #000000; }
+.re-char { color: #006030; }
+.re-op { color: #600000; }
+.re-group { color: #003060; }
+.re-ref { color: #404040; }
+
+/* Base tree
+ * - Used by class pages to display the base class hierarchy.
+ */
+pre.base-tree { font-size: 80%; margin: 0; }
+
+/* Frames-based table of contents headers
+ * - Consists of two frames: one for selecting modules; and
+ * the other listing the contents of the selected module.
+ * - h1.toc is used for each frame's heading
+ * - h2.toc is used for subheadings within each frame.
+ */
+h1.toc { text-align: center; font-size: 105%;
+ margin: 0; font-weight: bold;
+ padding: 0; }
+h2.toc { font-size: 100%; font-weight: bold;
+ margin: 0.5em 0 0 -0.3em; }
+
+/* Syntax Highlighting for Source Code
+ * - doctest examples are displayed in a 'pre.py-doctest' block.
+ * If the example is in a details table entry, then it will use
+ * the colors specified by the 'table pre.py-doctest' line.
+ * - Source code listings are displayed in a 'pre.py-src' block.
+ * Each line is marked with 'span.py-line' (used to draw a line
+ * down the left margin, separating the code from the line
+ * numbers). Line numbers are displayed with 'span.py-lineno'.
+ * The expand/collapse block toggle button is displayed with
+ * 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
+ * modify the font size of the text.)
+ * - If a source code page is opened with an anchor, then the
+ * corresponding code block will be highlighted. The code
+ * block's header is highlighted with 'py-highlight-hdr'; and
+ * the code block's body is highlighted with 'py-highlight'.
+ * - The remaining py-* classes are used to perform syntax
+ * highlighting (py-string for string literals, py-name for names,
+ * etc.)
+ */
+pre.py-doctest { padding: .5em; margin: 1em;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #708890; }
+table pre.py-doctest { background: #dce4ec;
+ color: #000000; }
+pre.py-src { border: 2px solid #000000;
+ background: #f0f0f0; color: #000000; }
+.py-line { border-left: 2px solid #000000;
+ margin-left: .2em; padding-left: .4em; }
+.py-lineno { font-style: italic; font-size: 90%;
+ padding-left: .5em; }
+a.py-toggle { text-decoration: none; }
+div.py-highlight-hdr { border-top: 2px solid #000000;
+ border-bottom: 2px solid #000000;
+ background: #d8e8e8; }
+div.py-highlight { border-bottom: 2px solid #000000;
+ background: #d0e0e0; }
+.py-prompt { color: #005050; font-weight: bold;}
+.py-more { color: #005050; font-weight: bold;}
+.py-string { color: #006030; }
+.py-comment { color: #003060; }
+.py-keyword { color: #600000; }
+.py-output { color: #404040; }
+.py-name { color: #000050; }
+.py-name:link { color: #000050 !important; }
+.py-name:visited { color: #000050 !important; }
+.py-number { color: #005000; }
+.py-defname { color: #000060; font-weight: bold; }
+.py-def-name { color: #000060; font-weight: bold; }
+.py-base-class { color: #000060; }
+.py-param { color: #000060; }
+.py-docstring { color: #006030; }
+.py-decorator { color: #804020; }
+/* Use this if you don't want links to names underlined: */
+/*a.py-name { text-decoration: none; }*/
+
+/* Graphs & Diagrams
+ * - These CSS styles are used for graphs & diagrams generated using
+ * Graphviz dot. 'img.graph-without-title' is used for bare
+ * diagrams (to remove the border created by making the image
+ * clickable).
+ */
+img.graph-without-title { border: none; }
+img.graph-with-title { border: 1px solid #000000; }
+span.graph-title { font-weight: bold; }
+span.graph-caption { }
+
+/* General-purpose classes
+ * - 'p.indent-wrapped-lines' defines a paragraph whose first line
+ * is not indented, but whose subsequent lines are.
+ * - The 'nomargin-top' class is used to remove the top margin (e.g.
+ * from lists). The 'nomargin' class is used to remove both the
+ * top and bottom margin (but not the left or right margin --
+ * for lists, that would cause the bullets to disappear.)
+ */
+p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em;
+ margin: 0; }
+.nomargin-top { margin-top: 0; }
+.nomargin { margin-top: 0; margin-bottom: 0; }
+
+/* HTML Log */
+div.log-block { padding: 0; margin: .5em 0 .5em 0;
+ background: #e8f0f8; color: #000000;
+ border: 1px solid #000000; }
+div.log-error { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #ffb0b0; color: #000000;
+ border: 1px solid #000000; }
+div.log-warning { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #ffffb0; color: #000000;
+ border: 1px solid #000000; }
+div.log-info { padding: .1em .3em .1em .3em; margin: 4px;
+ background: #b0ffb0; color: #000000;
+ border: 1px solid #000000; }
+h2.log-hdr { background: #70b0ff; color: #000000;
+ margin: 0; padding: 0em 0.5em 0em 0.5em;
+ border-bottom: 1px solid #000000; font-size: 110%; }
+p.log { font-weight: bold; margin: .5em 0 .5em 0; }
+tr.opt-changed { color: #000000; font-weight: bold; }
+tr.opt-default { color: #606060; }
+pre.log { margin: 0; padding: 0; padding-left: 1em; }
diff --git a/doc/apidocs/epydoc.js b/doc/apidocs/epydoc.js
new file mode 100644
index 0000000..e787dbc
--- /dev/null
+++ b/doc/apidocs/epydoc.js
@@ -0,0 +1,293 @@
+function toggle_private() {
+ // Search for any private/public links on this page. Store
+ // their old text in "cmd," so we will know what action to
+ // take; and change their text to the opposite action.
+ var cmd = "?";
+ var elts = document.getElementsByTagName("a");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "privatelink") {
+ cmd = elts[i].innerHTML;
+ elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
+ "hide&nbsp;private":"show&nbsp;private");
+ }
+ }
+ // Update all DIVs containing private objects.
+ var elts = document.getElementsByTagName("div");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+ }
+ else if (elts[i].className == "public") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
+ }
+ }
+ // Update all table rows containing private objects. Note, we
+ // use "" instead of "block" becaue IE & firefox disagree on what
+ // this should be (block vs table-row), and "" just gives the
+ // default for both browsers.
+ var elts = document.getElementsByTagName("tr");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
+ }
+ }
+ // Update all list items containing private objects.
+ var elts = document.getElementsByTagName("li");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
+ "none":"");
+ }
+ }
+ // Update all list items containing private objects.
+ var elts = document.getElementsByTagName("ul");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "private") {
+ elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+ }
+ }
+ // Set a cookie to remember the current option.
+ document.cookie = "EpydocPrivate="+cmd;
+ }
+function show_private() {
+ var elts = document.getElementsByTagName("a");
+ for(var i=0; i<elts.length; i++) {
+ if (elts[i].className == "privatelink") {
+ cmd = elts[i].innerHTML;
+ if (cmd && cmd.substr(0,4)=="show")
+ toggle_private();
+ }
+ }
+ }
+function getCookie(name) {
+ var dc = document.cookie;
+ var prefix = name + "=";
+ var begin = dc.indexOf("; " + prefix);
+ if (begin == -1) {
+ begin = dc.indexOf(prefix);
+ if (begin != 0) return null;
+ } else
+ { begin += 2; }
+ var end = document.cookie.indexOf(";", begin);
+ if (end == -1)
+ { end = dc.length; }
+ return unescape(dc.substring(begin + prefix.length, end));
+ }
+function setFrame(url1, url2) {
+ parent.frames[1].location.href = url1;
+ parent.frames[2].location.href = url2;
+ }
+function checkCookie() {
+ var cmd=getCookie("EpydocPrivate");
+ if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
+ toggle_private();
+ }
+function toggleCallGraph(id) {
+ var elt = document.getElementById(id);
+ if (elt.style.display == "none")
+ elt.style.display = "block";
+ else
+ elt.style.display = "none";
+ }
+function expand(id) {
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.style.display = "block";
+ var elt = document.getElementById(id+"-expanded-linenums");
+ if (elt) elt.style.display = "block";
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+ var elt = document.getElementById(id+"-collapsed-linenums");
+ if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+ var elt = document.getElementById(id+"-toggle");
+ if (elt) { elt.innerHTML = "-"; }
+}
+
+function collapse(id) {
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.style.display = "none";
+ var elt = document.getElementById(id+"-expanded-linenums");
+ if (elt) elt.style.display = "none";
+ var elt = document.getElementById(id+"-collapsed-linenums");
+ if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
+ var elt = document.getElementById(id+"-toggle");
+ if (elt) { elt.innerHTML = "+"; }
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) {
+ elt.style.display = "block";
+
+ var indent = elt.getAttribute("indent");
+ var pad = elt.getAttribute("pad");
+ var s = "<tt class='py-lineno'>";
+ for (var i=0; i<pad.length; i++) { s += "&nbsp;" }
+ s += "</tt>";
+ s += "&nbsp;&nbsp;<tt class='py-line'>";
+ for (var i=0; i<indent.length; i++) { s += "&nbsp;" }
+ s += "<a href='#' onclick='expand(\"" + id;
+ s += "\");return false'>...</a></tt><br />";
+ elt.innerHTML = s;
+ }
+}
+
+function toggle(id) {
+ elt = document.getElementById(id+"-toggle");
+ if (elt.innerHTML == "-")
+ collapse(id);
+ else
+ expand(id);
+ return false;
+}
+
+function highlight(id) {
+ var elt = document.getElementById(id+"-def");
+ if (elt) elt.className = "py-highlight-hdr";
+ var elt = document.getElementById(id+"-expanded");
+ if (elt) elt.className = "py-highlight";
+ var elt = document.getElementById(id+"-collapsed");
+ if (elt) elt.className = "py-highlight";
+}
+
+function num_lines(s) {
+ var n = 1;
+ var pos = s.indexOf("\n");
+ while ( pos > 0) {
+ n += 1;
+ pos = s.indexOf("\n", pos+1);
+ }
+ return n;
+}
+
+// Collapse all blocks that mave more than `min_lines` lines.
+function collapse_all(min_lines) {
+ var elts = document.getElementsByTagName("div");
+ for (var i=0; i<elts.length; i++) {
+ var elt = elts[i];
+ var split = elt.id.indexOf("-");
+ if (split > 0)
+ if (elt.id.substring(split, elt.id.length) == "-expanded")
+ if (num_lines(elt.innerHTML) > min_lines)
+ collapse(elt.id.substring(0, split));
+ }
+}
+
+function expandto(href) {
+ var start = href.indexOf("#")+1;
+ if (start != 0 && start != href.length) {
+ if (href.substring(start, href.length) != "-") {
+ collapse_all(4);
+ pos = href.indexOf(".", start);
+ while (pos != -1) {
+ var id = href.substring(start, pos);
+ expand(id);
+ pos = href.indexOf(".", pos+1);
+ }
+ var id = href.substring(start, href.length);
+ expand(id);
+ highlight(id);
+ }
+ }
+}
+
+function kill_doclink(id) {
+ var parent = document.getElementById(id);
+ parent.removeChild(parent.childNodes.item(0));
+}
+function auto_kill_doclink(ev) {
+ if (!ev) var ev = window.event;
+ if (!this.contains(ev.toElement)) {
+ var parent = document.getElementById(this.parentID);
+ parent.removeChild(parent.childNodes.item(0));
+ }
+}
+
+function doclink(id, name, targets_id) {
+ var elt = document.getElementById(id);
+
+ // If we already opened the box, then destroy it.
+ // (This case should never occur, but leave it in just in case.)
+ if (elt.childNodes.length > 1) {
+ elt.removeChild(elt.childNodes.item(0));
+ }
+ else {
+ // The outer box: relative + inline positioning.
+ var box1 = document.createElement("div");
+ box1.style.position = "relative";
+ box1.style.display = "inline";
+ box1.style.top = 0;
+ box1.style.left = 0;
+
+ // A shadow for fun
+ var shadow = document.createElement("div");
+ shadow.style.position = "absolute";
+ shadow.style.left = "-1.3em";
+ shadow.style.top = "-1.3em";
+ shadow.style.background = "#404040";
+
+ // The inner box: absolute positioning.
+ var box2 = document.createElement("div");
+ box2.style.position = "relative";
+ box2.style.border = "1px solid #a0a0a0";
+ box2.style.left = "-.2em";
+ box2.style.top = "-.2em";
+ box2.style.background = "white";
+ box2.style.padding = ".3em .4em .3em .4em";
+ box2.style.fontStyle = "normal";
+ box2.onmouseout=auto_kill_doclink;
+ box2.parentID = id;
+
+ // Get the targets
+ var targets_elt = document.getElementById(targets_id);
+ var targets = targets_elt.getAttribute("targets");
+ var links = "";
+ target_list = targets.split(",");
+ for (var i=0; i<target_list.length; i++) {
+ var target = target_list[i].split("=");
+ links += "<li><a href='" + target[1] +
+ "' style='text-decoration:none'>" +
+ target[0] + "</a></li>";
+ }
+
+ // Put it all together.
+ elt.insertBefore(box1, elt.childNodes.item(0));
+ //box1.appendChild(box2);
+ box1.appendChild(shadow);
+ shadow.appendChild(box2);
+ box2.innerHTML =
+ "Which <b>"+name+"</b> do you want to see documentation for?" +
+ "<ul style='margin-bottom: 0;'>" +
+ links +
+ "<li><a href='#' style='text-decoration:none' " +
+ "onclick='kill_doclink(\""+id+"\");return false;'>"+
+ "<i>None of the above</i></a></li></ul>";
+ }
+ return false;
+}
+
+function get_anchor() {
+ var href = location.href;
+ var start = href.indexOf("#")+1;
+ if ((start != 0) && (start != href.length))
+ return href.substring(start, href.length);
+ }
+function redirect_url(dottedName) {
+ // Scan through each element of the "pages" list, and check
+ // if "name" matches with any of them.
+ for (var i=0; i<pages.length; i++) {
+
+ // Each page has the form "<pagename>-m" or "<pagename>-c";
+ // extract the <pagename> portion & compare it to dottedName.
+ var pagename = pages[i].substring(0, pages[i].length-2);
+ if (pagename == dottedName.substring(0,pagename.length)) {
+
+ // We've found a page that matches `dottedName`;
+ // construct its URL, using leftover `dottedName`
+ // content to form an anchor.
+ var pagetype = pages[i].charAt(pages[i].length-1);
+ var url = pagename + ((pagetype=="m")?"-module.html":
+ "-class.html");
+ if (dottedName.length > pagename.length)
+ url += "#" + dottedName.substring(pagename.length+1,
+ dottedName.length);
+ return url;
+ }
+ }
+ }
diff --git a/doc/apidocs/frames.html b/doc/apidocs/frames.html
new file mode 100644
index 0000000..d1c9ef1
--- /dev/null
+++ b/doc/apidocs/frames.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title> python-nbxmpp </title>
+</head>
+<frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="toc.html" name="moduleListFrame"
+ id="moduleListFrame" />
+ <frame src="toc-everything.html" name="moduleFrame"
+ id="moduleFrame" />
+ </frameset>
+ <frame src="nbxmpp-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
diff --git a/doc/apidocs/help.html b/doc/apidocs/help.html
new file mode 100644
index 0000000..cc7bc68
--- /dev/null
+++ b/doc/apidocs/help.html
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Help</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">&nbsp;</td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="help.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<h1 class="epydoc"> API Documentation </h1>
+
+<p> This document contains the API (Application Programming Interface)
+documentation for python-nbxmpp. Documentation for the Python
+objects defined by the project is divided into separate pages for each
+package, module, and class. The API documentation also includes two
+pages containing information about the project as a whole: a trees
+page, and an index page. </p>
+
+<h2> Object Documentation </h2>
+
+ <p>Each <strong>Package Documentation</strong> page contains: </p>
+ <ul>
+ <li> A description of the package. </li>
+ <li> A list of the modules and sub-packages contained by the
+ package. </li>
+ <li> A summary of the classes defined by the package. </li>
+ <li> A summary of the functions defined by the package. </li>
+ <li> A summary of the variables defined by the package. </li>
+ <li> A detailed description of each function defined by the
+ package. </li>
+ <li> A detailed description of each variable defined by the
+ package. </li>
+ </ul>
+
+ <p>Each <strong>Module Documentation</strong> page contains:</p>
+ <ul>
+ <li> A description of the module. </li>
+ <li> A summary of the classes defined by the module. </li>
+ <li> A summary of the functions defined by the module. </li>
+ <li> A summary of the variables defined by the module. </li>
+ <li> A detailed description of each function defined by the
+ module. </li>
+ <li> A detailed description of each variable defined by the
+ module. </li>
+ </ul>
+
+ <p>Each <strong>Class Documentation</strong> page contains: </p>
+ <ul>
+ <li> A class inheritance diagram. </li>
+ <li> A list of known subclasses. </li>
+ <li> A description of the class. </li>
+ <li> A summary of the methods defined by the class. </li>
+ <li> A summary of the instance variables defined by the class. </li>
+ <li> A summary of the class (static) variables defined by the
+ class. </li>
+ <li> A detailed description of each method defined by the
+ class. </li>
+ <li> A detailed description of each instance variable defined by the
+ class. </li>
+ <li> A detailed description of each class (static) variable defined
+ by the class. </li>
+ </ul>
+
+<h2> Project Documentation </h2>
+
+ <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
+ <ul>
+ <li> The <em>module hierarchy</em> lists every package and module, with
+ modules grouped into packages. At the top level, and within each
+ package, modules and sub-packages are listed alphabetically. </li>
+ <li> The <em>class hierarchy</em> lists every class, grouped by base
+ class. If a class has more than one base class, then it will be
+ listed under each base class. At the top level, and under each base
+ class, classes are listed alphabetically. </li>
+ </ul>
+
+ <p> The <strong>Index</strong> page contains indices of terms and
+ identifiers: </p>
+ <ul>
+ <li> The <em>term index</em> lists every term indexed by any object's
+ documentation. For each term, the index provides links to each
+ place where the term is indexed. </li>
+ <li> The <em>identifier index</em> lists the (short) name of every package,
+ module, class, method, function, variable, and parameter. For each
+ identifier, the index provides a short description, and a link to
+ its documentation. </li>
+ </ul>
+
+<h2> The Table of Contents </h2>
+
+<p> The table of contents occupies the two frames on the left side of
+the window. The upper-left frame displays the <em>project
+contents</em>, and the lower-left frame displays the <em>module
+contents</em>: </p>
+
+<table class="help summary" border="1" cellspacing="0" cellpadding="3">
+ <tr style="height: 30%">
+ <td align="center" style="font-size: small">
+ Project<br />Contents<hr />...</td>
+ <td align="center" style="font-size: small" rowspan="2" width="70%">
+ API<br />Documentation<br />Frame<br /><br /><br />
+ </td>
+ </tr>
+ <tr>
+ <td align="center" style="font-size: small">
+ Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;
+ </td>
+ </tr>
+</table><br />
+
+<p> The <strong>project contents frame</strong> contains a list of all packages
+and modules that are defined by the project. Clicking on an entry
+will display its contents in the module contents frame. Clicking on a
+special entry, labeled "Everything," will display the contents of
+the entire project. </p>
+
+<p> The <strong>module contents frame</strong> contains a list of every
+submodule, class, type, exception, function, and variable defined by a
+module or package. Clicking on an entry will display its
+documentation in the API documentation frame. Clicking on the name of
+the module, at the top of the frame, will display the documentation
+for the module itself. </p>
+
+<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
+navigation bar can be used to control whether the table of contents is
+displayed or not. </p>
+
+<h2> The Navigation Bar </h2>
+
+<p> A navigation bar is located at the top and bottom of every page.
+It indicates what type of page you are currently viewing, and allows
+you to go to related pages. The following table describes the labels
+on the navigation bar. Note that not some labels (such as
+[Parent]) are not displayed on all pages. </p>
+
+<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
+<tr class="summary">
+ <th>Label</th>
+ <th>Highlighted when...</th>
+ <th>Links to...</th>
+</tr>
+ <tr><td valign="top"><strong>[Parent]</strong></td>
+ <td valign="top"><em>(never highlighted)</em></td>
+ <td valign="top"> the parent of the current package </td></tr>
+ <tr><td valign="top"><strong>[Package]</strong></td>
+ <td valign="top">viewing a package</td>
+ <td valign="top">the package containing the current object
+ </td></tr>
+ <tr><td valign="top"><strong>[Module]</strong></td>
+ <td valign="top">viewing a module</td>
+ <td valign="top">the module containing the current object
+ </td></tr>
+ <tr><td valign="top"><strong>[Class]</strong></td>
+ <td valign="top">viewing a class </td>
+ <td valign="top">the class containing the current object</td></tr>
+ <tr><td valign="top"><strong>[Trees]</strong></td>
+ <td valign="top">viewing the trees page</td>
+ <td valign="top"> the trees page </td></tr>
+ <tr><td valign="top"><strong>[Index]</strong></td>
+ <td valign="top">viewing the index page</td>
+ <td valign="top"> the index page </td></tr>
+ <tr><td valign="top"><strong>[Help]</strong></td>
+ <td valign="top">viewing the help page</td>
+ <td valign="top"> the help page </td></tr>
+</table>
+
+<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
+the top navigation bar can be used to control whether documentation
+for private objects is displayed. Private objects are usually defined
+as objects whose (short) names begin with a single underscore, but do
+not end with an underscore. For example, "<code>_x</code>",
+"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
+are private objects; but "<code>re.sub</code>",
+"<code>__init__</code>", and "<code>type_</code>" are not. However,
+if a module defines the "<code>__all__</code>" variable, then its
+contents are used to decide which objects are private. </p>
+
+<p> A timestamp below the bottom navigation bar indicates when each
+page was last updated. </p>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/identifier-index.html b/doc/apidocs/identifier-index.html
new file mode 100644
index 0000000..4cf4926
--- /dev/null
+++ b/doc/apidocs/identifier-index.html
@@ -0,0 +1,2839 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Identifier Index</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">&nbsp;</td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="identifier-index.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table border="0" width="100%">
+<tr valign="bottom"><td>
+<h1 class="epydoc">Identifier Index</h1>
+</td><td>
+[
+ <a href="#A">A</a>
+ <a href="#B">B</a>
+ <a href="#C">C</a>
+ <a href="#D">D</a>
+ <a href="#E">E</a>
+ <a href="#F">F</a>
+ <a href="#G">G</a>
+ <a href="#H">H</a>
+ <a href="#I">I</a>
+ <a href="#J">J</a>
+ <a href="#K">K</a>
+ <a href="#L">L</a>
+ <a href="#M">M</a>
+ <a href="#N">N</a>
+ <a href="#O">O</a>
+ <a href="#P">P</a>
+ Q
+ <a href="#R">R</a>
+ <a href="#S">S</a>
+ <a href="#T">T</a>
+ <a href="#U">U</a>
+ V
+ <a href="#W">W</a>
+ <a href="#X">X</a>
+ Y
+ Z
+ <a href="#_">_</a>
+]
+</td></table>
+<table border="0" width="100%">
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="A">A</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.AckChecker-class.html">AckChecker</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#addInstructions">addInstructions()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#asDict">asDict()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Acks-class.html">Acks</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#addOption">addOption()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#auth">auth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#addValue">addValue()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#auth">auth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#addData">addData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#append_stanza">append_stanza()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html">auth_nb</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Hashes-class.html#addHash">addHash()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Hashes-class.html">Hashes</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ascii_upper">ascii_upper()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Authorize">Authorize()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="B">B</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#B_1">B_1</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh-module.html">bosh</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Acks-class.html#buildAnswer">buildAnswer()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Acks-class.html">Acks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#B_2">B_2</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh-module.html#bosh_errors">bosh_errors</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Acks-class.html#buildEnable">buildEnable()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Acks-class.html">Acks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.AckChecker-class.html#backup_stanza">backup_stanza()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.AckChecker-class.html">AckChecker</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.BOSHBody-class.html">BOSHBody</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#buildReply">buildReply()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.BadFormat-class.html">BadFormat</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">BOSHDispatcher</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#buildReply">buildReply()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.BadNamespacePrefix-class.html">BadNamespacePrefix</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#boshify_stanzas">boshify_stanzas()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Acks-class.html#buildRequest">buildRequest()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Acks-class.html">Acks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html#BadXML2Node">BadXML2Node()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message">build_http_message()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Acks-class.html#buildResume">buildResume()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Acks-class.html">Acks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#bareMatch">bareMatch()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#build_stanza">build_stanza()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#C">C()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_9">C_9</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#connect">connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.c14n-module.html">c14n</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Hashes-class.html#calculateHash">calculateHash()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Hashes-class.html">Hashes</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#connect">connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.c14n-module.html#c14n">c14n()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.c14n-module.html">nbxmpp.c14n</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#challenge_splitter">challenge_splitter()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect">connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_11">C_11</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#changePasswordTo">changePasswordTo()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#connect">connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_12">C_12</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#check_ack">check_ack()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#connect_and_flush">connect_and_flush()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_21">C_21</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.Profile-class.html#check_bidirectionals">check_bidirectionals()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.Profile-class.html">Profile</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#CONNECT_TIMEOUT_SECONDS">CONNECT_TIMEOUT_SECONDS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_22">C_22</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#check_data_buffer">check_data_buffer()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#CONNECTED">CONNECTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_3">C_3</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.NamePrep-class.html#check_prohibiteds">check_prohibiteds()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.NamePrep-class.html">NamePrep</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#CONNECTING">CONNECTING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_4">C_4</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.Profile-class.html#check_prohibiteds">check_prohibiteds()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.Profile-class.html">Profile</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over">connecting_over()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_5">C_5</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.Profile-class.html#check_unassigneds">check_unassigneds()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.Profile-class.html">Profile</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.ConnectionTimeout-class.html">ConnectionTimeout</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_6">C_6</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#current_time">current_time()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_7">C_7</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb-module.html">client_nb</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#C_8">C_8</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Conflict-class.html">Conflict</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="D">D</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#DATA_ERROR">DATA_ERROR</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#delPrivacyList">delPrivacyList()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#DISCONNECTING">DISCONNECTING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#DATA_RECEIVED">DATA_RECEIVED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#destroy">destroy()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#dispatch">dispatch()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">BOSHDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#DATA_SENT">DATA_SENT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect">disconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dispatch">dispatch()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html">DataField</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#disconnect">disconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#dispatch">dispatch()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html">DataForm</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect">disconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.Dispatcher-class.html">Dispatcher</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb-module.html#DEFAULT_TIMEOUT_SECONDS">DEFAULT_TIMEOUT_SECONDS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect">disconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb-module.html">dispatcher_nb</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#DISCONNECT_TIMEOUT_SECONDS">DISCONNECT_TIMEOUT_SECONDS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers">dumpHandlers()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#DISCONNECTED">DISCONNECTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#delItem">delItem()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#DisconnectHandler">DisconnectHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="E">E</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.EmptyMappingTable-class.html">EmptyMappingTable</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_JID_MALFORMED">ERR_JID_MALFORMED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_TIMEOUT">ERR_REMOTE_SERVER_TIMEOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza">encode_stanza()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_JID_MALFORMED">ERR_JID_MALFORMED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_RESOURCE_CONSTRAINT">ERR_RESOURCE_CONSTRAINT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html#ENCODING">ENCODING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_NOT_ACCEPTABLE">ERR_NOT_ACCEPTABLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_RESOURCE_CONSTRAINT">ERR_RESOURCE_CONSTRAINT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#end">end()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_NOT_ACCEPTABLE">ERR_NOT_ACCEPTABLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_SERVICE_UNAVAILABLE">ERR_SERVICE_UNAVAILABLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#endtag">endtag()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_NOT_ALLOWED">ERR_NOT_ALLOWED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_SERVICE_UNAVAILABLE">ERR_SERVICE_UNAVAILABLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_BAD_REQUEST">ERR_BAD_REQUEST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_NOT_ALLOWED">ERR_NOT_ALLOWED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_SUBSCRIPTION_REQUIRED">ERR_SUBSCRIPTION_REQUIRED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_BAD_REQUEST">ERR_BAD_REQUEST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_NOT_AUTHORIZED">ERR_NOT_AUTHORIZED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_SUBSCRIPTION_REQUIRED">ERR_SUBSCRIPTION_REQUIRED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_CONFLICT">ERR_CONFLICT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_NOT_AUTHORIZED">ERR_NOT_AUTHORIZED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_UNDEFINED_CONDITION">ERR_UNDEFINED_CONDITION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_CONFLICT">ERR_CONFLICT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_PAYMENT_REQUIRED">ERR_PAYMENT_REQUIRED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_UNDEFINED_CONDITION">ERR_UNDEFINED_CONDITION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_FEATURE_NOT_IMPLEMENTED">ERR_FEATURE_NOT_IMPLEMENTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_PAYMENT_REQUIRED">ERR_PAYMENT_REQUIRED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_UNEXPECTED_REQUEST">ERR_UNEXPECTED_REQUEST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_FEATURE_NOT_IMPLEMENTED">ERR_FEATURE_NOT_IMPLEMENTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_RECIPIENT_UNAVAILABLE">ERR_RECIPIENT_UNAVAILABLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_UNEXPECTED_REQUEST">ERR_UNEXPECTED_REQUEST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_FORBIDDEN">ERR_FORBIDDEN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_RECIPIENT_UNAVAILABLE">ERR_RECIPIENT_UNAVAILABLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Error-class.html">Error</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_FORBIDDEN">ERR_FORBIDDEN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_REDIRECT">ERR_REDIRECT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html">Error</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_GONE">ERR_GONE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_REDIRECT">ERR_REDIRECT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#error_handling">error_handling()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_GONE">ERR_GONE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_REGISTRATION_REQUIRED">ERR_REGISTRATION_REQUIRED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.ErrorNode-class.html">ErrorNode</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_INTERNAL_SERVER_ERROR">ERR_INTERNAL_SERVER_ERROR</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_REGISTRATION_REQUIRED">ERR_REGISTRATION_REQUIRED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERRORS">ERRORS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_INTERNAL_SERVER_ERROR">ERR_INTERNAL_SERVER_ERROR</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_REMOTE_SERVER_NOT_FOUND">ERR_REMOTE_SERVER_NOT_FOUND</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERRORS">ERRORS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_ITEM_NOT_FOUND">ERR_ITEM_NOT_FOUND</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_NOT_FOUND">ERR_REMOTE_SERVER_NOT_FOUND</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event">Event()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#ERR_ITEM_NOT_FOUND">ERR_ITEM_NOT_FOUND</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#ERR_REMOTE_SERVER_TIMEOUT">ERR_REMOTE_SERVER_TIMEOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh-module.html#FAKE_DESCRIPTOR">FAKE_DESCRIPTOR</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#FeaturesHandler">FeaturesHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#FLAG_READ_WRITE">FLAG_READ_WRITE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html">features_nb</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#FLAG_CLOSE">FLAG_CLOSE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#FLAG_WRITE">FLAG_WRITE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#FeaturesHandler">FeaturesHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#FLAG_READ">FLAG_READ</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="G">G</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb-module.html#gattr">gattr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getErrorMsg">getErrorMsg()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getResources">getResources()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.KeyStack-class.html#get">get()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.KeyStack-class.html">KeyStack</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#getField">getField()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getRole">getRole()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#get_connect_type">get_connect_type()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getFrom">getFrom()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#getRoster">getRoster()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_current_state">get_current_state()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getGroups">getGroups()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRoster">getRoster()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd">get_fd()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getID">getID()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getShow">getShow()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_free_socket">get_free_socket()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#getInstructions">getInstructions()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getShow">getShow()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#get_idlequeue">get_idlequeue()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getItem">getItem()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getStatus">getStatus()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.Dispatcher-class.html#get_instance">get_instance()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.Dispatcher-class.html">Dispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getItems">getItems()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getStatus">getStatus()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.plugin.PlugIn-class.html">PlugIn</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getJid">getJid()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#getStatusCode">getStatusCode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance">get_instance()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getName">getName()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getStatusCode">getStatusCode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_new_http_socket">get_new_http_socket()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getName">getName()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getStatusConditions">getStatusConditions()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.AckChecker-class.html#get_not_acked_rids">get_not_acked_rids()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.AckChecker-class.html">AckChecker</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#getStripped">getStripped()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#get_peerhost">get_peerhost()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getNewNick">getNewNick()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#getSubject">getSubject()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#get_proxy_data_from_dict">get_proxy_data_from_dict()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#getNode">getNode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getSubscription">getSubscription()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh-module.html#get_rand_number">get_rand_number()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#getOptions">getOptions()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.AckChecker-class.html#get_rid">get_rid()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.AckChecker-class.html">AckChecker</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_socket_in">get_socket_in()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state">get_state()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getPriority">getPriority()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#getActiveAndDefaultPrivacyLists">getActiveAndDefaultPrivacyLists()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getPriority">getPriority()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#getThread">getThread()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getActor">getActor()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#getPrivacyList">getPrivacyList()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp">getTimestamp()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getAffiliation">getAffiliation()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#getPrivacyLists">getPrivacyLists()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp2">getTimestamp2()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID">getAnID()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getProperties">getProperties()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#getTitle">getTitle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getAsk">getAsk()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#getQuery">getQuery()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getTo">getTo()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#getQueryChildren">getQueryChildren()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#getType">getType()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#getQuerynode">getQuerynode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#getType">getType()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#getBody">getBody()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#getQueryNS">getQueryNS()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getType">getType()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#getQueryPayload">getQueryPayload()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#getValue">getValue()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#getData">getData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRaw">getRaw()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#getValues">getValues()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#getDesc">getDesc()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawItem">getRawItem()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#getVar">getVar()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#getDom">getDom()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawRoster">getRawRoster()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#getXHTML">getXHTML()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#getDomain">getDomain()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#getReason">getReason()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getError">getError()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#getRegInfo">getRegInfo()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#GSS_STATE_STEP">GSS_STATE_STEP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#getErrorCode">getErrorCode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#getResource">getResource()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#GSS_STATE_WRAP">GSS_STATE_WRAP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="H">H</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#H">H()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#has_received_endtag">has_received_endtag()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.HostGone-class.html">HostGone</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#handle_body_attrs">handle_body_attrs()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Hashes-class.html">Hashes</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.HostUnknown-class.html">HostUnknown</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#handle_cdata">handle_cdata()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#HAVE_GOBJECT">HAVE_GOBJECT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send">http_send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#handle_namespace_start">handle_namespace_start()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#have_kerberos">have_kerberos</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html">HTTPCONNECTConnector</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors-module.html">nbxmpp.proxy_connectors</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#HH">HH()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#incoming_stream_version">incoming_stream_version()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html">Iq</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#initRoster">initRoster()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#IS_CLOSED">IS_CLOSED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html">idlequeue</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.InternalServerError-class.html">InternalServerError</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#is_numtoolarge">is_numtoolarge()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html">PyOpenSSLWrapper</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.InvalidFrom-class.html">InvalidFrom</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#isErrorNode">isErrorNode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.ILookupTable-class.html">ILookupTable</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.InvalidID-class.html">InvalidID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#isRequired">isRequired()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.IMappingTable-class.html">IMappingTable</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.InvalidNamespace-class.html">InvalidNamespace</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#isResultNode">isResultNode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.ImproperAddressing-class.html">ImproperAddressing</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.InvalidXML-class.html">InvalidXML</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="J">J</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html">JID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="K">K</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#kerberos">kerberos</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#keys">keys()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh-module.html#KEY_COUNT">KEY_COUNT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.KeyStack-class.html">KeyStack</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="L">L</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors-module.html">nbxmpp.proxy_connectors</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.ILookupTable-class.html#lookup">lookup()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.ILookupTable-class.html">ILookupTable</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb-module.html">nbxmpp.roster_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.LookupTable-class.html#lookup">lookup()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.LookupTable-class.html">LookupTable</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb-module.html">nbxmpp.client_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks-module.html">nbxmpp.smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.LookupTable-class.html">LookupTable</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.LookupTableFromFunction-class.html">LookupTableFromFunction</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.plugin-module.html">nbxmpp.plugin</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#log">log</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="M">M</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.EmptyMappingTable-class.html#map">map()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.EmptyMappingTable-class.html">EmptyMappingTable</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.Profile-class.html#map">map()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.Profile-class.html">Profile</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#MechanismHandler">MechanismHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.IMappingTable-class.html#map">map()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.IMappingTable-class.html">IMappingTable</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.MappingTableFromFunction-class.html">MappingTableFromFunction</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html">Message</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.NamePrep-class.html#n">n</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.NamePrep-class.html">NamePrep</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_COMPRESS">NS_COMPRESS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MUC_UNIQUE">NS_MUC_UNIQUE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#name">name</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CONDITIONS">NS_CONDITIONS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MUC_USER">NS_MUC_USER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#name">name</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CONFERENCE">NS_CONFERENCE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_NICK">NS_NICK</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.NamePrep-class.html">NamePrep</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DATA">NS_DATA</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_OFFLINE">NS_OFFLINE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#nameprep">nameprep</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DATA_LAYOUT">NS_DATA_LAYOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PHYSLOC">NS_PHYSLOC</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.NamePrep-class.html#nameprep">nameprep()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.NamePrep-class.html">NamePrep</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DATA_MEDIA">NS_DATA_MEDIA</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PING">NS_PING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html">nbxmpp</a></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DATA_VALIDATE">NS_DATA_VALIDATE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PRESENCE">NS_PRESENCE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#negociate">negociate()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DELAY">NS_DELAY</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PRIVACY">NS_PRIVACY</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html">Node</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DELAY2">NS_DELAY2</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PRIVATE">NS_PRIVATE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DIALBACK">NS_DIALBACK</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PROFILE">NS_PROFILE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#nodeprep">nodeprep</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DISCO">NS_DISCO</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PUBKEY_ATTEST">NS_PUBKEY_ATTEST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.NodeProcessed-class.html">NodeProcessed</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DISCO_INFO">NS_DISCO_INFO</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PUBKEY_PUBKEY">NS_PUBKEY_PUBKEY</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_DISCO_ITEMS">NS_DISCO_ITEMS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PUBKEY_REVOKE">NS_PUBKEY_REVOKE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#NonBlockingBind">NonBlockingBind()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ENCRYPTED">NS_ENCRYPTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PUBSUB">NS_PUBSUB</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ESESSION">NS_ESESSION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PUBSUB_EVENT">NS_PUBSUB_EVENT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb-module.html">nbxmpp.client_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ESESSION_INIT">NS_ESESSION_INIT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PUBSUB_OWNER">NS_PUBSUB_OWNER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_EVENT">NS_EVENT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_PUBSUB_PUBLISH_OPTIONS">NS_PUBSUB_PUBLISH_OPTIONS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html">NonBlockingHTTPBOSH</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_FEATURE">NS_FEATURE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_RECEIPTS">NS_RECEIPTS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">NonBlockingNonSASL</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_FILE">NS_FILE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_REGISTER">NS_REGISTER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb-module.html">nbxmpp.roster_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_FORWARD">NS_FORWARD</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ROSTER">NS_ROSTER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_GAMING">NS_GAMING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ROSTER_VER">NS_ROSTER_VER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_GATEWAY">NS_GATEWAY</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ROSTERNOTES">NS_ROSTERNOTES</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_GEOLOC">NS_GEOLOC</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ROSTERX">NS_ROSTERX</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.c14n-module.html#normalise_attr">normalise_attr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.c14n-module.html">nbxmpp.c14n</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_GMAILNOTIFY">NS_GMAILNOTIFY</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_RPC">NS_RPC</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.c14n-module.html#normalise_text">normalise_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.c14n-module.html">nbxmpp.c14n</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_GROUPCHAT">NS_GROUPCHAT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_RSM">NS_RSM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.NotAuthorized-class.html">NotAuthorized</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_GTALKSETTING">NS_GTALKSETTING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SASL">NS_SASL</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ACTIVITY">NS_ACTIVITY</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_HASHES">NS_HASHES</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SEARCH">NS_SEARCH</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ADDRESS">NS_ADDRESS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_HASHES_MD5">NS_HASHES_MD5</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SECLABEL">NS_SECLABEL</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_AGENTS">NS_AGENTS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_HASHES_SHA1">NS_HASHES_SHA1</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SECLABEL_CATALOG">NS_SECLABEL_CATALOG</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_AMP">NS_AMP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_HASHES_SHA256">NS_HASHES_SHA256</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SERVER">NS_SERVER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_AMP_ERRORS">NS_AMP_ERRORS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_HASHES_SHA512">NS_HASHES_SHA512</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SESSION">NS_SESSION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ARCHIVE">NS_ARCHIVE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_HTTP_AUTH">NS_HTTP_AUTH</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SI">NS_SI</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ARCHIVE_AUTO">NS_ARCHIVE_AUTO</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_HTTP_BIND">NS_HTTP_BIND</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SI_PUB">NS_SI_PUB</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANAGE">NS_ARCHIVE_MANAGE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_IBB">NS_IBB</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SIGNED">NS_SIGNED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANUAL">NS_ARCHIVE_MANUAL</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_INVISIBLE">NS_INVISIBLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_SSN">NS_SSN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ARCHIVE_PREF">NS_ARCHIVE_PREF</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_IQ">NS_IQ</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_STANZA_CRYPTO">NS_STANZA_CRYPTO</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ATOM">NS_ATOM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE">NS_JINGLE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_STANZAS">NS_STANZAS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_ATTENTION">NS_ATTENTION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_BYTESTREAM">NS_JINGLE_BYTESTREAM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_STREAM">NS_STREAM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_AUTH">NS_AUTH</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_ERRORS">NS_JINGLE_ERRORS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_STREAM_MGMT">NS_STREAM_MGMT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_AVATAR">NS_AVATAR</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_FILE_TRANSFER">NS_JINGLE_FILE_TRANSFER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_STREAMS">NS_STREAMS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_BIND">NS_BIND</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_IBB">NS_JINGLE_IBB</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_TIME">NS_TIME</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_BOB">NS_BOB</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_ICE_UDP">NS_JINGLE_ICE_UDP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_TIME_REVISED">NS_TIME_REVISED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_BOOKMARKS">NS_BOOKMARKS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_RAW_UDP">NS_JINGLE_RAW_UDP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_TLS">NS_TLS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_BROWSE">NS_BROWSE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_RTP">NS_JINGLE_RTP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_TUNE">NS_TUNE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_BROWSING">NS_BROWSING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_AUDIO">NS_JINGLE_RTP_AUDIO</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_VACATION">NS_VACATION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_BYTESTREAM">NS_BYTESTREAM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_VIDEO">NS_JINGLE_RTP_VIDEO</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_VCARD">NS_VCARD</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CAPS">NS_CAPS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_JINGLE_XTLS">NS_JINGLE_XTLS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_VCARD_UPDATE">NS_VCARD_UPDATE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CAPTCHA">NS_CAPTCHA</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_LAST">NS_LAST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_VERSION">NS_VERSION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CARBONS">NS_CARBONS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_LOCATION">NS_LOCATION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_VIEWING">NS_VIEWING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CHATSTATES">NS_CHATSTATES</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MESSAGE">NS_MESSAGE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_WAITINGLIST">NS_WAITINGLIST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CHATTING">NS_CHATTING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MOOD">NS_MOOD</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_XHTML">NS_XHTML</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_CLIENT">NS_CLIENT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MUC">NS_MUC</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_XHTML_IM">NS_XHTML_IM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_COMMANDS">NS_COMMANDS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MUC_ADMIN">NS_MUC_ADMIN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_XMPP_STREAMS">NS_XMPP_STREAMS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_COMPONENT_1">NS_COMPONENT_1</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MUC_CONFIG">NS_MUC_CONFIG</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NT-class.html">NT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_COMPONENT_ACCEPT">NS_COMPONENT_ACCEPT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#NS_MUC_OWNER">NS_MUC_OWNER</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="O">O</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_bosh_wait_timeout">on_bosh_wait_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_received_http">on_received_http()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb-module.html#outgoingID">outgoingID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_http_request_possible">on_http_request_possible()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive">onreceive()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_persistent_fallback">on_persistent_fallback()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive">onreceive()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message">parse_http_message()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin">plugin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_RECEIVED">PRIVACY_LISTS_RECEIVED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#PENDING_READ">PENDING_READ</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugout">plugout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#process">process()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#PENDING_WRITE">PENDING_WRITE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#plugout">plugout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#process">process()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PL_ACT_ALLOW">PL_ACT_ALLOW</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout">plugout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#process">process()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.SelectIdleQueue-class.html">SelectIdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PL_ACT_DENY">PL_ACT_DENY</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.plugin.PlugIn-class.html">PlugIn</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.AckChecker-class.html#process_incoming_ack">process_incoming_ack()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.AckChecker-class.html">AckChecker</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PL_TYPE_GROUP">PL_TYPE_GROUP</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout">plugout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#PROCESS_TIMEOUT">PROCESS_TIMEOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PL_TYPE_JID">PL_TYPE_JID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.PolicyViolation-class.html">PolicyViolation</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT">PROCESS_TIMEOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PL_TYPE_SUBC">PL_TYPE_SUBC</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#pollend">pollend()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking">ProcessNonBlocking()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">BOSHDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle">plug_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleObject-class.html#pollend">pollend()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking">ProcessNonBlocking()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#plug_socket">plug_socket()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend">pollend()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.Profile-class.html">Profile</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin-module.html">plugin</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#pollin">pollin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.NamePrep-class.html#prohibiteds">prohibiteds</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.NamePrep-class.html">NamePrep</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin.PlugIn-class.html">PlugIn</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.plugin-module.html">nbxmpp.plugin</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleObject-class.html#pollin">pollin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html">protocol</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugin">plugin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin">pollin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html">Protocol</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin">plugin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">NonBlockingNonSASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleObject-class.html#pollout">pollout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#PROXY_CONNECTING">PROXY_CONNECTING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#plugin">plugin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout">pollout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors-module.html">proxy_connectors</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn">PlugIn()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">BOSHDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.NamePrep-class.html#prepare">prepare()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.NamePrep-class.html">NamePrep</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors-module.html">nbxmpp.proxy_connectors</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn">PlugIn()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.Dispatcher-class.html">Dispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.Profile-class.html#prepare">prepare()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.Profile-class.html">Profile</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb-module.html#PYOPENSSL">PYOPENSSL</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin">plugin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html">Presence</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html">PyOpenSSLWrapper</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.plugin.PlugIn-class.html">PlugIn</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#PresenceHandler">PresenceHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb-module.html#PYSTDLIB">PYSTDLIB</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin">plugin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PRIVACY_LIST_RECEIVED">PRIVACY_LIST_RECEIVED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin">plugin()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_ACTIVE_DEFAULT">PRIVACY_LISTS_ACTIVE_DEFAULT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="R">R</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#raise_event">raise_event()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#RegisterDisconnectHandler">RegisterDisconnectHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout">renew_send_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#read_timeout">read_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterEventHandler">RegisterEventHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2">renew_send_timeout2()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleObject-class.html#read_timeout">read_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler">RegisterHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character">replace_non_character()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout">read_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce">RegisterHandlerOnce()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Request">Request()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout">read_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace">RegisterNamespace()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#request_ack">request_ack()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2">read_timeout2()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler">RegisterNamespaceHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.KeyStack-class.html#reset">reset()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.KeyStack-class.html">KeyStack</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#recv">recv()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html">PyOpenSSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol">RegisterProtocol()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.ResourceConstraint-class.html">ResourceConstraint</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.SSLWrapper-class.html#recv">recv()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.RemoteConnectionFailed-class.html">RemoteConnectionFailed</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#resourceprep">resourceprep</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#recv">recv()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html">StdlibSSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm">remove_alarm()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers">restoreHandlers()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#RECV_BUFSIZE">RECV_BUFSIZE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#remove_bosh_wait_timeout">remove_bosh_wait_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.RestrictedXML-class.html">RestrictedXML</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#register">register()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout">remove_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#resume_request">resume_request()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#REGISTER_DATA_RECEIVED">REGISTER_DATA_RECEIVED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout">remove_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#returnStanzaHandler">returnStanzaHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterCycleHandler">RegisterCycleHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout">remove_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb-module.html">roster_nb</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterDefaultHandler">RegisterDefaultHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#renew_bosh_wait_timeout">renew_bosh_wait_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#RosterIqHandler">RosterIqHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="S">S</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html">SASL</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#setError">setError()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_BAD_NAMESPACE_PREFIX">STREAM_BAD_NAMESPACE_PREFIX</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#SASL_ABORTED">SASL_ABORTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#setField">setField()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_CONFLICT">STREAM_CONFLICT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#SASL_ABORTED">SASL_ABORTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#setFrom">setFrom()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_CONFLICT">STREAM_CONFLICT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#sasl_error_conditions">sasl_error_conditions</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#setID">setID()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_CONNECTION_TIMEOUT">STREAM_CONNECTION_TIMEOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#SASL_FAILURE">SASL_FAILURE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#setInstructions">setInstructions()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_CONNECTION_TIMEOUT">STREAM_CONNECTION_TIMEOUT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#SASL_FAILURE_IN_PROGRESS">SASL_FAILURE_IN_PROGRESS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setItem">setItem()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#stream_exceptions">stream_exceptions</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#SASL_IN_PROCESS">SASL_IN_PROCESS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setItemMulti">setItemMulti()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#stream_footer_received">stream_footer_received()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#SASL_INCORRECT_ENCODING">SASL_INCORRECT_ENCODING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setName">setName()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#stream_header_received">stream_header_received()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#SASL_INCORRECT_ENCODING">SASL_INCORRECT_ENCODING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_HOST_GONE">STREAM_HOST_GONE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#SASL_INVALID_AUTHZID">SASL_INVALID_AUTHZID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#setNode">setNode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_HOST_GONE">STREAM_HOST_GONE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#SASL_INVALID_AUTHZID">SASL_INVALID_AUTHZID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#setOptions">setOptions()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_HOST_UNKNOWN">STREAM_HOST_UNKNOWN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#SASL_INVALID_MECHANISM">SASL_INVALID_MECHANISM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_HOST_UNKNOWN">STREAM_HOST_UNKNOWN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#SASL_INVALID_MECHANISM">SASL_INVALID_MECHANISM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_IMPROPER_ADDRESSING">STREAM_IMPROPER_ADDRESSING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#SASL_MECHANISM_TOO_WEAK">SASL_MECHANISM_TOO_WEAK</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#setPriority">setPriority()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_IMPROPER_ADDRESSING">STREAM_IMPROPER_ADDRESSING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#SASL_MECHANISM_TOO_WEAK">SASL_MECHANISM_TOO_WEAK</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#setPrivacyList">setPrivacyList()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_INTERNAL_SERVER_ERROR">STREAM_INTERNAL_SERVER_ERROR</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#SASL_NOT_AUTHORIZED">SASL_NOT_AUTHORIZED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#setQuery">setQuery()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_INTERNAL_SERVER_ERROR">STREAM_INTERNAL_SERVER_ERROR</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#SASL_NOT_AUTHORIZED">SASL_NOT_AUTHORIZED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#setQuerynode">setQuerynode()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_INVALID_FROM">STREAM_INVALID_FROM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#SASL_SUCCESS">SASL_SUCCESS</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#setQueryNS">setQueryNS()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_INVALID_FROM">STREAM_INVALID_FROM</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#SASL_TEMPORARY_AUTH_FAILURE">SASL_TEMPORARY_AUTH_FAILURE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#setQueryPayload">setQueryPayload()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_INVALID_ID">STREAM_INVALID_ID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#SASL_TEMPORARY_AUTH_FAILURE">SASL_TEMPORARY_AUTH_FAILURE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setRaw">setRaw()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_INVALID_ID">STREAM_INVALID_ID</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#SASL_UNSUPPORTED">SASL_UNSUPPORTED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#setRequired">setRequired()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_INVALID_NAMESPACE">STREAM_INVALID_NAMESPACE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#SASLHandler">SASLHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#setResource">setResource()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_INVALID_NAMESPACE">STREAM_INVALID_NAMESPACE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#scram_parse">scram_parse()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#setShow">setShow()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_INVALID_XML">STREAM_INVALID_XML</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.SeeOtherHost-class.html">SeeOtherHost</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#setStatus">setStatus()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_INVALID_XML">STREAM_INVALID_XML</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html">SelectIdleQueue</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#setSubject">setSubject()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_NOT_AUTHORIZED">STREAM_NOT_AUTHORIZED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#send">send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_NOT_AUTHORIZED">STREAM_NOT_AUTHORIZED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send">send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_POLICY_VIOLATION">STREAM_POLICY_VIOLATION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send">send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html">PyOpenSSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_POLICY_VIOLATION">STREAM_POLICY_VIOLATION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.SSLWrapper-class.html#send">send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#setThread">setThread()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_REMOTE_CONNECTION_FAILED">STREAM_REMOTE_CONNECTION_FAILED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send">send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html">StdlibSSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#setTimestamp">setTimestamp()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_REMOTE_CONNECTION_FAILED">STREAM_REMOTE_CONNECTION_FAILED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send">send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#setTitle">setTitle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_RESOURCE_CONSTRAINT">STREAM_RESOURCE_CONSTRAINT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#send">send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#setTo">setTo()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_RESOURCE_CONSTRAINT">STREAM_RESOURCE_CONSTRAINT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#send_ack">send_ack()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#setType">setType()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_RESTRICTED_XML">STREAM_RESTRICTED_XML</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#send_BOSH">send_BOSH()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#setType">setType()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_RESTRICTED_XML">STREAM_RESTRICTED_XML</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#send_init">send_init()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#setType">setType()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_SEE_OTHER_HOST">STREAM_SEE_OTHER_HOST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse">SendAndCallForResponse()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#setValue">setValue()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_SEE_OTHER_HOST">STREAM_SEE_OTHER_HOST</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse">SendAndWaitForResponse()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#setValues">setValues()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_SYSTEM_SHUTDOWN">STREAM_SYSTEM_SHUTDOWN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#sendPresence">sendPresence()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#setVar">setVar()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_SYSTEM_SHUTDOWN">STREAM_SYSTEM_SHUTDOWN</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm">set_alarm()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#setXHTML">setXHTML()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_UNDEFINED_CONDITION">STREAM_UNDEFINED_CONDITION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#set_idlequeue">set_idlequeue()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html">simplexml</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_UNDEFINED_CONDITION">STREAM_UNDEFINED_CONDITION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#set_owner">set_owner()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks-module.html">smacks</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_UNSUPPORTED_ENCODING">STREAM_UNSUPPORTED_ENCODING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#set_password">set_password()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html">Smacks</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks-module.html">nbxmpp.smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_ENCODING">STREAM_UNSUPPORTED_ENCODING</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout">set_read_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html">SOCKS5Connector</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors-module.html">nbxmpp.proxy_connectors</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_UNSUPPORTED_STANZA_TYPE">STREAM_UNSUPPORTED_STANZA_TYPE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout">set_send_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#ssl_h_bits">ssl_h_bits</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_STANZA_TYPE">STREAM_UNSUPPORTED_STANZA_TYPE</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2">set_send_timeout2()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_UNSUPPORTED_VERSION">STREAM_UNSUPPORTED_VERSION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#set_stanza_build_cb">set_stanza_build_cb()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html">NonBlockingHTTPBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#start">start()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_VERSION">STREAM_UNSUPPORTED_VERSION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state">set_state()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#start_connecting">start_connecting()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html">HTTPCONNECTConnector</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_XML_NOT_WELL_FORMED">STREAM_XML_NOT_WELL_FORMED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout">set_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting">start_connecting()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_XML_NOT_WELL_FORMED">STREAM_XML_NOT_WELL_FORMED</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout">set_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#start_connecting">start_connecting()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html">SOCKS5Connector</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.StreamError-class.html">StreamError</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout">set_timeout()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#start_disconnect">start_disconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamInit">StreamInit()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">BOSHDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2">set_timeout2()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect">start_disconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#StreamInit">StreamInit()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#setActivePrivacyList">setActivePrivacyList()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect">start_disconnect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamTerminate">StreamTerminate()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">BOSHDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#starttag">starttag()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html">stringprepare</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#setBody">setBody()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#STATES">STATES</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Subscribe">Subscribe()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#setData">setData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html">StdlibSSLWrapper</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Hashes-class.html#supported">supported</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Hashes-class.html">Hashes</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#setDefaultPrivacyList">setDefaultPrivacyList()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_BAD_FORMAT">STREAM_BAD_FORMAT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.SystemShutdown-class.html">SystemShutdown</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#setDesc">setDesc()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#STREAM_BAD_FORMAT">STREAM_BAD_FORMAT</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#setDomain">setDomain()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#STREAM_BAD_NAMESPACE_PREFIX">STREAM_BAD_NAMESPACE_PREFIX</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="T">T</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.T-class.html">T</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb-module.html">tls_nb</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init">tls_init()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html">transports_nb</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Unauthorize">Unauthorize()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#UnregisterDisconnectHandler">UnregisterDisconnectHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.UnsupportedVersion-class.html">UnsupportedVersion</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.UndefinedCondition-class.html">UndefinedCondition</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler">UnregisterHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#urisplit">urisplit()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle">unplug_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Unsubscribe">Unsubscribe()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb-module.html#USE_PYOPENSSL">USE_PYOPENSSL</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#unregister">unregister()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.UnsupportedEncoding-class.html">UnsupportedEncoding</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html#ustr">ustr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterCycleHandler">UnregisterCycleHandler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.UnsupportedStanzaType-class.html">UnsupportedStanzaType</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="W">W</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#wait_child">wait_child()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="X">X</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html#XML2Node">XML2Node()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.XMLNotWellFormed-class.html">XMLNotWellFormed</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb-module.html#XML_DECLARATION">XML_DECLARATION</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#xmpp_stanza_error_conditions">xmpp_stanza_error_conditions</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html#XMLescape">XMLescape()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#xmpp_stream_error_conditions">xmpp_stream_error_conditions</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_init_idle">_init_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.SelectIdleQueue-class.html">SelectIdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.T-class.html#__delattr__">__delattr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.T-class.html">T</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_load_cert_file">_load_cert_file()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#_muc_getItemAttr">_muc_getItemAttr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Error-class.html#__dupstr__">__dupstr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Error-class.html">Error</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#__ne__">__ne__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#_muc_getSubTagDataAttr">_muc_getSubTagDataAttr()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#__eq__">__eq__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp-module.html">nbxmpp</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#_neg_response">_neg_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NT-class.html#__getattr__">__getattr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NT-class.html">NT</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_auth">_on_auth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">NonBlockingNonSASL</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_auth_bind">_on_auth_bind()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.T-class.html#__getattr__">__getattr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.T-class.html">T</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.c14n-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.c14n-module.html">nbxmpp.c14n</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#_on_bound">_on_bound()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#__getitem__">__getitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb-module.html">nbxmpp.client_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#_on_connect">_on_connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#__getitem__">__getitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_connect">_on_connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect">_on_connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#__hash__">__hash__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect">_on_connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.plugin-module.html">nbxmpp.plugin</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure">_on_connect_failure()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">NonBlockingNonSASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#_on_default_response">_on_default_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors-module.html">nbxmpp.proxy_connectors</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_doc_attrs">_on_doc_attrs()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.AckChecker-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.AckChecker-class.html">AckChecker</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb-module.html">nbxmpp.roster_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_greeting_sent">_on_greeting_sent()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html">SOCKS5Connector</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.KeyStack-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.KeyStack-class.html">KeyStack</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#_on_headers_sent">_on_headers_sent()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html">HTTPCONNECTConnector</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks-module.html">nbxmpp.smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_old_auth">_on_old_auth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_password">_on_password()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">NonBlockingNonSASL</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_proxy_auth">_on_proxy_auth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html">SOCKS5Connector</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb-module.html#__package__">__package__</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#_on_receive">_on_receive()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleObject-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NT-class.html#__setattr__">__setattr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NT-class.html">NT</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_receive">_on_receive()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.T-class.html#__setattr__">__setattr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.T-class.html">T</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_req_sent">_on_req_sent()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html">SOCKS5Connector</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.plugin.PlugIn-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.plugin.PlugIn-class.html">PlugIn</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_on_roster_set">_on_roster_set()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Acks-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Acks-class.html">Acks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_sasl_auth">_on_sasl_auth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.BOSHBody-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.BOSHBody-class.html">BOSHBody</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#_on_session">_on_session()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataField-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataField-class.html">DataField</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_start_sasl">_on_start_sasl()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.DataForm-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.DataForm-class.html">DataForm</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_stream_start">_on_stream_start()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Error-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Error-class.html">Error</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__">__str__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html">Error</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_username">_on_username()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">NonBlockingNonSASL</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.ErrorNode-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.ErrorNode-class.html">ErrorNode</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_add_idle">_add_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle">_plug_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Hashes-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Hashes-class.html">Hashes</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_add_idle">_add_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_process_events">_process_events()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Iq-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Iq-class.html">Iq</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_add_idle">_add_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.SelectIdleQueue-class.html">SelectIdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_process_events">_process_events()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.JID-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.JID-class.html">JID</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_check_stream_start">_check_stream_start()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.features_nb-module.html#_ReceivedRegInfo">_ReceivedRegInfo()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Message-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Message-class.html">Message</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events">_check_time_events()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_remove_idle">_remove_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Presence-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Presence-class.html">Presence</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_args">_compose_command_args()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_remove_idle">_remove_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol.Protocol-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol.Protocol-class.html">Protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_line">_compose_command_line()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_remove_idle">_remove_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.SelectIdleQueue-class.html">SelectIdleQueue</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy">_connect_to_proxy()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_resolve_hostname">_resolve_hostname()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.auth_nb.SASL-class.html#_convert_to_iso88591">_convert_to_iso88591()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html">SASL</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_return_result">_return_result()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.Node-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.Node-class.html">Node</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#_dec_depth">_dec_depth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_ssl_verify_callback">_ssl_verify_callback()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive">_do_receive()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_start_nt">_start_nt()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.T-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.T-class.html">T</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#_do_send">_do_send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html">NonBlockingHTTPBOSH</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_start_posix">_start_posix()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.smacks.Smacks-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.smacks.Smacks-class.html">Smacks</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send">_do_send()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL">_startSSL()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.EmptyMappingTable-class.html">EmptyMappingTable</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpPKey">_dumpPKey()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_pyOpenSSL">_startSSL_pyOpenSSL()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.LookupTable-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.LookupTable-class.html">LookupTable</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509">_dumpX509()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_stdlib">_startSSL_stdlib()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.LookupTableFromFunction-class.html">LookupTableFromFunction</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509Name">_dumpX509Name()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started">_tcp_connecting_started()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.MappingTableFromFunction-class.html">MappingTableFromFunction</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.protocol-module.html#_errorcodes">_errorcodes</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_tls_negotiation_handler">_tls_negotiation_handler()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.stringprepare.Profile-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.stringprepare.Profile-class.html">Profile</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_getItemData">_getItemData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_try_next_ip">_try_next_ip()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_getResourceData">_getResourceData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_WaitForData">_WaitForData()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html">PyOpenSSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.simplexml.NodeBuilder-class.html#_inc_depth">_inc_depth()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect">_xmpp_connect()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html">Error</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_init">_init()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect_machine">_xmpp_connect_machine()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.SSLWrapper-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_init_idle">_init_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html">StdlibSSLWrapper</a>)</span></td>
+<td width="33%" class="link-index"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_init_idle">_init_idle()</a><br />
+<span class="index-where">(in&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+</table>
+</td></tr>
+</table>
+<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/index.html b/doc/apidocs/index.html
new file mode 100644
index 0000000..d1c9ef1
--- /dev/null
+++ b/doc/apidocs/index.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title> python-nbxmpp </title>
+</head>
+<frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="toc.html" name="moduleListFrame"
+ id="moduleListFrame" />
+ <frame src="toc-everything.html" name="moduleFrame"
+ id="moduleFrame" />
+ </frameset>
+ <frame src="nbxmpp-module.html" name="mainFrame" id="mainFrame" />
+</frameset>
+</html>
diff --git a/doc/apidocs/module-tree.html b/doc/apidocs/module-tree.html
new file mode 100644
index 0000000..46a8e91
--- /dev/null
+++ b/doc/apidocs/module-tree.html
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Module Hierarchy</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">&nbsp;</td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="module-tree.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Module Hierarchy</h1>
+<ul class="nomargin-top">
+ <li> <strong class="uidlink"><a href="nbxmpp-module.html">nbxmpp</a></strong>: <em class="summary">This is a fork of the xmpppy jabber python library. Most of the code is
+inherited but has been extended by implementation of non-blocking transports
+and new features like BOSH.</em>
+ <ul>
+ <li> <strong class="uidlink"><a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a></strong>: <em class="summary">Provides plugs for SASL and NON-SASL authentication mechanisms.
+Can be used both for client and transport authentication</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.c14n-module.html">nbxmpp.c14n</a></strong>: <em class="summary">XML canonicalisation methods (for XEP-0116)</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.client_nb-module.html">nbxmpp.client_nb</a></strong>: <em class="summary">Client class establishs connection to XMPP Server and handles authentication</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a></strong>: <em class="summary">Main xmpp decision making logic. Provides library with methods to assign
+different handlers to different XMPP stanzas and namespaces</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a></strong>: <em class="summary">Different stuff that wasn't worth separating it into modules
+(Registration, Privacy Lists, ...)</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a></strong>: <em class="summary">Idlequeues are Gajim's network heartbeat. Transports can be plugged as idle
+objects and be informed about possible IO</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.plugin-module.html">nbxmpp.plugin</a></strong>: <em class="summary">Provides PlugIn class functionality to develop extentions for xmpppy</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a></strong>: <em class="summary">Protocol module contains tools that are needed for processing of xmpp-related
+data structures, including jabber-objects like JID or different stanzas and
+sub- stanzas) handling routines</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.proxy_connectors-module.html">nbxmpp.proxy_connectors</a></strong>: <em class="summary">Module containing classes for proxy connecting. So far its HTTP CONNECT and
+SOCKS5 proxy</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.roster_nb-module.html">nbxmpp.roster_nb</a></strong>: <em class="summary">Simple roster implementation. Can be used though for different tasks like
+mass-renaming of contacts.</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a></strong>: <em class="summary">Simplexml module provides xmpppy library with all needed tools to handle XML
+nodes and XML streams. I'm personally using it in many other separate
+projects. It is designed to be as standalone as possible</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.smacks-module.html">nbxmpp.smacks</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a></strong>: <em class="summary">Transports are objects responsible for connecting to XMPP server and putting
+data to wrapped sockets in in desired form (SSL, TLS, TCP, for HTTP proxy,
+for SOCKS5 proxy...)</em> </li>
+ </ul>
+ </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp-module.html b/doc/apidocs/nbxmpp-module.html
new file mode 100644
index 0000000..832a908
--- /dev/null
+++ b/doc/apidocs/nbxmpp-module.html
@@ -0,0 +1,1829 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ Package&nbsp;nbxmpp
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package nbxmpp</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp-pysrc.html">source&nbsp;code</a></span></p>
+<p>This is a fork of the xmpppy jabber python library. Most of the code is
+inherited but has been extended by implementation of non-blocking transports
+and new features like BOSH.</p>
+<p>Most of the xmpp classes are ancestors of PlugIn class to share a single set of methods in order to compile a featured and extensible XMPP client.</p>
+<p>Thanks and credits to the xmpppy developers. See: <a class="rst-reference external" href="http://xmpppy.sourceforge.net/" target="_top">http://xmpppy.sourceforge.net/</a></p>
+
+<!-- ==================== SUBMODULES ==================== -->
+<a name="section-Submodules"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Submodules</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Submodules"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr><td class="summary">
+ <ul class="nomargin">
+ <li> <strong class="uidlink"><a href="nbxmpp.auth_nb-module.html">nbxmpp.auth_nb</a></strong>: <em class="summary">Provides plugs for SASL and NON-SASL authentication mechanisms.
+Can be used both for client and transport authentication</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.bosh-module.html">nbxmpp.bosh</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.c14n-module.html">nbxmpp.c14n</a></strong>: <em class="summary">XML canonicalisation methods (for XEP-0116)</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.client_nb-module.html">nbxmpp.client_nb</a></strong>: <em class="summary">Client class establishs connection to XMPP Server and handles authentication</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.dispatcher_nb-module.html">nbxmpp.dispatcher_nb</a></strong>: <em class="summary">Main xmpp decision making logic. Provides library with methods to assign
+different handlers to different XMPP stanzas and namespaces</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.features_nb-module.html">nbxmpp.features_nb</a></strong>: <em class="summary">Different stuff that wasn't worth separating it into modules
+(Registration, Privacy Lists, ...)</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.idlequeue-module.html">nbxmpp.idlequeue</a></strong>: <em class="summary">Idlequeues are Gajim's network heartbeat. Transports can be plugged as idle
+objects and be informed about possible IO</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.plugin-module.html">nbxmpp.plugin</a></strong>: <em class="summary">Provides PlugIn class functionality to develop extentions for xmpppy</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.protocol-module.html">nbxmpp.protocol</a></strong>: <em class="summary">Protocol module contains tools that are needed for processing of xmpp-related
+data structures, including jabber-objects like JID or different stanzas and
+sub- stanzas) handling routines</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.proxy_connectors-module.html">nbxmpp.proxy_connectors</a></strong>: <em class="summary">Module containing classes for proxy connecting. So far its HTTP CONNECT and
+SOCKS5 proxy</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.roster_nb-module.html">nbxmpp.roster_nb</a></strong>: <em class="summary">Simple roster implementation. Can be used though for different tasks like
+mass-renaming of contacts.</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.simplexml-module.html">nbxmpp.simplexml</a></strong>: <em class="summary">Simplexml module provides xmpppy library with all needed tools to handle XML
+nodes and XML streams. I'm personally using it in many other separate
+projects. It is designed to be as standalone as possible</em> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.smacks-module.html">nbxmpp.smacks</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.stringprepare-module.html">nbxmpp.stringprepare</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.tls_nb-module.html">nbxmpp.tls_nb</a></strong> </li>
+ <li> <strong class="uidlink"><a href="nbxmpp.transports_nb-module.html">nbxmpp.transports_nb</a></strong>: <em class="summary">Transports are objects responsible for connecting to XMPP server and putting
+data to wrapped sockets in in desired form (SSL, TLS, TCP, for HTTP proxy,
+for SOCKS5 proxy...)</em> </li>
+ </ul></td></tr>
+</table>
+
+<br />
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERRORS" class="summary-name">ERRORS</a> = <code title="{'urn:ietf:params:xml:ns:xmpp-sasl aborted': ['',
+ '',
+ 'The receiving entity ac\
+knowledges an &lt;abort/&gt; element sent by the initiating entity; sent in \
+reply to the &lt;abort/&gt; element.'],
+ 'urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding': ['',
+ '',
+ 'The data pro\
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_BAD_REQUEST" class="summary-name">ERR_BAD_REQUEST</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas bad-request'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas bad-req</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_CONFLICT" class="summary-name">ERR_CONFLICT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas conflict'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas conflict</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_FEATURE_NOT_IMPLEMENTED" class="summary-name">ERR_FEATURE_NOT_IMPLEMENTED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas feature-not-implemented'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sta</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_FORBIDDEN" class="summary-name">ERR_FORBIDDEN</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas forbidden'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas forbidden</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_GONE" class="summary-name">ERR_GONE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas gone'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas gone</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_INTERNAL_SERVER_ERROR" class="summary-name">ERR_INTERNAL_SERVER_ERROR</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas internal-server-error'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_ITEM_NOT_FOUND" class="summary-name">ERR_ITEM_NOT_FOUND</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas item-not-found'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas item</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_JID_MALFORMED" class="summary-name">ERR_JID_MALFORMED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas jid-malformed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas jid-m</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_NOT_ACCEPTABLE" class="summary-name">ERR_NOT_ACCEPTABLE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas not-acceptable'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_NOT_ALLOWED" class="summary-name">ERR_NOT_ALLOWED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas not-allowed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-all</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_NOT_AUTHORIZED" class="summary-name">ERR_NOT_AUTHORIZED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas not-authorized'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_PAYMENT_REQUIRED" class="summary-name">ERR_PAYMENT_REQUIRED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas payment-required'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas pa</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_RECIPIENT_UNAVAILABLE" class="summary-name">ERR_RECIPIENT_UNAVAILABLE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas recipient-unavailable'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_REDIRECT" class="summary-name">ERR_REDIRECT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas redirect'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas redirect</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_REGISTRATION_REQUIRED" class="summary-name">ERR_REGISTRATION_REQUIRED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas registration-required'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_REMOTE_SERVER_NOT_FOUND" class="summary-name">ERR_REMOTE_SERVER_NOT_FOUND</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas remote-server-not-found'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sta</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_REMOTE_SERVER_TIMEOUT" class="summary-name">ERR_REMOTE_SERVER_TIMEOUT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas remote-server-timeout'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_RESOURCE_CONSTRAINT" class="summary-name">ERR_RESOURCE_CONSTRAINT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas resource-constraint'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_SERVICE_UNAVAILABLE" class="summary-name">ERR_SERVICE_UNAVAILABLE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas service-unavailable'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_SUBSCRIPTION_REQUIRED" class="summary-name">ERR_SUBSCRIPTION_REQUIRED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas subscription-required'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_UNDEFINED_CONDITION" class="summary-name">ERR_UNDEFINED_CONDITION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas undefined-condition'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#ERR_UNEXPECTED_REQUEST" class="summary-name">ERR_UNEXPECTED_REQUEST</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas unexpected-request'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas </code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#SASL_ABORTED" class="summary-name">SASL_ABORTED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl aborted'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#SASL_INCORRECT_ENCODING" class="summary-name">SASL_INCORRECT_ENCODING</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl in</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#SASL_INVALID_AUTHZID" class="summary-name">SASL_INVALID_AUTHZID</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl invalid-authzid'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl inval</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#SASL_INVALID_MECHANISM" class="summary-name">SASL_INVALID_MECHANISM</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl invalid-mechanism'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl inv</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#SASL_MECHANISM_TOO_WEAK" class="summary-name">SASL_MECHANISM_TOO_WEAK</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl mechanism-too-weak'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl me</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#SASL_NOT_AUTHORIZED" class="summary-name">SASL_NOT_AUTHORIZED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl not-authorized'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl not-au</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#SASL_TEMPORARY_AUTH_FAILURE" class="summary-name">SASL_TEMPORARY_AUTH_FAILURE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl temporary-auth-failure'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_BAD_FORMAT" class="summary-name">STREAM_BAD_FORMAT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams bad-format'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams bad-f</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_BAD_NAMESPACE_PREFIX" class="summary-name">STREAM_BAD_NAMESPACE_PREFIX</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams bad-namespace-prefix'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-str</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_CONFLICT" class="summary-name">STREAM_CONFLICT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams conflict'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams conflict</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_CONNECTION_TIMEOUT" class="summary-name">STREAM_CONNECTION_TIMEOUT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams connection-timeout'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-strea</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_HOST_GONE" class="summary-name">STREAM_HOST_GONE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams host-gone'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams host-g</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_HOST_UNKNOWN" class="summary-name">STREAM_HOST_UNKNOWN</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams host-unknown'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams hos</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_IMPROPER_ADDRESSING" class="summary-name">STREAM_IMPROPER_ADDRESSING</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams improper-addressing'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_INTERNAL_SERVER_ERROR" class="summary-name">STREAM_INTERNAL_SERVER_ERROR</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams internal-server-error'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-st</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_INVALID_FROM" class="summary-name">STREAM_INVALID_FROM</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-from'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams inv</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_INVALID_ID" class="summary-name">STREAM_INVALID_ID</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-id'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams inval</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_INVALID_NAMESPACE" class="summary-name">STREAM_INVALID_NAMESPACE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-namespace'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stream</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_INVALID_XML" class="summary-name">STREAM_INVALID_XML</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-xml'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams inva</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_NOT_AUTHORIZED" class="summary-name">STREAM_NOT_AUTHORIZED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams not-authorized'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams n</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_POLICY_VIOLATION" class="summary-name">STREAM_POLICY_VIOLATION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams policy-violation'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_REMOTE_CONNECTION_FAILED" class="summary-name">STREAM_REMOTE_CONNECTION_FAILED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams remote-connection-failed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_RESOURCE_CONSTRAINT" class="summary-name">STREAM_RESOURCE_CONSTRAINT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams resource-constraint'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_RESTRICTED_XML" class="summary-name">STREAM_RESTRICTED_XML</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams restricted-xml'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams r</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_SEE_OTHER_HOST" class="summary-name">STREAM_SEE_OTHER_HOST</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams see-other-host'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams s</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_SYSTEM_SHUTDOWN" class="summary-name">STREAM_SYSTEM_SHUTDOWN</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams system-shutdown'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams </code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_UNDEFINED_CONDITION" class="summary-name">STREAM_UNDEFINED_CONDITION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams undefined-condition'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_UNSUPPORTED_ENCODING" class="summary-name">STREAM_UNSUPPORTED_ENCODING</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams unsupported-encoding'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-str</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_UNSUPPORTED_STANZA_TYPE" class="summary-name">STREAM_UNSUPPORTED_STANZA_TYPE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams unsupported-stanza-type'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_UNSUPPORTED_VERSION" class="summary-name">STREAM_UNSUPPORTED_VERSION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams unsupported-version'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#STREAM_XML_NOT_WELL_FORMED" class="summary-name">STREAM_XML_NOT_WELL_FORMED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams xml-not-well-formed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp-module.html#name" class="summary-name">name</a> = <code title="'SASL_TEMPORARY_AUTH_FAILURE'"><code class="variable-quote">'</code><code class="variable-string">SASL_TEMPORARY_AUTH_FAILURE</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="nbxmpp.protocol.NS_MUC_ADMIN">NS_MUC_ADMIN</span>,
+ <span title="nbxmpp.protocol.NS_FILE">NS_FILE</span>,
+ <a href="nbxmpp.protocol.Error-class.html" title="nbxmpp.protocol.Error">Error</a>,
+ <span title="nbxmpp.protocol.NS_PUBSUB_EVENT">NS_PUBSUB_EVENT</span>,
+ <span title="nbxmpp.protocol.NS_RECEIPTS">NS_RECEIPTS</span>,
+ <span title="nbxmpp.protocol.NS_PING">NS_PING</span>,
+ <a href="nbxmpp.protocol.Conflict-class.html" title="nbxmpp.protocol.Conflict">Conflict</a>,
+ <span title="nbxmpp.protocol.NS_PHYSLOC">NS_PHYSLOC</span>,
+ <span title="nbxmpp.protocol.NS_CHATTING">NS_CHATTING</span>,
+ <span title="nbxmpp.protocol.NS_COMPRESS">NS_COMPRESS</span>,
+ <span title="nbxmpp.protocol.NS_HASHES_SHA1">NS_HASHES_SHA1</span>,
+ <span title="nbxmpp.protocol.NS_AGENTS">NS_AGENTS</span>,
+ <span title="nbxmpp.protocol.NS_CAPTCHA">NS_CAPTCHA</span>,
+ <span title="nbxmpp.protocol.NS_MOOD">NS_MOOD</span>,
+ <a href="nbxmpp.protocol.UnsupportedVersion-class.html" title="nbxmpp.protocol.UnsupportedVersion">UnsupportedVersion</a>,
+ <span title="nbxmpp.protocol.NS_BROWSING">NS_BROWSING</span>,
+ <a href="nbxmpp.protocol.HostUnknown-class.html" title="nbxmpp.protocol.HostUnknown">HostUnknown</a>,
+ <span title="nbxmpp.protocol.NS_MUC_OWNER">NS_MUC_OWNER</span>,
+ <span title="nbxmpp.protocol.NS_ACTIVITY">NS_ACTIVITY</span>,
+ <span title="nbxmpp.protocol.NS_ARCHIVE_MANUAL">NS_ARCHIVE_MANUAL</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE_RTP_AUDIO">NS_JINGLE_RTP_AUDIO</span>,
+ <span title="nbxmpp.protocol.string">string</span>,
+ <span title="nbxmpp.protocol.NS_PRESENCE">NS_PRESENCE</span>,
+ <span title="nbxmpp.protocol.NS_CHATSTATES">NS_CHATSTATES</span>,
+ <span title="nbxmpp.protocol.NS_LAST">NS_LAST</span>,
+ <a href="nbxmpp.protocol-module.html#isErrorNode" title="nbxmpp.protocol.isErrorNode">isErrorNode</a>,
+ <a href="nbxmpp.protocol.Acks-class.html" title="nbxmpp.protocol.Acks">Acks</a>,
+ <span title="nbxmpp.protocol.NS_GROUPCHAT">NS_GROUPCHAT</span>,
+ <a href="nbxmpp.protocol.Protocol-class.html" title="nbxmpp.protocol.Protocol">Protocol</a>,
+ <span title="nbxmpp.protocol.NS_GATEWAY">NS_GATEWAY</span>,
+ <span title="nbxmpp.protocol.NS_DISCO_ITEMS">NS_DISCO_ITEMS</span>,
+ <span title="nbxmpp.protocol.NS_BOOKMARKS">NS_BOOKMARKS</span>,
+ <a href="nbxmpp.protocol.ConnectionTimeout-class.html" title="nbxmpp.protocol.ConnectionTimeout">ConnectionTimeout</a>,
+ <span title="nbxmpp.protocol.NS_BIND">NS_BIND</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE_ERRORS">NS_JINGLE_ERRORS</span>,
+ <span title="nbxmpp.protocol.NS_XMPP_STREAMS">NS_XMPP_STREAMS</span>,
+ <span title="nbxmpp.protocol.NS_IQ">NS_IQ</span>,
+ <span title="nbxmpp.protocol.NS_CLIENT">NS_CLIENT</span>,
+ <span title="nbxmpp.protocol.NS_FORWARD">NS_FORWARD</span>,
+ <span title="nbxmpp.protocol.NS_EVENT">NS_EVENT</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE_IBB">NS_JINGLE_IBB</span>,
+ <span title="nbxmpp.protocol.NS_DATA_LAYOUT">NS_DATA_LAYOUT</span>,
+ <span title="nbxmpp.protocol.NS_TUNE">NS_TUNE</span>,
+ <a href="nbxmpp.protocol.InvalidID-class.html" title="nbxmpp.protocol.InvalidID">InvalidID</a>,
+ <span title="nbxmpp.protocol.stream_exceptions">stream_exceptions</span>,
+ <span title="nbxmpp.protocol.xmpp_stanza_error_conditions">xmpp_stanza_error_conditions</span>,
+ <span title="nbxmpp.protocol.NS_HASHES_SHA256">NS_HASHES_SHA256</span>,
+ <span title="nbxmpp.protocol.NS_CARBONS">NS_CARBONS</span>,
+ <span title="nbxmpp.protocol.NS_ROSTER">NS_ROSTER</span>,
+ <span title="nbxmpp.protocol.NS_STANZAS">NS_STANZAS</span>,
+ <span title="nbxmpp.protocol.NS_HTTP_BIND">NS_HTTP_BIND</span>,
+ <a href="nbxmpp.protocol-module.html#isResultNode" title="nbxmpp.protocol.isResultNode">isResultNode</a>,
+ <span title="nbxmpp.protocol.NS_TIME_REVISED">NS_TIME_REVISED</span>,
+ <a href="nbxmpp.protocol.UnsupportedStanzaType-class.html" title="nbxmpp.protocol.UnsupportedStanzaType">UnsupportedStanzaType</a>,
+ <span title="nbxmpp.protocol.NS_MUC_UNIQUE">NS_MUC_UNIQUE</span>,
+ <span title="nbxmpp.protocol.NS_PUBKEY_PUBKEY">NS_PUBKEY_PUBKEY</span>,
+ <span title="nbxmpp.protocol.NS_AMP">NS_AMP</span>,
+ <span title="nbxmpp.protocol.NS_CONFERENCE">NS_CONFERENCE</span>,
+ <span title="nbxmpp.protocol.NS_DISCO">NS_DISCO</span>,
+ <span title="nbxmpp.protocol.NS_RSM">NS_RSM</span>,
+ <span title="nbxmpp.protocol.NS_STREAM">NS_STREAM</span>,
+ <span title="nbxmpp.protocol.NS_HASHES">NS_HASHES</span>,
+ <a href="nbxmpp.protocol.HostGone-class.html" title="nbxmpp.protocol.HostGone">HostGone</a>,
+ <span title="nbxmpp.protocol.NS_ESESSION">NS_ESESSION</span>,
+ <a href="nbxmpp.protocol.NotAuthorized-class.html" title="nbxmpp.protocol.NotAuthorized">NotAuthorized</a>,
+ <a href="nbxmpp.protocol.XMLNotWellFormed-class.html" title="nbxmpp.protocol.XMLNotWellFormed">XMLNotWellFormed</a>,
+ <span title="nbxmpp.protocol.NS_JINGLE_FILE_TRANSFER">NS_JINGLE_FILE_TRANSFER</span>,
+ <span title="nbxmpp.protocol.NS_LOCATION">NS_LOCATION</span>,
+ <span title="nbxmpp.protocol.NS_ARCHIVE_AUTO">NS_ARCHIVE_AUTO</span>,
+ <span title="nbxmpp.protocol.NS_DIALBACK">NS_DIALBACK</span>,
+ <span title="nbxmpp.protocol.NS_AUTH">NS_AUTH</span>,
+ <span title="nbxmpp.protocol.NS_MUC_CONFIG">NS_MUC_CONFIG</span>,
+ <span title="nbxmpp.protocol.NS_VCARD">NS_VCARD</span>,
+ <a href="nbxmpp.protocol.DataForm-class.html" title="nbxmpp.protocol.DataForm">DataForm</a>,
+ <span title="nbxmpp.protocol.NS_XHTML">NS_XHTML</span>,
+ <a href="nbxmpp.protocol.InvalidXML-class.html" title="nbxmpp.protocol.InvalidXML">InvalidXML</a>,
+ <span title="nbxmpp.protocol.NS_SI">NS_SI</span>,
+ <a href="nbxmpp.protocol.PolicyViolation-class.html" title="nbxmpp.protocol.PolicyViolation">PolicyViolation</a>,
+ <span title="nbxmpp.protocol.NS_SASL">NS_SASL</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE_RAW_UDP">NS_JINGLE_RAW_UDP</span>,
+ <span title="nbxmpp.protocol.NS_SESSION">NS_SESSION</span>,
+ <a href="nbxmpp.protocol.StreamError-class.html" title="nbxmpp.protocol.StreamError">StreamError</a>,
+ <span title="nbxmpp.protocol.NS_CAPS">NS_CAPS</span>,
+ <span title="nbxmpp.protocol.NS_PUBSUB_OWNER">NS_PUBSUB_OWNER</span>,
+ <span title="nbxmpp.protocol.NS_HASHES_SHA512">NS_HASHES_SHA512</span>,
+ <span title="nbxmpp.protocol.NS_AMP_ERRORS">NS_AMP_ERRORS</span>,
+ <span title="nbxmpp.protocol.NS_BROWSE">NS_BROWSE</span>,
+ <span title="nbxmpp.protocol.NS_ROSTERX">NS_ROSTERX</span>,
+ <span title="nbxmpp.protocol.NS_TLS">NS_TLS</span>,
+ <span title="nbxmpp.protocol.NS_ATTENTION">NS_ATTENTION</span>,
+ <span title="nbxmpp.protocol.NS_DATA">NS_DATA</span>,
+ <span title="nbxmpp.protocol.NS_SERVER">NS_SERVER</span>,
+ <a href="nbxmpp.protocol.ImproperAddressing-class.html" title="nbxmpp.protocol.ImproperAddressing">ImproperAddressing</a>,
+ <span title="nbxmpp.protocol.NS_JINGLE_ICE_UDP">NS_JINGLE_ICE_UDP</span>,
+ <span title="nbxmpp.protocol.NS_IBB">NS_IBB</span>,
+ <a href="nbxmpp.protocol.DataField-class.html" title="nbxmpp.protocol.DataField">DataField</a>,
+ <span title="nbxmpp.protocol.NS_TIME">NS_TIME</span>,
+ <span title="nbxmpp.protocol.NS_PROFILE">NS_PROFILE</span>,
+ <a href="nbxmpp.protocol.Message-class.html" title="nbxmpp.protocol.Message">Message</a>,
+ <span title="nbxmpp.protocol.NS_SECLABEL">NS_SECLABEL</span>,
+ <span title="nbxmpp.protocol.NS_XHTML_IM">NS_XHTML_IM</span>,
+ <span title="nbxmpp.protocol.NS_PRIVACY">NS_PRIVACY</span>,
+ <span title="nbxmpp.protocol.NS_GMAILNOTIFY">NS_GMAILNOTIFY</span>,
+ <a href="nbxmpp.protocol.BadNamespacePrefix-class.html" title="nbxmpp.protocol.BadNamespacePrefix">BadNamespacePrefix</a>,
+ <span title="nbxmpp.protocol.NS_CONDITIONS">NS_CONDITIONS</span>,
+ <a href="nbxmpp.protocol.UnsupportedEncoding-class.html" title="nbxmpp.protocol.UnsupportedEncoding">UnsupportedEncoding</a>,
+ <span title="nbxmpp.protocol.NS_FEATURE">NS_FEATURE</span>,
+ <a href="nbxmpp.protocol.SeeOtherHost-class.html" title="nbxmpp.protocol.SeeOtherHost">SeeOtherHost</a>,
+ <a href="nbxmpp.simplexml.Node-class.html" title="nbxmpp.protocol.Node">Node</a>,
+ <span title="nbxmpp.protocol.NS_JINGLE_RTP">NS_JINGLE_RTP</span>,
+ <a href="nbxmpp.protocol.SystemShutdown-class.html" title="nbxmpp.protocol.SystemShutdown">SystemShutdown</a>,
+ <span title="nbxmpp.protocol.NS_WAITINGLIST">NS_WAITINGLIST</span>,
+ <span title="nbxmpp.protocol.NS_ARCHIVE_MANAGE">NS_ARCHIVE_MANAGE</span>,
+ <span title="nbxmpp.protocol.NS_SSN">NS_SSN</span>,
+ <span title="nbxmpp.protocol.NS_DELAY2">NS_DELAY2</span>,
+ <a href="nbxmpp.protocol.InvalidNamespace-class.html" title="nbxmpp.protocol.InvalidNamespace">InvalidNamespace</a>,
+ <span title="nbxmpp.protocol.NS_COMPONENT_1">NS_COMPONENT_1</span>,
+ <a href="nbxmpp.protocol.Iq-class.html" title="nbxmpp.protocol.Iq">Iq</a>,
+ <span title="nbxmpp.protocol.NS_ARCHIVE_PREF">NS_ARCHIVE_PREF</span>,
+ <a href="nbxmpp.protocol.Hashes-class.html" title="nbxmpp.protocol.Hashes">Hashes</a>,
+ <span title="nbxmpp.protocol.NS_INVISIBLE">NS_INVISIBLE</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE_RTP_VIDEO">NS_JINGLE_RTP_VIDEO</span>,
+ <span title="nbxmpp.protocol.NS_PRIVATE">NS_PRIVATE</span>,
+ <span title="nbxmpp.protocol.NS_VERSION">NS_VERSION</span>,
+ <span title="nbxmpp.protocol.NS_GAMING">NS_GAMING</span>,
+ <span title="nbxmpp.protocol.NS_OFFLINE">NS_OFFLINE</span>,
+ <span title="nbxmpp.protocol.NS_MUC_USER">NS_MUC_USER</span>,
+ <span title="nbxmpp.protocol.NS_VCARD_UPDATE">NS_VCARD_UPDATE</span>,
+ <span title="nbxmpp.protocol.NS_ATOM">NS_ATOM</span>,
+ <a href="nbxmpp.protocol-module.html#ascii_upper" title="nbxmpp.protocol.ascii_upper">ascii_upper</a>,
+ <span title="nbxmpp.protocol.NS_STREAMS">NS_STREAMS</span>,
+ <span title="nbxmpp.protocol.hashlib">hashlib</span>,
+ <span title="nbxmpp.protocol.NS_GTALKSETTING">NS_GTALKSETTING</span>,
+ <a href="nbxmpp.protocol.InvalidFrom-class.html" title="nbxmpp.protocol.InvalidFrom">InvalidFrom</a>,
+ <span title="nbxmpp.protocol.NS_ENCRYPTED">NS_ENCRYPTED</span>,
+ <a href="nbxmpp.protocol.UndefinedCondition-class.html" title="nbxmpp.protocol.UndefinedCondition">UndefinedCondition</a>,
+ <span title="nbxmpp.protocol.NS_RPC">NS_RPC</span>,
+ <span title="nbxmpp.protocol.NS_STANZA_CRYPTO">NS_STANZA_CRYPTO</span>,
+ <span title="nbxmpp.protocol.NS_SIGNED">NS_SIGNED</span>,
+ <span title="nbxmpp.protocol.NS_NICK">NS_NICK</span>,
+ <span title="nbxmpp.protocol.NS_PUBSUB">NS_PUBSUB</span>,
+ <span title="nbxmpp.protocol.NS_MESSAGE">NS_MESSAGE</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE_XTLS">NS_JINGLE_XTLS</span>,
+ <span title="nbxmpp.protocol.NS_DATA_MEDIA">NS_DATA_MEDIA</span>,
+ <span title="nbxmpp.protocol.NS_REGISTER">NS_REGISTER</span>,
+ <a href="nbxmpp.protocol.JID-class.html" title="nbxmpp.protocol.JID">JID</a>,
+ <span title="nbxmpp.protocol.NS_BYTESTREAM">NS_BYTESTREAM</span>,
+ <span title="nbxmpp.protocol.NS_DELAY">NS_DELAY</span>,
+ <span title="nbxmpp.protocol.NS_VACATION">NS_VACATION</span>,
+ <span title="nbxmpp.protocol.NS_PUBSUB_PUBLISH_OPTIONS">NS_PUBSUB_PUBLISH_OPTIONS</span>,
+ <span title="nbxmpp.protocol.NS_GEOLOC">NS_GEOLOC</span>,
+ <span title="nbxmpp.protocol.NS_ARCHIVE">NS_ARCHIVE</span>,
+ <span title="nbxmpp.protocol.NS_ROSTERNOTES">NS_ROSTERNOTES</span>,
+ <span title="nbxmpp.protocol.NS_SI_PUB">NS_SI_PUB</span>,
+ <span title="nbxmpp.protocol.NS_DATA_VALIDATE">NS_DATA_VALIDATE</span>,
+ <span title="nbxmpp.protocol.NS_ESESSION_INIT">NS_ESESSION_INIT</span>,
+ <span title="nbxmpp.protocol.NS_PUBKEY_REVOKE">NS_PUBKEY_REVOKE</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE_BYTESTREAM">NS_JINGLE_BYTESTREAM</span>,
+ <a href="nbxmpp.simplexml.NodeBuilder-class.html" title="nbxmpp.protocol.NodeBuilder">NodeBuilder</a>,
+ <span title="nbxmpp.protocol.xmpp_stream_error_conditions">xmpp_stream_error_conditions</span>,
+ <span title="nbxmpp.protocol.NS_ROSTER_VER">NS_ROSTER_VER</span>,
+ <span title="nbxmpp.protocol.NS_VIEWING">NS_VIEWING</span>,
+ <span title="nbxmpp.protocol.NS_COMMANDS">NS_COMMANDS</span>,
+ <span title="nbxmpp.protocol.NS_AVATAR">NS_AVATAR</span>,
+ <a href="nbxmpp.protocol.NodeProcessed-class.html" title="nbxmpp.protocol.NodeProcessed">NodeProcessed</a>,
+ <a href="nbxmpp.protocol.Presence-class.html" title="nbxmpp.protocol.Presence">Presence</a>,
+ <a href="nbxmpp.protocol.ResourceConstraint-class.html" title="nbxmpp.protocol.ResourceConstraint">ResourceConstraint</a>,
+ <span title="nbxmpp.protocol.NS_STREAM_MGMT">NS_STREAM_MGMT</span>,
+ <a href="nbxmpp.protocol.RemoteConnectionFailed-class.html" title="nbxmpp.protocol.RemoteConnectionFailed">RemoteConnectionFailed</a>,
+ <span title="nbxmpp.protocol.time">time</span>,
+ <span title="nbxmpp.protocol.NS_SEARCH">NS_SEARCH</span>,
+ <a href="nbxmpp.protocol.BOSHBody-class.html" title="nbxmpp.protocol.BOSHBody">BOSHBody</a>,
+ <span title="nbxmpp.protocol.NS_ADDRESS">NS_ADDRESS</span>,
+ <span title="nbxmpp.protocol.NS_COMPONENT_ACCEPT">NS_COMPONENT_ACCEPT</span>,
+ <a href="nbxmpp.protocol.RestrictedXML-class.html" title="nbxmpp.protocol.RestrictedXML">RestrictedXML</a>,
+ <span title="nbxmpp.protocol.NS_SECLABEL_CATALOG">NS_SECLABEL_CATALOG</span>,
+ <span title="nbxmpp.protocol.NS_DISCO_INFO">NS_DISCO_INFO</span>,
+ <span title="nbxmpp.protocol.sasl_error_conditions">sasl_error_conditions</span>,
+ <a href="nbxmpp.protocol.BadFormat-class.html" title="nbxmpp.protocol.BadFormat">BadFormat</a>,
+ <a href="nbxmpp.protocol.InternalServerError-class.html" title="nbxmpp.protocol.InternalServerError">InternalServerError</a>,
+ <span title="nbxmpp.protocol.NS_PUBKEY_ATTEST">NS_PUBKEY_ATTEST</span>,
+ <span title="nbxmpp.protocol.NS_MUC">NS_MUC</span>,
+ <span title="nbxmpp.protocol.NS_JINGLE">NS_JINGLE</span>,
+ <span title="nbxmpp.protocol.NS_BOB">NS_BOB</span>,
+ <span title="nbxmpp.protocol.NS_HASHES_MD5">NS_HASHES_MD5</span>,
+ <span title="nbxmpp.protocol.NS_HTTP_AUTH">NS_HTTP_AUTH</span>,
+ <a href="nbxmpp.protocol.ErrorNode-class.html" title="nbxmpp.protocol.ErrorNode">ErrorNode</a>,
+ <a href="nbxmpp.simplexml-module.html" title="nbxmpp.simplexml">simplexml</a>,
+ <a href="nbxmpp.protocol-module.html" title="nbxmpp.protocol">protocol</a>,
+ <a href="nbxmpp.auth_nb-module.html" title="nbxmpp.auth_nb">auth_nb</a>,
+ <a href="nbxmpp.transports_nb-module.html" title="nbxmpp.transports_nb">transports_nb</a>,
+ <a href="nbxmpp.roster_nb-module.html" title="nbxmpp.roster_nb">roster_nb</a>,
+ <a href="nbxmpp.dispatcher_nb-module.html" title="nbxmpp.dispatcher_nb">dispatcher_nb</a>,
+ <a href="nbxmpp.features_nb-module.html" title="nbxmpp.features_nb">features_nb</a>,
+ <a href="nbxmpp.idlequeue-module.html" title="nbxmpp.idlequeue">idlequeue</a>,
+ <a href="nbxmpp.bosh-module.html" title="nbxmpp.bosh">bosh</a>,
+ <a href="nbxmpp.tls_nb-module.html" title="nbxmpp.tls_nb">tls_nb</a>,
+ <a href="nbxmpp.proxy_connectors-module.html" title="nbxmpp.proxy_connectors">proxy_connectors</a>,
+ <a href="nbxmpp.client_nb.NonBlockingClient-class.html" title="nbxmpp.client_nb.NonBlockingClient">NonBlockingClient</a>,
+ <a href="nbxmpp.plugin.PlugIn-class.html" title="nbxmpp.plugin.PlugIn">PlugIn</a>,
+ <a href="nbxmpp.smacks.Smacks-class.html" title="nbxmpp.smacks.Smacks">Smacks</a>,
+ <a href="nbxmpp.client_nb-module.html" title="nbxmpp.client_nb">client_nb</a>,
+ <a href="nbxmpp.plugin-module.html" title="nbxmpp.plugin">plugin</a>,
+ <a href="nbxmpp.smacks-module.html" title="nbxmpp.smacks">smacks</a>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="ERRORS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERRORS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">The receiving entity ac</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">knowledges an &lt;abort/&gt; element sent by the initiating entity; sent in </code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">reply to the &lt;abort/&gt; element.</code><code class="variable-quote">'</code><code class="variable-group">]</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">The data pro</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_BAD_REQUEST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_BAD_REQUEST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas bad-request</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_CONFLICT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_CONFLICT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas conflict</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_FEATURE_NOT_IMPLEMENTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_FEATURE_NOT_IMPLEMENTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas feature-not-implemented</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_FORBIDDEN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_FORBIDDEN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas forbidden</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_GONE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_GONE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas gone</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_INTERNAL_SERVER_ERROR"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_INTERNAL_SERVER_ERROR</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas internal-server-error</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_ITEM_NOT_FOUND"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_ITEM_NOT_FOUND</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas item-not-found</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_JID_MALFORMED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_JID_MALFORMED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas jid-malformed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_NOT_ACCEPTABLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_NOT_ACCEPTABLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-acceptable</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_NOT_ALLOWED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_NOT_ALLOWED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-allowed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_NOT_AUTHORIZED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_NOT_AUTHORIZED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-authorized</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_PAYMENT_REQUIRED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_PAYMENT_REQUIRED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas payment-required</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_RECIPIENT_UNAVAILABLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_RECIPIENT_UNAVAILABLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas recipient-unavailable</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REDIRECT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REDIRECT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas redirect</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REGISTRATION_REQUIRED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REGISTRATION_REQUIRED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas registration-required</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REMOTE_SERVER_NOT_FOUND"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REMOTE_SERVER_NOT_FOUND</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas remote-server-not-found</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REMOTE_SERVER_TIMEOUT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REMOTE_SERVER_TIMEOUT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas remote-server-timeout</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_RESOURCE_CONSTRAINT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_RESOURCE_CONSTRAINT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas resource-constraint</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_SERVICE_UNAVAILABLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_SERVICE_UNAVAILABLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas service-unavailable</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_SUBSCRIPTION_REQUIRED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_SUBSCRIPTION_REQUIRED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas subscription-required</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_UNDEFINED_CONDITION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_UNDEFINED_CONDITION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas undefined-condition</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_UNEXPECTED_REQUEST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_UNEXPECTED_REQUEST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas unexpected-request</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_ABORTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_ABORTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_INCORRECT_ENCODING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_INCORRECT_ENCODING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_INVALID_AUTHZID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_INVALID_AUTHZID</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl invalid-authzid</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_INVALID_MECHANISM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_INVALID_MECHANISM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl invalid-mechanism</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_MECHANISM_TOO_WEAK"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_MECHANISM_TOO_WEAK</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl mechanism-too-weak</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_NOT_AUTHORIZED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_NOT_AUTHORIZED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl not-authorized</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_TEMPORARY_AUTH_FAILURE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_TEMPORARY_AUTH_FAILURE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl temporary-auth-failure</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_BAD_FORMAT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_BAD_FORMAT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams bad-format</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_BAD_NAMESPACE_PREFIX"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_BAD_NAMESPACE_PREFIX</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams bad-namespace-prefix</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_CONFLICT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_CONFLICT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams conflict</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_CONNECTION_TIMEOUT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_CONNECTION_TIMEOUT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams connection-timeout</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_HOST_GONE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_HOST_GONE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams host-gone</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_HOST_UNKNOWN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_HOST_UNKNOWN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams host-unknown</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_IMPROPER_ADDRESSING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_IMPROPER_ADDRESSING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams improper-addressing</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INTERNAL_SERVER_ERROR"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INTERNAL_SERVER_ERROR</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams internal-server-error</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_FROM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_FROM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-from</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_ID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_ID</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-id</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_NAMESPACE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_NAMESPACE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-namespace</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_XML"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_XML</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-xml</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_NOT_AUTHORIZED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_NOT_AUTHORIZED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams not-authorized</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_POLICY_VIOLATION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_POLICY_VIOLATION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams policy-violation</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_REMOTE_CONNECTION_FAILED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_REMOTE_CONNECTION_FAILED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams remote-connection-failed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_RESOURCE_CONSTRAINT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_RESOURCE_CONSTRAINT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams resource-constraint</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_RESTRICTED_XML"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_RESTRICTED_XML</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams restricted-xml</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_SEE_OTHER_HOST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_SEE_OTHER_HOST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams see-other-host</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_SYSTEM_SHUTDOWN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_SYSTEM_SHUTDOWN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams system-shutdown</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNDEFINED_CONDITION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNDEFINED_CONDITION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams undefined-condition</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNSUPPORTED_ENCODING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNSUPPORTED_ENCODING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams unsupported-encoding</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNSUPPORTED_STANZA_TYPE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNSUPPORTED_STANZA_TYPE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams unsupported-stanza-type</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNSUPPORTED_VERSION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNSUPPORTED_VERSION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams unsupported-version</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_XML_NOT_WELL_FORMED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_XML_NOT_WELL_FORMED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams xml-not-well-formed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="name"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">name</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">SASL_TEMPORARY_AUTH_FAILURE</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp-pysrc.html b/doc/apidocs/nbxmpp-pysrc.html
new file mode 100644
index 0000000..76893e3
--- /dev/null
+++ b/doc/apidocs/nbxmpp-pysrc.html
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ Package&nbsp;nbxmpp
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp-module.html">Package nbxmpp</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># $Id: __init__.py,v 1.9 2005/03/07 09:34:51 snakeru Exp $</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-docstring">This is a fork of the xmpppy jabber python library. Most of the code is</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-docstring">inherited but has been extended by implementation of non-blocking transports</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-docstring">and new features like BOSH.</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">Most of the xmpp classes are ancestors of PlugIn class to share a single set of methods in order to compile a featured and extensible XMPP client.</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-docstring">Thanks and credits to the xmpppy developers. See: http://xmpppy.sourceforge.net/</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"> </tt>
+<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-0', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Module nbxmpp.simplexml=nbxmpp.simplexml-module.html"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-1', 'simplexml', 'link-1');">simplexml</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-2', 'protocol', 'link-0');">protocol</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Module nbxmpp.auth_nb=nbxmpp.auth_nb-module.html"><a title="nbxmpp.auth_nb" class="py-name" href="#" onclick="return doclink('link-3', 'auth_nb', 'link-3');">auth_nb</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Module nbxmpp.transports_nb=nbxmpp.transports_nb-module.html"><a title="nbxmpp.transports_nb" class="py-name" href="#" onclick="return doclink('link-4', 'transports_nb', 'link-4');">transports_nb</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Module nbxmpp.roster_nb=nbxmpp.roster_nb-module.html"><a title="nbxmpp.roster_nb" class="py-name" href="#" onclick="return doclink('link-5', 'roster_nb', 'link-5');">roster_nb</a></tt> </tt>
+<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Module nbxmpp.dispatcher_nb=nbxmpp.dispatcher_nb-module.html"><a title="nbxmpp.dispatcher_nb" class="py-name" href="#" onclick="return doclink('link-6', 'dispatcher_nb', 'link-6');">dispatcher_nb</a></tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name" targets="Module nbxmpp.features_nb=nbxmpp.features_nb-module.html"><a title="nbxmpp.features_nb" class="py-name" href="#" onclick="return doclink('link-7', 'features_nb', 'link-7');">features_nb</a></tt><tt class="py-op">,</tt> <tt id="link-8" class="py-name" targets="Module nbxmpp.idlequeue=nbxmpp.idlequeue-module.html"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-8', 'idlequeue', 'link-8');">idlequeue</a></tt><tt class="py-op">,</tt> <tt id="link-9" class="py-name" targets="Module nbxmpp.bosh=nbxmpp.bosh-module.html"><a title="nbxmpp.bosh" class="py-name" href="#" onclick="return doclink('link-9', 'bosh', 'link-9');">bosh</a></tt><tt class="py-op">,</tt> <tt id="link-10" class="py-name" targets="Module nbxmpp.tls_nb=nbxmpp.tls_nb-module.html"><a title="nbxmpp.tls_nb" class="py-name" href="#" onclick="return doclink('link-10', 'tls_nb', 'link-10');">tls_nb</a></tt><tt class="py-op">,</tt> <tt id="link-11" class="py-name" targets="Module nbxmpp.proxy_connectors=nbxmpp.proxy_connectors-module.html"><a title="nbxmpp.proxy_connectors" class="py-name" href="#" onclick="return doclink('link-11', 'proxy_connectors', 'link-11');">proxy_connectors</a></tt> </tt>
+<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-12" class="py-name" targets="Module nbxmpp.client_nb=nbxmpp.client_nb-module.html"><a title="nbxmpp.client_nb" class="py-name" href="#" onclick="return doclink('link-12', 'client_nb', 'link-12');">client_nb</a></tt> <tt class="py-keyword">import</tt> <tt id="link-13" class="py-name" targets="Class nbxmpp.client_nb.NonBlockingClient=nbxmpp.client_nb.NonBlockingClient-class.html"><a title="nbxmpp.client_nb.NonBlockingClient" class="py-name" href="#" onclick="return doclink('link-13', 'NonBlockingClient', 'link-13');">NonBlockingClient</a></tt> </tt>
+<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-14" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugin()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugin,Method nbxmpp.auth_nb.NonBlockingNonSASL.plugin()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin,Method nbxmpp.auth_nb.SASL.plugin()=nbxmpp.auth_nb.SASL-class.html#plugin,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugin()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin,Module nbxmpp.plugin=nbxmpp.plugin-module.html,Method nbxmpp.roster_nb.NonBlockingRoster.plugin()=nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin,Method nbxmpp.tls_nb.NonBlockingTLS.plugin()=nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin,Method nbxmpp.transports_nb.NonBlockingTransport.plugin()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin"><a title="nbxmpp.auth_nb.NonBlockingBind.plugin
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin
+nbxmpp.auth_nb.SASL.plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin
+nbxmpp.plugin
+nbxmpp.roster_nb.NonBlockingRoster.plugin
+nbxmpp.tls_nb.NonBlockingTLS.plugin
+nbxmpp.transports_nb.NonBlockingTransport.plugin" class="py-name" href="#" onclick="return doclink('link-14', 'plugin', 'link-14');">plugin</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn,Method nbxmpp.dispatcher_nb.Dispatcher.PlugIn()=nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn,Class nbxmpp.plugin.PlugIn=nbxmpp.plugin.PlugIn-class.html,Method nbxmpp.plugin.PlugIn.PlugIn()=nbxmpp.plugin.PlugIn-class.html#PlugIn"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-15', 'PlugIn', 'link-15');">PlugIn</a></tt> </tt>
+<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-16" class="py-name" targets="Module nbxmpp.smacks=nbxmpp.smacks-module.html"><a title="nbxmpp.smacks" class="py-name" href="#" onclick="return doclink('link-16', 'smacks', 'link-16');">smacks</a></tt> <tt class="py-keyword">import</tt> <tt id="link-17" class="py-name" targets="Class nbxmpp.smacks.Smacks=nbxmpp.smacks.Smacks-class.html"><a title="nbxmpp.smacks.Smacks" class="py-name" href="#" onclick="return doclink('link-17', 'Smacks', 'link-17');">Smacks</a></tt> </tt>
+<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th bgcolor="#70b0f0" class="navbar-select"
+ >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.auth_nb-module.html b/doc/apidocs/nbxmpp.auth_nb-module.html
new file mode 100644
index 0000000..cd593eb
--- /dev/null
+++ b/doc/apidocs/nbxmpp.auth_nb-module.html
@@ -0,0 +1,726 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.auth_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;auth_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.auth_nb-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module auth_nb</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html">source&nbsp;code</a></span></p>
+<p>Provides plugs for SASL and NON-SASL authentication mechanisms.
+Can be used both for client and transport authentication</p>
+<p>See client_nb.py</p>
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb.SASL-class.html" class="summary-name">SASL</a><br />
+ Implements SASL authentication. Can be plugged into NonBlockingClient
+to start authentication
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html" class="summary-name">NonBlockingNonSASL</a><br />
+ Implements old Non-SASL (JEP-0078) authentication used in jabberd1.4 and
+transport authentication
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb.NonBlockingBind-class.html" class="summary-name">NonBlockingBind</a><br />
+ Bind some JID to the current connection to allow router know of our
+location. Must be plugged after successful SASL auth
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb-module.html#HH" class="summary-sig-name">HH</a>(<span class="summary-sig-arg">some</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#HH">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb-module.html#H" class="summary-sig-name">H</a>(<span class="summary-sig-arg">some</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#H">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb-module.html#C" class="summary-sig-name">C</a>(<span class="summary-sig-arg">some</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#C">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb-module.html#challenge_splitter" class="summary-sig-name">challenge_splitter</a>(<span class="summary-sig-arg">data</span>)</span><br />
+ Helper function that creates a dict from challenge string</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#challenge_splitter">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb-module.html#scram_parse" class="summary-sig-name">scram_parse</a>(<span class="summary-sig-arg">chatter</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#scram_parse">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.auth_nb')">logging.getLogger('nbxmpp.auth_nb')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#kerberos" class="summary-name">kerberos</a> = <code title="__import__('kerberos')">__import__('kerberos')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#have_kerberos" class="summary-name">have_kerberos</a> = <code title="False">False</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#GSS_STATE_STEP" class="summary-name">GSS_STATE_STEP</a> = <code title="0">0</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#GSS_STATE_WRAP" class="summary-name">GSS_STATE_WRAP</a> = <code title="1">1</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#SASL_FAILURE_IN_PROGRESS" class="summary-name">SASL_FAILURE_IN_PROGRESS</a> = <code title="'failure-in-process'"><code class="variable-quote">'</code><code class="variable-string">failure-in-process</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#SASL_FAILURE" class="summary-name">SASL_FAILURE</a> = <code title="'failure'"><code class="variable-quote">'</code><code class="variable-string">failure</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#SASL_SUCCESS" class="summary-name">SASL_SUCCESS</a> = <code title="'success'"><code class="variable-quote">'</code><code class="variable-string">success</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#SASL_UNSUPPORTED" class="summary-name">SASL_UNSUPPORTED</a> = <code title="'not-supported'"><code class="variable-quote">'</code><code class="variable-string">not-supported</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#SASL_IN_PROCESS" class="summary-name">SASL_IN_PROCESS</a> = <code title="'in-process'"><code class="variable-quote">'</code><code class="variable-string">in-process</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.auth_nb-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="nbxmpp.protocol.NS_SASL">NS_SASL</span>,
+ <span title="nbxmpp.protocol.NS_SESSION">NS_SESSION</span>,
+ <span title="nbxmpp.protocol.NS_STREAMS">NS_STREAMS</span>,
+ <span title="nbxmpp.protocol.NS_BIND">NS_BIND</span>,
+ <span title="nbxmpp.protocol.NS_AUTH">NS_AUTH</span>,
+ <span title="nbxmpp.protocol.NS_STREAM_MGMT">NS_STREAM_MGMT</span>,
+ <a href="nbxmpp.simplexml.Node-class.html" title="nbxmpp.protocol.Node">Node</a>,
+ <a href="nbxmpp.protocol.NodeProcessed-class.html" title="nbxmpp.protocol.NodeProcessed">NodeProcessed</a>,
+ <a href="nbxmpp.protocol-module.html#isResultNode" title="nbxmpp.protocol.isResultNode">isResultNode</a>,
+ <a href="nbxmpp.protocol.Iq-class.html" title="nbxmpp.protocol.Iq">Iq</a>,
+ <a href="nbxmpp.protocol.Protocol-class.html" title="nbxmpp.protocol.Protocol">Protocol</a>,
+ <a href="nbxmpp.protocol.JID-class.html" title="nbxmpp.protocol.JID">JID</a>,
+ <a href="nbxmpp.plugin.PlugIn-class.html" title="nbxmpp.plugin.PlugIn">PlugIn</a>,
+ <a href="nbxmpp.smacks.Smacks-class.html" title="nbxmpp.smacks.Smacks">Smacks</a>,
+ <span title="base64">base64</span>,
+ <span title="random">random</span>,
+ <span title="itertools">itertools</span>,
+ <a href="nbxmpp.dispatcher_nb-module.html" title="nbxmpp.dispatcher_nb">dispatcher_nb</a>,
+ <span title="hmac">hmac</span>,
+ <span title="hashlib">hashlib</span>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="HH"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">HH</span>(<span class="sig-arg">some</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#HH">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="H"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">H</span>(<span class="sig-arg">some</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#H">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="C"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">C</span>(<span class="sig-arg">some</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#C">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="challenge_splitter"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">challenge_splitter</span>(<span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#challenge_splitter">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Helper function that creates a dict from challenge string</p>
+<dl class="rst-docutils">
+<dt>Sample challenge string:</dt>
+<dd><ul class="rst-first rst-last rst-simple">
+<li>username=&quot;example.org&quot;,realm=&quot;somerealm&quot;,
+nonce=&quot;OA6MG9tEQGm2hh&quot;,cnonce=&quot;OA6MHXh6VqTrRk&quot;,
+nc=00000001,qop=&quot;auth,auth-int,auth-conf&quot;,charset=utf-8</li>
+</ul>
+</dd>
+<dt>Expected result for challan:</dt>
+<dd><ul class="rst-first rst-last rst-simple">
+<li>dict['qop'] = ('auth','auth-int','auth-conf')</li>
+<li>dict['realm'] = 'somerealm'</li>
+</ul>
+</dd>
+</dl>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="scram_parse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">scram_parse</span>(<span class="sig-arg">chatter</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#scram_parse">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.auth_nb')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="kerberos"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">kerberos</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+__import__('kerberos')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="have_kerberos"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">have_kerberos</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+False
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="GSS_STATE_STEP"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">GSS_STATE_STEP</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+0
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="GSS_STATE_WRAP"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">GSS_STATE_WRAP</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+1
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_FAILURE_IN_PROGRESS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_FAILURE_IN_PROGRESS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">failure-in-process</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_FAILURE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_FAILURE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">failure</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_SUCCESS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_SUCCESS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">success</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_UNSUPPORTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_UNSUPPORTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">not-supported</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_IN_PROCESS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_IN_PROCESS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">in-process</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.auth_nb-pysrc.html b/doc/apidocs/nbxmpp.auth_nb-pysrc.html
new file mode 100644
index 0000000..1de3c33
--- /dev/null
+++ b/doc/apidocs/nbxmpp.auth_nb-pysrc.html
@@ -0,0 +1,1310 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.auth_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;auth_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.auth_nb-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.auth_nb-module.html">Module nbxmpp.auth_nb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## auth_nb.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## based on auth.py, changes backported up to revision 1.41</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## modified by Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">Provides plugs for SASL and NON-SASL authentication mechanisms.</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">Can be used both for client and transport authentication</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">See client_nb.py</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-0', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Variable nbxmpp.protocol.NS_SASL=nbxmpp.protocol-module.html#NS_SASL"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-1', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Variable nbxmpp.protocol.NS_SESSION=nbxmpp.protocol-module.html#NS_SESSION"><a title="nbxmpp.protocol.NS_SESSION" class="py-name" href="#" onclick="return doclink('link-2', 'NS_SESSION', 'link-2');">NS_SESSION</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Variable nbxmpp.protocol.NS_STREAMS=nbxmpp.protocol-module.html#NS_STREAMS"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-3', 'NS_STREAMS', 'link-3');">NS_STREAMS</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Variable nbxmpp.protocol.NS_BIND=nbxmpp.protocol-module.html#NS_BIND"><a title="nbxmpp.protocol.NS_BIND" class="py-name" href="#" onclick="return doclink('link-4', 'NS_BIND', 'link-4');">NS_BIND</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Variable nbxmpp.protocol.NS_AUTH=nbxmpp.protocol-module.html#NS_AUTH"><a title="nbxmpp.protocol.NS_AUTH" class="py-name" href="#" onclick="return doclink('link-5', 'NS_AUTH', 'link-5');">NS_AUTH</a></tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-6', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Variable nbxmpp.protocol.NS_STREAM_MGMT=nbxmpp.protocol-module.html#NS_STREAM_MGMT"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-7', 'NS_STREAM_MGMT', 'link-7');">NS_STREAM_MGMT</a></tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-8', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-9" class="py-name" targets="Class nbxmpp.simplexml.Node=nbxmpp.simplexml.Node-class.html"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-9', 'Node', 'link-9');">Node</a></tt><tt class="py-op">,</tt> <tt id="link-10" class="py-name" targets="Class nbxmpp.protocol.NodeProcessed=nbxmpp.protocol.NodeProcessed-class.html"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-10', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt><tt class="py-op">,</tt> <tt id="link-11" class="py-name" targets="Function nbxmpp.protocol.isResultNode()=nbxmpp.protocol-module.html#isResultNode"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-11', 'isResultNode', 'link-11');">isResultNode</a></tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name" targets="Class nbxmpp.protocol.Iq=nbxmpp.protocol.Iq-class.html"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-12', 'Iq', 'link-12');">Iq</a></tt><tt class="py-op">,</tt> <tt id="link-13" class="py-name" targets="Class nbxmpp.protocol.Protocol=nbxmpp.protocol.Protocol-class.html"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-13', 'Protocol', 'link-13');">Protocol</a></tt><tt class="py-op">,</tt> <tt id="link-14" class="py-name" targets="Class nbxmpp.protocol.JID=nbxmpp.protocol.JID-class.html"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-14', 'JID', 'link-14');">JID</a></tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-15" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugin()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugin,Method nbxmpp.auth_nb.NonBlockingNonSASL.plugin()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin,Method nbxmpp.auth_nb.SASL.plugin()=nbxmpp.auth_nb.SASL-class.html#plugin,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugin()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin,Module nbxmpp.plugin=nbxmpp.plugin-module.html,Method nbxmpp.roster_nb.NonBlockingRoster.plugin()=nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin,Method nbxmpp.tls_nb.NonBlockingTLS.plugin()=nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin,Method nbxmpp.transports_nb.NonBlockingTransport.plugin()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin"><a title="nbxmpp.auth_nb.NonBlockingBind.plugin
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin
+nbxmpp.auth_nb.SASL.plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin
+nbxmpp.plugin
+nbxmpp.roster_nb.NonBlockingRoster.plugin
+nbxmpp.tls_nb.NonBlockingTLS.plugin
+nbxmpp.transports_nb.NonBlockingTransport.plugin" class="py-name" href="#" onclick="return doclink('link-15', 'plugin', 'link-15');">plugin</a></tt> <tt class="py-keyword">import</tt> <tt id="link-16" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn,Method nbxmpp.dispatcher_nb.Dispatcher.PlugIn()=nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn,Class nbxmpp.plugin.PlugIn=nbxmpp.plugin.PlugIn-class.html,Method nbxmpp.plugin.PlugIn.PlugIn()=nbxmpp.plugin.PlugIn-class.html#PlugIn"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-16', 'PlugIn', 'link-16');">PlugIn</a></tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-17" class="py-name" targets="Module nbxmpp.smacks=nbxmpp.smacks-module.html"><a title="nbxmpp.smacks" class="py-name" href="#" onclick="return doclink('link-17', 'smacks', 'link-17');">smacks</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name" targets="Class nbxmpp.smacks.Smacks=nbxmpp.smacks.Smacks-class.html"><a title="nbxmpp.smacks.Smacks" class="py-name" href="#" onclick="return doclink('link-18', 'Smacks', 'link-18');">Smacks</a></tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">base64</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">random</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">itertools</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-19" class="py-name" targets="Module nbxmpp.dispatcher_nb=nbxmpp.dispatcher_nb-module.html"><a title="nbxmpp.dispatcher_nb" class="py-name" href="#" onclick="return doclink('link-19', 'dispatcher_nb', 'link-19');">dispatcher_nb</a></tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">hashlib</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">hmac</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">hashlib</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt id="link-20" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-20', 'log', 'link-20');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.auth_nb'</tt><tt class="py-op">)</tt> </tt>
+<a name="HH"></a><div id="HH-def"><a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <a class="py-toggle" href="#" id="HH-toggle" onclick="return toggle('HH');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb-module.html#HH">HH</a><tt class="py-op">(</tt><tt class="py-param">some</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">md5</tt><tt class="py-op">(</tt><tt class="py-name">some</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">hexdigest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="H"></a><div id="H-def"><a name="L41"></a><tt class="py-lineno"> 41</tt> <a class="py-toggle" href="#" id="H-toggle" onclick="return toggle('H');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb-module.html#H">H</a><tt class="py-op">(</tt><tt class="py-param">some</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">md5</tt><tt class="py-op">(</tt><tt class="py-name">some</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="C"></a><div id="C-def"><a name="L42"></a><tt class="py-lineno"> 42</tt> <a class="py-toggle" href="#" id="C-toggle" onclick="return toggle('C');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb-module.html#C">C</a><tt class="py-op">(</tt><tt class="py-param">some</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> <tt class="py-string">':'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">some</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt id="link-21" class="py-name" targets="Variable nbxmpp.auth_nb.kerberos=nbxmpp.auth_nb-module.html#kerberos"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-21', 'kerberos', 'link-21');">kerberos</a></tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-string">'kerberos'</tt><tt class="py-op">)</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt id="link-22" class="py-name" targets="Variable nbxmpp.auth_nb.have_kerberos=nbxmpp.auth_nb-module.html#have_kerberos"><a title="nbxmpp.auth_nb.have_kerberos" class="py-name" href="#" onclick="return doclink('link-22', 'have_kerberos', 'link-22');">have_kerberos</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="nbxmpp.auth_nb.have_kerberos" class="py-name" href="#" onclick="return doclink('link-23', 'have_kerberos', 'link-22');">have_kerberos</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt id="link-24" class="py-name" targets="Variable nbxmpp.auth_nb.GSS_STATE_STEP=nbxmpp.auth_nb-module.html#GSS_STATE_STEP"><a title="nbxmpp.auth_nb.GSS_STATE_STEP" class="py-name" href="#" onclick="return doclink('link-24', 'GSS_STATE_STEP', 'link-24');">GSS_STATE_STEP</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt id="link-25" class="py-name" targets="Variable nbxmpp.auth_nb.GSS_STATE_WRAP=nbxmpp.auth_nb-module.html#GSS_STATE_WRAP"><a title="nbxmpp.auth_nb.GSS_STATE_WRAP" class="py-name" href="#" onclick="return doclink('link-25', 'GSS_STATE_WRAP', 'link-25');">GSS_STATE_WRAP</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt id="link-26" class="py-name" targets="Variable nbxmpp.auth_nb.SASL_FAILURE_IN_PROGRESS=nbxmpp.auth_nb-module.html#SASL_FAILURE_IN_PROGRESS"><a title="nbxmpp.auth_nb.SASL_FAILURE_IN_PROGRESS" class="py-name" href="#" onclick="return doclink('link-26', 'SASL_FAILURE_IN_PROGRESS', 'link-26');">SASL_FAILURE_IN_PROGRESS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'failure-in-process'</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt id="link-27" class="py-name" targets="Variable nbxmpp.auth_nb.SASL_FAILURE=nbxmpp.auth_nb-module.html#SASL_FAILURE"><a title="nbxmpp.auth_nb.SASL_FAILURE" class="py-name" href="#" onclick="return doclink('link-27', 'SASL_FAILURE', 'link-27');">SASL_FAILURE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'failure'</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt id="link-28" class="py-name" targets="Variable nbxmpp.auth_nb.SASL_SUCCESS=nbxmpp.auth_nb-module.html#SASL_SUCCESS"><a title="nbxmpp.auth_nb.SASL_SUCCESS" class="py-name" href="#" onclick="return doclink('link-28', 'SASL_SUCCESS', 'link-28');">SASL_SUCCESS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'success'</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt id="link-29" class="py-name" targets="Variable nbxmpp.auth_nb.SASL_UNSUPPORTED=nbxmpp.auth_nb-module.html#SASL_UNSUPPORTED"><a title="nbxmpp.auth_nb.SASL_UNSUPPORTED" class="py-name" href="#" onclick="return doclink('link-29', 'SASL_UNSUPPORTED', 'link-29');">SASL_UNSUPPORTED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'not-supported'</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt id="link-30" class="py-name" targets="Variable nbxmpp.auth_nb.SASL_IN_PROCESS=nbxmpp.auth_nb-module.html#SASL_IN_PROCESS"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-30', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'in-process'</tt> </tt>
+<a name="challenge_splitter"></a><div id="challenge_splitter-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="challenge_splitter-toggle" onclick="return toggle('challenge_splitter');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb-module.html#challenge_splitter">challenge_splitter</a><tt class="py-op">(</tt><tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="challenge_splitter-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="challenge_splitter-expanded"><a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> Helper function that creates a dict from challenge string</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> Sample challenge string:</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> - username="example.org",realm="somerealm",</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"> nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> nc=00000001,qop="auth,auth-int,auth-conf",charset=utf-8</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> Expected result for challan:</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> - dict['qop'] = ('auth','auth-int','auth-conf')</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> - dict['realm'] = 'somerealm'</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">X_KEYWORD</tt><tt class="py-op">,</tt> <tt class="py-name">X_VALUE</tt><tt class="py-op">,</tt> <tt class="py-name">X_END</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">quotes_open</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">keyword</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-name">dict_</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-name">arr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">expecting</tt> <tt class="py-op">=</tt> <tt class="py-name">X_KEYWORD</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">iter_</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt id="link-31" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.end()=nbxmpp.idlequeue.IdleCommand-class.html#end"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-31', 'end', 'link-31');">end</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">iter_</tt> <tt class="py-op">==</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">expecting</tt> <tt class="py-op">=</tt> <tt class="py-name">X_END</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt id="link-32" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-32', 'end', 'link-31');">end</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">char</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">iter_</tt><tt class="py-op">]</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">expecting</tt> <tt class="py-op">==</tt> <tt class="py-name">X_KEYWORD</tt><tt class="py-op">:</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">char</tt> <tt class="py-op">==</tt> <tt class="py-string">'='</tt><tt class="py-op">:</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">expecting</tt> <tt class="py-op">=</tt> <tt class="py-name">X_VALUE</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">char</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">','</tt><tt class="py-op">,</tt> <tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-string">'\t'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">keyword</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s%c'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">keyword</tt><tt class="py-op">,</tt> <tt class="py-name">char</tt><tt class="py-op">)</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">expecting</tt> <tt class="py-op">==</tt> <tt class="py-name">X_VALUE</tt><tt class="py-op">:</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">char</tt> <tt class="py-op">==</tt> <tt class="py-string">'"'</tt><tt class="py-op">:</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">quotes_open</tt><tt class="py-op">:</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-33', 'end', 'link-31');">end</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">quotes_open</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">char</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">','</tt><tt class="py-op">,</tt> <tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-string">'\t'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">quotes_open</tt><tt class="py-op">:</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">arr</tt><tt class="py-op">:</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">arr</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">value</tt><tt class="py-op">]</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">arr</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt id="link-34" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-34', 'end', 'link-31');">end</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s%c'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">char</tt><tt class="py-op">)</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-35" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-35', 'end', 'link-31');">end</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">arr</tt><tt class="py-op">:</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">arr</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">dict_</tt><tt class="py-op">[</tt><tt class="py-name">keyword</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">arr</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">arr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-name">dict_</tt><tt class="py-op">[</tt><tt class="py-name">keyword</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">keyword</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">expecting</tt> <tt class="py-op">=</tt> <tt class="py-name">X_KEYWORD</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-name">quotes_open</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">dict_</tt> </tt>
+</div><a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> </tt>
+<a name="scram_parse"></a><div id="scram_parse-def"><a name="L121"></a><tt class="py-lineno">121</tt> <a class="py-toggle" href="#" id="scram_parse-toggle" onclick="return toggle('scram_parse');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb-module.html#scram_parse">scram_parse</a><tt class="py-op">(</tt><tt class="py-param">chatter</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="scram_parse-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="scram_parse-expanded"><a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'='</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">chatter</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">','</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> </tt>
+<a name="SASL"></a><div id="SASL-def"><a name="L124"></a><tt class="py-lineno">124</tt> <a class="py-toggle" href="#" id="SASL-toggle" onclick="return toggle('SASL');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html">SASL</a><tt class="py-op">(</tt><tt class="py-base-class">PlugIn</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SASL-expanded"><a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"><tt class="py-docstring"> Implements SASL authentication. Can be plugged into NonBlockingClient</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"><tt class="py-docstring"> to start authentication</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> </tt>
+<a name="SASL.__init__"></a><div id="SASL.__init__-def"><a name="L130"></a><tt class="py-lineno">130</tt> <a class="py-toggle" href="#" id="SASL.__init__-toggle" onclick="return toggle('SASL.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">username</tt><tt class="py-op">,</tt> <tt class="py-param">password</tt><tt class="py-op">,</tt> <tt class="py-param">on_sasl</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.__init__-expanded"><a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> :param username: XMPP username</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"><tt class="py-docstring"> :param password: XMPP password</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"><tt class="py-docstring"> :param on_sasl: Callback, will be called after each SASL auth-step.</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt id="link-36" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-36', 'PlugIn', 'link-16');">PlugIn</a></tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-37', '__init__', 'link-37');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">username</tt> <tt class="py-op">=</tt> <tt class="py-name">username</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt> <tt class="py-op">=</tt> <tt class="py-name">password</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt> <tt class="py-op">=</tt> <tt class="py-name">on_sasl</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">realm</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> </tt>
+<a name="SASL.plugin"></a><div id="SASL.plugin-def"><a name="L142"></a><tt class="py-lineno">142</tt> <a class="py-toggle" href="#" id="SASL.plugin-toggle" onclick="return toggle('SASL.plugin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#plugin">plugin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.plugin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.plugin-expanded"><a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'version'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Class nbxmpp.dispatcher_nb.Dispatcher=nbxmpp.dispatcher_nb.Dispatcher-class.html"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-38', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-39" class="py-name"><a title="nbxmpp.auth_nb.SASL_UNSUPPORTED" class="py-name" href="#" onclick="return doclink('link-39', 'SASL_UNSUPPORTED', 'link-29');">SASL_UNSUPPORTED</a></tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-40', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt><tt class="py-op">:</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler()=nbxmpp.auth_nb.NonBlockingBind-class.html#FeaturesHandler,Method nbxmpp.auth_nb.SASL.FeaturesHandler()=nbxmpp.auth_nb.SASL-class.html#FeaturesHandler"><a title="nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler
+nbxmpp.auth_nb.SASL.FeaturesHandler" class="py-name" href="#" onclick="return doclink('link-41', 'FeaturesHandler', 'link-41');">FeaturesHandler</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-42', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-43', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt><tt class="py-op">)</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-44" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-44', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> </tt>
+<a name="SASL.plugout"></a><div id="SASL.plugout-def"><a name="L154"></a><tt class="py-lineno">154</tt> <a class="py-toggle" href="#" id="SASL.plugout-toggle" onclick="return toggle('SASL.plugout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#plugout">plugout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.plugout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.plugout-expanded"><a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"> Remove SASL handlers from owner's dispatcher. Used internally</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'features'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler" class="py-name" href="#" onclick="return doclink('link-45', 'UnregisterHandler', 'link-45');">UnregisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler
+nbxmpp.auth_nb.SASL.FeaturesHandler" class="py-name" href="#" onclick="return doclink('link-46', 'FeaturesHandler', 'link-41');">FeaturesHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-47" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-47', 'NS_STREAMS', 'link-3');">NS_STREAMS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'challenge'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler" class="py-name" href="#" onclick="return doclink('link-48', 'UnregisterHandler', 'link-45');">UnregisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'challenge'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method nbxmpp.auth_nb.SASL.SASLHandler()=nbxmpp.auth_nb.SASL-class.html#SASLHandler"><a title="nbxmpp.auth_nb.SASL.SASLHandler" class="py-name" href="#" onclick="return doclink('link-49', 'SASLHandler', 'link-49');">SASLHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-50" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-50', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'failure'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler" class="py-name" href="#" onclick="return doclink('link-51', 'UnregisterHandler', 'link-45');">UnregisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'failure'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="nbxmpp.auth_nb.SASL.SASLHandler" class="py-name" href="#" onclick="return doclink('link-52', 'SASLHandler', 'link-49');">SASLHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-53" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-53', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'success'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler" class="py-name" href="#" onclick="return doclink('link-54', 'UnregisterHandler', 'link-45');">UnregisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'success'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="nbxmpp.auth_nb.SASL.SASLHandler" class="py-name" href="#" onclick="return doclink('link-55', 'SASLHandler', 'link-49');">SASLHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-56" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-56', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> </tt>
+<a name="SASL.auth"></a><div id="SASL.auth-def"><a name="L171"></a><tt class="py-lineno">171</tt> <a class="py-toggle" href="#" id="SASL.auth-toggle" onclick="return toggle('SASL.auth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#auth">auth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.auth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.auth-expanded"><a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"><tt class="py-docstring"> Start authentication. Result can be obtained via "SASL.startsasl"</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"><tt class="py-docstring"> attribute and will be either SASL_SUCCESS or SASL_FAILURE</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"><tt class="py-docstring"> Note that successfull auth will take at least two Dispatcher.Process()</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"><tt class="py-docstring"> calls.</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt><tt class="py-op">:</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-57', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt><tt class="py-op">:</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler
+nbxmpp.auth_nb.SASL.FeaturesHandler" class="py-name" href="#" onclick="return doclink('link-58', 'FeaturesHandler', 'link-41');">FeaturesHandler</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-59', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-60', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt><tt class="py-op">)</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-61" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-61', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-62', 'RegisterHandler', 'link-62');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler
+nbxmpp.auth_nb.SASL.FeaturesHandler" class="py-name" href="#" onclick="return doclink('link-63', 'FeaturesHandler', 'link-41');">FeaturesHandler</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-64" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-64', 'NS_STREAMS', 'link-3');">NS_STREAMS</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> </tt>
+<a name="SASL.FeaturesHandler"></a><div id="SASL.FeaturesHandler-def"><a name="L191"></a><tt class="py-lineno">191</tt> <a class="py-toggle" href="#" id="SASL.FeaturesHandler-toggle" onclick="return toggle('SASL.FeaturesHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#FeaturesHandler">FeaturesHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">conn</tt><tt class="py-op">,</tt> <tt class="py-param">feats</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.FeaturesHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.FeaturesHandler-expanded"><a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"><tt class="py-docstring"> Used to determine if server supports SASL auth. Used internally</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">feats</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name" targets="Method nbxmpp.simplexml.Node.getTag()=nbxmpp.simplexml.Node-class.html#getTag"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-65', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'mechanisms'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-66" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-66', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt><tt class="py-op">=</tt><tt class="py-string">'not-supported'</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt id="link-67" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-67', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'SASL not supported by server'</tt><tt class="py-op">)</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">mec</tt> <tt class="py-keyword">in</tt> <tt class="py-name">feats</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-68', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'mechanisms'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-69" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-69', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Method nbxmpp.simplexml.Node.getTags()=nbxmpp.simplexml.Node-class.html#getTags"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-70', 'getTags', 'link-70');">getTags</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-string">'mechanism'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">mec</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name" targets="Method nbxmpp.simplexml.Node.getData()=nbxmpp.simplexml.Node-class.html#getData"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-71', 'getData', 'link-71');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-72', 'RegisterHandler', 'link-62');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'challenge'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="nbxmpp.auth_nb.SASL.SASLHandler" class="py-name" href="#" onclick="return doclink('link-73', 'SASLHandler', 'link-49');">SASLHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-74" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-74', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-75', 'RegisterHandler', 'link-62');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'failure'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="nbxmpp.auth_nb.SASL.SASLHandler" class="py-name" href="#" onclick="return doclink('link-76', 'SASLHandler', 'link-49');">SASLHandler</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-77" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-77', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-78', 'RegisterHandler', 'link-62');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'success'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="nbxmpp.auth_nb.SASL.SASLHandler" class="py-name" href="#" onclick="return doclink('link-79', 'SASLHandler', 'link-49');">SASLHandler</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-80" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-80', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method nbxmpp.auth_nb.SASL.MechanismHandler()=nbxmpp.auth_nb.SASL-class.html#MechanismHandler"><a title="nbxmpp.auth_nb.SASL.MechanismHandler" class="py-name" href="#" onclick="return doclink('link-81', 'MechanismHandler', 'link-81');">MechanismHandler</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> </tt>
+<a name="SASL.MechanismHandler"></a><div id="SASL.MechanismHandler-def"><a name="L210"></a><tt class="py-lineno">210</tt> <a class="py-toggle" href="#" id="SASL.MechanismHandler-toggle" onclick="return toggle('SASL.MechanismHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#MechanismHandler">MechanismHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.MechanismHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.MechanismHandler-expanded"><a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'ANONYMOUS'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">username</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-string">'ANONYMOUS'</tt><tt class="py-op">)</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-82" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-82', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-83" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-83', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-string">'mechanism'</tt><tt class="py-op">:</tt> <tt class="py-string">'ANONYMOUS'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">=</tt> <tt class="py-string">'ANONYMOUS'</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-84" class="py-name"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-84', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-85', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-86" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-86', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">"EXTERNAL"</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">:</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-string">'EXTERNAL'</tt><tt class="py-op">)</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-string">u'%s@%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">username</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">)</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-name">sasl_data</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'base64'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-string">'\n'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-87" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-87', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-88" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-88', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-string">'mechanism'</tt><tt class="py-op">:</tt> <tt class="py-string">'EXTERNAL'</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">sasl_data</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">=</tt> <tt class="py-string">'EXTERNAL'</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-89', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-90', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-91" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-91', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'GSSAPI'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt> <tt class="py-keyword">and</tt> <tt id="link-92" class="py-name"><a title="nbxmpp.auth_nb.have_kerberos" class="py-name" href="#" onclick="return doclink('link-92', 'have_kerberos', 'link-22');">have_kerberos</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-string">'GSSAPI'</tt><tt class="py-op">)</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt> <tt class="py-op">=</tt> <tt id="link-93" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-93', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientInit</tt><tt class="py-op">(</tt><tt class="py-string">'xmpp@'</tt> <tt class="py-op">+</tt> \ </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_hostname</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt id="link-94" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-94', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientStep</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">response</tt> <tt class="py-op">=</tt> <tt id="link-95" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-95', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientResponse</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt id="link-96" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-96', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-97" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-97', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-string">'mechanism'</tt><tt class="py-op">:</tt> <tt class="py-string">'GSSAPI'</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-name">response</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">=</tt> <tt class="py-string">'GSSAPI'</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_step</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="nbxmpp.auth_nb.GSS_STATE_STEP" class="py-name" href="#" onclick="return doclink('link-98', 'GSS_STATE_STEP', 'link-24');">GSS_STATE_STEP</a></tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-99" class="py-name"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-99', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-100', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-101" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-101', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-102" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-102', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">GSSError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt id="link-103" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-103', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'GSSAPI authentication failed: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'SCRAM-SHA-1'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">:</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-string">'SCRAM-SHA-1'</tt><tt class="py-op">)</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">=</tt> <tt class="py-string">'SCRAM-SHA-1'</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">get_password</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name" targets="Method nbxmpp.auth_nb.SASL.set_password()=nbxmpp.auth_nb.SASL-class.html#set_password"><a title="nbxmpp.auth_nb.SASL.set_password" class="py-name" href="#" onclick="return doclink('link-104', 'set_password', 'link-104');">set_password</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt><tt class="py-op">)</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_step</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-105" class="py-name"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-105', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-106" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-106', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'DIGEST-MD5'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">:</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-string">'DIGEST-MD5'</tt><tt class="py-op">)</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-107" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-107', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-108" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-108', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-string">'mechanism'</tt><tt class="py-op">:</tt> <tt class="py-string">'DIGEST-MD5'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">=</tt> <tt class="py-string">'DIGEST-MD5'</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-109" class="py-name"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-109', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-110', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-111" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-111', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'PLAIN'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">:</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-string">'PLAIN'</tt><tt class="py-op">)</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">=</tt> <tt class="py-string">'PLAIN'</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">get_password</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="nbxmpp.auth_nb.SASL.set_password" class="py-name" href="#" onclick="return doclink('link-112', 'set_password', 'link-104');">set_password</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt><tt class="py-op">)</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-113" class="py-name"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-113', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-114" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-114', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'X-MESSENGER-OAUTH2'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">:</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-string">'X-MESSENGER-OAUTH2'</tt><tt class="py-op">)</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">=</tt> <tt class="py-string">'X-MESSENGER-OAUTH2'</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">get_password</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="nbxmpp.auth_nb.SASL.set_password" class="py-name" href="#" onclick="return doclink('link-115', 'set_password', 'link-104');">set_password</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt><tt class="py-op">)</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-116" class="py-name"><a title="nbxmpp.auth_nb.SASL_IN_PROCESS" class="py-name" href="#" onclick="return doclink('link-116', 'SASL_IN_PROCESS', 'link-30');">SASL_IN_PROCESS</a></tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-117" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-117', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-118" class="py-name"><a title="nbxmpp.auth_nb.SASL_FAILURE" class="py-name" href="#" onclick="return doclink('link-118', 'SASL_FAILURE', 'link-27');">SASL_FAILURE</a></tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt id="link-119" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-119', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'I can only use EXTERNAL, SCRAM-SHA-1, DIGEST-MD5, GSSAPI and '</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-string">'PLAIN mecanisms.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">:</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+</div><a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> </tt>
+<a name="SASL.SASLHandler"></a><div id="SASL.SASLHandler-def"><a name="L280"></a><tt class="py-lineno">280</tt> <a class="py-toggle" href="#" id="SASL.SASLHandler-toggle" onclick="return toggle('SASL.SASLHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#SASLHandler">SASLHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">conn</tt><tt class="py-op">,</tt> <tt class="py-param">challenge</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.SASLHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.SASLHandler-expanded"><a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"><tt class="py-docstring"> Perform next SASL auth step. Used internally</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">challenge</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name" targets="Method nbxmpp.simplexml.Node.getNamespace()=nbxmpp.simplexml.Node-class.html#getNamespace"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-120', 'getNamespace', 'link-120');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt id="link-121" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-121', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">scram_base64</tt><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'base64'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-name">incoming_data</tt> <tt class="py-op">=</tt> <tt class="py-name">challenge</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-122', 'getData', 'link-71');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-name">data</tt><tt class="py-op">=</tt><tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">decodestring</tt><tt class="py-op">(</tt><tt class="py-name">incoming_data</tt><tt class="py-op">)</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt class="py-comment">### Handle Auth result</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">on_auth_fail</tt><tt class="py-op">(</tt><tt class="py-param">reason</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt id="link-123" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-123', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Failed SASL authentification: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">reason</tt><tt class="py-op">)</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-124', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-125" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-125', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'abort'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-126" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-126', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mecs</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-comment"># There are other mechanisms to test, but wait for &lt;failure&gt;</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-comment"># answer from server</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-127" class="py-name"><a title="nbxmpp.auth_nb.SASL_FAILURE_IN_PROGRESS" class="py-name" href="#" onclick="return doclink('link-127', 'SASL_FAILURE_IN_PROGRESS', 'link-26');">SASL_FAILURE_IN_PROGRESS</a></tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-128" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-128', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">:</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-129" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-129', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+</div><a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">challenge</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.getName()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getName,Method nbxmpp.simplexml.Node.getName()=nbxmpp.simplexml.Node-class.html#getName"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-130', 'getName', 'link-130');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'failure'</tt><tt class="py-op">:</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">==</tt> <tt id="link-131" class="py-name"><a title="nbxmpp.auth_nb.SASL_FAILURE_IN_PROGRESS" class="py-name" href="#" onclick="return doclink('link-131', 'SASL_FAILURE_IN_PROGRESS', 'link-26');">SASL_FAILURE_IN_PROGRESS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="nbxmpp.auth_nb.SASL.MechanismHandler" class="py-name" href="#" onclick="return doclink('link-132', 'MechanismHandler', 'link-81');">MechanismHandler</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-133" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-133', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-134" class="py-name"><a title="nbxmpp.auth_nb.SASL_FAILURE" class="py-name" href="#" onclick="return doclink('link-134', 'SASL_FAILURE', 'link-27');">SASL_FAILURE</a></tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">challenge</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name" targets="Method nbxmpp.simplexml.Node.getChildren()=nbxmpp.simplexml.Node-class.html#getChildren"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-135', 'getChildren', 'link-135');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">challenge</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-name">on_auth_fail</tt><tt class="py-op">(</tt><tt class="py-name">reason</tt><tt class="py-op">)</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">challenge</tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-136', 'getName', 'link-130');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'success'</tt><tt class="py-op">:</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">==</tt> <tt class="py-string">'SCRAM-SHA-1'</tt><tt class="py-op">:</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-comment"># check data-with-success</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt id="link-137" class="py-name" targets="Function nbxmpp.auth_nb.scram_parse()=nbxmpp.auth_nb-module.html#scram_parse"><a title="nbxmpp.auth_nb.scram_parse" class="py-name" href="#" onclick="return doclink('link-137', 'scram_parse', 'link-137');">scram_parse</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'v'</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">scram_base64</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_ServerSignature</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-name">on_auth_fail</tt><tt class="py-op">(</tt><tt class="py-string">'ServerSignature is wrong'</tt><tt class="py-op">)</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-138" class="py-name"><a title="nbxmpp.auth_nb.SASL_SUCCESS" class="py-name" href="#" onclick="return doclink('link-138', 'SASL_SUCCESS', 'link-28');">SASL_SUCCESS</a></tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt id="link-139" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-139', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Successfully authenticated with remote server.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-name">handlers</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-140', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-141" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.dumpHandlers()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.dumpHandlers" class="py-name" href="#" onclick="return doclink('link-141', 'dumpHandlers', 'link-141');">dumpHandlers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-comment"># Bosh specific dispatcher replugging</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-comment"># save old features. They will be used in case we won't get response</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-comment"># on stream restart after SASL auth (happens with XMPP over BOSH</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-comment"># with Openfire)</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-name">old_features</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-142', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-143', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-144" class="py-name" targets="Method nbxmpp.plugin.PlugIn.PlugOut()=nbxmpp.plugin.PlugIn-class.html#PlugOut"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-144', 'PlugOut', 'link-144');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt id="link-145" class="py-name"><a title="nbxmpp.dispatcher_nb" class="py-name" href="#" onclick="return doclink('link-145', 'dispatcher_nb', 'link-19');">dispatcher_nb</a></tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-146', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-147" class="py-name" targets="Class Method nbxmpp.dispatcher_nb.Dispatcher.get_instance()=nbxmpp.dispatcher_nb.Dispatcher-class.html#get_instance,Class Method nbxmpp.plugin.PlugIn.get_instance()=nbxmpp.plugin.PlugIn-class.html#get_instance,Class Method nbxmpp.proxy_connectors.ProxyConnector.get_instance()=nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-147', 'get_instance', 'link-147');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-148', 'PlugIn', 'link-16');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">,</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-name">after_SASL</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">old_features</tt><tt class="py-op">=</tt><tt class="py-name">old_features</tt><tt class="py-op">)</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-149', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-150" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.restoreHandlers()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.restoreHandlers" class="py-name" href="#" onclick="return doclink('link-150', 'restoreHandlers', 'link-150');">restoreHandlers</a></tt><tt class="py-op">(</tt><tt class="py-name">handlers</tt><tt class="py-op">)</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">User</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">username</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">:</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-151" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-151', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-comment">### Perform auth step</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt id="link-152" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-152', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Got challenge:'</tt> <tt class="py-op">+</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">==</tt> <tt class="py-string">'GSSAPI'</tt><tt class="py-op">:</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_step</tt> <tt class="py-op">==</tt> <tt id="link-153" class="py-name"><a title="nbxmpp.auth_nb.GSS_STATE_STEP" class="py-name" href="#" onclick="return doclink('link-153', 'GSS_STATE_STEP', 'link-24');">GSS_STATE_STEP</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt id="link-154" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-154', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientStep</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">,</tt> <tt class="py-name">incoming_data</tt><tt class="py-op">)</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">rc</tt> <tt class="py-op">!=</tt> <tt id="link-155" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-155', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">AUTH_GSS_CONTINUE</tt><tt class="py-op">:</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_step</tt> <tt class="py-op">=</tt> <tt id="link-156" class="py-name"><a title="nbxmpp.auth_nb.GSS_STATE_WRAP" class="py-name" href="#" onclick="return doclink('link-156', 'GSS_STATE_WRAP', 'link-25');">GSS_STATE_WRAP</a></tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_step</tt> <tt class="py-op">==</tt> <tt id="link-157" class="py-name"><a title="nbxmpp.auth_nb.GSS_STATE_WRAP" class="py-name" href="#" onclick="return doclink('link-157', 'GSS_STATE_WRAP', 'link-25');">GSS_STATE_WRAP</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt id="link-158" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-158', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientUnwrap</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">,</tt> <tt class="py-name">incoming_data</tt><tt class="py-op">)</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-name">response</tt> <tt class="py-op">=</tt> <tt id="link-159" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-159', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientResponse</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">)</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-name">rc</tt> <tt class="py-op">=</tt> <tt id="link-160" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-160', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientWrap</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">,</tt> <tt class="py-name">response</tt><tt class="py-op">,</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt id="link-161" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-161', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientUserName</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-name">response</tt> <tt class="py-op">=</tt> <tt id="link-162" class="py-name"><a title="nbxmpp.auth_nb.kerberos" class="py-name" href="#" onclick="return doclink('link-162', 'kerberos', 'link-21');">kerberos</a></tt><tt class="py-op">.</tt><tt class="py-name">authGSSClientResponse</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">gss_vc</tt><tt class="py-op">)</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">response</tt><tt class="py-op">:</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-name">response</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-163', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt id="link-164" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-164', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'response'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-165" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-165', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-name">response</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name" targets="Method nbxmpp.protocol.JID.__str__()=nbxmpp.protocol.JID-class.html#__str__,Method nbxmpp.simplexml.Node.__str__()=nbxmpp.simplexml.Node-class.html#__str__,Method nbxmpp.tls_nb.SSLWrapper.Error.__str__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-166', '__str__', 'link-166');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-167" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-167', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">==</tt> <tt class="py-string">'SCRAM-SHA-1'</tt><tt class="py-op">:</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-name">hashfn</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha1</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-param">k</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hmac</tt><tt class="py-op">.</tt><tt class="py-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">=</tt><tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">msg</tt><tt class="py-op">=</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-name">digestmod</tt><tt class="py-op">=</tt><tt class="py-name">hashfn</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">XOR</tt><tt class="py-op">(</tt><tt class="py-param">x</tt><tt class="py-op">,</tt> <tt class="py-param">y</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">px</tt><tt class="py-op">)</tt> <tt class="py-op">^</tt> <tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">py</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">px</tt><tt class="py-op">,</tt> <tt class="py-name">py</tt> <tt class="py-keyword">in</tt> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">Hi</tt><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">salt</tt><tt class="py-op">,</tt> <tt class="py-param">iters</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-name">ii</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> <tt class="py-name">ui_1</tt> <tt class="py-op">=</tt> <tt class="py-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-name">salt</tt> <tt class="py-op">+</tt> <tt class="py-string">'\0\0\0\01'</tt><tt class="py-op">)</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-name">ui</tt> <tt class="py-op">=</tt> <tt class="py-name">ui_1</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">iters</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-name">ii</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-name">ui_1</tt> <tt class="py-op">=</tt> <tt class="py-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-name">ui_1</tt><tt class="py-op">)</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-name">ui</tt> <tt class="py-op">=</tt> <tt class="py-name">XOR</tt><tt class="py-op">(</tt><tt class="py-name">ui</tt><tt class="py-op">,</tt> <tt class="py-name">ui_1</tt><tt class="py-op">)</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ui</tt> </tt>
+</div><a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">scram_H</tt><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hashfn</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_step</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_step</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_soup</tt> <tt class="py-op">+=</tt> <tt class="py-string">','</tt> <tt class="py-op">+</tt> <tt class="py-name">data</tt> <tt class="py-op">+</tt> <tt class="py-string">','</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt id="link-168" class="py-name"><a title="nbxmpp.auth_nb.scram_parse" class="py-name" href="#" onclick="return doclink('link-168', 'scram_parse', 'link-137');">scram_parse</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-comment"># TODO: Should check cnonce here.</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-comment"># TODO: Channel binding data goes in here too.</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-string">'c='</tt> <tt class="py-op">+</tt> <tt class="py-name">scram_base64</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_gs2</tt><tt class="py-op">)</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">+=</tt> <tt class="py-string">',r='</tt> <tt class="py-op">+</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'r'</tt><tt class="py-op">]</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_soup</tt> <tt class="py-op">+=</tt> <tt class="py-name">r</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-name">salt</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'s'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'base64'</tt><tt class="py-op">)</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt class="py-name">iter</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'i'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-name">SaltedPassword</tt> <tt class="py-op">=</tt> <tt class="py-name">Hi</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt><tt class="py-op">,</tt> <tt class="py-name">salt</tt><tt class="py-op">,</tt> <tt class="py-name">iter</tt><tt class="py-op">)</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-comment"># TODO: Could cache this, along with salt+iter.</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt class="py-name">ClientKey</tt> <tt class="py-op">=</tt> <tt class="py-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-name">SaltedPassword</tt><tt class="py-op">,</tt> <tt class="py-string">'Client Key'</tt><tt class="py-op">)</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-name">StoredKey</tt> <tt class="py-op">=</tt> <tt class="py-name">scram_H</tt><tt class="py-op">(</tt><tt class="py-name">ClientKey</tt><tt class="py-op">)</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-name">ClientSignature</tt> <tt class="py-op">=</tt> <tt class="py-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-name">StoredKey</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_soup</tt><tt class="py-op">)</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-name">ClientProof</tt> <tt class="py-op">=</tt> <tt class="py-name">XOR</tt><tt class="py-op">(</tt><tt class="py-name">ClientKey</tt><tt class="py-op">,</tt> <tt class="py-name">ClientSignature</tt><tt class="py-op">)</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">+=</tt> <tt class="py-string">',p='</tt> <tt class="py-op">+</tt> <tt class="py-name">scram_base64</tt><tt class="py-op">(</tt><tt class="py-name">ClientProof</tt><tt class="py-op">)</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-name">ServerKey</tt> <tt class="py-op">=</tt> <tt class="py-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-name">SaltedPassword</tt><tt class="py-op">,</tt> <tt class="py-string">'Server Key'</tt><tt class="py-op">)</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_ServerSignature</tt> <tt class="py-op">=</tt> <tt class="py-name">HMAC</tt><tt class="py-op">(</tt><tt class="py-name">ServerKey</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_soup</tt><tt class="py-op">)</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-name">scram_base64</tt><tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">)</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-169" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-169', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'response'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-170" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-170', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">sasl_data</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-171', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-172" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-172', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_step</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt id="link-173" class="py-name"><a title="nbxmpp.auth_nb.scram_parse" class="py-name" href="#" onclick="return doclink('link-173', 'scram_parse', 'link-137');">scram_parse</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'v'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'base64'</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_ServerSignature</tt><tt class="py-op">:</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-comment"># TODO: Not clear what to do here - need to abort.</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-174" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-174', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'response'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-175" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-175', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">;</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-176', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-177" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-177', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-comment"># magic foo...</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">chal</tt> <tt class="py-op">=</tt> <tt id="link-178" class="py-name" targets="Function nbxmpp.auth_nb.challenge_splitter()=nbxmpp.auth_nb-module.html#challenge_splitter"><a title="nbxmpp.auth_nb.challenge_splitter" class="py-name" href="#" onclick="return doclink('link-178', 'challenge_splitter', 'link-178');">challenge_splitter</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">realm</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'realm'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">chal</tt><tt class="py-op">:</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">realm</tt> <tt class="py-op">=</tt> <tt class="py-name">chal</tt><tt class="py-op">[</tt><tt class="py-string">'realm'</tt><tt class="py-op">]</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'qop'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">chal</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">chal</tt><tt class="py-op">[</tt><tt class="py-string">'qop'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-name">chal</tt><tt class="py-op">[</tt><tt class="py-string">'qop'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt><tt class="py-string">'auth'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">chal</tt><tt class="py-op">[</tt><tt class="py-string">'qop'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'auth'</tt> <tt class="py-keyword">in</tt> \ </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-name">chal</tt><tt class="py-op">[</tt><tt class="py-string">'qop'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'username'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">username</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">realm</tt><tt class="py-op">:</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'realm'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">realm</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'realm'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'nonce'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">chal</tt><tt class="py-op">[</tt><tt class="py-string">'nonce'</tt><tt class="py-op">]</tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'cnonce'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">"%x"</tt> <tt class="py-op">%</tt> <tt class="py-name">randint</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">**</tt><tt class="py-number">28</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">randint</tt> \ </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt class="py-keyword">in</tt> <tt class="py-name">itertools</tt><tt class="py-op">.</tt><tt class="py-name">repeat</tt><tt class="py-op">(</tt><tt class="py-name">random</tt><tt class="py-op">.</tt><tt class="py-name">randint</tt><tt class="py-op">,</tt> <tt class="py-number">7</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'nc'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'00000001'</tt><tt class="py-op">)</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'qop'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'auth'</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'digest-uri'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'xmpp/'</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'charset'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'utf-8'</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-comment"># Password is now required</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">get_password</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="nbxmpp.auth_nb.SASL.set_password" class="py-name" href="#" onclick="return doclink('link-179', 'set_password', 'link-104');">set_password</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt><tt class="py-op">)</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-string">'rspauth'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">chal</tt><tt class="py-op">:</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> <tt class="py-comment"># Check rspauth value</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">chal</tt><tt class="py-op">[</tt><tt class="py-string">'rspauth'</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">digest_rspauth</tt><tt class="py-op">:</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-name">on_auth_fail</tt><tt class="py-op">(</tt><tt class="py-string">'rspauth is wrong'</tt><tt class="py-op">)</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-180" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-180', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-181" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-181', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'response'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt><tt id="link-182" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-182', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">=</tt> <tt id="link-183" class="py-name"><a title="nbxmpp.auth_nb.SASL_FAILURE" class="py-name" href="#" onclick="return doclink('link-183', 'SASL_FAILURE', 'link-27');">SASL_FAILURE</a></tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt id="link-184" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-184', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Failed SASL authentification: unknown challenge'</tt><tt class="py-op">)</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">:</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_sasl</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-185" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-185', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt> </tt>
+</div><a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="SASL._convert_to_iso88591"></a><div id="SASL._convert_to_iso88591-def"><a name="L457"></a><tt class="py-lineno">457</tt> <a class="py-toggle" href="#" id="SASL._convert_to_iso88591-toggle" onclick="return toggle('SASL._convert_to_iso88591');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#_convert_to_iso88591">_convert_to_iso88591</a><tt class="py-op">(</tt><tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL._convert_to_iso88591-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL._convert_to_iso88591-expanded"><a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-name">string</tt> <tt class="py-op">=</tt> <tt class="py-name">string</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'iso-8859-1'</tt><tt class="py-op">)</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">UnicodeEncodeError</tt><tt class="py-op">:</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">string</tt> </tt>
+</div><a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> </tt>
+<a name="SASL.set_password"></a><div id="SASL.set_password-def"><a name="L464"></a><tt class="py-lineno">464</tt> <a class="py-toggle" href="#" id="SASL.set_password-toggle" onclick="return toggle('SASL.set_password');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.SASL-class.html#set_password">set_password</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">password</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SASL.set_password-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SASL.set_password-expanded"><a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> <tt class="py-keyword">if</tt> <tt class="py-name">password</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">else</tt> <tt class="py-name">password</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">==</tt> <tt class="py-string">'SCRAM-SHA-1'</tt><tt class="py-op">:</tt> </tt>
+<a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> <tt class="py-name">nonce</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">'%x'</tt> <tt class="py-op">%</tt> <tt class="py-name">randint</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">28</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">randint</tt> <tt class="py-keyword">in</tt> \ </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> <tt class="py-name">itertools</tt><tt class="py-op">.</tt><tt class="py-name">repeat</tt><tt class="py-op">(</tt><tt class="py-name">random</tt><tt class="py-op">.</tt><tt class="py-name">randint</tt><tt class="py-op">,</tt> <tt class="py-number">7</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_soup</tt> <tt class="py-op">=</tt> <tt class="py-string">'n='</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">username</tt> <tt class="py-op">+</tt> <tt class="py-string">',r='</tt> <tt class="py-op">+</tt> <tt class="py-name">nonce</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_gs2</tt> <tt class="py-op">=</tt> <tt class="py-string">'n,,'</tt> <tt class="py-comment"># No CB yet.</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_gs2</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scram_soup</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'base64'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt>\ </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-186" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-186', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-187" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-187', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-string">'mechanism'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">sasl_data</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">==</tt> <tt class="py-string">'DIGEST-MD5'</tt><tt class="py-op">:</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-name">hash_username</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name" targets="Static Method nbxmpp.auth_nb.SASL._convert_to_iso88591()=nbxmpp.auth_nb.SASL-class.html#_convert_to_iso88591"><a title="nbxmpp.auth_nb.SASL._convert_to_iso88591" class="py-name" href="#" onclick="return doclink('link-188', '_convert_to_iso88591', 'link-188');">_convert_to_iso88591</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'username'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> <tt class="py-name">hash_realm</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name"><a title="nbxmpp.auth_nb.SASL._convert_to_iso88591" class="py-name" href="#" onclick="return doclink('link-189', '_convert_to_iso88591', 'link-188');">_convert_to_iso88591</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'realm'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L478"></a><tt class="py-lineno">478</tt> <tt class="py-line"> <tt class="py-name">hash_password</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="nbxmpp.auth_nb.SASL._convert_to_iso88591" class="py-name" href="#" onclick="return doclink('link-190', '_convert_to_iso88591', 'link-188');">_convert_to_iso88591</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt><tt class="py-op">)</tt> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-name">A1</tt> <tt class="py-op">=</tt> <tt id="link-191" class="py-name" targets="Function nbxmpp.auth_nb.C()=nbxmpp.auth_nb-module.html#C"><a title="nbxmpp.auth_nb.C" class="py-name" href="#" onclick="return doclink('link-191', 'C', 'link-191');">C</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-192" class="py-name" targets="Function nbxmpp.auth_nb.H()=nbxmpp.auth_nb-module.html#H"><a title="nbxmpp.auth_nb.H" class="py-name" href="#" onclick="return doclink('link-192', 'H', 'link-192');">H</a></tt><tt class="py-op">(</tt><tt id="link-193" class="py-name"><a title="nbxmpp.auth_nb.C" class="py-name" href="#" onclick="return doclink('link-193', 'C', 'link-191');">C</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">hash_username</tt><tt class="py-op">,</tt> <tt class="py-name">hash_realm</tt><tt class="py-op">,</tt> <tt class="py-name">hash_password</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'nonce'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'cnonce'</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt class="py-name">A2</tt> <tt class="py-op">=</tt> <tt id="link-194" class="py-name"><a title="nbxmpp.auth_nb.C" class="py-name" href="#" onclick="return doclink('link-194', 'C', 'link-191');">C</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'AUTHENTICATE'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'digest-uri'</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-name">response</tt> <tt class="py-op">=</tt> <tt id="link-195" class="py-name" targets="Function nbxmpp.auth_nb.HH()=nbxmpp.auth_nb-module.html#HH"><a title="nbxmpp.auth_nb.HH" class="py-name" href="#" onclick="return doclink('link-195', 'HH', 'link-195');">HH</a></tt><tt class="py-op">(</tt><tt id="link-196" class="py-name"><a title="nbxmpp.auth_nb.C" class="py-name" href="#" onclick="return doclink('link-196', 'C', 'link-191');">C</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-197" class="py-name"><a title="nbxmpp.auth_nb.HH" class="py-name" href="#" onclick="return doclink('link-197', 'HH', 'link-195');">HH</a></tt><tt class="py-op">(</tt><tt class="py-name">A1</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'nonce'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'nc'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'cnonce'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'qop'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-198" class="py-name"><a title="nbxmpp.auth_nb.HH" class="py-name" href="#" onclick="return doclink('link-198', 'HH', 'link-195');">HH</a></tt><tt class="py-op">(</tt><tt class="py-name">A2</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-name">A2</tt> <tt class="py-op">=</tt> <tt id="link-199" class="py-name"><a title="nbxmpp.auth_nb.C" class="py-name" href="#" onclick="return doclink('link-199', 'C', 'link-191');">C</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'digest-uri'</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">digest_rspauth</tt> <tt class="py-op">=</tt> <tt id="link-200" class="py-name"><a title="nbxmpp.auth_nb.HH" class="py-name" href="#" onclick="return doclink('link-200', 'HH', 'link-195');">HH</a></tt><tt class="py-op">(</tt><tt id="link-201" class="py-name"><a title="nbxmpp.auth_nb.C" class="py-name" href="#" onclick="return doclink('link-201', 'C', 'link-191');">C</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-202" class="py-name"><a title="nbxmpp.auth_nb.HH" class="py-name" href="#" onclick="return doclink('link-202', 'HH', 'link-195');">HH</a></tt><tt class="py-op">(</tt><tt class="py-name">A1</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'nonce'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'nc'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'cnonce'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'qop'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt id="link-203" class="py-name"><a title="nbxmpp.auth_nb.HH" class="py-name" href="#" onclick="return doclink('link-203', 'HH', 'link-195');">HH</a></tt><tt class="py-op">(</tt><tt class="py-name">A2</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">response</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-string">u''</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">'charset'</tt><tt class="py-op">,</tt> <tt class="py-string">'username'</tt><tt class="py-op">,</tt> <tt class="py-string">'realm'</tt><tt class="py-op">,</tt> <tt class="py-string">'nonce'</tt><tt class="py-op">,</tt> <tt class="py-string">'nc'</tt><tt class="py-op">,</tt> <tt class="py-string">'cnonce'</tt><tt class="py-op">,</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> <tt class="py-string">'digest-uri'</tt><tt class="py-op">,</tt> <tt class="py-string">'response'</tt><tt class="py-op">,</tt> <tt class="py-string">'qop'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">'nc'</tt><tt class="py-op">,</tt> <tt class="py-string">'qop'</tt><tt class="py-op">,</tt> <tt class="py-string">'response'</tt><tt class="py-op">,</tt> <tt class="py-string">'charset'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">+=</tt> <tt class="py-string">u"%s=%s,"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">+=</tt> <tt class="py-string">u'%s="%s",'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-name">sasl_data</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'base64'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> <tt class="py-string">'\r'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-204" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-204', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'response'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-205" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-205', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">sasl_data</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">==</tt> <tt class="py-string">'PLAIN'</tt><tt class="py-op">:</tt> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-string">u'\x00%s\x00%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">username</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt><tt class="py-op">)</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-name">sasl_data</tt> <tt class="py-op">=</tt> <tt class="py-name">sasl_data</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'base64'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-string">'\n'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-206" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-206', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-207" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-207', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> <tt class="py-string">'mechanism'</tt><tt class="py-op">:</tt> <tt class="py-string">'PLAIN'</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">sasl_data</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mechanism</tt> <tt class="py-op">==</tt> <tt class="py-string">'X-MESSENGER-OAUTH2'</tt><tt class="py-op">:</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-208" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-208', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-209" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-209', 'NS_SASL', 'link-1');">NS_SASL</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-string">'mechanism'</tt><tt class="py-op">:</tt> <tt class="py-string">'X-MESSENGER-OAUTH2'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-210" class="py-name" targets="Method nbxmpp.simplexml.Node.addData()=nbxmpp.simplexml.Node-class.html#addData"><a title="nbxmpp.simplexml.Node.addData" class="py-name" href="#" onclick="return doclink('link-210', 'addData', 'link-210');">addData</a></tt><tt class="py-op">(</tt><tt class="py-name">password</tt><tt class="py-op">)</tt> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-211" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-211', 'send', 'link-85');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingNonSASL"></a><div id="NonBlockingNonSASL-def"><a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt> <a class="py-toggle" href="#" id="NonBlockingNonSASL-toggle" onclick="return toggle('NonBlockingNonSASL');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html">NonBlockingNonSASL</a><tt class="py-op">(</tt><tt class="py-base-class">PlugIn</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingNonSASL-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingNonSASL-expanded"><a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"><tt class="py-docstring"> Implements old Non-SASL (JEP-0078) authentication used in jabberd1.4 and</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"><tt class="py-docstring"> transport authentication</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingNonSASL.__init__"></a><div id="NonBlockingNonSASL.__init__-def"><a name="L519"></a><tt class="py-lineno">519</tt> <a class="py-toggle" href="#" id="NonBlockingNonSASL.__init__-toggle" onclick="return toggle('NonBlockingNonSASL.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">user</tt><tt class="py-op">,</tt> <tt class="py-param">password</tt><tt class="py-op">,</tt> <tt class="py-param">resource</tt><tt class="py-op">,</tt> <tt class="py-param">on_auth</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingNonSASL.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingNonSASL.__init__-expanded"><a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"><tt class="py-docstring"> Caches username, password and resource for auth</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> <tt id="link-212" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-212', 'PlugIn', 'link-16');">PlugIn</a></tt><tt class="py-op">.</tt><tt id="link-213" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-213', '__init__', 'link-37');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user</tt> <tt class="py-op">=</tt> <tt class="py-name">user</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">password</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt> <tt class="py-op">=</tt> <tt class="py-name">password</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-op">=</tt> <tt class="py-name">resource</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt> <tt class="py-op">=</tt> <tt class="py-name">on_auth</tt> </tt>
+</div><a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingNonSASL.plugin"></a><div id="NonBlockingNonSASL.plugin-def"><a name="L532"></a><tt class="py-lineno">532</tt> <a class="py-toggle" href="#" id="NonBlockingNonSASL.plugin-toggle" onclick="return toggle('NonBlockingNonSASL.plugin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin">plugin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingNonSASL.plugin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingNonSASL.plugin-expanded"><a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"><tt class="py-docstring"> Determine the best auth method (digest/0k/plain) and use it for auth.</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"><tt class="py-docstring"> Returns used method name on success. Used internally</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"> <tt id="link-214" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-214', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Querying server about possible auth methods'</tt><tt class="py-op">)</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt> <tt class="py-op">=</tt> <tt class="py-name">owner</tt> </tt>
+<a name="L539"></a><tt class="py-lineno">539</tt> <tt class="py-line"> </tt>
+<a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-215', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-216" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse" class="py-name" href="#" onclick="return doclink('link-216', 'SendAndWaitForResponse', 'link-216');">SendAndWaitForResponse</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"> <tt id="link-217" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-217', 'Iq', 'link-12');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt id="link-218" class="py-name"><a title="nbxmpp.protocol.NS_AUTH" class="py-name" href="#" onclick="return doclink('link-218', 'NS_AUTH', 'link-5');">NS_AUTH</a></tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-219" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-219', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'username'</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"> <tt class="py-name">func</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-220" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingNonSASL._on_username()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_username"><a title="nbxmpp.auth_nb.NonBlockingNonSASL._on_username" class="py-name" href="#" onclick="return doclink('link-220', '_on_username', 'link-220');">_on_username</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingNonSASL._on_username"></a><div id="NonBlockingNonSASL._on_username-def"><a name="L544"></a><tt class="py-lineno">544</tt> <a class="py-toggle" href="#" id="NonBlockingNonSASL._on_username-toggle" onclick="return toggle('NonBlockingNonSASL._on_username');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_username">_on_username</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingNonSASL._on_username-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingNonSASL._on_username-expanded"><a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-221" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-221', 'isResultNode', 'link-11');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> <tt id="link-222" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-222', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'No result node arrived! Aborting...'</tt><tt class="py-op">)</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">=</tt><tt id="link-223" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-223', 'Iq', 'link-12');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt> </tt>
+<a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"> <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-224', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt> </tt>
+<a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-225" class="py-name" targets="Method nbxmpp.simplexml.Node.setTagData()=nbxmpp.simplexml.Node-class.html#setTagData"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-225', 'setTagData', 'link-225');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'username'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
+<a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-226" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-226', 'setTagData', 'link-225');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'resource'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt><tt class="py-op">)</tt> </tt>
+<a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-227" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-227', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'digest'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> <tt id="link-228" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-228', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Performing digest authentication"</tt><tt class="py-op">)</tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-229" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-229', 'setTagData', 'link-225');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'digest'</tt><tt class="py-op">,</tt> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha1</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-230" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-230', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'id'</tt><tt class="py-op">]</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">hexdigest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-231" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-231', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'password'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-232" class="py-name" targets="Method nbxmpp.simplexml.Node.delChild()=nbxmpp.simplexml.Node-class.html#delChild"><a title="nbxmpp.simplexml.Node.delChild" class="py-name" href="#" onclick="return doclink('link-232', 'delChild', 'link-232');">delChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'password'</tt><tt class="py-op">)</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_method</tt> <tt class="py-op">=</tt> <tt class="py-string">'digest'</tt> </tt>
+<a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-233" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-233', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'token'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"> <tt class="py-name">token</tt> <tt class="py-op">=</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name" targets="Method nbxmpp.simplexml.Node.getTagData()=nbxmpp.simplexml.Node-class.html#getTagData"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-234', 'getTagData', 'link-234');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'token'</tt><tt class="py-op">)</tt> </tt>
+<a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> <tt class="py-name">seq</tt> <tt class="py-op">=</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-235', 'getTagData', 'link-234');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'sequence'</tt><tt class="py-op">)</tt> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"> <tt id="link-236" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-236', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Performing zero-k authentication"</tt><tt class="py-op">)</tt> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">hasher</tt><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha1</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">hexdigest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> </tt>
+<a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">hash_n_times</tt><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">count</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">count</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasher</tt><tt class="py-op">(</tt><tt class="py-name">hash_n_times</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-name">count</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">s</tt> </tt>
+</div><a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"> </tt>
+<a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> <tt class="py-name">hash_</tt> <tt class="py-op">=</tt> <tt class="py-name">hash_n_times</tt><tt class="py-op">(</tt><tt class="py-name">hasher</tt><tt class="py-op">(</tt><tt class="py-name">hasher</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">token</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">seq</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-237', 'setTagData', 'link-225');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'hash'</tt><tt class="py-op">,</tt> <tt class="py-name">hash_</tt><tt class="py-op">)</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_method</tt><tt class="py-op">=</tt><tt class="py-string">'0k'</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> <tt id="link-238" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-238', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Secure methods unsupported, performing plain text \</tt> </tt>
+<a name="L579"></a><tt class="py-lineno">579</tt> <tt class="py-line"><tt class="py-string"> authentication"</tt><tt class="py-op">)</tt> </tt>
+<a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_method</tt> <tt class="py-op">=</tt> <tt class="py-string">'plain'</tt> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">get_password</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingNonSASL._on_password()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_password"><a title="nbxmpp.auth_nb.NonBlockingNonSASL._on_password" class="py-name" href="#" onclick="return doclink('link-239', '_on_password', 'link-239');">_on_password</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_method</tt><tt class="py-op">)</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-240', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse" class="py-name" href="#" onclick="return doclink('link-241', 'SendAndWaitForResponse', 'link-216');">SendAndWaitForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> </tt>
+<a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> <tt class="py-name">func</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-242" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingNonSASL._on_auth()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_auth"><a title="nbxmpp.auth_nb.NonBlockingNonSASL._on_auth" class="py-name" href="#" onclick="return doclink('link-242', '_on_auth', 'link-242');">_on_auth</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L585"></a><tt class="py-lineno">585</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingNonSASL._on_password"></a><div id="NonBlockingNonSASL._on_password-def"><a name="L586"></a><tt class="py-lineno">586</tt> <a class="py-toggle" href="#" id="NonBlockingNonSASL._on_password-toggle" onclick="return toggle('NonBlockingNonSASL._on_password');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_password">_on_password</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">password</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingNonSASL._on_password-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingNonSASL._on_password-expanded"><a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> <tt class="py-keyword">if</tt> <tt class="py-name">password</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">else</tt> <tt class="py-name">password</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">=</tt><tt id="link-243" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-243', 'Iq', 'link-12');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-244" class="py-name"><a title="nbxmpp.protocol.NS_AUTH" class="py-name" href="#" onclick="return doclink('link-244', 'NS_AUTH', 'link-5');">NS_AUTH</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-245" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-245', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt> </tt>
+<a name="L590"></a><tt class="py-lineno">590</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-246" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-246', 'setTagData', 'link-225');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'username'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
+<a name="L591"></a><tt class="py-lineno">591</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-247" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-247', 'setTagData', 'link-225');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'resource'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt><tt class="py-op">)</tt> </tt>
+<a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-248" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-248', 'setTagData', 'link-225');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'password'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">password</tt><tt class="py-op">)</tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"> <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-249" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-249', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-250" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse" class="py-name" href="#" onclick="return doclink('link-250', 'SendAndWaitForResponse', 'link-216');">SendAndWaitForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"> <tt class="py-name">func</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-251" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingNonSASL._on_auth" class="py-name" href="#" onclick="return doclink('link-251', '_on_auth', 'link-242');">_on_auth</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingNonSASL._on_auth"></a><div id="NonBlockingNonSASL._on_auth-def"><a name="L596"></a><tt class="py-lineno">596</tt> <a class="py-toggle" href="#" id="NonBlockingNonSASL._on_auth-toggle" onclick="return toggle('NonBlockingNonSASL._on_auth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_auth">_on_auth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingNonSASL._on_auth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingNonSASL._on_auth-expanded"><a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-252" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-252', 'isResultNode', 'link-11');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> <tt id="link-253" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-253', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Sucessfully authenticated with remote host.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L599"></a><tt class="py-lineno">599</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">User</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user</tt> </tt>
+<a name="L600"></a><tt class="py-lineno">600</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">Resource</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> </tt>
+<a name="L601"></a><tt class="py-lineno">601</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">_registered_name</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">User</tt> <tt class="py-op">+</tt> <tt class="py-string">'@'</tt> <tt class="py-op">+</tt> \ </tt>
+<a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">+</tt> <tt class="py-string">'/'</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">Resource</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_method</tt><tt class="py-op">)</tt> </tt>
+<a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"> <tt id="link-254" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-254', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Authentication failed!'</tt><tt class="py-op">)</tt> </tt>
+<a name="L605"></a><tt class="py-lineno">605</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind"></a><div id="NonBlockingBind-def"><a name="L607"></a><tt class="py-lineno">607</tt> <tt class="py-line"> </tt>
+<a name="L608"></a><tt class="py-lineno">608</tt> <a class="py-toggle" href="#" id="NonBlockingBind-toggle" onclick="return toggle('NonBlockingBind');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html">NonBlockingBind</a><tt class="py-op">(</tt><tt class="py-base-class">PlugIn</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingBind-expanded"><a name="L609"></a><tt class="py-lineno">609</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt> <tt class="py-line"><tt class="py-docstring"> Bind some JID to the current connection to allow router know of our</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"><tt class="py-docstring"> location. Must be plugged after successful SASL auth</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind.__init__"></a><div id="NonBlockingBind.__init__-def"><a name="L614"></a><tt class="py-lineno">614</tt> <a class="py-toggle" href="#" id="NonBlockingBind.__init__-toggle" onclick="return toggle('NonBlockingBind.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBind.__init__-expanded"><a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> <tt id="link-255" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-255', 'PlugIn', 'link-16');">PlugIn</a></tt><tt class="py-op">.</tt><tt id="link-256" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-256', '__init__', 'link-37');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L616"></a><tt class="py-lineno">616</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bound</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L617"></a><tt class="py-lineno">617</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">supports_sm</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L618"></a><tt class="py-lineno">618</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L619"></a><tt class="py-lineno">619</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind.plugin"></a><div id="NonBlockingBind.plugin-def"><a name="L620"></a><tt class="py-lineno">620</tt> <a class="py-toggle" href="#" id="NonBlockingBind.plugin-toggle" onclick="return toggle('NonBlockingBind.plugin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugin">plugin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind.plugin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBind.plugin-expanded"><a name="L621"></a><tt class="py-lineno">621</tt> <tt class="py-line"> <tt class="py-docstring">''' Start resource binding, if allowed at this time. Used internally. '''</tt> </tt>
+<a name="L622"></a><tt class="py-lineno">622</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-257" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-257', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt><tt class="py-op">:</tt> </tt>
+<a name="L623"></a><tt class="py-lineno">623</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L624"></a><tt class="py-lineno">624</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-258" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler
+nbxmpp.auth_nb.SASL.FeaturesHandler" class="py-name" href="#" onclick="return doclink('link-258', 'FeaturesHandler', 'link-41');">FeaturesHandler</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-259" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-259', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L625"></a><tt class="py-lineno">625</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-260" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-260', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt><tt class="py-op">)</tt> </tt>
+<a name="L626"></a><tt class="py-lineno">626</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-261" class="py-name"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-261', 'NodeProcessed', 'link-10');">NodeProcessed</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L627"></a><tt class="py-lineno">627</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L628"></a><tt class="py-lineno">628</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L629"></a><tt class="py-lineno">629</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-262" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-262', 'RegisterHandler', 'link-62');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-263" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler
+nbxmpp.auth_nb.SASL.FeaturesHandler" class="py-name" href="#" onclick="return doclink('link-263', 'FeaturesHandler', 'link-41');">FeaturesHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L630"></a><tt class="py-lineno">630</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-264" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-264', 'NS_STREAMS', 'link-3');">NS_STREAMS</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L631"></a><tt class="py-lineno">631</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind.FeaturesHandler"></a><div id="NonBlockingBind.FeaturesHandler-def"><a name="L632"></a><tt class="py-lineno">632</tt> <a class="py-toggle" href="#" id="NonBlockingBind.FeaturesHandler-toggle" onclick="return toggle('NonBlockingBind.FeaturesHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html#FeaturesHandler">FeaturesHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">conn</tt><tt class="py-op">,</tt> <tt class="py-param">feats</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind.FeaturesHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBind.FeaturesHandler-expanded"><a name="L633"></a><tt class="py-lineno">633</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L634"></a><tt class="py-lineno">634</tt> <tt class="py-line"><tt class="py-docstring"> Determine if server supports resource binding and set some internal</tt> </tt>
+<a name="L635"></a><tt class="py-lineno">635</tt> <tt class="py-line"><tt class="py-docstring"> attributes accordingly.</tt> </tt>
+<a name="L636"></a><tt class="py-lineno">636</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L637"></a><tt class="py-lineno">637</tt> <tt class="py-line"><tt class="py-docstring"> It also checks if server supports stream management</tt> </tt>
+<a name="L638"></a><tt class="py-lineno">638</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L639"></a><tt class="py-lineno">639</tt> <tt class="py-line"> </tt>
+<a name="L640"></a><tt class="py-lineno">640</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">feats</tt><tt class="py-op">.</tt><tt id="link-265" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-265', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'sm'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-266" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-266', 'NS_STREAM_MGMT', 'link-7');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L641"></a><tt class="py-lineno">641</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">supports_sm</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> <tt class="py-comment"># server supports stream management</tt> </tt>
+<a name="L642"></a><tt class="py-lineno">642</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt><tt class="py-op">:</tt> </tt>
+<a name="L643"></a><tt class="py-lineno">643</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt id="link-267" class="py-name" targets="Method nbxmpp.smacks.Smacks.resume_request()=nbxmpp.smacks.Smacks-class.html#resume_request"><a title="nbxmpp.smacks.Smacks.resume_request" class="py-name" href="#" onclick="return doclink('link-267', 'resume_request', 'link-267');">resume_request</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L644"></a><tt class="py-lineno">644</tt> <tt class="py-line"> </tt>
+<a name="L645"></a><tt class="py-lineno">645</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">feats</tt><tt class="py-op">.</tt><tt id="link-268" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-268', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'bind'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-269" class="py-name"><a title="nbxmpp.protocol.NS_BIND" class="py-name" href="#" onclick="return doclink('link-269', 'NS_BIND', 'link-4');">NS_BIND</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L646"></a><tt class="py-lineno">646</tt> <tt class="py-line"> <tt id="link-270" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-270', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Server does not requested binding.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L647"></a><tt class="py-lineno">647</tt> <tt class="py-line"> <tt class="py-comment"># we try to bind resource anyway</tt> </tt>
+<a name="L648"></a><tt class="py-lineno">648</tt> <tt class="py-line"> <tt class="py-comment">#self.bound='failure'</tt> </tt>
+<a name="L649"></a><tt class="py-lineno">649</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bound</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L650"></a><tt class="py-lineno">650</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L651"></a><tt class="py-lineno">651</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">feats</tt><tt class="py-op">.</tt><tt id="link-271" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-271', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'session'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-272" class="py-name"><a title="nbxmpp.protocol.NS_SESSION" class="py-name" href="#" onclick="return doclink('link-272', 'NS_SESSION', 'link-2');">NS_SESSION</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L652"></a><tt class="py-lineno">652</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L653"></a><tt class="py-lineno">653</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L654"></a><tt class="py-lineno">654</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L655"></a><tt class="py-lineno">655</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bound</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L656"></a><tt class="py-lineno">656</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind.plugout"></a><div id="NonBlockingBind.plugout-def"><a name="L657"></a><tt class="py-lineno">657</tt> <a class="py-toggle" href="#" id="NonBlockingBind.plugout-toggle" onclick="return toggle('NonBlockingBind.plugout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugout">plugout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind.plugout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBind.plugout-expanded"><a name="L658"></a><tt class="py-lineno">658</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L659"></a><tt class="py-lineno">659</tt> <tt class="py-line"><tt class="py-docstring"> Remove Bind handler from owner's dispatcher. Used internally</tt> </tt>
+<a name="L660"></a><tt class="py-lineno">660</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L661"></a><tt class="py-lineno">661</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-273" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler" class="py-name" href="#" onclick="return doclink('link-273', 'UnregisterHandler', 'link-45');">UnregisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-274" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.FeaturesHandler
+nbxmpp.auth_nb.SASL.FeaturesHandler" class="py-name" href="#" onclick="return doclink('link-274', 'FeaturesHandler', 'link-41');">FeaturesHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L662"></a><tt class="py-lineno">662</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-275" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-275', 'NS_STREAMS', 'link-3');">NS_STREAMS</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L663"></a><tt class="py-lineno">663</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind.NonBlockingBind"></a><div id="NonBlockingBind.NonBlockingBind-def"><a name="L664"></a><tt class="py-lineno">664</tt> <a class="py-toggle" href="#" id="NonBlockingBind.NonBlockingBind-toggle" onclick="return toggle('NonBlockingBind.NonBlockingBind');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html#NonBlockingBind">NonBlockingBind</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resource</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">on_bound</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind.NonBlockingBind-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBind.NonBlockingBind-expanded"><a name="L665"></a><tt class="py-lineno">665</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L666"></a><tt class="py-lineno">666</tt> <tt class="py-line"><tt class="py-docstring"> Perform binding. Use provided resource name or random (if not provided).</tt> </tt>
+<a name="L667"></a><tt class="py-lineno">667</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L668"></a><tt class="py-lineno">668</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt><tt class="py-op">:</tt> <tt class="py-comment"># We don't bind if we resume the stream</tt> </tt>
+<a name="L669"></a><tt class="py-lineno">669</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L670"></a><tt class="py-lineno">670</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_bound</tt> <tt class="py-op">=</tt> <tt class="py-name">on_bound</tt> </tt>
+<a name="L671"></a><tt class="py-lineno">671</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resource</tt> <tt class="py-op">=</tt> <tt class="py-name">resource</tt> </tt>
+<a name="L672"></a><tt class="py-lineno">672</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resource</tt><tt class="py-op">:</tt> </tt>
+<a name="L673"></a><tt class="py-lineno">673</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resource</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-276" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-276', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'resource'</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resource</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L674"></a><tt class="py-lineno">674</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L675"></a><tt class="py-lineno">675</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resource</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L676"></a><tt class="py-lineno">676</tt> <tt class="py-line"> </tt>
+<a name="L677"></a><tt class="py-lineno">677</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-277" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.onreceive()=nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive,Method nbxmpp.transports_nb.NonBlockingTransport.onreceive()=nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-277', 'onreceive', 'link-277');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L678"></a><tt class="py-lineno">678</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-278" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-278', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-279" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse" class="py-name" href="#" onclick="return doclink('link-279', 'SendAndWaitForResponse', 'link-216');">SendAndWaitForResponse</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L679"></a><tt class="py-lineno">679</tt> <tt class="py-line"> <tt id="link-280" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-280', 'Protocol', 'link-13');">Protocol</a></tt><tt class="py-op">(</tt><tt class="py-string">'iq'</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-281" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-281', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'bind'</tt><tt class="py-op">,</tt> </tt>
+<a name="L680"></a><tt class="py-lineno">680</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> <tt id="link-282" class="py-name"><a title="nbxmpp.protocol.NS_BIND" class="py-name" href="#" onclick="return doclink('link-282', 'NS_BIND', 'link-4');">NS_BIND</a></tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resource</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L681"></a><tt class="py-lineno">681</tt> <tt class="py-line"> <tt class="py-name">func</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-283" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind._on_bound()=nbxmpp.auth_nb.NonBlockingBind-class.html#_on_bound"><a title="nbxmpp.auth_nb.NonBlockingBind._on_bound" class="py-name" href="#" onclick="return doclink('link-283', '_on_bound', 'link-283');">_on_bound</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L682"></a><tt class="py-lineno">682</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind._on_bound"></a><div id="NonBlockingBind._on_bound-def"><a name="L683"></a><tt class="py-lineno">683</tt> <a class="py-toggle" href="#" id="NonBlockingBind._on_bound-toggle" onclick="return toggle('NonBlockingBind._on_bound');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html#_on_bound">_on_bound</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind._on_bound-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBind._on_bound-expanded"><a name="L684"></a><tt class="py-lineno">684</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-284" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-284', 'isResultNode', 'link-11');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L685"></a><tt class="py-lineno">685</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-285" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-285', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'bind'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-286" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-286', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'bind'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-287" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-287', 'getTagData', 'link-234');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'jid'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L686"></a><tt class="py-lineno">686</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bound</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-288', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'bind'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-289" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-289', 'getTagData', 'link-234');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'jid'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L687"></a><tt class="py-lineno">687</tt> <tt class="py-line"> <tt id="link-290" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-290', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Successfully bound %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bound</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L688"></a><tt class="py-lineno">688</tt> <tt class="py-line"> <tt class="py-name">jid</tt> <tt class="py-op">=</tt> <tt id="link-291" class="py-name"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-291', 'JID', 'link-14');">JID</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-292" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-292', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'bind'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-293" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-293', 'getTagData', 'link-234');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'jid'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L689"></a><tt class="py-lineno">689</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">User</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-294" class="py-name" targets="Method nbxmpp.protocol.JID.getNode()=nbxmpp.protocol.JID-class.html#getNode"><a title="nbxmpp.protocol.JID.getNode" class="py-name" href="#" onclick="return doclink('link-294', 'getNode', 'link-294');">getNode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L690"></a><tt class="py-lineno">690</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Resource</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-295" class="py-name" targets="Method nbxmpp.protocol.JID.getResource()=nbxmpp.protocol.JID-class.html#getResource"><a title="nbxmpp.protocol.JID.getResource" class="py-name" href="#" onclick="return doclink('link-295', 'getResource', 'link-295');">getResource</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L691"></a><tt class="py-lineno">691</tt> <tt class="py-line"> <tt class="py-comment"># Only negociate stream management after bounded</tt> </tt>
+<a name="L692"></a><tt class="py-lineno">692</tt> <tt class="py-line"> <tt class="py-name">sm</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt> </tt>
+<a name="L693"></a><tt class="py-lineno">693</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">supports_sm</tt><tt class="py-op">:</tt> </tt>
+<a name="L694"></a><tt class="py-lineno">694</tt> <tt class="py-line"> <tt class="py-comment"># starts negociation</tt> </tt>
+<a name="L695"></a><tt class="py-lineno">695</tt> <tt class="py-line"> <tt class="py-name">sm</tt><tt class="py-op">.</tt><tt id="link-296" class="py-name" targets="Method nbxmpp.smacks.Smacks.set_owner()=nbxmpp.smacks.Smacks-class.html#set_owner"><a title="nbxmpp.smacks.Smacks.set_owner" class="py-name" href="#" onclick="return doclink('link-296', 'set_owner', 'link-296');">set_owner</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">)</tt> </tt>
+<a name="L696"></a><tt class="py-lineno">696</tt> <tt class="py-line"> <tt class="py-name">sm</tt><tt class="py-op">.</tt><tt id="link-297" class="py-name" targets="Method nbxmpp.smacks.Smacks.negociate()=nbxmpp.smacks.Smacks-class.html#negociate"><a title="nbxmpp.smacks.Smacks.negociate" class="py-name" href="#" onclick="return doclink('link-297', 'negociate', 'link-297');">negociate</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L697"></a><tt class="py-lineno">697</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-298" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-298', 'Dispatcher', 'link-38');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">sm</tt> <tt class="py-op">=</tt> <tt class="py-name">sm</tt> </tt>
+<a name="L698"></a><tt class="py-lineno">698</tt> <tt class="py-line"> </tt>
+<a name="L699"></a><tt class="py-lineno">699</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'session'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L700"></a><tt class="py-lineno">700</tt> <tt class="py-line"> <tt class="py-comment"># Server don't want us to initialize a session</tt> </tt>
+<a name="L701"></a><tt class="py-lineno">701</tt> <tt class="py-line"> <tt id="link-299" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-299', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'No session required.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L702"></a><tt class="py-lineno">702</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_bound</tt><tt class="py-op">(</tt><tt class="py-string">'ok'</tt><tt class="py-op">)</tt> </tt>
+<a name="L703"></a><tt class="py-lineno">703</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L704"></a><tt class="py-lineno">704</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-300" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse" class="py-name" href="#" onclick="return doclink('link-300', 'SendAndWaitForResponse', 'link-216');">SendAndWaitForResponse</a></tt><tt class="py-op">(</tt><tt id="link-301" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-301', 'Protocol', 'link-13');">Protocol</a></tt><tt class="py-op">(</tt><tt class="py-string">'iq'</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> </tt>
+<a name="L705"></a><tt class="py-lineno">705</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-302" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-302', 'Node', 'link-9');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'session'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt><tt id="link-303" class="py-name"><a title="nbxmpp.protocol.NS_SESSION" class="py-name" href="#" onclick="return doclink('link-303', 'NS_SESSION', 'link-2');">NS_SESSION</a></tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L706"></a><tt class="py-lineno">706</tt> <tt class="py-line"> <tt class="py-name">func</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-304" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind._on_session()=nbxmpp.auth_nb.NonBlockingBind-class.html#_on_session"><a title="nbxmpp.auth_nb.NonBlockingBind._on_session" class="py-name" href="#" onclick="return doclink('link-304', '_on_session', 'link-304');">_on_session</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L707"></a><tt class="py-lineno">707</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L708"></a><tt class="py-lineno">708</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L709"></a><tt class="py-lineno">709</tt> <tt class="py-line"> <tt id="link-305" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-305', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Binding failed: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-306" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-306', 'getTag', 'link-65');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L710"></a><tt class="py-lineno">710</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_bound</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L711"></a><tt class="py-lineno">711</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L712"></a><tt class="py-lineno">712</tt> <tt class="py-line"> <tt id="link-307" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-307', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Binding failed: timeout expired.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L713"></a><tt class="py-lineno">713</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_bound</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L714"></a><tt class="py-lineno">714</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBind._on_session"></a><div id="NonBlockingBind._on_session-def"><a name="L715"></a><tt class="py-lineno">715</tt> <a class="py-toggle" href="#" id="NonBlockingBind._on_session-toggle" onclick="return toggle('NonBlockingBind._on_session');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.auth_nb.NonBlockingBind-class.html#_on_session">_on_session</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBind._on_session-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBind._on_session-expanded"><a name="L716"></a><tt class="py-lineno">716</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-308" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-308', 'onreceive', 'link-277');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L717"></a><tt class="py-lineno">717</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-309" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-309', 'isResultNode', 'link-11');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L718"></a><tt class="py-lineno">718</tt> <tt class="py-line"> <tt id="link-310" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-310', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Successfully opened session.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L719"></a><tt class="py-lineno">719</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L720"></a><tt class="py-lineno">720</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_bound</tt><tt class="py-op">(</tt><tt class="py-string">'ok'</tt><tt class="py-op">)</tt> </tt>
+<a name="L721"></a><tt class="py-lineno">721</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L722"></a><tt class="py-lineno">722</tt> <tt class="py-line"> <tt id="link-311" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-311', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Session open failed.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L723"></a><tt class="py-lineno">723</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L724"></a><tt class="py-lineno">724</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_bound</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L725"></a><tt class="py-lineno">725</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.auth_nb.NonBlockingBind-class.html b/doc/apidocs/nbxmpp.auth_nb.NonBlockingBind-class.html
new file mode 100644
index 0000000..5a942c7
--- /dev/null
+++ b/doc/apidocs/nbxmpp.auth_nb.NonBlockingBind-class.html
@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.auth_nb.NonBlockingBind</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.auth_nb-module.html">Module&nbsp;auth_nb</a> ::
+ Class&nbsp;NonBlockingBind
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.auth_nb.NonBlockingBind-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingBind</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_a" name="uml_class_diagram_for_nbxmpp_a">
+<area shape="rect" id="node0" href="nbxmpp.auth_nb.NonBlockingBind-class.html#__init__" title="nbxmpp.auth_nb.NonBlockingBind.__init__" alt="" coords="17,153,389,172"/>
+<area shape="rect" id="node0" href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugin" title="Start resource binding, if allowed at this time. Used internally." alt="" coords="17,172,389,191"/>
+<area shape="rect" id="node0" href="nbxmpp.auth_nb.NonBlockingBind-class.html#FeaturesHandler" title="Determine if server supports resource binding and set some internal attributes accordingly." alt="" coords="17,191,389,209"/>
+<area shape="rect" id="node0" href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugout" title="Remove Bind handler from owner&#39;s dispatcher. Used internally" alt="" coords="17,209,389,228"/>
+<area shape="rect" id="node0" href="nbxmpp.auth_nb.NonBlockingBind-class.html#NonBlockingBind" title="Perform binding. Use provided resource name or random (if not provided)." alt="" coords="17,228,389,247"/>
+<area shape="rect" id="node1" href="nbxmpp.auth_nb.NonBlockingBind-class.html" title="Bind some JID to the current connection to allow router know of our location. Must be plugged after successful SASL auth" alt="" coords="5,121,400,253"/>
+<area shape="rect" id="node1" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="91,39,316,57"/>
+<area shape="rect" id="node1" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="91,57,316,76"/>
+<area shape="rect" id="node1" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="91,76,316,95"/>
+<area shape="rect" id="node2" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="79,6,327,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_a.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_a" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Bind some JID to the current connection to allow router know of our
+location. Must be plugged after successful SASL auth
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugin" class="summary-sig-name">plugin</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span><br />
+ Start resource binding, if allowed at this time. Used internally.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.plugin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#FeaturesHandler" class="summary-sig-name">FeaturesHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">conn</span>,
+ <span class="summary-sig-arg">feats</span>)</span><br />
+ Determine if server supports resource binding and set some internal
+attributes accordingly.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.FeaturesHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#plugout" class="summary-sig-name">plugout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Remove Bind handler from owner's dispatcher. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.plugout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#NonBlockingBind" class="summary-sig-name">NonBlockingBind</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resource</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">on_bound</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Perform binding. Use provided resource name or random (if not provided).</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.NonBlockingBind">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#_on_bound" class="summary-sig-name" onclick="show_private();">_on_bound</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resp</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind._on_bound">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingBind-class.html#_on_session" class="summary-sig-name" onclick="show_private();">_on_session</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resp</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind._on_session">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugin</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.plugin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Start resource binding, if allowed at this time. Used internally.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="FeaturesHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">FeaturesHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">conn</span>,
+ <span class="sig-arg">feats</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.FeaturesHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Determine if server supports resource binding and set some internal
+attributes accordingly.</p>
+<p>It also checks if server supports stream management</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.plugout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Remove Bind handler from owner's dispatcher. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="NonBlockingBind"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">NonBlockingBind</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resource</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">on_bound</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind.NonBlockingBind">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Perform binding. Use provided resource name or random (if not provided).
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_bound"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_bound</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resp</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind._on_bound">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_session"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_session</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resp</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingBind._on_session">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.auth_nb.NonBlockingNonSASL-class.html b/doc/apidocs/nbxmpp.auth_nb.NonBlockingNonSASL-class.html
new file mode 100644
index 0000000..f515bf5
--- /dev/null
+++ b/doc/apidocs/nbxmpp.auth_nb.NonBlockingNonSASL-class.html
@@ -0,0 +1,401 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.auth_nb.NonBlockingNonSASL</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.auth_nb-module.html">Module&nbsp;auth_nb</a> ::
+ Class&nbsp;NonBlockingNonSASL
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingNonSASL</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_a_2" name="uml_class_diagram_for_nbxmpp_a_2">
+<area shape="rect" id="node2" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__" title="Caches username, password and resource for auth" alt="" coords="17,153,332,172"/>
+<area shape="rect" id="node2" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin" title="Determine the best auth method (digest/0k/plain) and use it for auth. Returns used method name on success. Used internally" alt="" coords="17,172,332,191"/>
+<area shape="rect" id="node1" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html" title="Implements old Non&#45;SASL (JEP&#45;0078) authentication used in jabberd1.4 and transport authentication" alt="" coords="5,121,344,197"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="61,39,287,57"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="61,57,287,76"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="61,76,287,95"/>
+<area shape="rect" id="node2" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="49,6,297,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_a_2.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_a_2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Implements old Non-SASL (JEP-0078) authentication used in jabberd1.4 and
+transport authentication
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">user</span>,
+ <span class="summary-sig-arg">password</span>,
+ <span class="summary-sig-arg">resource</span>,
+ <span class="summary-sig-arg">on_auth</span>)</span><br />
+ Caches username, password and resource for auth</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin" class="summary-sig-name">plugin</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span><br />
+ Determine the best auth method (digest/0k/plain) and use it for auth.
+Returns used method name on success. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL.plugin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_username" class="summary-sig-name" onclick="show_private();">_on_username</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resp</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL._on_username">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_password" class="summary-sig-name" onclick="show_private();">_on_password</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">password</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL._on_password">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html#_on_auth" class="summary-sig-name" onclick="show_private();">_on_auth</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resp</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL._on_auth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">user</span>,
+ <span class="sig-arg">password</span>,
+ <span class="sig-arg">resource</span>,
+ <span class="sig-arg">on_auth</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Caches username, password and resource for auth
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugin</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL.plugin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Determine the best auth method (digest/0k/plain) and use it for auth.
+Returns used method name on success. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_username"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_username</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resp</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL._on_username">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_password"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_password</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">password</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL._on_password">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_auth"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_auth</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resp</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#NonBlockingNonSASL._on_auth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.auth_nb.SASL-class.html b/doc/apidocs/nbxmpp.auth_nb.SASL-class.html
new file mode 100644
index 0000000..12d650c
--- /dev/null
+++ b/doc/apidocs/nbxmpp.auth_nb.SASL-class.html
@@ -0,0 +1,578 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.auth_nb.SASL</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.auth_nb-module.html">Module&nbsp;auth_nb</a> ::
+ Class&nbsp;SASL
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.auth_nb.SASL-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class SASL</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_a_3" name="uml_class_diagram_for_nbxmpp_a_3">
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#__init__" title="nbxmpp.auth_nb.SASL.__init__" alt="" coords="17,153,301,172"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#plugin" title="nbxmpp.auth_nb.SASL.plugin" alt="" coords="17,172,301,191"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#plugout" title="Remove SASL handlers from owner&#39;s dispatcher. Used internally" alt="" coords="17,191,301,209"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#auth" title="Start authentication. Result can be obtained via &quot;SASL.startsasl&quot; attribute and will be either SASL_SUCCESS or SASL_FAILURE" alt="" coords="17,209,301,228"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#FeaturesHandler" title="Used to determine if server supports SASL auth. Used internally" alt="" coords="17,228,301,247"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#MechanismHandler" title="nbxmpp.auth_nb.SASL.MechanismHandler" alt="" coords="17,247,301,265"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#SASLHandler" title="Perform next SASL auth step. Used internally" alt="" coords="17,265,301,284"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.SASL-class.html#set_password" title="nbxmpp.auth_nb.SASL.set_password" alt="" coords="17,284,301,303"/>
+<area shape="rect" id="node1" href="nbxmpp.auth_nb.SASL-class.html" title="Implements SASL authentication. Can be plugged into NonBlockingClient to start authentication" alt="" coords="5,121,312,309"/>
+<area shape="rect" id="node5" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="47,39,272,57"/>
+<area shape="rect" id="node5" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="47,57,272,76"/>
+<area shape="rect" id="node5" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="47,76,272,95"/>
+<area shape="rect" id="node2" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="35,6,283,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_a_3.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_a_3" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Implements SASL authentication. Can be plugged into NonBlockingClient
+to start authentication
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">username</span>,
+ <span class="summary-sig-arg">password</span>,
+ <span class="summary-sig-arg">on_sasl</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#plugin" class="summary-sig-name">plugin</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.plugin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#plugout" class="summary-sig-name">plugout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Remove SASL handlers from owner's dispatcher. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.plugout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#auth" class="summary-sig-name">auth</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Start authentication. Result can be obtained via &quot;SASL.startsasl&quot;
+attribute and will be either SASL_SUCCESS or SASL_FAILURE</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.auth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#FeaturesHandler" class="summary-sig-name">FeaturesHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">conn</span>,
+ <span class="summary-sig-arg">feats</span>)</span><br />
+ Used to determine if server supports SASL auth. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.FeaturesHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#MechanismHandler" class="summary-sig-name">MechanismHandler</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.MechanismHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#SASLHandler" class="summary-sig-name">SASLHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">conn</span>,
+ <span class="summary-sig-arg">challenge</span>)</span><br />
+ Perform next SASL auth step. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.SASLHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#set_password" class="summary-sig-name">set_password</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">password</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.set_password">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Static Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-StaticMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.auth_nb.SASL-class.html#_convert_to_iso88591" class="summary-sig-name" onclick="show_private();">_convert_to_iso88591</a>(<span class="summary-sig-arg">string</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL._convert_to_iso88591">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">username</span>,
+ <span class="sig-arg">password</span>,
+ <span class="sig-arg">on_sasl</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>username</code></strong> - XMPP username</li>
+ <li><strong class="pname"><code>password</code></strong> - XMPP password</li>
+ <li><strong class="pname"><code>on_sasl</code></strong> - Callback, will be called after each SASL auth-step.</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugin</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.plugin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.plugout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Remove SASL handlers from owner's dispatcher. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="auth"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">auth</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.auth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Start authentication. Result can be obtained via &quot;SASL.startsasl&quot;
+attribute and will be either SASL_SUCCESS or SASL_FAILURE</p>
+<p>Note that successfull auth will take at least two Dispatcher.Process()
+calls.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="FeaturesHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">FeaturesHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">conn</span>,
+ <span class="sig-arg">feats</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.FeaturesHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Used to determine if server supports SASL auth. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="MechanismHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">MechanismHandler</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.MechanismHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASLHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">SASLHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">conn</span>,
+ <span class="sig-arg">challenge</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.SASLHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Perform next SASL auth step. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_convert_to_iso88591"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_convert_to_iso88591</span>(<span class="sig-arg">string</span>)</span>
+ <br /><em class="fname">Static Method</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL._convert_to_iso88591">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_password"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_password</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">password</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.auth_nb-pysrc.html#SASL.set_password">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.bosh-module.html b/doc/apidocs/nbxmpp.bosh-module.html
new file mode 100644
index 0000000..57bd31b
--- /dev/null
+++ b/doc/apidocs/nbxmpp.bosh-module.html
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.bosh</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;bosh
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.bosh-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module bosh</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.bosh-pysrc.html">source&nbsp;code</a></span></p>
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh.NonBlockingBOSH-class.html" class="summary-name">NonBlockingBOSH</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh.AckChecker-class.html" class="summary-name">AckChecker</a><br />
+ Class for generating rids and generating and checking acknowledgements in
+BOSH messages
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh.KeyStack-class.html" class="summary-name">KeyStack</a><br />
+ Class implementing key sequences for BOSH messages
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh-module.html#get_rand_number" class="summary-sig-name">get_rand_number</a>()</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#get_rand_number">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.bosh')">logging.getLogger('nbxmpp.bosh')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh-module.html#KEY_COUNT" class="summary-name">KEY_COUNT</a> = <code title="10">10</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh-module.html#FAKE_DESCRIPTOR" class="summary-name">FAKE_DESCRIPTOR</a> = <code title="-1337">-1337</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh-module.html#bosh_errors" class="summary-name">bosh_errors</a> = <code title="{'bad-request': 'The format of an HTTP header or binding element recei\
+ved from the client is unacceptable (e.g., syntax error), or Script Sy\
+ntax is not supported.',
+ 'host-gone': 'The target domain specified in the &quot;to&quot; attribute or th\
+e target host or port specified in the &quot;route&quot; attribute is no longer \
+serviced by the connection manager.',
+ 'host-unknown': 'The target domain specified in the &quot;to&quot; attribute or\
+ the target host or port specified in the &quot;route&quot; attribute is unknown\
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">bad-request</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">The format of an HTTP header or</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.bosh-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="locale">locale</span>,
+ <span title="random">random</span>,
+ <span title="hashlib.sha1">sha1</span>,
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html" title="nbxmpp.transports_nb.NonBlockingTransport">NonBlockingTransport</a>,
+ <a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" title="nbxmpp.transports_nb.NonBlockingHTTPBOSH">NonBlockingHTTPBOSH</a>,
+ <span title="nbxmpp.transports_nb.CONNECTED">CONNECTED</span>,
+ <span title="nbxmpp.transports_nb.CONNECTING">CONNECTING</span>,
+ <span title="nbxmpp.transports_nb.DISCONNECTED">DISCONNECTED</span>,
+ <span title="nbxmpp.transports_nb.DISCONNECTING">DISCONNECTING</span>,
+ <a href="nbxmpp.transports_nb-module.html#urisplit" title="nbxmpp.transports_nb.urisplit">urisplit</a>,
+ <span title="nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS">DISCONNECT_TIMEOUT_SECONDS</span>,
+ <a href="nbxmpp.protocol.BOSHBody-class.html" title="nbxmpp.protocol.BOSHBody">BOSHBody</a>,
+ <a href="nbxmpp.protocol.Protocol-class.html" title="nbxmpp.protocol.Protocol">Protocol</a>,
+ <span title="nbxmpp.protocol.NS_CLIENT">NS_CLIENT</span>,
+ <a href="nbxmpp.simplexml.Node-class.html" title="nbxmpp.simplexml.Node">Node</a>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="get_rand_number"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_rand_number</span>()</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#get_rand_number">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.bosh')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="KEY_COUNT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">KEY_COUNT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+10
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="FAKE_DESCRIPTOR"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">FAKE_DESCRIPTOR</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+-1337
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="bosh_errors"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">bosh_errors</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">bad-request</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">The format of an HTTP header or binding element recei</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">ved from the client is unacceptable (e.g., syntax error), or Script Sy</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">ntax is not supported.</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">host-gone</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">The target domain specified in the &quot;to&quot; attribute or th</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">e target host or port specified in the &quot;route&quot; attribute is no longer </code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">serviced by the connection manager.</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">host-unknown</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">The target domain specified in the &quot;to&quot; attribute or</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string"> the target host or port specified in the &quot;route&quot; attribute is unknown</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.bosh-pysrc.html b/doc/apidocs/nbxmpp.bosh-pysrc.html
new file mode 100644
index 0000000..f6e3ca2
--- /dev/null
+++ b/doc/apidocs/nbxmpp.bosh-pysrc.html
@@ -0,0 +1,910 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.bosh</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;bosh
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.bosh-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.bosh-module.html">Module nbxmpp.bosh</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## bosh.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2008 Tomas Karasek &lt;tom.to.the.k@gmail.com&gt;</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## This file is part of Gajim.</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## Gajim is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## by the Free Software Foundation; version 3 only.</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## Gajim is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment">## You should have received a copy of the GNU General Public License</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">## along with Gajim. If not, see &lt;http://www.gnu.org/licenses/&gt;.</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">locale</tt><tt class="py-op">,</tt> <tt class="py-name">random</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">hashlib</tt> <tt class="py-keyword">import</tt> <tt class="py-name">sha1</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.transports_nb=nbxmpp.transports_nb-module.html"><a title="nbxmpp.transports_nb" class="py-name" href="#" onclick="return doclink('link-0', 'transports_nb', 'link-0');">transports_nb</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Class nbxmpp.transports_nb.NonBlockingTransport=nbxmpp.transports_nb.NonBlockingTransport-class.html"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-1', 'NonBlockingTransport', 'link-1');">NonBlockingTransport</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Class nbxmpp.transports_nb.NonBlockingHTTPBOSH=nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html"><a title="nbxmpp.transports_nb.NonBlockingHTTPBOSH" class="py-name" href="#" onclick="return doclink('link-2', 'NonBlockingHTTPBOSH', 'link-2');">NonBlockingHTTPBOSH</a></tt><tt class="py-op">,</tt>\ </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> <tt id="link-3" class="py-name" targets="Variable nbxmpp.transports_nb.CONNECTED=nbxmpp.transports_nb-module.html#CONNECTED"><a title="nbxmpp.transports_nb.CONNECTED" class="py-name" href="#" onclick="return doclink('link-3', 'CONNECTED', 'link-3');">CONNECTED</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Variable nbxmpp.transports_nb.CONNECTING=nbxmpp.transports_nb-module.html#CONNECTING"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-4', 'CONNECTING', 'link-4');">CONNECTING</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Variable nbxmpp.transports_nb.DISCONNECTED=nbxmpp.transports_nb-module.html#DISCONNECTED"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-5', 'DISCONNECTED', 'link-5');">DISCONNECTED</a></tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Variable nbxmpp.transports_nb.DISCONNECTING=nbxmpp.transports_nb-module.html#DISCONNECTING"><a title="nbxmpp.transports_nb.DISCONNECTING" class="py-name" href="#" onclick="return doclink('link-6', 'DISCONNECTING', 'link-6');">DISCONNECTING</a></tt><tt class="py-op">,</tt>\ </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"> <tt id="link-7" class="py-name" targets="Function nbxmpp.transports_nb.urisplit()=nbxmpp.transports_nb-module.html#urisplit"><a title="nbxmpp.transports_nb.urisplit" class="py-name" href="#" onclick="return doclink('link-7', 'urisplit', 'link-7');">urisplit</a></tt><tt class="py-op">,</tt> <tt id="link-8" class="py-name" targets="Variable nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS=nbxmpp.transports_nb-module.html#DISCONNECT_TIMEOUT_SECONDS"><a title="nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS" class="py-name" href="#" onclick="return doclink('link-8', 'DISCONNECT_TIMEOUT_SECONDS', 'link-8');">DISCONNECT_TIMEOUT_SECONDS</a></tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-9" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-9', 'protocol', 'link-9');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-10" class="py-name" targets="Class nbxmpp.protocol.BOSHBody=nbxmpp.protocol.BOSHBody-class.html"><a title="nbxmpp.protocol.BOSHBody" class="py-name" href="#" onclick="return doclink('link-10', 'BOSHBody', 'link-10');">BOSHBody</a></tt><tt class="py-op">,</tt> <tt id="link-11" class="py-name" targets="Class nbxmpp.protocol.Protocol=nbxmpp.protocol.Protocol-class.html"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-11', 'Protocol', 'link-11');">Protocol</a></tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name" targets="Variable nbxmpp.protocol.NS_CLIENT=nbxmpp.protocol-module.html#NS_CLIENT"><a title="nbxmpp.protocol.NS_CLIENT" class="py-name" href="#" onclick="return doclink('link-12', 'NS_CLIENT', 'link-12');">NS_CLIENT</a></tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-13" class="py-name" targets="Module nbxmpp.simplexml=nbxmpp.simplexml-module.html"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-13', 'simplexml', 'link-13');">simplexml</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name" targets="Class nbxmpp.simplexml.Node=nbxmpp.simplexml.Node-class.html"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-14', 'Node', 'link-14');">Node</a></tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt id="link-15" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-15', 'log', 'link-15');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.bosh'</tt><tt class="py-op">)</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt id="link-16" class="py-name" targets="Variable nbxmpp.bosh.KEY_COUNT=nbxmpp.bosh-module.html#KEY_COUNT"><a title="nbxmpp.bosh.KEY_COUNT" class="py-name" href="#" onclick="return doclink('link-16', 'KEY_COUNT', 'link-16');">KEY_COUNT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">10</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-comment"># Fake file descriptor - it's used for setting read_timeout in idlequeue for</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-comment"># BOSH Transport. In TCP-derived transports this is file descriptor of socket.</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt id="link-17" class="py-name" targets="Variable nbxmpp.bosh.FAKE_DESCRIPTOR=nbxmpp.bosh-module.html#FAKE_DESCRIPTOR"><a title="nbxmpp.bosh.FAKE_DESCRIPTOR" class="py-name" href="#" onclick="return doclink('link-17', 'FAKE_DESCRIPTOR', 'link-17');">FAKE_DESCRIPTOR</a></tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1337</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH"></a><div id="NonBlockingBOSH-def"><a name="L39"></a><tt class="py-lineno"> 39</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH-toggle" onclick="return toggle('NonBlockingBOSH');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html">NonBlockingBOSH</a><tt class="py-op">(</tt><tt class="py-base-class">NonBlockingTransport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingBOSH-expanded"><a name="NonBlockingBOSH.__init__"></a><div id="NonBlockingBOSH.__init__-def"><a name="L40"></a><tt class="py-lineno"> 40</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.__init__-toggle" onclick="return toggle('NonBlockingBOSH.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">raise_event</tt><tt class="py-op">,</tt> <tt class="py-param">on_disconnect</tt><tt class="py-op">,</tt> <tt class="py-param">idlequeue</tt><tt class="py-op">,</tt> <tt class="py-param">estabilish_tls</tt><tt class="py-op">,</tt> <tt class="py-param">certs</tt><tt class="py-op">,</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> <tt class="py-param">xmpp_server</tt><tt class="py-op">,</tt> <tt class="py-param">domain</tt><tt class="py-op">,</tt> <tt class="py-param">bosh_dict</tt><tt class="py-op">,</tt> <tt class="py-param">proxy_creds</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.__init__-expanded"><a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> <tt id="link-18" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-18', 'NonBlockingTransport', 'link-1');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-19', '__init__', 'link-19');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-20" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient.raise_event()=nbxmpp.client_nb.NonBlockingClient-class.html#raise_event"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-20', 'raise_event', 'link-20');">raise_event</a></tt><tt class="py-op">,</tt> <tt class="py-name">on_disconnect</tt><tt class="py-op">,</tt> <tt id="link-21" class="py-name" targets="Module nbxmpp.idlequeue=nbxmpp.idlequeue-module.html"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-21', 'idlequeue', 'link-21');">idlequeue</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> <tt class="py-name">estabilish_tls</tt><tt class="py-op">,</tt> <tt class="py-name">certs</tt><tt class="py-op">)</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_sid</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">locale</tt><tt class="py-op">.</tt><tt class="py-name">getdefaultlocale</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_xml_lang</tt> <tt class="py-op">=</tt> <tt class="py-name">locale</tt><tt class="py-op">.</tt><tt class="py-name">getdefaultlocale</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'_'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_xml_lang</tt> <tt class="py-op">=</tt> <tt class="py-string">'en'</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_version</tt> <tt class="py-op">=</tt> <tt class="py-string">'HTTP/1.1'</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_persistent</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_pipelining</tt> <tt class="py-op">=</tt> <tt class="py-name">bosh_dict</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_http_pipelining'</tt><tt class="py-op">]</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_to</tt> <tt class="py-op">=</tt> <tt class="py-name">domain</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">route_host</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">route_port</tt> <tt class="py-op">=</tt> <tt class="py-name">xmpp_server</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_wait</tt> <tt class="py-op">=</tt> <tt class="py-name">bosh_dict</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_wait'</tt><tt class="py-op">]</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_pipelining</tt><tt class="py-op">:</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_hold</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_hold</tt> <tt class="py-op">=</tt> <tt class="py-name">bosh_dict</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_hold'</tt><tt class="py-op">]</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_requests</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_hold</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">bosh_dict</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_uri'</tt><tt class="py-op">]</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_content</tt> <tt class="py-op">=</tt> <tt class="py-name">bosh_dict</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_content'</tt><tt class="py-op">]</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">over_proxy</tt> <tt class="py-op">=</tt> <tt class="py-name">bosh_dict</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_useproxy'</tt><tt class="py-op">]</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">estabilish_tls</tt><tt class="py-op">:</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_secure</tt> <tt class="py-op">=</tt> <tt class="py-string">'true'</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_secure</tt> <tt class="py-op">=</tt> <tt class="py-string">'false'</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">use_proxy_auth</tt> <tt class="py-op">=</tt> <tt class="py-name">bosh_dict</tt><tt class="py-op">[</tt><tt class="py-string">'useauth'</tt><tt class="py-op">]</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_creds</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy_creds</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wait_cb_time</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">prio_bosh_stanzas</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_recv_handler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_recv_socket</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key_stack</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack_checker</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">after_init</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">over_proxy</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">estabilish_tls</tt><tt class="py-op">:</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'http'</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-comment"># with SSL over proxy, we do HTTP CONNECT to proxy to open a channel to</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-comment"># BOSH Connection Manager</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">host</tt><tt class="py-op">,</tt> <tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt id="link-22" class="py-name"><a title="nbxmpp.transports_nb.urisplit" class="py-name" href="#" onclick="return doclink('link-22', 'urisplit', 'link-7');">urisplit</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_uri</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-number">3</tt><tt class="py-op">]</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'xmpp_server'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">host</tt><tt class="py-op">,</tt> <tt class="py-name">port</tt><tt class="py-op">)</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'credentials'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_creds</tt> </tt>
+</div><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.connect"></a><div id="NonBlockingBOSH.connect-def"><a name="L92"></a><tt class="py-lineno"> 92</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.connect-toggle" onclick="return toggle('NonBlockingBOSH.connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#connect">connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">conn_5tuple</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect_failure</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.connect-expanded"><a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-23', 'NonBlockingTransport', 'link-1');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.connect()=nbxmpp.bosh.NonBlockingBOSH-class.html#connect,Method nbxmpp.client_nb.NonBlockingClient.connect()=nbxmpp.client_nb.NonBlockingClient-class.html#connect,Method nbxmpp.transports_nb.NonBlockingTCP.connect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#connect,Method nbxmpp.transports_nb.NonBlockingTransport.connect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#connect"><a title="nbxmpp.bosh.NonBlockingBOSH.connect
+nbxmpp.client_nb.NonBlockingClient.connect
+nbxmpp.transports_nb.NonBlockingTCP.connect
+nbxmpp.transports_nb.NonBlockingTransport.connect" class="py-name" href="#" onclick="return doclink('link-24', 'connect', 'link-24');">connect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">conn_5tuple</tt><tt class="py-op">,</tt> <tt class="py-name">on_connect</tt><tt class="py-op">,</tt> <tt class="py-name">on_connect_failure</tt><tt class="py-op">)</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-keyword">global</tt> <tt id="link-25" class="py-name"><a title="nbxmpp.bosh.FAKE_DESCRIPTOR" class="py-name" href="#" onclick="return doclink('link-25', 'FAKE_DESCRIPTOR', 'link-17');">FAKE_DESCRIPTOR</a></tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt id="link-26" class="py-name"><a title="nbxmpp.bosh.FAKE_DESCRIPTOR" class="py-name" href="#" onclick="return doclink('link-26', 'FAKE_DESCRIPTOR', 'link-17');">FAKE_DESCRIPTOR</a></tt> <tt class="py-op">=</tt> <tt id="link-27" class="py-name"><a title="nbxmpp.bosh.FAKE_DESCRIPTOR" class="py-name" href="#" onclick="return doclink('link-27', 'FAKE_DESCRIPTOR', 'link-17');">FAKE_DESCRIPTOR</a></tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt id="link-28" class="py-name"><a title="nbxmpp.bosh.FAKE_DESCRIPTOR" class="py-name" href="#" onclick="return doclink('link-28', 'FAKE_DESCRIPTOR', 'link-17');">FAKE_DESCRIPTOR</a></tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">prio_bosh_stanzas</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key_stack</tt> <tt class="py-op">=</tt> <tt id="link-29" class="py-name" targets="Class nbxmpp.bosh.KeyStack=nbxmpp.bosh.KeyStack-class.html"><a title="nbxmpp.bosh.KeyStack" class="py-name" href="#" onclick="return doclink('link-29', 'KeyStack', 'link-29');">KeyStack</a></tt><tt class="py-op">(</tt><tt id="link-30" class="py-name"><a title="nbxmpp.bosh.KEY_COUNT" class="py-name" href="#" onclick="return doclink('link-30', 'KEY_COUNT', 'link-16');">KEY_COUNT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack_checker</tt> <tt class="py-op">=</tt> <tt id="link-31" class="py-name" targets="Class nbxmpp.bosh.AckChecker=nbxmpp.bosh.AckChecker-class.html"><a title="nbxmpp.bosh.AckChecker" class="py-name" href="#" onclick="return doclink('link-31', 'AckChecker', 'link-31');">AckChecker</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">after_init</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.get_new_http_socket()=nbxmpp.bosh.NonBlockingBOSH-class.html#get_new_http_socket"><a title="nbxmpp.bosh.NonBlockingBOSH.get_new_http_socket" class="py-name" href="#" onclick="return doclink('link-32', 'get_new_http_socket', 'link-32');">get_new_http_socket</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started()=nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started"><a title="nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started" class="py-name" href="#" onclick="return doclink('link-33', '_tcp_connecting_started', 'link-33');">_tcp_connecting_started</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.connect
+nbxmpp.client_nb.NonBlockingClient.connect
+nbxmpp.transports_nb.NonBlockingTCP.connect
+nbxmpp.transports_nb.NonBlockingTransport.connect" class="py-name" href="#" onclick="return doclink('link-34', 'connect', 'link-24');">connect</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">conn_5tuple</tt> <tt class="py-op">=</tt> <tt class="py-name">conn_5tuple</tt><tt class="py-op">,</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">on_connect</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH._on_connect()=nbxmpp.bosh.NonBlockingBOSH-class.html#_on_connect,Method nbxmpp.client_nb.NonBlockingClient._on_connect()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_connect,Method nbxmpp.transports_nb.NonBlockingTCP._on_connect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect,Method nbxmpp.transports_nb.NonBlockingTransport._on_connect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-35', '_on_connect', 'link-35');">_on_connect</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">on_connect_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure()=nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure"><a title="nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure" class="py-name" href="#" onclick="return doclink('link-36', '_on_connect_failure', 'link-36');">_on_connect_failure</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH._on_connect"></a><div id="NonBlockingBOSH._on_connect-def"><a name="L114"></a><tt class="py-lineno">114</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH._on_connect-toggle" onclick="return toggle('NonBlockingBOSH._on_connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#_on_connect">_on_connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH._on_connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH._on_connect-expanded"><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peerhost</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">peerhost</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt id="link-37" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-37', 'NonBlockingTransport', 'link-1');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-38', '_on_connect', 'link-35');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.set_timeout"></a><div id="NonBlockingBOSH.set_timeout-def"><a name="L121"></a><tt class="py-lineno">121</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.set_timeout-toggle" onclick="return toggle('NonBlockingBOSH.set_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout">set_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.set_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.set_timeout-expanded"><a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.get_state()=nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-39', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt id="link-40" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-40', 'DISCONNECTED', 'link-5');">DISCONNECTED</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">!=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt id="link-41" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-41', 'NonBlockingTransport', 'link-1');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.set_timeout()=nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout,Method nbxmpp.transports_nb.NonBlockingTCP.set_timeout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout,Method nbxmpp.transports_nb.NonBlockingTransport.set_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout"><a title="nbxmpp.bosh.NonBlockingBOSH.set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout" class="py-name" href="#" onclick="return doclink('link-42', 'set_timeout', 'link-42');">set_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt id="link-43" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-43', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'set_timeout: TIMEOUT NOT SET: state is %s, fd is %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-44', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.on_http_request_possible"></a><div id="NonBlockingBOSH.on_http_request_possible-def"><a name="L127"></a><tt class="py-lineno">127</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.on_http_request_possible-toggle" onclick="return toggle('NonBlockingBOSH.on_http_request_possible');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_http_request_possible">on_http_request_possible</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.on_http_request_possible-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.on_http_request_possible-expanded"><a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> Called when HTTP request it's possible to send a HTTP request. It can be when</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> socket is connected or when HTTP response arrived</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> There should be always one pending request to BOSH CM.</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt id="link-45" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-45', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'on_http_req possible, state:\n%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.get_current_state()=nbxmpp.bosh.NonBlockingBOSH-class.html#get_current_state"><a title="nbxmpp.bosh.NonBlockingBOSH.get_current_state" class="py-name" href="#" onclick="return doclink('link-46', 'get_current_state', 'link-46');">get_current_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-47', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">==</tt><tt id="link-48" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-48', 'DISCONNECTED', 'link-5');">DISCONNECTED</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-comment">#Hack for making the non-secure warning dialog work</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">got_features</tt><tt class="py-op">:</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">,</tt> <tt class="py-string">'NonBlockingNonSASL'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">,</tt> <tt class="py-string">'SASL'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send_BOSH()=nbxmpp.bosh.NonBlockingBOSH-class.html#send_BOSH"><a title="nbxmpp.bosh.NonBlockingBOSH.send_BOSH" class="py-name" href="#" onclick="return doclink('link-49', 'send_BOSH', 'link-49');">send_BOSH</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-comment"># If we already got features and no auth module was plugged yet, we are</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-comment"># probably waiting for confirmation of the "not-secure-connection" dialog.</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-comment"># We don't send HTTP request in that case.</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-comment"># see http://lists.jabber.ru/pipermail/ejabberd/2008-August/004027.html</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send_BOSH" class="py-name" href="#" onclick="return doclink('link-50', 'send_BOSH', 'link-49');">send_BOSH</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.get_socket_in"></a><div id="NonBlockingBOSH.get_socket_in-def"><a name="L152"></a><tt class="py-lineno">152</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.get_socket_in-toggle" onclick="return toggle('NonBlockingBOSH.get_socket_in');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_socket_in">get_socket_in</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">state</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.get_socket_in-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.get_socket_in-expanded"><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"> Get sockets in desired state</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">:</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-51', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">==</tt><tt class="py-name">state</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.get_free_socket"></a><div id="NonBlockingBOSH.get_free_socket-def"><a name="L161"></a><tt class="py-lineno">161</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.get_free_socket-toggle" onclick="return toggle('NonBlockingBOSH.get_free_socket');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_free_socket">get_free_socket</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.get_free_socket-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.get_free_socket-expanded"><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-docstring"> Select and returns socket eligible for sending a data to</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_pipelining</tt><tt class="py-op">:</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.get_socket_in()=nbxmpp.bosh.NonBlockingBOSH-class.html#get_socket_in"><a title="nbxmpp.bosh.NonBlockingBOSH.get_socket_in" class="py-name" href="#" onclick="return doclink('link-52', 'get_socket_in', 'link-52');">get_socket_in</a></tt><tt class="py-op">(</tt><tt id="link-53" class="py-name"><a title="nbxmpp.transports_nb.CONNECTED" class="py-name" href="#" onclick="return doclink('link-53', 'CONNECTED', 'link-3');">CONNECTED</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">last_recv_time</tt><tt class="py-op">,</tt> <tt class="py-name">tmpsock</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">:</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-comment"># we're interested only in CONNECTED socket with no requests pending</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-54', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">==</tt><tt id="link-55" class="py-name"><a title="nbxmpp.transports_nb.CONNECTED" class="py-name" href="#" onclick="return doclink('link-55', 'CONNECTED', 'link-3');">CONNECTED</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">pending_requests</tt><tt class="py-op">==</tt><tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-comment"># if there's more of them, we want the one with the least recent data receive</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-comment"># (lowest last_recv_time)</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">last_recv_time</tt><tt class="py-op">==</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">last_recv_time</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">last_recv_time</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-name">last_recv_time</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">last_recv_time</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">tmpsock</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tmpsock</tt><tt class="py-op">:</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tmpsock</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.send_BOSH"></a><div id="NonBlockingBOSH.send_BOSH-def"><a name="L183"></a><tt class="py-lineno">183</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.send_BOSH-toggle" onclick="return toggle('NonBlockingBOSH.send_BOSH');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#send_BOSH">send_BOSH</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.send_BOSH-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.send_BOSH-expanded"><a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"><tt class="py-docstring"> Tries to send a stanza in payload by appeding it to a buffer and plugging a</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"><tt class="py-docstring"> free socket for writing.</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">total_pending_reqs</tt> <tt class="py-op">=</tt> <tt class="py-name">sum</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">pending_requests</tt> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-comment"># when called after HTTP response (Payload=None) and when there are already</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-comment"># some pending requests and no data to send, or when the socket is</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-comment"># disconnected, we do nothing</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">payload</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> \ </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">total_pending_reqs</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> \ </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt> <tt class="py-op">==</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> \ </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">prio_bosh_stanzas</tt> <tt class="py-op">==</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> \ </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-56', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">==</tt><tt id="link-57" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-57', 'DISCONNECTED', 'link-5');">DISCONNECTED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-comment"># Add xmlns to stanza to help ejabberd server</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">payload</tt> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">,</tt> <tt id="link-58" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-58', 'Protocol', 'link-11');">Protocol</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method nbxmpp.simplexml.Node.getNamespace()=nbxmpp.simplexml.Node-class.html#getNamespace"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-59', 'getNamespace', 'link-59');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method nbxmpp.simplexml.Node.setNamespace()=nbxmpp.simplexml.Node-class.html#setNamespace"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-60', 'setNamespace', 'link-60');">setNamespace</a></tt><tt class="py-op">(</tt><tt id="link-61" class="py-name"><a title="nbxmpp.protocol.NS_CLIENT" class="py-name" href="#" onclick="return doclink('link-61', 'NS_CLIENT', 'link-12');">NS_CLIENT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-comment"># now the payload is put to buffer and will be sent at some point</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.append_stanza()=nbxmpp.bosh.NonBlockingBOSH-class.html#append_stanza"><a title="nbxmpp.bosh.NonBlockingBOSH.append_stanza" class="py-name" href="#" onclick="return doclink('link-62', 'append_stanza', 'link-62');">append_stanza</a></tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-comment"># if we're about to make more requests than allowed, we don't send - stanzas will be</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-comment"># sent after HTTP response from CM, exception is when we're disconnecting - then we</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-comment"># send anyway</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">total_pending_reqs</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_requests</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-63', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">!=</tt><tt id="link-64" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTING" class="py-name" href="#" onclick="return doclink('link-64', 'DISCONNECTING', 'link-6');">DISCONNECTING</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt id="link-65" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-65', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'attemp to make more requests than allowed by Connection Manager:\n%s'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.get_current_state" class="py-name" href="#" onclick="return doclink('link-66', 'get_current_state', 'link-46');">get_current_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-comment"># when there's free CONNECTED socket, we plug it for write and the data will</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-comment"># be sent when write is possible</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.get_free_socket()=nbxmpp.bosh.NonBlockingBOSH-class.html#get_free_socket"><a title="nbxmpp.bosh.NonBlockingBOSH.get_free_socket" class="py-name" href="#" onclick="return doclink('link-67', 'get_free_socket', 'link-67');">get_free_socket</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.plug_socket()=nbxmpp.bosh.NonBlockingBOSH-class.html#plug_socket"><a title="nbxmpp.bosh.NonBlockingBOSH.plug_socket" class="py-name" href="#" onclick="return doclink('link-68', 'plug_socket', 'link-68');">plug_socket</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-comment"># if there is a connecting socket, we just wait for when it connects,</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-comment"># payload will be sent in a sec when the socket connects</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.get_socket_in" class="py-name" href="#" onclick="return doclink('link-69', 'get_socket_in', 'link-52');">get_socket_in</a></tt><tt class="py-op">(</tt><tt id="link-70" class="py-name"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-70', 'CONNECTING', 'link-4');">CONNECTING</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-comment"># being here means there are either DISCONNECTED sockets or all sockets are</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-comment"># CONNECTED with too many pending requests</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.get_socket_in" class="py-name" href="#" onclick="return doclink('link-71', 'get_socket_in', 'link-52');">get_socket_in</a></tt><tt class="py-op">(</tt><tt id="link-72" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-72', 'DISCONNECTED', 'link-5');">DISCONNECTED</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-comment"># if we have DISCONNECTED socket, lets connect it and plug for send</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">:</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.connect_and_flush()=nbxmpp.bosh.NonBlockingBOSH-class.html#connect_and_flush"><a title="nbxmpp.bosh.NonBlockingBOSH.connect_and_flush" class="py-name" href="#" onclick="return doclink('link-73', 'connect_and_flush', 'link-73');">connect_and_flush</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-comment"># otherwise create and connect a new one</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-name">ss</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.get_new_http_socket" class="py-name" href="#" onclick="return doclink('link-74', 'get_new_http_socket', 'link-32');">get_new_http_socket</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">ss</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.connect_and_flush" class="py-name" href="#" onclick="return doclink('link-75', 'connect_and_flush', 'link-73');">connect_and_flush</a></tt><tt class="py-op">(</tt><tt class="py-name">ss</tt><tt class="py-op">)</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+</div><a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.plug_socket"></a><div id="NonBlockingBOSH.plug_socket-def"><a name="L240"></a><tt class="py-lineno">240</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.plug_socket-toggle" onclick="return toggle('NonBlockingBOSH.plug_socket');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#plug_socket">plug_socket</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.plug_socket-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.plug_socket-expanded"><a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.get_free_socket" class="py-name" href="#" onclick="return doclink('link-76', 'get_free_socket', 'link-67');">get_free_socket</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">s</tt><tt class="py-op">:</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTCP._plug_idle()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle"><a title="nbxmpp.transports_nb.NonBlockingTCP._plug_idle" class="py-name" href="#" onclick="return doclink('link-77', '_plug_idle', 'link-77');">_plug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">writable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">readable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt id="link-78" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-78', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'=====!!!!!!!!====&gt; Couldn\'t get free socket in plug_socket())'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.build_stanza"></a><div id="NonBlockingBOSH.build_stanza-def"><a name="L248"></a><tt class="py-lineno">248</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.build_stanza-toggle" onclick="return toggle('NonBlockingBOSH.build_stanza');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#build_stanza">build_stanza</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">socket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.build_stanza-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.build_stanza-expanded"><a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"> Build a BOSH body tag from data in buffers and adds key, rid and ack</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"><tt class="py-docstring"> attributes to it</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"><tt class="py-docstring"> This method is called from _do_send() of underlying transport. This is to</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"><tt class="py-docstring"> ensure rid and keys will be processed in correct order. If I generate</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"><tt class="py-docstring"> them before plugging a socket for write (and did it for two sockets/HTTP</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"><tt class="py-docstring"> connections) in parallel, they might be sent in wrong order, which</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"><tt class="py-docstring"> results in violating the BOSH session and server-side disconnect.</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">prio_bosh_stanzas</tt><tt class="py-op">:</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">add_payload</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">prio_bosh_stanzas</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">add_payload</tt><tt class="py-op">:</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name" targets="Method nbxmpp.simplexml.Node.setPayload()=nbxmpp.simplexml.Node-class.html#setPayload"><a title="nbxmpp.simplexml.Node.setPayload" class="py-name" href="#" onclick="return doclink('link-79', 'setPayload', 'link-79');">setPayload</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt><tt class="py-op">)</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.boshify_stanzas()=nbxmpp.bosh.NonBlockingBOSH-class.html#boshify_stanzas"><a title="nbxmpp.bosh.NonBlockingBOSH.boshify_stanzas" class="py-name" href="#" onclick="return doclink('link-80', 'boshify_stanzas', 'link-80');">boshify_stanzas</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt><tt class="py-op">)</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack_checker</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method nbxmpp.bosh.AckChecker.backup_stanza()=nbxmpp.bosh.AckChecker-class.html#backup_stanza"><a title="nbxmpp.bosh.AckChecker.backup_stanza" class="py-name" href="#" onclick="return doclink('link-81', 'backup_stanza', 'link-81');">backup_stanza</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">)</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">newkey</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">key_stack</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method nbxmpp.bosh.KeyStack.get()=nbxmpp.bosh.KeyStack-class.html#get"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-82', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt><tt class="py-op">:</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method nbxmpp.simplexml.Node.setAttr()=nbxmpp.simplexml.Node-class.html#setAttr"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-83', 'setAttr', 'link-83');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'key'</tt><tt class="py-op">,</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">newkey</tt><tt class="py-op">:</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-84', 'setAttr', 'link-83');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'newkey'</tt><tt class="py-op">,</tt> <tt class="py-name">newkey</tt><tt class="py-op">)</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt id="link-85" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-85', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'sending msg with rid=%s to sock %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttr()=nbxmpp.simplexml.Node-class.html#getAttr"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-86', 'getAttr', 'link-86');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'rid'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.renew_bosh_wait_timeout()=nbxmpp.bosh.NonBlockingBOSH-class.html#renew_bosh_wait_timeout"><a title="nbxmpp.bosh.NonBlockingBOSH.renew_bosh_wait_timeout" class="py-name" href="#" onclick="return doclink('link-87', 'renew_bosh_wait_timeout', 'link-87');">renew_bosh_wait_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_wait</tt> <tt class="py-op">+</tt> <tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">stanza</tt> </tt>
+</div><a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.on_bosh_wait_timeout"></a><div id="NonBlockingBOSH.on_bosh_wait_timeout-def"><a name="L282"></a><tt class="py-lineno">282</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.on_bosh_wait_timeout-toggle" onclick="return toggle('NonBlockingBOSH.on_bosh_wait_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_bosh_wait_timeout">on_bosh_wait_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.on_bosh_wait_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.on_bosh_wait_timeout-expanded"><a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt id="link-88" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-88', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Connection Manager didn\'t respond within %s + 3 seconds --&gt; forcing disconnect'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_wait</tt><tt class="py-op">)</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.disconnect()=nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect,Method nbxmpp.client_nb.NonBlockingClient.disconnect()=nbxmpp.client_nb.NonBlockingClient-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTCP.disconnect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTransport.disconnect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-89', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.renew_bosh_wait_timeout"></a><div id="NonBlockingBOSH.renew_bosh_wait_timeout-def"><a name="L287"></a><tt class="py-lineno">287</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.renew_bosh_wait_timeout-toggle" onclick="return toggle('NonBlockingBOSH.renew_bosh_wait_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#renew_bosh_wait_timeout">renew_bosh_wait_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.renew_bosh_wait_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.renew_bosh_wait_timeout-expanded"><a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wait_cb_time</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.remove_bosh_wait_timeout()=nbxmpp.bosh.NonBlockingBOSH-class.html#remove_bosh_wait_timeout"><a title="nbxmpp.bosh.NonBlockingBOSH.remove_bosh_wait_timeout" class="py-name" href="#" onclick="return doclink('link-90', 'remove_bosh_wait_timeout', 'link-90');">remove_bosh_wait_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-name">sched_time</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-91', 'idlequeue', 'link-21');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-92" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.set_alarm()=nbxmpp.idlequeue.IdleQueue-class.html#set_alarm"><a title="nbxmpp.idlequeue.IdleQueue.set_alarm" class="py-name" href="#" onclick="return doclink('link-92', 'set_alarm', 'link-92');">set_alarm</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.on_bosh_wait_timeout()=nbxmpp.bosh.NonBlockingBOSH-class.html#on_bosh_wait_timeout"><a title="nbxmpp.bosh.NonBlockingBOSH.on_bosh_wait_timeout" class="py-name" href="#" onclick="return doclink('link-93', 'on_bosh_wait_timeout', 'link-93');">on_bosh_wait_timeout</a></tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wait_cb_time</tt> <tt class="py-op">=</tt> <tt class="py-name">sched_time</tt> </tt>
+</div><a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.remove_bosh_wait_timeout"></a><div id="NonBlockingBOSH.remove_bosh_wait_timeout-def"><a name="L293"></a><tt class="py-lineno">293</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.remove_bosh_wait_timeout-toggle" onclick="return toggle('NonBlockingBOSH.remove_bosh_wait_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#remove_bosh_wait_timeout">remove_bosh_wait_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.remove_bosh_wait_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.remove_bosh_wait_timeout-expanded"><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-94', 'idlequeue', 'link-21');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-95" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.remove_alarm()=nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm"><a title="nbxmpp.idlequeue.IdleQueue.remove_alarm" class="py-name" href="#" onclick="return doclink('link-95', 'remove_alarm', 'link-95');">remove_alarm</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.on_bosh_wait_timeout" class="py-name" href="#" onclick="return doclink('link-96', 'on_bosh_wait_timeout', 'link-93');">on_bosh_wait_timeout</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wait_cb_time</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.on_persistent_fallback"></a><div id="NonBlockingBOSH.on_persistent_fallback-def"><a name="L298"></a><tt class="py-lineno">298</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.on_persistent_fallback-toggle" onclick="return toggle('NonBlockingBOSH.on_persistent_fallback');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_persistent_fallback">on_persistent_fallback</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">socket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.on_persistent_fallback-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.on_persistent_fallback-expanded"><a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"><tt class="py-docstring"> Called from underlying transport when server closes TCP connection</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"><tt class="py-docstring"> :param socket: disconnected transport object</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">http_persistent</tt><tt class="py-op">:</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt id="link-97" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-97', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'Fallback to nonpersistent HTTP (no pipelining as well)'</tt><tt class="py-op">)</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">http_persistent</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_persistent</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_pipelining</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-98', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.connect_and_flush" class="py-name" href="#" onclick="return doclink('link-99', 'connect_and_flush', 'link-73');">connect_and_flush</a></tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">)</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-100', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.handle_body_attrs"></a><div id="NonBlockingBOSH.handle_body_attrs-def"><a name="L316"></a><tt class="py-lineno">316</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.handle_body_attrs-toggle" onclick="return toggle('NonBlockingBOSH.handle_body_attrs');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#handle_body_attrs">handle_body_attrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza_attrs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.handle_body_attrs-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.handle_body_attrs-expanded"><a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"><tt class="py-docstring"> Called for each incoming body stanza from dispatcher. Checks body</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"><tt class="py-docstring"> attributes.</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.remove_bosh_wait_timeout" class="py-name" href="#" onclick="return doclink('link-101', 'remove_bosh_wait_timeout', 'link-90');">remove_bosh_wait_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">after_init</tt><tt class="py-op">:</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'sid'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-comment"># session ID should be only in init response</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_sid</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'sid'</tt><tt class="py-op">]</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'requests'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_requests</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'requests'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'wait'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_wait</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'wait'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">after_init</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-name">ack</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'ack'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-name">ack</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'ack'</tt><tt class="py-op">]</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack_checker</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name" targets="Method nbxmpp.bosh.AckChecker.process_incoming_ack()=nbxmpp.bosh.AckChecker-class.html#process_incoming_ack"><a title="nbxmpp.bosh.AckChecker.process_incoming_ack" class="py-name" href="#" onclick="return doclink('link-102', 'process_incoming_ack', 'link-102');">process_incoming_ack</a></tt><tt class="py-op">(</tt><tt class="py-name">ack</tt><tt class="py-op">=</tt><tt class="py-name">ack</tt><tt class="py-op">,</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_recv_socket</tt><tt class="py-op">)</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-string">'terminate'</tt><tt class="py-op">,</tt> <tt class="py-string">'terminal'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-name">condition</tt> <tt class="py-op">=</tt> <tt class="py-string">'n/a'</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'condition'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-name">condition</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'condition'</tt><tt class="py-op">]</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">condition</tt> <tt class="py-op">==</tt> <tt class="py-string">'n/a'</tt><tt class="py-op">:</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt id="link-103" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-103', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Received sesion-ending terminating stanza'</tt><tt class="py-op">)</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt id="link-104" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-104', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Received terminating stanza: %s - %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">condition</tt><tt class="py-op">,</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt id="link-105" class="py-name" targets="Variable nbxmpp.bosh.bosh_errors=nbxmpp.bosh-module.html#bosh_errors"><a title="nbxmpp.bosh.bosh_errors" class="py-name" href="#" onclick="return doclink('link-105', 'bosh_errors', 'link-105');">bosh_errors</a></tt><tt class="py-op">[</tt><tt class="py-name">condition</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-106', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'error'</tt><tt class="py-op">:</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-comment"># recoverable error</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+</div><a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.append_stanza"></a><div id="NonBlockingBOSH.append_stanza-def"><a name="L360"></a><tt class="py-lineno">360</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.append_stanza-toggle" onclick="return toggle('NonBlockingBOSH.append_stanza');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#append_stanza">append_stanza</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.append_stanza-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.append_stanza-expanded"><a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"><tt class="py-docstring"> Append stanza to a buffer to send</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">:</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-comment"># stanza is tuple of BOSH stanza and bool value for whether to add payload</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">prio_bosh_stanzas</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-comment"># stanza is XMPP stanza. Will be boshified before send.</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.send"></a><div id="NonBlockingBOSH.send-def"><a name="L373"></a><tt class="py-lineno">373</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.send-toggle" onclick="return toggle('NonBlockingBOSH.send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#send">send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.send-expanded"><a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send_BOSH" class="py-name" href="#" onclick="return doclink('link-107', 'send_BOSH', 'link-49');">send_BOSH</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.get_current_state"></a><div id="NonBlockingBOSH.get_current_state-def"><a name="L378"></a><tt class="py-lineno">378</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.get_current_state-toggle" onclick="return toggle('NonBlockingBOSH.get_current_state');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_current_state">get_current_state</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.get_current_state-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.get_current_state-expanded"><a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-string">'------ SOCKET_ID\tSOCKET_STATE\tPENDING_REQS\n'</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">:</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s------ %s\t%s\t%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">t</tt><tt class="py-op">,</tt> <tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-108', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">pending_requests</tt><tt class="py-op">)</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s------ prio stanzas: %s, queued XMPP stanzas: %s, not_acked stanzas: %s'</tt> \ </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">t</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">prio_bosh_stanzas</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stanza_buffer</tt><tt class="py-op">,</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack_checker</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name" targets="Method nbxmpp.bosh.AckChecker.get_not_acked_rids()=nbxmpp.bosh.AckChecker-class.html#get_not_acked_rids"><a title="nbxmpp.bosh.AckChecker.get_not_acked_rids" class="py-name" href="#" onclick="return doclink('link-109', 'get_not_acked_rids', 'link-109');">get_not_acked_rids</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">t</tt> </tt>
+</div><a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.connect_and_flush"></a><div id="NonBlockingBOSH.connect_and_flush-def"><a name="L388"></a><tt class="py-lineno">388</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.connect_and_flush-toggle" onclick="return toggle('NonBlockingBOSH.connect_and_flush');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#connect_and_flush">connect_and_flush</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">socket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.connect_and_flush-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.connect_and_flush-expanded"><a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.connect
+nbxmpp.client_nb.NonBlockingClient.connect
+nbxmpp.transports_nb.NonBlockingTCP.connect
+nbxmpp.transports_nb.NonBlockingTransport.connect" class="py-name" href="#" onclick="return doclink('link-110', 'connect', 'link-24');">connect</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-name">conn_5tuple</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">conn_5tuple</tt><tt class="py-op">,</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-name">on_connect</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible()=nbxmpp.bosh.NonBlockingBOSH-class.html#on_http_request_possible"><a title="nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible" class="py-name" href="#" onclick="return doclink('link-111', 'on_http_request_possible', 'link-111');">on_http_request_possible</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-name">on_connect_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-112', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.boshify_stanzas"></a><div id="NonBlockingBOSH.boshify_stanzas-def"><a name="L395"></a><tt class="py-lineno">395</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.boshify_stanzas-toggle" onclick="return toggle('NonBlockingBOSH.boshify_stanzas');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#boshify_stanzas">boshify_stanzas</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanzas</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">body_attrs</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.boshify_stanzas-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.boshify_stanzas-expanded"><a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"><tt class="py-docstring"> Wraps zero to many stanzas by body tag with xmlns and sid</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt id="link-113" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-113', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'boshify_staza - type is: %s, stanza is %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">stanzas</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">stanzas</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt class="py-name">tag</tt> <tt class="py-op">=</tt> <tt id="link-114" class="py-name"><a title="nbxmpp.protocol.BOSHBody" class="py-name" href="#" onclick="return doclink('link-114', 'BOSHBody', 'link-10');">BOSHBody</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'sid'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_sid</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="nbxmpp.simplexml.Node.setPayload" class="py-name" href="#" onclick="return doclink('link-115', 'setPayload', 'link-79');">setPayload</a></tt><tt class="py-op">(</tt><tt class="py-name">stanzas</tt><tt class="py-op">)</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tag</tt> </tt>
+</div><a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.send_init"></a><div id="NonBlockingBOSH.send_init-def"><a name="L405"></a><tt class="py-lineno">405</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.send_init-toggle" onclick="return toggle('NonBlockingBOSH.send_init');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#send_init">send_init</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">after_SASL</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.send_init-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.send_init-expanded"><a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">after_SASL</tt><tt class="py-op">:</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt id="link-116" class="py-name"><a title="nbxmpp.protocol.BOSHBody" class="py-name" href="#" onclick="return doclink('link-116', 'BOSHBody', 'link-10');">BOSHBody</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt> <tt class="py-string">'to'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_to</tt><tt class="py-op">,</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-string">'sid'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_sid</tt><tt class="py-op">,</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-string">'xml:lang'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_xml_lang</tt><tt class="py-op">,</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-string">'xmpp:restart'</tt><tt class="py-op">:</tt> <tt class="py-string">'true'</tt><tt class="py-op">,</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-string">'secure'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_secure</tt><tt class="py-op">,</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-string">'xmlns:xmpp'</tt><tt class="py-op">:</tt> <tt class="py-string">'urn:xmpp:xbosh'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt id="link-117" class="py-name"><a title="nbxmpp.protocol.BOSHBody" class="py-name" href="#" onclick="return doclink('link-117', 'BOSHBody', 'link-10');">BOSHBody</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt> <tt class="py-string">'content'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_content</tt><tt class="py-op">,</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-string">'hold'</tt><tt class="py-op">:</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_hold</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> <tt class="py-string">'route'</tt><tt class="py-op">:</tt> <tt class="py-string">'xmpp:%s:%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">route_host</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">route_port</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> <tt class="py-string">'to'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_to</tt><tt class="py-op">,</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> <tt class="py-string">'wait'</tt><tt class="py-op">:</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_wait</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-string">'xml:lang'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_xml_lang</tt><tt class="py-op">,</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-string">'xmpp:version'</tt><tt class="py-op">:</tt> <tt class="py-string">'1.0'</tt><tt class="py-op">,</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-string">'ver'</tt><tt class="py-op">:</tt> <tt class="py-string">'1.6'</tt><tt class="py-op">,</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-string">'xmlns:xmpp'</tt><tt class="py-op">:</tt> <tt class="py-string">'urn:xmpp:xbosh'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send_BOSH" class="py-name" href="#" onclick="return doclink('link-118', 'send_BOSH', 'link-49');">send_BOSH</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">t</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.start_disconnect"></a><div id="NonBlockingBOSH.start_disconnect-def"><a name="L427"></a><tt class="py-lineno">427</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.start_disconnect-toggle" onclick="return toggle('NonBlockingBOSH.start_disconnect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#start_disconnect">start_disconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.start_disconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.start_disconnect-expanded"><a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt id="link-119" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-119', 'NonBlockingTransport', 'link-1');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-120" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.start_disconnect()=nbxmpp.bosh.NonBlockingBOSH-class.html#start_disconnect,Method nbxmpp.transports_nb.NonBlockingTCP.start_disconnect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect,Method nbxmpp.transports_nb.NonBlockingTransport.start_disconnect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect"><a title="nbxmpp.bosh.NonBlockingBOSH.start_disconnect
+nbxmpp.transports_nb.NonBlockingTCP.start_disconnect
+nbxmpp.transports_nb.NonBlockingTransport.start_disconnect" class="py-name" href="#" onclick="return doclink('link-120', 'start_disconnect', 'link-120');">start_disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.renew_bosh_wait_timeout" class="py-name" href="#" onclick="return doclink('link-121', 'renew_bosh_wait_timeout', 'link-87');">renew_bosh_wait_timeout</a></tt><tt class="py-op">(</tt><tt id="link-122" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS" class="py-name" href="#" onclick="return doclink('link-122', 'DISCONNECT_TIMEOUT_SECONDS', 'link-8');">DISCONNECT_TIMEOUT_SECONDS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send_BOSH" class="py-name" href="#" onclick="return doclink('link-123', 'send_BOSH', 'link-49');">send_BOSH</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt id="link-124" class="py-name"><a title="nbxmpp.protocol.BOSHBody" class="py-name" href="#" onclick="return doclink('link-124', 'BOSHBody', 'link-10');">BOSHBody</a></tt><tt class="py-op">(</tt><tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'sid'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_sid</tt><tt class="py-op">,</tt> <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'terminate'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.get_new_http_socket"></a><div id="NonBlockingBOSH.get_new_http_socket-def"><a name="L434"></a><tt class="py-lineno">434</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.get_new_http_socket-toggle" onclick="return toggle('NonBlockingBOSH.get_new_http_socket');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_new_http_socket">get_new_http_socket</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.get_new_http_socket-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.get_new_http_socket-expanded"><a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> <tt class="py-name">http_dict</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'http_uri'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bosh_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-string">'http_version'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_version</tt><tt class="py-op">,</tt> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt class="py-string">'http_persistent'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_persistent</tt><tt class="py-op">,</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-string">'add_proxy_headers'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">over_proxy</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">estabilish_tls</tt><tt class="py-op">}</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">use_proxy_auth</tt><tt class="py-op">:</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"> <tt class="py-name">http_dict</tt><tt class="py-op">[</tt><tt class="py-string">'proxy_user'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">http_dict</tt><tt class="py-op">[</tt><tt class="py-string">'proxy_pass'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_creds</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt id="link-125" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingHTTPBOSH" class="py-name" href="#" onclick="return doclink('link-125', 'NonBlockingHTTPBOSH', 'link-2');">NonBlockingHTTPBOSH</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt id="link-126" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-126', 'raise_event', 'link-20');">raise_event</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-127', 'raise_event', 'link-20');">raise_event</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-name">on_disconnect</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-128', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> <tt id="link-129" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-129', 'idlequeue', 'link-21');">idlequeue</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-130', 'idlequeue', 'link-21');">idlequeue</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-name">estabilish_tls</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">estabilish_tls</tt><tt class="py-op">,</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-name">certs</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">certs</tt><tt class="py-op">,</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> <tt id="link-131" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible" class="py-name" href="#" onclick="return doclink('link-131', 'on_http_request_possible', 'link-111');">on_http_request_possible</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible" class="py-name" href="#" onclick="return doclink('link-132', 'on_http_request_possible', 'link-111');">on_http_request_possible</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> <tt class="py-name">http_dict</tt> <tt class="py-op">=</tt> <tt class="py-name">http_dict</tt><tt class="py-op">,</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-name">proxy_dict</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">,</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt id="link-133" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.on_persistent_fallback()=nbxmpp.bosh.NonBlockingBOSH-class.html#on_persistent_fallback"><a title="nbxmpp.bosh.NonBlockingBOSH.on_persistent_fallback" class="py-name" href="#" onclick="return doclink('link-133', 'on_persistent_fallback', 'link-133');">on_persistent_fallback</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.on_persistent_fallback" class="py-name" href="#" onclick="return doclink('link-134', 'on_persistent_fallback', 'link-133');">on_persistent_fallback</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.onreceive()=nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive,Method nbxmpp.transports_nb.NonBlockingTransport.onreceive()=nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-135', 'onreceive', 'link-135');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-136" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.on_received_http()=nbxmpp.bosh.NonBlockingBOSH-class.html#on_received_http"><a title="nbxmpp.bosh.NonBlockingBOSH.on_received_http" class="py-name" href="#" onclick="return doclink('link-136', 'on_received_http', 'link-136');">on_received_http</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingHTTPBOSH.set_stanza_build_cb()=nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#set_stanza_build_cb"><a title="nbxmpp.transports_nb.NonBlockingHTTPBOSH.set_stanza_build_cb" class="py-name" href="#" onclick="return doclink('link-137', 'set_stanza_build_cb', 'link-137');">set_stanza_build_cb</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.build_stanza()=nbxmpp.bosh.NonBlockingBOSH-class.html#build_stanza"><a title="nbxmpp.bosh.NonBlockingBOSH.build_stanza" class="py-name" href="#" onclick="return doclink('link-138', 'build_stanza', 'link-138');">build_stanza</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt>
+</div><a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.onreceive"></a><div id="NonBlockingBOSH.onreceive-def"><a name="L458"></a><tt class="py-lineno">458</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.onreceive-toggle" onclick="return toggle('NonBlockingBOSH.onreceive');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive">onreceive</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">recv_handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.onreceive-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.onreceive-expanded"><a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">recv_handler</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-name">recv_handler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name" targets="Class nbxmpp.dispatcher_nb.Dispatcher=nbxmpp.dispatcher_nb.Dispatcher-class.html"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-139', 'Dispatcher', 'link-139');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-140" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking,Method nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-140', 'ProcessNonBlocking', 'link-140');">ProcessNonBlocking</a></tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_recv_handler</tt> <tt class="py-op">=</tt> <tt class="py-name">recv_handler</tt> </tt>
+</div><a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.on_received_http"></a><div id="NonBlockingBOSH.on_received_http-def"><a name="L464"></a><tt class="py-lineno">464</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.on_received_http-toggle" onclick="return toggle('NonBlockingBOSH.on_received_http');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_received_http">on_received_http</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">,</tt> <tt class="py-param">socket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.on_received_http-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.on_received_http-expanded"><a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_recv_socket</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_recv_handler</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingBOSH.disconnect"></a><div id="NonBlockingBOSH.disconnect-def"><a name="L469"></a><tt class="py-lineno">469</tt> <a class="py-toggle" href="#" id="NonBlockingBOSH.disconnect-toggle" onclick="return toggle('NonBlockingBOSH.disconnect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect">disconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingBOSH.disconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingBOSH.disconnect-expanded"><a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.remove_bosh_wait_timeout" class="py-name" href="#" onclick="return doclink('link-141', 'remove_bosh_wait_timeout', 'link-90');">remove_bosh_wait_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-142', 'get_state', 'link-39');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-143" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-143', 'DISCONNECTED', 'link-5');">DISCONNECTED</a></tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_socks</tt><tt class="py-op">:</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-144', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt id="link-145" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-145', 'NonBlockingTransport', 'link-1');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-146', 'disconnect', 'link-89');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">do_callback</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> </tt>
+<a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> </tt>
+<a name="get_rand_number"></a><div id="get_rand_number-def"><a name="L478"></a><tt class="py-lineno">478</tt> <a class="py-toggle" href="#" id="get_rand_number-toggle" onclick="return toggle('get_rand_number');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh-module.html#get_rand_number">get_rand_number</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="get_rand_number-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="get_rand_number-expanded"><a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-comment"># with 50-bit random initial rid, session would have to go up</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> <tt class="py-comment"># to 7881299347898368 messages to raise rid over 2**53</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt class="py-comment"># (see http://www.xmpp.org/extensions/xep-0124.html#rids)</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-comment"># it's also used for sequence key initialization</tt> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">random</tt><tt class="py-op">.</tt><tt class="py-name">Random</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-name">r</tt><tt class="py-op">.</tt><tt class="py-name">seed</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">r</tt><tt class="py-op">.</tt><tt class="py-name">getrandbits</tt><tt class="py-op">(</tt><tt class="py-number">50</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> </tt>
+<a name="AckChecker"></a><div id="AckChecker-def"><a name="L489"></a><tt class="py-lineno">489</tt> <a class="py-toggle" href="#" id="AckChecker-toggle" onclick="return toggle('AckChecker');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.bosh.AckChecker-class.html">AckChecker</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AckChecker-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="AckChecker-expanded"><a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"><tt class="py-docstring"> Class for generating rids and generating and checking acknowledgements in</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"><tt class="py-docstring"> BOSH messages</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="AckChecker.__init__"></a><div id="AckChecker.__init__-def"><a name="L494"></a><tt class="py-lineno">494</tt> <a class="py-toggle" href="#" id="AckChecker.__init__-toggle" onclick="return toggle('AckChecker.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.AckChecker-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AckChecker.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AckChecker.__init__-expanded"><a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">rid</tt> <tt class="py-op">=</tt> <tt id="link-147" class="py-name" targets="Function nbxmpp.bosh.get_rand_number()=nbxmpp.bosh-module.html#get_rand_number"><a title="nbxmpp.bosh.get_rand_number" class="py-name" href="#" onclick="return doclink('link-147', 'get_rand_number', 'link-147');">get_rand_number</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_rids</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">not_acked</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> </tt>
+<a name="AckChecker.get_not_acked_rids"></a><div id="AckChecker.get_not_acked_rids-def"><a name="L501"></a><tt class="py-lineno">501</tt> <a class="py-toggle" href="#" id="AckChecker.get_not_acked_rids-toggle" onclick="return toggle('AckChecker.get_not_acked_rids');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.AckChecker-class.html#get_not_acked_rids">get_not_acked_rids</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">rid</tt> <tt class="py-keyword">for</tt> <tt class="py-name">rid</tt><tt class="py-op">,</tt> <tt class="py-name">st</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">not_acked</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> </tt>
+<a name="AckChecker.backup_stanza"></a><div id="AckChecker.backup_stanza-def"><a name="L503"></a><tt class="py-lineno">503</tt> <a class="py-toggle" href="#" id="AckChecker.backup_stanza-toggle" onclick="return toggle('AckChecker.backup_stanza');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.AckChecker-class.html#backup_stanza">backup_stanza</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">,</tt> <tt class="py-param">socket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AckChecker.backup_stanza-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AckChecker.backup_stanza-expanded"><a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">pending_requests</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-name">rid</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name" targets="Method nbxmpp.bosh.AckChecker.get_rid()=nbxmpp.bosh.AckChecker-class.html#get_rid"><a title="nbxmpp.bosh.AckChecker.get_rid" class="py-name" href="#" onclick="return doclink('link-148', 'get_rid', 'link-148');">get_rid</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">not_acked</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">rid</tt><tt class="py-op">,</tt> <tt class="py-name">stanza</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-149', 'setAttr', 'link-83');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'rid'</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">rid</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_rids</tt><tt class="py-op">[</tt><tt class="py-name">socket</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">rid</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">rid</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-150', 'setAttr', 'link-83');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'ack'</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">stanza</tt> </tt>
+</div><a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"> </tt>
+<a name="AckChecker.process_incoming_ack"></a><div id="AckChecker.process_incoming_ack-def"><a name="L514"></a><tt class="py-lineno">514</tt> <a class="py-toggle" href="#" id="AckChecker.process_incoming_ack-toggle" onclick="return toggle('AckChecker.process_incoming_ack');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.AckChecker-class.html#process_incoming_ack">process_incoming_ack</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">socket</tt><tt class="py-op">,</tt> <tt class="py-param">ack</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AckChecker.process_incoming_ack-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AckChecker.process_incoming_ack-expanded"><a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">pending_requests</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ack</tt><tt class="py-op">:</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt class="py-name">ack</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">ack</tt><tt class="py-op">)</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> <tt class="py-name">ack</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_rids</tt><tt class="py-op">[</tt><tt class="py-name">socket</tt><tt class="py-op">]</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> <tt class="py-name">i</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">rid</tt> <tt class="py-keyword">for</tt> <tt class="py-name">rid</tt><tt class="py-op">,</tt> <tt class="py-name">st</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">not_acked</tt> <tt class="py-keyword">if</tt> <tt class="py-name">ack</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">rid</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">not_acked</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">not_acked</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ack</tt> <tt class="py-op">=</tt> <tt class="py-name">ack</tt> </tt>
+</div><a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"> </tt>
+<a name="AckChecker.get_rid"></a><div id="AckChecker.get_rid-def"><a name="L527"></a><tt class="py-lineno">527</tt> <a class="py-toggle" href="#" id="AckChecker.get_rid-toggle" onclick="return toggle('AckChecker.get_rid');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.AckChecker-class.html#get_rid">get_rid</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AckChecker.get_rid-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AckChecker.get_rid-expanded"><a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">rid</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">rid</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">rid</tt> </tt>
+</div></div><a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> </tt>
+<a name="KeyStack"></a><div id="KeyStack-def"><a name="L535"></a><tt class="py-lineno">535</tt> <a class="py-toggle" href="#" id="KeyStack-toggle" onclick="return toggle('KeyStack');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.bosh.KeyStack-class.html">KeyStack</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="KeyStack-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="KeyStack-expanded"><a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"><tt class="py-docstring"> Class implementing key sequences for BOSH messages</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="KeyStack.__init__"></a><div id="KeyStack.__init__-def"><a name="L539"></a><tt class="py-lineno">539</tt> <a class="py-toggle" href="#" id="KeyStack.__init__-toggle" onclick="return toggle('KeyStack.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.KeyStack-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">count</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="KeyStack.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="KeyStack.__init__-expanded"><a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">count</tt> <tt class="py-op">=</tt> <tt class="py-name">count</tt> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.keys()=nbxmpp.roster_nb.NonBlockingRoster-class.html#keys"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-151', 'keys', 'link-151');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name" targets="Method nbxmpp.bosh.KeyStack.reset()=nbxmpp.bosh.KeyStack-class.html#reset"><a title="nbxmpp.bosh.KeyStack.reset" class="py-name" href="#" onclick="return doclink('link-152', 'reset', 'link-152');">reset</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">first_call</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"> </tt>
+<a name="KeyStack.reset"></a><div id="KeyStack.reset-def"><a name="L545"></a><tt class="py-lineno">545</tt> <a class="py-toggle" href="#" id="KeyStack.reset-toggle" onclick="return toggle('KeyStack.reset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.KeyStack-class.html#reset">reset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="KeyStack.reset-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="KeyStack.reset-expanded"><a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> <tt class="py-name">seed</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-153" class="py-name"><a title="nbxmpp.bosh.get_rand_number" class="py-name" href="#" onclick="return doclink('link-153', 'get_rand_number', 'link-147');">get_rand_number</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-154', 'keys', 'link-151');">keys</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">sha1</tt><tt class="py-op">(</tt><tt class="py-name">seed</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">hexdigest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> <tt class="py-name">curr_seed</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-155', 'keys', 'link-151');">keys</a></tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> </tt>
+<a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-156', 'keys', 'link-151');">keys</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">sha1</tt><tt class="py-op">(</tt><tt class="py-name">curr_seed</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">hexdigest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> </tt>
+<a name="KeyStack.get"></a><div id="KeyStack.get-def"><a name="L552"></a><tt class="py-lineno">552</tt> <a class="py-toggle" href="#" id="KeyStack.get-toggle" onclick="return toggle('KeyStack.get');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.bosh.KeyStack-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="KeyStack.get-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="KeyStack.get-expanded"><a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">first_call</tt><tt class="py-op">:</tt> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">first_call</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-157', 'keys', 'link-151');">keys</a></tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-158', 'keys', 'link-151');">keys</a></tt><tt class="py-op">)</tt><tt class="py-op">&gt;</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-159', 'keys', 'link-151');">keys</a></tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> <tt class="py-name">last_key</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-160', 'keys', 'link-151');">keys</a></tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="nbxmpp.bosh.KeyStack.reset" class="py-name" href="#" onclick="return doclink('link-161', 'reset', 'link-152');">reset</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-name">new_key</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-162', 'keys', 'link-151');">keys</a></tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">last_key</tt><tt class="py-op">,</tt> <tt class="py-name">new_key</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"><tt class="py-comment"># http://www.xmpp.org/extensions/xep-0124.html#errorstatus-terminal</tt> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"><tt id="link-163" class="py-name"><a title="nbxmpp.bosh.bosh_errors" class="py-name" href="#" onclick="return doclink('link-163', 'bosh_errors', 'link-105');">bosh_errors</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> <tt class="py-string">'n/a'</tt><tt class="py-op">:</tt> <tt class="py-string">'none or unknown condition in terminating body stanza'</tt><tt class="py-op">,</tt> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> <tt class="py-string">'bad-request'</tt><tt class="py-op">:</tt> <tt class="py-string">'The format of an HTTP header or binding element received from the client is unacceptable (e.g., syntax error), or Script Syntax is not supported.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> <tt class="py-string">'host-gone'</tt><tt class="py-op">:</tt> <tt class="py-string">'The target domain specified in the "to" attribute or the target host or port specified in the "route" attribute is no longer serviced by the connection manager.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-string">'host-unknown'</tt><tt class="py-op">:</tt> <tt class="py-string">'The target domain specified in the "to" attribute or the target host or port specified in the "route" attribute is unknown to the connection manager.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> <tt class="py-string">'improper-addressing'</tt><tt class="py-op">:</tt> <tt class="py-string">'The initialization element lacks a "to" or "route" attribute (or the attribute has no value) but the connection manager requires one.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"> <tt class="py-string">'internal-server-error'</tt><tt class="py-op">:</tt> <tt class="py-string">'The connection manager has experienced an internal error that prevents it from servicing the request.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> <tt class="py-string">'item-not-found'</tt><tt class="py-op">:</tt> <tt class="py-string">'(1) "sid" is not valid, (2) "stream" is not valid, (3) "rid" is larger than the upper limit of the expected window, (4) connection manager is unable to resend response, (5) "key" sequence is invalid'</tt><tt class="py-op">,</tt> </tt>
+<a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> <tt class="py-string">'other-request'</tt><tt class="py-op">:</tt> <tt class="py-string">'Another request being processed at the same time as this request caused the session to terminate.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"> <tt class="py-string">'policy-violation'</tt><tt class="py-op">:</tt> <tt class="py-string">'The client has broken the session rules (polling too frequently, requesting too frequently, too many simultaneous requests).'</tt><tt class="py-op">,</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"> <tt class="py-string">'remote-connection-failed'</tt><tt class="py-op">:</tt> <tt class="py-string">'The connection manager was unable to connect to, or unable to connect securely to, or has lost its connection to, the server.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"> <tt class="py-string">'remote-stream-error'</tt><tt class="py-op">:</tt> <tt class="py-string">'Encapsulates an error in the protocol being transported.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> <tt class="py-string">'see-other-uri'</tt><tt class="py-op">:</tt> <tt class="py-string">'The connection manager does not operate at this URI (e.g., the connection manager accepts only SSL or TLS connections at some https: URI rather than the http: URI requested by the client). The client may try POSTing to the URI in the content of the &lt;uri/&gt; child element.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L579"></a><tt class="py-lineno">579</tt> <tt class="py-line"> <tt class="py-string">'system-shutdown'</tt><tt class="py-op">:</tt> <tt class="py-string">'The connection manager is being shut down. All active HTTP sessions are being terminated. No new sessions can be created.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> <tt class="py-string">'undefined-condition'</tt><tt class="py-op">:</tt> <tt class="py-string">'The error is not one of those defined herein; the connection manager SHOULD include application-specific information in the content of the &lt;body/&gt; wrapper.'</tt> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"><tt class="py-op">}</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.bosh.AckChecker-class.html b/doc/apidocs/nbxmpp.bosh.AckChecker-class.html
new file mode 100644
index 0000000..0d6309e
--- /dev/null
+++ b/doc/apidocs/nbxmpp.bosh.AckChecker-class.html
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.bosh.AckChecker</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.bosh-module.html">Module&nbsp;bosh</a> ::
+ Class&nbsp;AckChecker
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.bosh.AckChecker-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class AckChecker</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker">source&nbsp;code</a></span></p>
+Class for generating rids and generating and checking acknowledgements in
+BOSH messages
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.AckChecker-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.AckChecker-class.html#get_not_acked_rids" class="summary-sig-name">get_not_acked_rids</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.get_not_acked_rids">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.AckChecker-class.html#backup_stanza" class="summary-sig-name">backup_stanza</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>,
+ <span class="summary-sig-arg">socket</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.backup_stanza">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.AckChecker-class.html#process_incoming_ack" class="summary-sig-name">process_incoming_ack</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">socket</span>,
+ <span class="summary-sig-arg">ack</span>=<span class="summary-sig-default">None</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.process_incoming_ack">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.AckChecker-class.html#get_rid" class="summary-sig-name">get_rid</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.get_rid">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_not_acked_rids"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_not_acked_rids</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.get_not_acked_rids">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="backup_stanza"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">backup_stanza</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>,
+ <span class="sig-arg">socket</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.backup_stanza">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="process_incoming_ack"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">process_incoming_ack</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">socket</span>,
+ <span class="sig-arg">ack</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.process_incoming_ack">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_rid"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_rid</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#AckChecker.get_rid">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.bosh.KeyStack-class.html b/doc/apidocs/nbxmpp.bosh.KeyStack-class.html
new file mode 100644
index 0000000..609d0b5
--- /dev/null
+++ b/doc/apidocs/nbxmpp.bosh.KeyStack-class.html
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.bosh.KeyStack</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.bosh-module.html">Module&nbsp;bosh</a> ::
+ Class&nbsp;KeyStack
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.bosh.KeyStack-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class KeyStack</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#KeyStack">source&nbsp;code</a></span></p>
+Class implementing key sequences for BOSH messages
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.KeyStack-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">count</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#KeyStack.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.KeyStack-class.html#reset" class="summary-sig-name">reset</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#KeyStack.reset">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.KeyStack-class.html#get" class="summary-sig-name">get</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#KeyStack.get">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">count</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#KeyStack.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="reset"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">reset</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#KeyStack.reset">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#KeyStack.get">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.bosh.NonBlockingBOSH-class.html b/doc/apidocs/nbxmpp.bosh.NonBlockingBOSH-class.html
new file mode 100644
index 0000000..0caef5d
--- /dev/null
+++ b/doc/apidocs/nbxmpp.bosh.NonBlockingBOSH-class.html
@@ -0,0 +1,1298 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.bosh.NonBlockingBOSH</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.bosh-module.html">Module&nbsp;bosh</a> ::
+ Class&nbsp;NonBlockingBOSH
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.bosh.NonBlockingBOSH-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingBOSH</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_b" name="uml_class_diagram_for_nbxmpp_b">
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#__init__" title="Each trasport class can have different constructor but it has to have at least all the arguments of NonBlockingTransport constructor" alt="" coords="17,455,787,473"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#connect" title="Creates and connects transport to server and port defined in conn_5tuple which should be item from list returned from getaddrinfo" alt="" coords="17,473,787,492"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout" title="nbxmpp.bosh.NonBlockingBOSH.set_timeout" alt="" coords="17,492,787,511"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_http_request_possible" title="Called when HTTP request it&#39;s possible to send a HTTP request. It can be when socket is connected or when HTTP response arrived" alt="" coords="17,511,787,529"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_socket_in" title="Get sockets in desired state" alt="" coords="17,529,787,548"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_free_socket" title="Select and returns socket eligible for sending a data to" alt="" coords="17,548,787,567"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#send_BOSH" title="Tries to send a stanza in payload by appeding it to a buffer and plugging a free socket for writing." alt="" coords="17,567,787,585"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#plug_socket" title="nbxmpp.bosh.NonBlockingBOSH.plug_socket" alt="" coords="17,585,787,604"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#build_stanza" title="Build a BOSH body tag from data in buffers and adds key, rid and ack attributes to it" alt="" coords="17,604,787,623"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_bosh_wait_timeout" title="nbxmpp.bosh.NonBlockingBOSH.on_bosh_wait_timeout" alt="" coords="17,623,787,641"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#renew_bosh_wait_timeout" title="nbxmpp.bosh.NonBlockingBOSH.renew_bosh_wait_timeout" alt="" coords="17,641,787,660"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#remove_bosh_wait_timeout" title="nbxmpp.bosh.NonBlockingBOSH.remove_bosh_wait_timeout" alt="" coords="17,660,787,679"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_persistent_fallback" title="Called from underlying transport when server closes TCP connection" alt="" coords="17,679,787,697"/>
+<area shape="rect" id="node6" href="nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect" title="nbxmpp.bosh.NonBlockingBOSH.disconnect" alt="" coords="17,716,787,735"/>
+<area shape="rect" id="node1" href="nbxmpp.bosh.NonBlockingBOSH-class.html" title="nbxmpp.bosh.NonBlockingBOSH" alt="" coords="5,422,797,741"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin" title="nbxmpp.transports_nb.NonBlockingTransport.plugin" alt="" coords="244,153,561,172"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout" title="nbxmpp.transports_nb.NonBlockingTransport.plugout" alt="" coords="244,172,561,191"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state" title="nbxmpp.transports_nb.NonBlockingTransport.set_state" alt="" coords="244,191,561,209"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state" title="nbxmpp.transports_nb.NonBlockingTransport.get_state" alt="" coords="244,209,561,228"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout" title="Called when there&#39;s no response from server in defined timeout" alt="" coords="244,228,561,247"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2" title="called when there&#39;s no response from server in defined timeout" alt="" coords="244,247,561,265"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout" alt="" coords="244,265,561,284"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2" alt="" coords="244,284,561,303"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_timeout2" alt="" coords="244,303,561,321"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd" title="nbxmpp.transports_nb.NonBlockingTransport.get_fd" alt="" coords="244,321,561,340"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" alt="" coords="244,340,561,359"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout" alt="" coords="244,359,561,377"/>
+<area shape="rect" id="node7" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2" alt="" coords="244,377,561,396"/>
+<area shape="rect" id="node2" href="nbxmpp.transports_nb.NonBlockingTransport-class.html" title="Abstract class representing a transport" alt="" coords="232,121,573,402"/>
+<area shape="rect" id="node8" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="289,39,515,57"/>
+<area shape="rect" id="node8" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="289,57,515,76"/>
+<area shape="rect" id="node8" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="289,76,515,95"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="277,6,525,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_b.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_b" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">raise_event</span>,
+ <span class="summary-sig-arg">on_disconnect</span>,
+ <span class="summary-sig-arg">idlequeue</span>,
+ <span class="summary-sig-arg">estabilish_tls</span>,
+ <span class="summary-sig-arg">certs</span>,
+ <span class="summary-sig-arg">xmpp_server</span>,
+ <span class="summary-sig-arg">domain</span>,
+ <span class="summary-sig-arg">bosh_dict</span>,
+ <span class="summary-sig-arg">proxy_creds</span>)</span><br />
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#connect" class="summary-sig-name">connect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">conn_5tuple</span>,
+ <span class="summary-sig-arg">on_connect</span>,
+ <span class="summary-sig-arg">on_connect_failure</span>)</span><br />
+ Creates and connects transport to server and port defined in conn_5tuple
+which should be item from list returned from getaddrinfo</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#_on_connect" class="summary-sig-name" onclick="show_private();">_on_connect</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Preceeds call of on_connect callback</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH._on_connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout" class="summary-sig-name">set_timeout</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">timeout</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.set_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_http_request_possible" class="summary-sig-name">on_http_request_possible</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called when HTTP request it's possible to send a HTTP request. It can be when
+socket is connected or when HTTP response arrived</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_http_request_possible">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_socket_in" class="summary-sig-name">get_socket_in</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">state</span>)</span><br />
+ Get sockets in desired state</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_socket_in">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_free_socket" class="summary-sig-name">get_free_socket</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Select and returns socket eligible for sending a data to</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_free_socket">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#send_BOSH" class="summary-sig-name">send_BOSH</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">payload</span>)</span><br />
+ Tries to send a stanza in payload by appeding it to a buffer and plugging a
+free socket for writing.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.send_BOSH">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#plug_socket" class="summary-sig-name">plug_socket</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.plug_socket">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#build_stanza" class="summary-sig-name">build_stanza</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">socket</span>)</span><br />
+ Build a BOSH body tag from data in buffers and adds key, rid and ack
+attributes to it</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.build_stanza">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_bosh_wait_timeout" class="summary-sig-name">on_bosh_wait_timeout</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_bosh_wait_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#renew_bosh_wait_timeout" class="summary-sig-name">renew_bosh_wait_timeout</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">timeout</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.renew_bosh_wait_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#remove_bosh_wait_timeout" class="summary-sig-name">remove_bosh_wait_timeout</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.remove_bosh_wait_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_persistent_fallback" class="summary-sig-name">on_persistent_fallback</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">socket</span>)</span><br />
+ Called from underlying transport when server closes TCP connection</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_persistent_fallback">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#handle_body_attrs" class="summary-sig-name">handle_body_attrs</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza_attrs</span>)</span><br />
+ Called for each incoming body stanza from dispatcher. Checks body
+attributes.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.handle_body_attrs">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#append_stanza" class="summary-sig-name">append_stanza</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>)</span><br />
+ Append stanza to a buffer to send</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.append_stanza">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#send" class="summary-sig-name">send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_current_state" class="summary-sig-name">get_current_state</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_current_state">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#connect_and_flush" class="summary-sig-name">connect_and_flush</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">socket</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.connect_and_flush">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#boshify_stanzas" class="summary-sig-name">boshify_stanzas</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanzas</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">body_attrs</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Wraps zero to many stanzas by body tag with xmlns and sid</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.boshify_stanzas">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#send_init" class="summary-sig-name">send_init</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">after_SASL</span>=<span class="summary-sig-default">False</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.send_init">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#start_disconnect" class="summary-sig-name">start_disconnect</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.start_disconnect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#get_new_http_socket" class="summary-sig-name">get_new_http_socket</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_new_http_socket">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive" class="summary-sig-name">onreceive</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">recv_handler</span>)</span><br />
+ Set the on_receive callback.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.onreceive">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#on_received_http" class="summary-sig-name">on_received_http</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>,
+ <span class="summary-sig-arg">socket</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_received_http">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect" class="summary-sig-name">disconnect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">do_callback</span>=<span class="summary-sig-default">True</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.disconnect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">transports_nb.NonBlockingTransport</a></code></b>:
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd">get_fd</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state">get_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin">plugin</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout">plugout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout">read_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2">read_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout">remove_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout">renew_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2">renew_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout">set_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2">set_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state">set_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2">set_timeout2</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">transports_nb.NonBlockingTransport</a></code></b> (private):
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure" onclick="show_private();">_on_connect_failure</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started" onclick="show_private();">_tcp_connecting_started</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">raise_event</span>,
+ <span class="sig-arg">on_disconnect</span>,
+ <span class="sig-arg">idlequeue</span>,
+ <span class="sig-arg">estabilish_tls</span>,
+ <span class="sig-arg">certs</span>,
+ <span class="sig-arg">xmpp_server</span>,
+ <span class="sig-arg">domain</span>,
+ <span class="sig-arg">bosh_dict</span>,
+ <span class="sig-arg">proxy_creds</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>raise_event</code></strong> - callback for monitoring of sent and received data</li>
+ <li><strong class="pname"><code>on_disconnect</code></strong> - callback called on disconnection during runtime</li>
+ <li><strong class="pname"><code>idlequeue</code></strong> - processing idlequeue</li>
+ <li><strong class="pname"><code>estabilish_tls</code></strong> - boolean whether to estabilish TLS connection after
+TCP connection is done</li>
+ <li><strong class="pname"><code>certs</code></strong> - tuple of (cacerts, mycerts) see constructor of
+tls_nb.NonBlockingTLS for more details</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="connect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">conn_5tuple</span>,
+ <span class="sig-arg">on_connect</span>,
+ <span class="sig-arg">on_connect_failure</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Creates and connects transport to server and port defined in conn_5tuple
+which should be item from list returned from getaddrinfo
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>conn_5tuple</code></strong> - 5-tuple returned from getaddrinfo</li>
+ <li><strong class="pname"><code>on_connect</code></strong> - callback called on successful connect to the server</li>
+ <li><strong class="pname"><code>on_connect_failure</code></strong> - callback called on failure when connecting</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#connect">transports_nb.NonBlockingTransport.connect</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_connect"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_connect</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH._on_connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Preceeds call of on_connect callback
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect" onclick="show_private();">transports_nb.NonBlockingTransport._on_connect</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_timeout</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">timeout</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.set_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout">transports_nb.NonBlockingTransport.set_timeout</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="on_http_request_possible"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">on_http_request_possible</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_http_request_possible">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Called when HTTP request it's possible to send a HTTP request. It can be when
+socket is connected or when HTTP response arrived</p>
+<p>There should be always one pending request to BOSH CM.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_socket_in"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_socket_in</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">state</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_socket_in">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get sockets in desired state
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_free_socket"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_free_socket</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_free_socket">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Select and returns socket eligible for sending a data to
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="send_BOSH"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send_BOSH</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">payload</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.send_BOSH">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Tries to send a stanza in payload by appeding it to a buffer and plugging a
+free socket for writing.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plug_socket"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plug_socket</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.plug_socket">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="build_stanza"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">build_stanza</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">socket</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.build_stanza">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Build a BOSH body tag from data in buffers and adds key, rid and ack
+attributes to it</p>
+<p>This method is called from _do_send() of underlying transport. This is to
+ensure rid and keys will be processed in correct order. If I generate
+them before plugging a socket for write (and did it for two sockets/HTTP
+connections) in parallel, they might be sent in wrong order, which
+results in violating the BOSH session and server-side disconnect.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="on_bosh_wait_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">on_bosh_wait_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_bosh_wait_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="renew_bosh_wait_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">renew_bosh_wait_timeout</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">timeout</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.renew_bosh_wait_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="remove_bosh_wait_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">remove_bosh_wait_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.remove_bosh_wait_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="on_persistent_fallback"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">on_persistent_fallback</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">socket</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_persistent_fallback">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called from underlying transport when server closes TCP connection
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>socket</code></strong> - disconnected transport object</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="handle_body_attrs"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">handle_body_attrs</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza_attrs</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.handle_body_attrs">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called for each incoming body stanza from dispatcher. Checks body
+attributes.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="append_stanza"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">append_stanza</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.append_stanza">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Append stanza to a buffer to send
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#send">transports_nb.NonBlockingTransport.send</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_current_state"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_current_state</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_current_state">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="connect_and_flush"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">connect_and_flush</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">socket</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.connect_and_flush">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="boshify_stanzas"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">boshify_stanzas</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanzas</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">body_attrs</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.boshify_stanzas">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Wraps zero to many stanzas by body tag with xmlns and sid
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="send_init"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send_init</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">after_SASL</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.send_init">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="start_disconnect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">start_disconnect</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.start_disconnect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect">transports_nb.NonBlockingTransport.start_disconnect</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_new_http_socket"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_new_http_socket</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.get_new_http_socket">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="onreceive"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">onreceive</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">recv_handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.onreceive">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Set the on_receive callback.</p>
+<p>onreceive(None) sets callback to Dispatcher.ProcessNonBlocking which is
+the default one that will decide what to do with received stanza based on
+its tag name and namespace.</p>
+<p>Do not confuse it with on_receive() method, which is the callback
+itself.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive">transports_nb.NonBlockingTransport.onreceive</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="on_received_http"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">on_received_http</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>,
+ <span class="sig-arg">socket</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.on_received_http">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="disconnect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">disconnect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">do_callback</span>=<span class="sig-default">True</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.bosh-pysrc.html#NonBlockingBOSH.disconnect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect">transports_nb.NonBlockingTransport.disconnect</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.c14n-module.html b/doc/apidocs/nbxmpp.c14n-module.html
new file mode 100644
index 0000000..d7c1fd3
--- /dev/null
+++ b/doc/apidocs/nbxmpp.c14n-module.html
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.c14n</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;c14n
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.c14n-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module c14n</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.c14n-pysrc.html">source&nbsp;code</a></span></p>
+XML canonicalisation methods (for XEP-0116)
+
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.c14n-module.html#c14n" class="summary-sig-name">c14n</a>(<span class="summary-sig-arg">node</span>,
+ <span class="summary-sig-arg">is_buggy</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.c14n-pysrc.html#c14n">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.c14n-module.html#normalise_attr" class="summary-sig-name">normalise_attr</a>(<span class="summary-sig-arg">val</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.c14n-pysrc.html#normalise_attr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.c14n-module.html#normalise_text" class="summary-sig-name">normalise_text</a>(<span class="summary-sig-arg">val</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.c14n-pysrc.html#normalise_text">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.c14n-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <a href="nbxmpp.simplexml-module.html#ustr" title="nbxmpp.simplexml.ustr">ustr</a>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="c14n"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">c14n</span>(<span class="sig-arg">node</span>,
+ <span class="sig-arg">is_buggy</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.c14n-pysrc.html#c14n">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="normalise_attr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">normalise_attr</span>(<span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.c14n-pysrc.html#normalise_attr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="normalise_text"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">normalise_text</span>(<span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.c14n-pysrc.html#normalise_text">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.c14n-pysrc.html b/doc/apidocs/nbxmpp.c14n-pysrc.html
new file mode 100644
index 0000000..4bcfe62
--- /dev/null
+++ b/doc/apidocs/nbxmpp.c14n-pysrc.html
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.c14n</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;c14n
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.c14n-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.c14n-module.html">Module nbxmpp.c14n</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># -*- coding:utf-8 -*-</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## c14n.py</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2007-2008 Brendan Taylor &lt;whateley AT gmail.com&gt;</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## This file is part of Gajim.</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## Gajim is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published</tt> </tt>
+<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment">## by the Free Software Foundation; version 3 only.</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment">## Gajim is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment">## You should have received a copy of the GNU General Public License</tt> </tt>
+<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-comment">## along with Gajim. If not, see &lt;http://www.gnu.org/licenses/&gt;.</tt> </tt>
+<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt class="py-docstring">XML canonicalisation methods (for XEP-0116)</tt> </tt>
+<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"> </tt>
+<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.simplexml=nbxmpp.simplexml-module.html"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-0', 'simplexml', 'link-0');">simplexml</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Function nbxmpp.simplexml.ustr()=nbxmpp.simplexml-module.html#ustr"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-1', 'ustr', 'link-1');">ustr</a></tt> </tt>
+<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"> </tt>
+<a name="c14n"></a><div id="c14n-def"><a name="L27"></a><tt class="py-lineno">27</tt> <a class="py-toggle" href="#" id="c14n-toggle" onclick="return toggle('c14n');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.c14n-module.html#c14n">c14n</a><tt class="py-op">(</tt><tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">is_buggy</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="c14n-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="c14n-expanded"><a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-string">"&lt;"</tt> <tt class="py-op">+</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Variable nbxmpp.name=nbxmpp-module.html#name,Variable nbxmpp.protocol.name=nbxmpp.protocol-module.html#name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-2', 'name', 'link-2');">name</a></tt> </tt>
+<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">:</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-keyword">or</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt> <tt class="py-op">!=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">:</tt> </tt>
+<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">' xmlns="%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt> </tt>
+<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"> </tt>
+<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"> <tt class="py-name">sorted_attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.keys()=nbxmpp.roster_nb.NonBlockingRoster-class.html#keys"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-3', 'keys', 'link-3');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">sorted_attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">is_buggy</tt> <tt class="py-keyword">and</tt> <tt class="py-name">key</tt> <tt class="py-op">==</tt> <tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> </tt>
+<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"> <tt class="py-name">val</tt> <tt class="py-op">=</tt> <tt id="link-4" class="py-name"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-4', 'ustr', 'link-1');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"> <tt class="py-comment"># like XMLescape() but with whitespace and without &amp;gt;</tt> </tt>
+<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">' %s="%s"'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Function nbxmpp.c14n.normalise_attr()=nbxmpp.c14n-module.html#normalise_attr"><a title="nbxmpp.c14n.normalise_attr" class="py-name" href="#" onclick="return doclink('link-5', 'normalise_attr', 'link-5');">normalise_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> <tt class="py-op">)</tt> </tt>
+<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"&gt;"</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">:</tt> </tt>
+<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">a</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">:</tt> </tt>
+<a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">cnt</tt><tt class="py-op">:</tt> </tt>
+<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt id="link-6" class="py-name" targets="Function nbxmpp.c14n.normalise_text()=nbxmpp.c14n-module.html#normalise_text"><a title="nbxmpp.c14n.normalise_text" class="py-name" href="#" onclick="return doclink('link-6', 'normalise_text', 'link-6');">normalise_text</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">cnt</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt id="link-7" class="py-name" targets="Module nbxmpp.c14n=nbxmpp.c14n-module.html,Function nbxmpp.c14n.c14n()=nbxmpp.c14n-module.html#c14n"><a title="nbxmpp.c14n
+nbxmpp.c14n.c14n" class="py-name" href="#" onclick="return doclink('link-7', 'c14n', 'link-7');">c14n</a></tt><tt class="py-op">(</tt><tt class="py-name">a</tt><tt class="py-op">,</tt> <tt class="py-name">is_buggy</tt><tt class="py-op">)</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> <tt class="py-name">cnt</tt><tt class="py-op">=</tt><tt class="py-name">cnt</tt><tt class="py-op">+</tt><tt class="py-number">1</tt> </tt>
+<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">cnt</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt id="link-8" class="py-name"><a title="nbxmpp.c14n.normalise_text" class="py-name" href="#" onclick="return doclink('link-8', 'normalise_text', 'link-6');">normalise_text</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">cnt</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt> <tt class="py-keyword">and</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"> <tt class="py-name">s</tt><tt class="py-op">=</tt><tt class="py-name">s</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-string">' /&gt;'</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"&lt;/"</tt> <tt class="py-op">+</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-9', 'name', 'link-2');">name</a></tt> <tt class="py-op">+</tt> <tt class="py-string">"&gt;"</tt> </tt>
+<a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"> </tt>
+<a name="normalise_attr"></a><div id="normalise_attr-def"><a name="L55"></a><tt class="py-lineno">55</tt> <a class="py-toggle" href="#" id="normalise_attr-toggle" onclick="return toggle('normalise_attr');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.c14n-module.html#normalise_attr">normalise_attr</a><tt class="py-op">(</tt><tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="normalise_attr-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="normalise_attr-expanded"><a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">val</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'&amp;'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;amp;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'&lt;'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;lt;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'"'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;quot;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\t'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;#x9;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;#xA;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\r'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;#xD;'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L57"></a><tt class="py-lineno">57</tt> <tt class="py-line"> </tt>
+<a name="normalise_text"></a><div id="normalise_text-def"><a name="L58"></a><tt class="py-lineno">58</tt> <a class="py-toggle" href="#" id="normalise_text-toggle" onclick="return toggle('normalise_text');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.c14n-module.html#normalise_text">normalise_text</a><tt class="py-op">(</tt><tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="normalise_text-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="normalise_text-expanded"><a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">val</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'&amp;'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;amp;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'&lt;'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;lt;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;gt;'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\r'</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;#xD;'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.client_nb-module.html b/doc/apidocs/nbxmpp.client_nb-module.html
new file mode 100644
index 0000000..89df90d
--- /dev/null
+++ b/doc/apidocs/nbxmpp.client_nb-module.html
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.client_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;client_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.client_nb-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module client_nb</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html">source&nbsp;code</a></span></p>
+Client class establishs connection to XMPP Server and handles authentication
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.client_nb.NonBlockingClient-class.html" class="summary-name">NonBlockingClient</a><br />
+ Client class is XMPP connection mountpoint. Objects for authentication,
+network communication, roster, xml parsing ... are plugged to client object.
+Client implements the abstract behavior - mostly negotioation and callbacks
+handling, whereas underlying modules take care of feature-specific logic
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.client_nb-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.client_nb')">logging.getLogger('nbxmpp.client_nb')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.client_nb-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="socket">socket</span>,
+ <a href="nbxmpp.transports_nb-module.html" title="nbxmpp.transports_nb">transports_nb</a>,
+ <a href="nbxmpp.dispatcher_nb-module.html" title="nbxmpp.dispatcher_nb">dispatcher_nb</a>,
+ <a href="nbxmpp.auth_nb-module.html" title="nbxmpp.auth_nb">auth_nb</a>,
+ <a href="nbxmpp.roster_nb-module.html" title="nbxmpp.roster_nb">roster_nb</a>,
+ <a href="nbxmpp.protocol-module.html" title="nbxmpp.protocol">protocol</a>,
+ <a href="nbxmpp.bosh-module.html" title="nbxmpp.bosh">bosh</a>,
+ <span title="nbxmpp.protocol.NS_TLS">NS_TLS</span>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.client_nb')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.client_nb-pysrc.html b/doc/apidocs/nbxmpp.client_nb-pysrc.html
new file mode 100644
index 0000000..f93a79b
--- /dev/null
+++ b/doc/apidocs/nbxmpp.client_nb-pysrc.html
@@ -0,0 +1,1054 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.client_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;client_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.client_nb-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.client_nb-module.html">Module nbxmpp.client_nb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## client_nb.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## based on client.py, changes backported up to revision 1.60</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## modified by Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># $Id: client.py,v 1.52 2006/01/02 19:40:55 normanr Exp $</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">Client class establishs connection to XMPP Server and handles authentication</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.transports_nb=nbxmpp.transports_nb-module.html"><a title="nbxmpp.transports_nb" class="py-name" href="#" onclick="return doclink('link-0', 'transports_nb', 'link-0');">transports_nb</a></tt><tt class="py-op">,</tt> <tt id="link-1" class="py-name" targets="Module nbxmpp.dispatcher_nb=nbxmpp.dispatcher_nb-module.html"><a title="nbxmpp.dispatcher_nb" class="py-name" href="#" onclick="return doclink('link-1', 'dispatcher_nb', 'link-1');">dispatcher_nb</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Module nbxmpp.auth_nb=nbxmpp.auth_nb-module.html"><a title="nbxmpp.auth_nb" class="py-name" href="#" onclick="return doclink('link-2', 'auth_nb', 'link-2');">auth_nb</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Module nbxmpp.roster_nb=nbxmpp.roster_nb-module.html"><a title="nbxmpp.roster_nb" class="py-name" href="#" onclick="return doclink('link-3', 'roster_nb', 'link-3');">roster_nb</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-4', 'protocol', 'link-4');">protocol</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Module nbxmpp.bosh=nbxmpp.bosh-module.html"><a title="nbxmpp.bosh" class="py-name" href="#" onclick="return doclink('link-5', 'bosh', 'link-5');">bosh</a></tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-6', 'protocol', 'link-4');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Variable nbxmpp.protocol.NS_TLS=nbxmpp.protocol-module.html#NS_TLS"><a title="nbxmpp.protocol.NS_TLS" class="py-name" href="#" onclick="return doclink('link-7', 'NS_TLS', 'link-7');">NS_TLS</a></tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-8', 'log', 'link-8');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.client_nb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient"></a><div id="NonBlockingClient-def"><a name="L31"></a><tt class="py-lineno"> 31</tt> <a class="py-toggle" href="#" id="NonBlockingClient-toggle" onclick="return toggle('NonBlockingClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html">NonBlockingClient</a><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingClient-expanded"><a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-docstring"> Client class is XMPP connection mountpoint. Objects for authentication,</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-docstring"> network communication, roster, xml parsing ... are plugged to client object.</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring"> Client implements the abstract behavior - mostly negotioation and callbacks</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring"> handling, whereas underlying modules take care of feature-specific logic</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.__init__"></a><div id="NonBlockingClient.__init__-def"><a name="L39"></a><tt class="py-lineno"> 39</tt> <a class="py-toggle" href="#" id="NonBlockingClient.__init__-toggle" onclick="return toggle('NonBlockingClient.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">domain</tt><tt class="py-op">,</tt> <tt class="py-param">idlequeue</tt><tt class="py-op">,</tt> <tt class="py-param">caller</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.__init__-expanded"><a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> Caches connection data</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> :param domain: domain - for to: attribute (from account info)</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> :param idlequeue: processing idlequeue</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> :param caller: calling object - it has to implement methods</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> _event_dispatcher which is called from dispatcher instance</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Namespace</tt> <tt class="py-op">=</tt> <tt id="link-9" class="py-name"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-9', 'protocol', 'link-4');">protocol</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Variable nbxmpp.protocol.NS_CLIENT=nbxmpp.protocol-module.html#NS_CLIENT"><a title="nbxmpp.protocol.NS_CLIENT" class="py-name" href="#" onclick="return doclink('link-10', 'NS_CLIENT', 'link-10');">NS_CLIENT</a></tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">defaultNamespace</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Namespace</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Module nbxmpp.idlequeue=nbxmpp.idlequeue-module.html"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-11', 'idlequeue', 'link-11');">idlequeue</a></tt> <tt class="py-op">=</tt> <tt id="link-12" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-12', 'idlequeue', 'link-11');">idlequeue</a></tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnect_handlers</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt> <tt class="py-op">=</tt> <tt class="py-name">domain</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_hostname</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># FQDN hostname to connect to</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-comment"># caller is who initiated this client, it is in needed to register</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-comment"># the EventDispatcher</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt> <tt class="py-op">=</tt> <tt class="py-name">caller</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_registered_name</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># our full jid, set after successful auth</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ip_addresses</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_proxy_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">got_features</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stream_started</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnecting</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">protocol_type</tt> <tt class="py-op">=</tt> <tt class="py-string">'XMPP'</tt> </tt>
+</div><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.disconnect"></a><div id="NonBlockingClient.disconnect-def"><a name="L74"></a><tt class="py-lineno"> 74</tt> <a class="py-toggle" href="#" id="NonBlockingClient.disconnect-toggle" onclick="return toggle('NonBlockingClient.disconnect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#disconnect">disconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">message</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.disconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.disconnect-expanded"><a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-docstring"> Called on disconnection - disconnect callback is picked based on state of</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-docstring"> the client.</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-comment"># to avoid recursive calls</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ip_addresses</tt><tt class="py-op">:</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._try_next_ip()=nbxmpp.client_nb.NonBlockingClient-class.html#_try_next_ip"><a title="nbxmpp.client_nb.NonBlockingClient._try_next_ip" class="py-name" href="#" onclick="return doclink('link-13', '_try_next_ip', 'link-13');">_try_next_ip</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnecting</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt id="link-14" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-14', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Disconnecting NBClient: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'NonBlockingRoster'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Class nbxmpp.roster_nb.NonBlockingRoster=nbxmpp.roster_nb.NonBlockingRoster-class.html"><a title="nbxmpp.roster_nb.NonBlockingRoster" class="py-name" href="#" onclick="return doclink('link-15', 'NonBlockingRoster', 'link-15');">NonBlockingRoster</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Method nbxmpp.plugin.PlugIn.PlugOut()=nbxmpp.plugin.PlugIn-class.html#PlugOut"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-16', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'NonBlockingBind'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Class nbxmpp.auth_nb.NonBlockingBind=nbxmpp.auth_nb.NonBlockingBind-class.html,Method nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind()=nbxmpp.auth_nb.NonBlockingBind-class.html#NonBlockingBind"><a title="nbxmpp.auth_nb.NonBlockingBind
+nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind" class="py-name" href="#" onclick="return doclink('link-17', 'NonBlockingBind', 'link-17');">NonBlockingBind</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-18', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'NonBlockingNonSASL'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Class nbxmpp.auth_nb.NonBlockingNonSASL=nbxmpp.auth_nb.NonBlockingNonSASL-class.html"><a title="nbxmpp.auth_nb.NonBlockingNonSASL" class="py-name" href="#" onclick="return doclink('link-19', 'NonBlockingNonSASL', 'link-19');">NonBlockingNonSASL</a></tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-20', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'SASL'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name" targets="Class nbxmpp.auth_nb.SASL=nbxmpp.auth_nb.SASL-class.html"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-21', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-22', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'NonBlockingTCP'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Class nbxmpp.transports_nb.NonBlockingTCP=nbxmpp.transports_nb.NonBlockingTCP-class.html"><a title="nbxmpp.transports_nb.NonBlockingTCP" class="py-name" href="#" onclick="return doclink('link-23', 'NonBlockingTCP', 'link-23');">NonBlockingTCP</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-24', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'NonBlockingHTTP'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Class nbxmpp.transports_nb.NonBlockingHTTP=nbxmpp.transports_nb.NonBlockingHTTP-class.html"><a title="nbxmpp.transports_nb.NonBlockingHTTP" class="py-name" href="#" onclick="return doclink('link-25', 'NonBlockingHTTP', 'link-25');">NonBlockingHTTP</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-26', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'NonBlockingBOSH'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Class nbxmpp.bosh.NonBlockingBOSH=nbxmpp.bosh.NonBlockingBOSH-class.html"><a title="nbxmpp.bosh.NonBlockingBOSH" class="py-name" href="#" onclick="return doclink('link-27', 'NonBlockingBOSH', 'link-27');">NonBlockingBOSH</a></tt><tt class="py-op">.</tt><tt id="link-28" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-28', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: we never unplug dispatcher, only on next connect</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-comment"># See _xmpp_connect_machine and SASLHandler</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">connected</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-name">stream_started</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stream_started</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stream_started</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnecting</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt id="link-29" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-29', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Client disconnected..'</tt><tt class="py-op">)</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">connected</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-comment"># if we're disconnecting before connection to XMPP sever is opened,</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-comment"># we don't call disconnect handlers but on_connect_failure callback</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy</tt><tt class="py-op">:</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-comment"># with proxy, we have different failure callback</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt id="link-30" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-30', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'calling on_proxy_failure cb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_proxy_failure</tt><tt class="py-op">(</tt><tt class="py-name">reason</tt><tt class="py-op">=</tt><tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt id="link-31" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-31', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'calling on_connect_failure cb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect_failure</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-comment"># we are connected to XMPP server</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">stream_started</tt><tt class="py-op">:</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-comment"># if error occur before XML stream was opened, e.g. no response on</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-comment"># init request, we call the on_connect_failure callback because</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-comment"># proper connection is not established yet and it's not a proxy</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-comment"># issue</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt id="link-32" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-32', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'calling on_connect_failure cb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">streamError</tt> <tt class="py-op">=</tt> <tt class="py-name">message</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect_failure</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-comment"># with open connection, we are calling the disconnect handlers</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">reversed</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnect_handlers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-33', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Calling disconnect handler %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt><tt class="py-op">)</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">i</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnecting</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.connect"></a><div id="NonBlockingClient.connect-def"><a name="L140"></a><tt class="py-lineno">140</tt> <a class="py-toggle" href="#" id="NonBlockingClient.connect-toggle" onclick="return toggle('NonBlockingClient.connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#connect">connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect_failure</tt><tt class="py-op">,</tt> <tt class="py-param">hostname</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">=</tt><tt class="py-number">5222</tt><tt class="py-op">,</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-param">on_proxy_failure</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">proxy</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">secure_tuple</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-string">'plain'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.connect-expanded"><a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"><tt class="py-docstring"> Open XMPP connection (open XML streams in both directions)</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"><tt class="py-docstring"> :param on_connect: called after stream is successfully opened</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"><tt class="py-docstring"> :param on_connect_failure: called when error occures during connection</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"><tt class="py-docstring"> :param hostname: hostname of XMPP server from SRV request</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"><tt class="py-docstring"> :param port: port number of XMPP server</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"><tt class="py-docstring"> :param on_proxy_failure: called if error occurres during TCP connection to</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"><tt class="py-docstring"> proxy server or during proxy connecting process</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"><tt class="py-docstring"> :param proxy: dictionary with proxy data. It should contain at least</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"><tt class="py-docstring"> values for keys 'host' and 'port' - connection details for proxy serve</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"> and optionally keys 'user' and 'pass' as proxy credentials</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"> :param secure_tuple: tuple of (desired connection type, cacerts, mycerts)</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"> connection type can be 'ssl' - TLS established after TCP connection,</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"> 'tls' - TLS established after negotiation with starttls, or 'plain'.</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-docstring"> cacerts, mycerts - see tls_nb.NonBlockingTLS constructor for more</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"><tt class="py-docstring"> details</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect</tt> <tt class="py-op">=</tt> <tt class="py-name">on_connect</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect_failure</tt><tt class="py-op">=</tt><tt class="py-name">on_connect_failure</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_proxy_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">on_proxy_failure</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">desired_security</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cacerts</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mycerts</tt> <tt class="py-op">=</tt> <tt class="py-name">secure_tuple</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Port</tt> <tt class="py-op">=</tt> <tt class="py-name">port</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hostname</tt><tt class="py-op">:</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_hostname</tt> <tt class="py-op">=</tt> <tt class="py-name">hostname</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_hostname</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-comment"># We only check for SSL here as for TLS we will first have to start a</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-comment"># PLAIN connection and negotiate TLS afterwards.</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-comment"># establish_tls will instruct transport to start secure connection</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-comment"># directly</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">establish_tls</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">desired_security</tt> <tt class="py-op">==</tt> <tt class="py-string">'ssl'</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">certs</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cacerts</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mycerts</tt><tt class="py-op">)</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">proxy_dict</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">tcp_host</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_hostname</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">tcp_port</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Port</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">proxy</tt><tt class="py-op">:</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-comment"># with proxies, client connects to proxy instead of directly to</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-comment"># XMPP server ((hostname, port))</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-comment"># tcp_host is hostname of machine used for socket connection</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-comment"># (DNS request will be done for proxy or BOSH CM hostname)</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-name">tcp_host</tt><tt class="py-op">,</tt> <tt class="py-name">tcp_port</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_pass</tt> <tt class="py-op">=</tt> \ </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt id="link-34" class="py-name"><a title="nbxmpp.transports_nb" class="py-name" href="#" onclick="return doclink('link-34', 'transports_nb', 'link-0');">transports_nb</a></tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Function nbxmpp.transports_nb.get_proxy_data_from_dict()=nbxmpp.transports_nb-module.html#get_proxy_data_from_dict"><a title="nbxmpp.transports_nb.get_proxy_data_from_dict" class="py-name" href="#" onclick="return doclink('link-35', 'get_proxy_data_from_dict', 'link-35');">get_proxy_data_from_dict</a></tt><tt class="py-op">(</tt><tt class="py-name">proxy</tt><tt class="py-op">)</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'bosh'</tt><tt class="py-op">:</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-comment"># Setup BOSH transport</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt> <tt class="py-op">=</tt> <tt id="link-36" class="py-name"><a title="nbxmpp.bosh" class="py-name" href="#" onclick="return doclink('link-36', 'bosh', 'link-5');">bosh</a></tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH" class="py-name" href="#" onclick="return doclink('link-37', 'NonBlockingBOSH', 'link-27');">NonBlockingBOSH</a></tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Class Method nbxmpp.dispatcher_nb.Dispatcher.get_instance()=nbxmpp.dispatcher_nb.Dispatcher-class.html#get_instance,Class Method nbxmpp.plugin.PlugIn.get_instance()=nbxmpp.plugin.PlugIn-class.html#get_instance,Class Method nbxmpp.proxy_connectors.ProxyConnector.get_instance()=nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-38', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">on_disconnect</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.disconnect()=nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect,Method nbxmpp.client_nb.NonBlockingClient.disconnect()=nbxmpp.client_nb.NonBlockingClient-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTCP.disconnect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTransport.disconnect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-39', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt id="link-40" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient.raise_event()=nbxmpp.client_nb.NonBlockingClient-class.html#raise_event"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-40', 'raise_event', 'link-40');">raise_event</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-41', 'raise_event', 'link-40');">raise_event</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt id="link-42" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-42', 'idlequeue', 'link-11');">idlequeue</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-43', 'idlequeue', 'link-11');">idlequeue</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-name">estabilish_tls</tt><tt class="py-op">=</tt><tt class="py-name">establish_tls</tt><tt class="py-op">,</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">certs</tt><tt class="py-op">=</tt><tt class="py-name">certs</tt><tt class="py-op">,</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-name">proxy_creds</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_pass</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">xmpp_server</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_hostname</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Port</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-name">domain</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">,</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">bosh_dict</tt><tt class="py-op">=</tt><tt class="py-name">proxy</tt><tt class="py-op">)</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">protocol_type</tt> <tt class="py-op">=</tt> <tt class="py-string">'BOSH'</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">wait_for_restart_response</tt> <tt class="py-op">=</tt> \ </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_wait_for_restart_response'</tt><tt class="py-op">]</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-comment"># http proxy</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'xmpp_server'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_hostname</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Port</tt><tt class="py-op">)</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'credentials'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_pass</tt><tt class="py-op">)</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">proxy</tt> <tt class="py-keyword">or</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'bosh'</tt><tt class="py-op">:</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-comment"># Setup ordinary TCP transport</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt> <tt class="py-op">=</tt> <tt id="link-44" class="py-name"><a title="nbxmpp.transports_nb" class="py-name" href="#" onclick="return doclink('link-44', 'transports_nb', 'link-0');">transports_nb</a></tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP" class="py-name" href="#" onclick="return doclink('link-45', 'NonBlockingTCP', 'link-23');">NonBlockingTCP</a></tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-46', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">on_disconnect</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-47', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt id="link-48" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-48', 'raise_event', 'link-40');">raise_event</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-49', 'raise_event', 'link-40');">raise_event</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt id="link-50" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-50', 'idlequeue', 'link-11');">idlequeue</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-51', 'idlequeue', 'link-11');">idlequeue</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">estabilish_tls</tt><tt class="py-op">=</tt><tt class="py-name">establish_tls</tt><tt class="py-op">,</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-name">certs</tt><tt class="py-op">=</tt><tt class="py-name">certs</tt><tt class="py-op">,</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">proxy_dict</tt><tt class="py-op">=</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">)</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-comment"># plug transport into client as self.Connection</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn,Method nbxmpp.dispatcher_nb.Dispatcher.PlugIn()=nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn,Class nbxmpp.plugin.PlugIn=nbxmpp.plugin.PlugIn-class.html,Method nbxmpp.plugin.PlugIn.PlugIn()=nbxmpp.plugin.PlugIn-class.html#PlugIn"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-52', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._resolve_hostname()=nbxmpp.client_nb.NonBlockingClient-class.html#_resolve_hostname"><a title="nbxmpp.client_nb.NonBlockingClient._resolve_hostname" class="py-name" href="#" onclick="return doclink('link-53', '_resolve_hostname', 'link-53');">_resolve_hostname</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">hostname</tt><tt class="py-op">=</tt><tt class="py-name">tcp_host</tt><tt class="py-op">,</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-name">port</tt><tt class="py-op">=</tt><tt class="py-name">tcp_port</tt><tt class="py-op">,</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-name">on_success</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._try_next_ip" class="py-name" href="#" onclick="return doclink('link-54', '_try_next_ip', 'link-13');">_try_next_ip</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._resolve_hostname"></a><div id="NonBlockingClient._resolve_hostname-def"><a name="L232"></a><tt class="py-lineno">232</tt> <a class="py-toggle" href="#" id="NonBlockingClient._resolve_hostname-toggle" onclick="return toggle('NonBlockingClient._resolve_hostname');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_resolve_hostname">_resolve_hostname</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">hostname</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">,</tt> <tt class="py-param">on_success</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._resolve_hostname-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._resolve_hostname-expanded"><a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"><tt class="py-docstring"> Wrapper for getaddinfo call</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"><tt class="py-docstring"> FIXME: getaddinfo blocks</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ip_addresses</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">getaddrinfo</tt><tt class="py-op">(</tt><tt class="py-name">hostname</tt><tt class="py-op">,</tt> <tt class="py-name">port</tt><tt class="py-op">,</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_UNSPEC</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_STREAM</tt><tt class="py-op">)</tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">gaierror</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-55', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">=</tt><tt class="py-string">'Lookup failure for %s:%s, hostname: %s - %s'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Port</tt><tt class="py-op">,</tt> <tt class="py-name">hostname</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-name">on_success</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._try_next_ip"></a><div id="NonBlockingClient._try_next_ip-def"><a name="L247"></a><tt class="py-lineno">247</tt> <a class="py-toggle" href="#" id="NonBlockingClient._try_next_ip-toggle" onclick="return toggle('NonBlockingClient._try_next_ip');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_try_next_ip">_try_next_ip</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">err_message</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._try_next_ip-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._try_next_ip-expanded"><a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over IP addresses tries to connect to it</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">err_message</tt><tt class="py-op">:</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt id="link-56" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-56', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'While looping over DNS A records: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">err_message</tt><tt class="py-op">)</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ip_addresses</tt> <tt class="py-op">==</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Run out of hosts for name %s:%s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Port</tt><tt class="py-op">)</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">msg</tt> <tt class="py-op">+</tt> <tt class="py-string">' Error for last IP: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">err_message</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-57', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_ip</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ip_addresses</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.connect()=nbxmpp.bosh.NonBlockingBOSH-class.html#connect,Method nbxmpp.client_nb.NonBlockingClient.connect()=nbxmpp.client_nb.NonBlockingClient-class.html#connect,Method nbxmpp.transports_nb.NonBlockingTCP.connect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#connect,Method nbxmpp.transports_nb.NonBlockingTransport.connect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#connect"><a title="nbxmpp.bosh.NonBlockingBOSH.connect
+nbxmpp.client_nb.NonBlockingClient.connect
+nbxmpp.transports_nb.NonBlockingTCP.connect
+nbxmpp.transports_nb.NonBlockingTransport.connect" class="py-name" href="#" onclick="return doclink('link-58', 'connect', 'link-58');">connect</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-name">conn_5tuple</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">current_ip</tt><tt class="py-op">,</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-name">on_connect</tt><tt class="py-op">=</tt><tt class="py-keyword">lambda</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._xmpp_connect()=nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect" class="py-name" href="#" onclick="return doclink('link-59', '_xmpp_connect', 'link-59');">_xmpp_connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">on_connect_failure</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._try_next_ip" class="py-name" href="#" onclick="return doclink('link-60', '_try_next_ip', 'link-13');">_try_next_ip</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.incoming_stream_version"></a><div id="NonBlockingClient.incoming_stream_version-def"><a name="L264"></a><tt class="py-lineno">264</tt> <a class="py-toggle" href="#" id="NonBlockingClient.incoming_stream_version-toggle" onclick="return toggle('NonBlockingClient.incoming_stream_version');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#incoming_stream_version">incoming_stream_version</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.incoming_stream_version-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.incoming_stream_version-expanded"><a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"><tt class="py-docstring"> Get version of xml stream</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'version'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name" targets="Class nbxmpp.dispatcher_nb.Dispatcher=nbxmpp.dispatcher_nb.Dispatcher-class.html"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-61', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-62', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'version'</tt><tt class="py-op">]</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._xmpp_connect"></a><div id="NonBlockingClient._xmpp_connect-def"><a name="L273"></a><tt class="py-lineno">273</tt> <a class="py-toggle" href="#" id="NonBlockingClient._xmpp_connect-toggle" onclick="return toggle('NonBlockingClient._xmpp_connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect">_xmpp_connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">socket_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._xmpp_connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._xmpp_connect-expanded"><a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"><tt class="py-docstring"> Start XMPP connecting process - open the XML stream. Is called after TCP</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-docstring"> connection is established or after switch to TLS when successfully</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"><tt class="py-docstring"> negotiated with &lt;starttls&gt;.</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-comment"># socket_type contains info which transport connection was established</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">socket_type</tt><tt class="py-op">:</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt><tt class="py-op">:</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-comment"># When ssl_lib is set we connected via SSL</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-name">socket_type</tt> <tt class="py-op">=</tt> <tt class="py-string">'ssl'</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-comment"># PLAIN is default</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt class="py-name">socket_type</tt> <tt class="py-op">=</tt> <tt class="py-string">'plain'</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-op">=</tt> <tt class="py-name">socket_type</tt> </tt>
+<a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine()=nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect_machine"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine" class="py-name" href="#" onclick="return doclink('link-63', '_xmpp_connect_machine', 'link-63');">_xmpp_connect_machine</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._xmpp_connect_machine"></a><div id="NonBlockingClient._xmpp_connect_machine-def"><a name="L290"></a><tt class="py-lineno">290</tt> <a class="py-toggle" href="#" id="NonBlockingClient._xmpp_connect_machine-toggle" onclick="return toggle('NonBlockingClient._xmpp_connect_machine');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect_machine">_xmpp_connect_machine</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">mode</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._xmpp_connect_machine-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._xmpp_connect_machine-expanded"><a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"><tt class="py-docstring"> Finite automaton taking care of stream opening and features tag handling.</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"><tt class="py-docstring"> Calls _on_stream_start when stream is started, and disconnect() on</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"><tt class="py-docstring"> failure.</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt id="link-64" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-64', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-------------xmpp_connect_machine() &gt;&gt; mode: %s, data: %s...'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">mode</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">20</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">on_next_receive</tt><tt class="py-op">(</tt><tt class="py-param">mode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"><tt class="py-docstring"> Set desired on_receive callback on transport based on the state of</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"><tt class="py-docstring"> connect_machine.</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt id="link-65" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-65', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'setting %s on next receive'</tt> <tt class="py-op">%</tt> <tt class="py-name">mode</tt><tt class="py-op">)</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">mode</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.onreceive()=nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive,Method nbxmpp.transports_nb.NonBlockingTransport.onreceive()=nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-66', 'onreceive', 'link-66');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> <tt class="py-comment"># switch to Dispatcher.ProcessNonBlocking</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-67', 'onreceive', 'link-66');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-keyword">lambda</tt> <tt class="py-name">_data</tt><tt class="py-op">:</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine" class="py-name" href="#" onclick="return doclink('link-68', '_xmpp_connect_machine', 'link-63');">_xmpp_connect_machine</a></tt><tt class="py-op">(</tt><tt class="py-name">mode</tt><tt class="py-op">,</tt> <tt class="py-name">_data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">mode</tt><tt class="py-op">:</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-comment"># starting state</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'Dispatcher'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-69', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-70', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">got_features</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt id="link-71" class="py-name"><a title="nbxmpp.dispatcher_nb" class="py-name" href="#" onclick="return doclink('link-71', 'dispatcher_nb', 'link-1');">dispatcher_nb</a></tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-72', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-73', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-74', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-name">on_next_receive</tt><tt class="py-op">(</tt><tt class="py-string">'RECEIVE_DOCUMENT_ATTRIBUTES'</tt><tt class="py-op">)</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">mode</tt> <tt class="py-op">==</tt> <tt class="py-string">'FAILURE'</tt><tt class="py-op">:</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-75', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-string">'During XMPP connect: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">mode</tt> <tt class="py-op">==</tt> <tt class="py-string">'RECEIVE_DOCUMENT_ATTRIBUTES'</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-76', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-77" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking,Method nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-77', 'ProcessNonBlocking', 'link-77');">ProcessNonBlocking</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ip_addresses</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'Dispatcher'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> \ </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-78', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine" class="py-name" href="#" onclick="return doclink('link-79', '_xmpp_connect_machine', 'link-63');">_xmpp_connect_machine</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-name">mode</tt><tt class="py-op">=</tt><tt class="py-string">'FAILURE'</tt><tt class="py-op">,</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-name">data</tt><tt class="py-op">=</tt><tt class="py-string">'Error on stream open'</tt><tt class="py-op">)</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-comment"># if terminating stanza was received after init request then client gets</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-comment"># disconnected from bosh transport plugin and we have to end the stream</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-comment"># negotiating process straight away.</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-comment"># fixes #4657</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt><tt class="py-op">:</tt> <tt class="py-keyword">return</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient.incoming_stream_version()=nbxmpp.client_nb.NonBlockingClient-class.html#incoming_stream_version"><a title="nbxmpp.client_nb.NonBlockingClient.incoming_stream_version" class="py-name" href="#" onclick="return doclink('link-80', 'incoming_stream_version', 'link-80');">incoming_stream_version</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'1.0'</tt><tt class="py-op">:</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">got_features</tt><tt class="py-op">:</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-name">on_next_receive</tt><tt class="py-op">(</tt><tt class="py-string">'RECEIVE_STREAM_FEATURES'</tt><tt class="py-op">)</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt id="link-81" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-81', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'got STREAM FEATURES in first recv'</tt><tt class="py-op">)</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine" class="py-name" href="#" onclick="return doclink('link-82', '_xmpp_connect_machine', 'link-63');">_xmpp_connect_machine</a></tt><tt class="py-op">(</tt><tt class="py-name">mode</tt><tt class="py-op">=</tt><tt class="py-string">'STREAM_STARTED'</tt><tt class="py-op">)</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt id="link-83" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-83', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'incoming stream version less than 1.0'</tt><tt class="py-op">)</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine" class="py-name" href="#" onclick="return doclink('link-84', '_xmpp_connect_machine', 'link-63');">_xmpp_connect_machine</a></tt><tt class="py-op">(</tt><tt class="py-name">mode</tt><tt class="py-op">=</tt><tt class="py-string">'STREAM_STARTED'</tt><tt class="py-op">)</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">mode</tt> <tt class="py-op">==</tt> <tt class="py-string">'RECEIVE_STREAM_FEATURES'</tt><tt class="py-op">:</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-comment"># sometimes &lt;features&gt; are received together with document</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-comment"># attributes and sometimes on next receive...</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-85', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-86', 'ProcessNonBlocking', 'link-77');">ProcessNonBlocking</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">got_features</tt><tt class="py-op">:</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine" class="py-name" href="#" onclick="return doclink('link-87', '_xmpp_connect_machine', 'link-63');">_xmpp_connect_machine</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-name">mode</tt><tt class="py-op">=</tt><tt class="py-string">'FAILURE'</tt><tt class="py-op">,</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-name">data</tt><tt class="py-op">=</tt><tt class="py-string">'Missing &lt;features&gt; in 1.0 stream'</tt><tt class="py-op">)</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt id="link-88" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-88', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'got STREAM FEATURES in second recv'</tt><tt class="py-op">)</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect_machine" class="py-name" href="#" onclick="return doclink('link-89', '_xmpp_connect_machine', 'link-63');">_xmpp_connect_machine</a></tt><tt class="py-op">(</tt><tt class="py-name">mode</tt><tt class="py-op">=</tt><tt class="py-string">'STREAM_STARTED'</tt><tt class="py-op">)</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">mode</tt> <tt class="py-op">==</tt> <tt class="py-string">'STREAM_STARTED'</tt><tt class="py-op">:</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._on_stream_start()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_stream_start"><a title="nbxmpp.client_nb.NonBlockingClient._on_stream_start" class="py-name" href="#" onclick="return doclink('link-90', '_on_stream_start', 'link-90');">_on_stream_start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._on_stream_start"></a><div id="NonBlockingClient._on_stream_start-def"><a name="L364"></a><tt class="py-lineno">364</tt> <a class="py-toggle" href="#" id="NonBlockingClient._on_stream_start-toggle" onclick="return toggle('NonBlockingClient._on_stream_start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_stream_start">_on_stream_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._on_stream_start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._on_stream_start-expanded"><a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"><tt class="py-docstring"> Called after XMPP stream is opened. TLS negotiation may follow if</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"><tt class="py-docstring"> supported and desired.</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stream_started</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'onreceive'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-comment"># we may already have been disconnected</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-91', 'onreceive', 'link-66');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-op">==</tt> <tt class="py-string">'plain'</tt><tt class="py-op">:</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">desired_security</tt> <tt class="py-op">==</tt> <tt class="py-string">'plain'</tt><tt class="py-op">:</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-comment"># if we want and have plain connection, we're done now</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH._on_connect()=nbxmpp.bosh.NonBlockingBOSH-class.html#_on_connect,Method nbxmpp.client_nb.NonBlockingClient._on_connect()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_connect,Method nbxmpp.transports_nb.NonBlockingTCP._on_connect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect,Method nbxmpp.transports_nb.NonBlockingTransport._on_connect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-92', '_on_connect', 'link-92');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-comment"># try to negotiate TLS</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.incoming_stream_version" class="py-name" href="#" onclick="return doclink('link-93', 'incoming_stream_version', 'link-80');">incoming_stream_version</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'1.0'</tt><tt class="py-op">:</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-comment"># if stream version is less than 1.0, we can't do more</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"> <tt id="link-94" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-94', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'While connecting with type = "tls": stream version '</tt> <tt class="py-op">+</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-string">'is less than 1.0'</tt><tt class="py-op">)</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-95', '_on_connect', 'link-92');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-96', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name" targets="Method nbxmpp.simplexml.Node.getTag()=nbxmpp.simplexml.Node-class.html#getTag"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-97', 'getTag', 'link-97');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'starttls'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-comment"># Server advertises TLS support, start negotiation</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">stream_started</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt id="link-98" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-98', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'TLS supported by remote server. Requesting TLS start.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._tls_negotiation_handler()=nbxmpp.client_nb.NonBlockingClient-class.html#_tls_negotiation_handler"><a title="nbxmpp.client_nb.NonBlockingClient._tls_negotiation_handler" class="py-name" href="#" onclick="return doclink('link-99', '_tls_negotiation_handler', 'link-99');">_tls_negotiation_handler</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt id="link-100" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-100', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'While connecting with type = "tls": TLS unsupported '</tt> <tt class="py-op">+</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-string">'by remote server'</tt><tt class="py-op">)</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-101', '_on_connect', 'link-92');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-string">'ssl'</tt><tt class="py-op">,</tt> <tt class="py-string">'tls'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-102', '_on_connect', 'link-92');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-string">'Stream opened for unsupported connection'</tt> </tt>
+</div><a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._tls_negotiation_handler"></a><div id="NonBlockingClient._tls_negotiation_handler-def"><a name="L402"></a><tt class="py-lineno">402</tt> <a class="py-toggle" href="#" id="NonBlockingClient._tls_negotiation_handler-toggle" onclick="return toggle('NonBlockingClient._tls_negotiation_handler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_tls_negotiation_handler">_tls_negotiation_handler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">con</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._tls_negotiation_handler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._tls_negotiation_handler-expanded"><a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"><tt class="py-docstring"> Take care of TLS negotioation with &lt;starttls&gt;</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt id="link-103" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-103', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-------------tls_negotiaton_handler() &gt;&gt; tag: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">tag</tt><tt class="py-op">)</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">con</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-comment"># starting state when we send the &lt;starttls&gt;</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandlerOnce()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandlerOnce" class="py-name" href="#" onclick="return doclink('link-104', 'RegisterHandlerOnce', 'link-104');">RegisterHandlerOnce</a></tt><tt class="py-op">(</tt><tt class="py-string">'proceed'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._tls_negotiation_handler" class="py-name" href="#" onclick="return doclink('link-105', '_tls_negotiation_handler', 'link-99');">_tls_negotiation_handler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-106" class="py-name"><a title="nbxmpp.protocol.NS_TLS" class="py-name" href="#" onclick="return doclink('link-106', 'NS_TLS', 'link-7');">NS_TLS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandlerOnce" class="py-name" href="#" onclick="return doclink('link-107', 'RegisterHandlerOnce', 'link-104');">RegisterHandlerOnce</a></tt><tt class="py-op">(</tt><tt class="py-string">'failure'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._tls_negotiation_handler" class="py-name" href="#" onclick="return doclink('link-108', '_tls_negotiation_handler', 'link-99');">_tls_negotiation_handler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-109" class="py-name"><a title="nbxmpp.protocol.NS_TLS" class="py-name" href="#" onclick="return doclink('link-109', 'NS_TLS', 'link-7');">NS_TLS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-110', 'send', 'link-110');">send</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;starttls xmlns="%s"/&gt;'</tt> <tt class="py-op">%</tt> <tt id="link-111" class="py-name"><a title="nbxmpp.protocol.NS_TLS" class="py-name" href="#" onclick="return doclink('link-111', 'NS_TLS', 'link-7');">NS_TLS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-comment"># we got &lt;proceed&gt; or &lt;failure&gt;</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method nbxmpp.simplexml.Node.getNamespace()=nbxmpp.simplexml.Node-class.html#getNamespace"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-112', 'getNamespace', 'link-112');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt id="link-113" class="py-name"><a title="nbxmpp.protocol.NS_TLS" class="py-name" href="#" onclick="return doclink('link-113', 'NS_TLS', 'link-7');">NS_TLS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-114', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-string">'Unknown namespace: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-115', 'getNamespace', 'link-112');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> <tt class="py-name">tagname</tt> <tt class="py-op">=</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.getName()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getName,Method nbxmpp.simplexml.Node.getName()=nbxmpp.simplexml.Node-class.html#getName"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-116', 'getName', 'link-116');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tagname</tt> <tt class="py-op">==</tt> <tt class="py-string">'failure'</tt><tt class="py-op">:</tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-117', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-string">'TLS &lt;failure&gt; received: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">tag</tt><tt class="py-op">)</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt id="link-118" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-118', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Got starttls proceed response. Switching to TLS/SSL...'</tt><tt class="py-op">)</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-comment"># following call wouldn't work for BOSH transport but it doesn't matter</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-comment"># because &lt;starttls&gt; negotiation with BOSH is forbidden</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTCP.tls_init()=nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init"><a title="nbxmpp.transports_nb.NonBlockingTCP.tls_init" class="py-name" href="#" onclick="return doclink('link-119', 'tls_init', 'link-119');">tls_init</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-name">on_succ</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._xmpp_connect" class="py-name" href="#" onclick="return doclink('link-120', '_xmpp_connect', 'link-59');">_xmpp_connect</a></tt><tt class="py-op">(</tt><tt class="py-name">socket_type</tt><tt class="py-op">=</tt><tt class="py-string">'tls'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-name">on_fail</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-121', 'disconnect', 'link-39');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-string">'error while etabilishing TLS'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._on_connect"></a><div id="NonBlockingClient._on_connect-def"><a name="L430"></a><tt class="py-lineno">430</tt> <a class="py-toggle" href="#" id="NonBlockingClient._on_connect-toggle" onclick="return toggle('NonBlockingClient._on_connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_connect">_on_connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._on_connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._on_connect-expanded"><a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"><tt class="py-docstring"> Preceed call of on_connect callback</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-122', 'onreceive', 'link-66');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.raise_event"></a><div id="NonBlockingClient.raise_event-def"><a name="L437"></a><tt class="py-lineno">437</tt> <a class="py-toggle" href="#" id="NonBlockingClient.raise_event-toggle" onclick="return toggle('NonBlockingClient.raise_event');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#raise_event">raise_event</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">event_type</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.raise_event-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.raise_event-expanded"><a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"><tt class="py-docstring"> Raise event to connection instance. DATA_SENT and DATA_RECIVED events</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"><tt class="py-docstring"> are used in XML console to show XMPP traffic</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt id="link-123" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-123', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'raising event from transport: :::::%s::::\n_____________\n%s\n_____________\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">event_type</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'Dispatcher'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-124', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-125" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.Event()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-125', 'Event', 'link-125');">Event</a></tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">event_type</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"><tt class="py-comment">### follows code for authentication, resource bind, session and roster download</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.auth"></a><div id="NonBlockingClient.auth-def"><a name="L450"></a><tt class="py-lineno">450</tt> <a class="py-toggle" href="#" id="NonBlockingClient.auth-toggle" onclick="return toggle('NonBlockingClient.auth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#auth">auth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">user</tt><tt class="py-op">,</tt> <tt class="py-param">password</tt><tt class="py-op">,</tt> <tt class="py-param">resource</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">sasl</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">on_auth</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.auth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.auth-expanded"><a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"><tt class="py-docstring"> Authenticate connnection and bind resource. If resource is not provided</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"><tt class="py-docstring"> random one or library name used</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"><tt class="py-docstring"> :param user: XMPP username</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"><tt class="py-docstring"> :param password: XMPP password</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"><tt class="py-docstring"> :param resource: resource that shall be used for auth/connecting</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"><tt class="py-docstring"> :param sasl: Boolean indicating if SASL shall be used. (default: True)</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"><tt class="py-docstring"> :param on_auth: Callback, called after auth. On auth failure, argument</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"><tt class="py-docstring"> is None.</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_User</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Password</tt> <tt class="py-op">=</tt> <tt class="py-name">user</tt><tt class="py-op">,</tt> <tt class="py-name">password</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Resource</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sasl</tt> <tt class="py-op">=</tt> <tt class="py-name">resource</tt><tt class="py-op">,</tt> <tt class="py-name">sasl</tt> </tt>
+<a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt> <tt class="py-op">=</tt> <tt class="py-name">on_auth</tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._on_doc_attrs()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_doc_attrs"><a title="nbxmpp.client_nb.NonBlockingClient._on_doc_attrs" class="py-name" href="#" onclick="return doclink('link-126', '_on_doc_attrs', 'link-126');">_on_doc_attrs</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+</div><a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._on_old_auth"></a><div id="NonBlockingClient._on_old_auth-def"><a name="L468"></a><tt class="py-lineno">468</tt> <a class="py-toggle" href="#" id="NonBlockingClient._on_old_auth-toggle" onclick="return toggle('NonBlockingClient._on_old_auth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_old_auth">_on_old_auth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">res</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._on_old_auth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._on_old_auth-expanded"><a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"><tt class="py-docstring"> Callback used by NON-SASL auth. On auth failure, res is None</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">res</tt><tt class="py-op">:</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-op">+=</tt> <tt class="py-string">'+old_auth'</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'old_auth'</tt><tt class="py-op">)</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._on_sasl_auth"></a><div id="NonBlockingClient._on_sasl_auth-def"><a name="L478"></a><tt class="py-lineno">478</tt> <a class="py-toggle" href="#" id="NonBlockingClient._on_sasl_auth-toggle" onclick="return toggle('NonBlockingClient._on_sasl_auth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_sasl_auth">_on_sasl_auth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">res</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._on_sasl_auth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._on_sasl_auth-expanded"><a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"><tt class="py-docstring"> Used internally. On auth failure, res is None</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-127', 'onreceive', 'link-66');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">res</tt><tt class="py-op">:</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-op">+=</tt> <tt class="py-string">'+sasl'</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'sasl'</tt><tt class="py-op">)</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._on_doc_attrs"></a><div id="NonBlockingClient._on_doc_attrs-def"><a name="L489"></a><tt class="py-lineno">489</tt> <a class="py-toggle" href="#" id="NonBlockingClient._on_doc_attrs-toggle" onclick="return toggle('NonBlockingClient._on_doc_attrs');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_doc_attrs">_on_doc_attrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._on_doc_attrs-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._on_doc_attrs-expanded"><a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"><tt class="py-docstring"> Plug authentication objects and start auth</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sasl</tt><tt class="py-op">:</tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt id="link-128" class="py-name"><a title="nbxmpp.auth_nb" class="py-name" href="#" onclick="return doclink('link-128', 'auth_nb', 'link-2');">auth_nb</a></tt><tt class="py-op">.</tt><tt id="link-129" class="py-name"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-129', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-130', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_User</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Password</tt><tt class="py-op">,</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._on_start_sasl()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_start_sasl"><a title="nbxmpp.client_nb.NonBlockingClient._on_start_sasl" class="py-name" href="#" onclick="return doclink('link-131', '_on_start_sasl', 'link-131');">_on_start_sasl</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-132', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'SASL'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sasl</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-133', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">==</tt> <tt class="py-string">'not-supported'</tt><tt class="py-op">:</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Resource</tt><tt class="py-op">:</tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Resource</tt> <tt class="py-op">=</tt> <tt class="py-string">'xmpppy'</tt> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt id="link-134" class="py-name"><a title="nbxmpp.auth_nb" class="py-name" href="#" onclick="return doclink('link-134', 'auth_nb', 'link-2');">auth_nb</a></tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingNonSASL" class="py-name" href="#" onclick="return doclink('link-135', 'NonBlockingNonSASL', 'link-19');">NonBlockingNonSASL</a></tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-136', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_User</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Password</tt><tt class="py-op">,</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Resource</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._on_old_auth()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_old_auth"><a title="nbxmpp.client_nb.NonBlockingClient._on_old_auth" class="py-name" href="#" onclick="return doclink('link-137', '_on_old_auth', 'link-137');">_on_old_auth</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-138', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-139', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt id="link-140" class="py-name" targets="Method nbxmpp.auth_nb.SASL.auth()=nbxmpp.auth_nb.SASL-class.html#auth,Method nbxmpp.client_nb.NonBlockingClient.auth()=nbxmpp.client_nb.NonBlockingClient-class.html#auth"><a title="nbxmpp.auth_nb.SASL.auth
+nbxmpp.client_nb.NonBlockingClient.auth" class="py-name" href="#" onclick="return doclink('link-140', 'auth', 'link-140');">auth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._on_start_sasl"></a><div id="NonBlockingClient._on_start_sasl-def"><a name="L507"></a><tt class="py-lineno">507</tt> <a class="py-toggle" href="#" id="NonBlockingClient._on_start_sasl-toggle" onclick="return toggle('NonBlockingClient._on_start_sasl');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_start_sasl">_on_start_sasl</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._on_start_sasl-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._on_start_sasl-expanded"><a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"><tt class="py-docstring"> Callback used by SASL, called on each auth step</tt> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-141', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-142', 'ProcessNonBlocking', 'link-77');">ProcessNonBlocking</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-string">'SASL'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-comment"># SASL is pluged out, possible disconnect</tt> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-143', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">==</tt> <tt class="py-string">'in-process'</tt><tt class="py-op">:</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-144', 'onreceive', 'link-66');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-145', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">==</tt> <tt class="py-string">'failure'</tt><tt class="py-op">:</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> <tt class="py-comment"># wrong user/pass, stop auth</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'SASL'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-146', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-147', 'PlugOut', 'link-16');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> <tt class="py-comment"># FIXME: is this intended? We use ''elsewhere</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._on_sasl_auth()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_sasl_auth"><a title="nbxmpp.client_nb.NonBlockingClient._on_sasl_auth" class="py-name" href="#" onclick="return doclink('link-148', '_on_sasl_auth', 'link-148');">_on_sasl_auth</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="nbxmpp.auth_nb.SASL" class="py-name" href="#" onclick="return doclink('link-149', 'SASL', 'link-21');">SASL</a></tt><tt class="py-op">.</tt><tt class="py-name">startsasl</tt> <tt class="py-op">==</tt> <tt class="py-string">'success'</tt><tt class="py-op">:</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"> <tt class="py-name">nb_bind</tt> <tt class="py-op">=</tt> <tt id="link-150" class="py-name"><a title="nbxmpp.auth_nb" class="py-name" href="#" onclick="return doclink('link-150', 'auth_nb', 'link-2');">auth_nb</a></tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind
+nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind" class="py-name" href="#" onclick="return doclink('link-151', 'NonBlockingBind', 'link-17');">NonBlockingBind</a></tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-152', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"> <tt class="py-name">sm</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> <tt class="py-keyword">and</tt> <tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">resumption</tt><tt class="py-op">:</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-name">nb_bind</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-name">sm</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name" targets="Method nbxmpp.smacks.Smacks.set_owner()=nbxmpp.smacks.Smacks-class.html#set_owner"><a title="nbxmpp.smacks.Smacks.set_owner" class="py-name" href="#" onclick="return doclink('link-153', 'set_owner', 'link-153');">set_owner</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-154', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt class="py-name">sm</tt> <tt class="py-op">=</tt> <tt class="py-name">sm</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> <tt class="py-name">nb_bind</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-155', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_auth</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'sasl'</tt><tt class="py-op">)</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-name">nb_bind</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-156', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-157', 'onreceive', 'link-66');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._on_auth_bind()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_auth_bind"><a title="nbxmpp.client_nb.NonBlockingClient._on_auth_bind" class="py-name" href="#" onclick="return doclink('link-158', '_on_auth_bind', 'link-158');">_on_auth_bind</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L539"></a><tt class="py-lineno">539</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient._on_auth_bind"></a><div id="NonBlockingClient._on_auth_bind-def"><a name="L540"></a><tt class="py-lineno">540</tt> <a class="py-toggle" href="#" id="NonBlockingClient._on_auth_bind-toggle" onclick="return toggle('NonBlockingClient._on_auth_bind');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_auth_bind">_on_auth_bind</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient._on_auth_bind-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient._on_auth_bind-expanded"><a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: Why use this callback and not bind directly?</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-159', 'Dispatcher', 'link-61');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-160', 'ProcessNonBlocking', 'link-77');">ProcessNonBlocking</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind
+nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind" class="py-name" href="#" onclick="return doclink('link-161', 'NonBlockingBind', 'link-17');">NonBlockingBind</a></tt><tt class="py-op">.</tt><tt class="py-name">bound</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind
+nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind" class="py-name" href="#" onclick="return doclink('link-162', 'NonBlockingBind', 'link-17');">NonBlockingBind</a></tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind
+nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind" class="py-name" href="#" onclick="return doclink('link-163', 'NonBlockingBind', 'link-17');">NonBlockingBind</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_Resource</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient._on_sasl_auth" class="py-name" href="#" onclick="return doclink('link-164', '_on_sasl_auth', 'link-148');">_on_sasl_auth</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.initRoster"></a><div id="NonBlockingClient.initRoster-def"><a name="L549"></a><tt class="py-lineno">549</tt> <a class="py-toggle" href="#" id="NonBlockingClient.initRoster-toggle" onclick="return toggle('NonBlockingClient.initRoster');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#initRoster">initRoster</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.initRoster-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.initRoster-expanded"><a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"><tt class="py-docstring"> Plug in the roster</tt> </tt>
+<a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'NonBlockingRoster'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-165" class="py-name"><a title="nbxmpp.roster_nb" class="py-name" href="#" onclick="return doclink('link-165', 'roster_nb', 'link-3');">roster_nb</a></tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster" class="py-name" href="#" onclick="return doclink('link-166', 'NonBlockingRoster', 'link-15');">NonBlockingRoster</a></tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-167', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-name">version</tt><tt class="py-op">=</tt><tt class="py-name">version</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-168', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.getRoster"></a><div id="NonBlockingClient.getRoster-def"><a name="L556"></a><tt class="py-lineno">556</tt> <a class="py-toggle" href="#" id="NonBlockingClient.getRoster-toggle" onclick="return toggle('NonBlockingClient.getRoster');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#getRoster">getRoster</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">on_ready</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.getRoster-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.getRoster-expanded"><a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"><tt class="py-docstring"> Return the Roster instance, previously plugging it in and requesting</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"><tt class="py-docstring"> roster from server if needed</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'NonBlockingRoster'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-169" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster" class="py-name" href="#" onclick="return doclink('link-169', 'NonBlockingRoster', 'link-15');">NonBlockingRoster</a></tt><tt class="py-op">.</tt><tt id="link-170" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient.getRoster()=nbxmpp.client_nb.NonBlockingClient-class.html#getRoster,Method nbxmpp.roster_nb.NonBlockingRoster.getRoster()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getRoster"><a title="nbxmpp.client_nb.NonBlockingClient.getRoster
+nbxmpp.roster_nb.NonBlockingRoster.getRoster" class="py-name" href="#" onclick="return doclink('link-170', 'getRoster', 'link-170');">getRoster</a></tt><tt class="py-op">(</tt><tt class="py-name">on_ready</tt><tt class="py-op">,</tt> <tt class="py-name">force</tt><tt class="py-op">)</tt> </tt>
+<a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.sendPresence"></a><div id="NonBlockingClient.sendPresence-def"><a name="L565"></a><tt class="py-lineno">565</tt> <a class="py-toggle" href="#" id="NonBlockingClient.sendPresence-toggle" onclick="return toggle('NonBlockingClient.sendPresence');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#sendPresence">sendPresence</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">requestRoster</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.sendPresence-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.sendPresence-expanded"><a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"><tt class="py-docstring"> Send some specific presence state. Can also request roster from server if</tt> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"><tt class="py-docstring"> according agrument is set</tt> </tt>
+<a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">requestRoster</tt><tt class="py-op">:</tt> </tt>
+<a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: used somewhere?</tt> </tt>
+<a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"> <tt id="link-171" class="py-name"><a title="nbxmpp.roster_nb" class="py-name" href="#" onclick="return doclink('link-171', 'roster_nb', 'link-3');">roster_nb</a></tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster" class="py-name" href="#" onclick="return doclink('link-172', 'NonBlockingRoster', 'link-15');">NonBlockingRoster</a></tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-173', 'get_instance', 'link-38');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-174', 'PlugIn', 'link-52');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-175', 'send', 'link-110');">send</a></tt><tt class="py-op">(</tt><tt id="link-176" class="py-name"><a title="nbxmpp.dispatcher_nb" class="py-name" href="#" onclick="return doclink('link-176', 'dispatcher_nb', 'link-1');">dispatcher_nb</a></tt><tt class="py-op">.</tt><tt id="link-177" class="py-name" targets="Class nbxmpp.protocol.Presence=nbxmpp.protocol.Presence-class.html"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-177', 'Presence', 'link-177');">Presence</a></tt><tt class="py-op">(</tt><tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-name">typ</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> </tt>
+<a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"><tt class="py-comment">### following methods are moved from blocking client class of xmpppy</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.RegisterDisconnectHandler"></a><div id="NonBlockingClient.RegisterDisconnectHandler-def"><a name="L579"></a><tt class="py-lineno">579</tt> <a class="py-toggle" href="#" id="NonBlockingClient.RegisterDisconnectHandler-toggle" onclick="return toggle('NonBlockingClient.RegisterDisconnectHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#RegisterDisconnectHandler">RegisterDisconnectHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.RegisterDisconnectHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.RegisterDisconnectHandler-expanded"><a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"><tt class="py-docstring"> Register handler that will be called on disconnect</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnect_handlers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.UnregisterDisconnectHandler"></a><div id="NonBlockingClient.UnregisterDisconnectHandler-def"><a name="L585"></a><tt class="py-lineno">585</tt> <a class="py-toggle" href="#" id="NonBlockingClient.UnregisterDisconnectHandler-toggle" onclick="return toggle('NonBlockingClient.UnregisterDisconnectHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#UnregisterDisconnectHandler">UnregisterDisconnectHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.UnregisterDisconnectHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.UnregisterDisconnectHandler-expanded"><a name="L586"></a><tt class="py-lineno">586</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"><tt class="py-docstring"> Unregister handler that is called on disconnect</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">disconnect_handlers</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L590"></a><tt class="py-lineno">590</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.DisconnectHandler"></a><div id="NonBlockingClient.DisconnectHandler-def"><a name="L591"></a><tt class="py-lineno">591</tt> <a class="py-toggle" href="#" id="NonBlockingClient.DisconnectHandler-toggle" onclick="return toggle('NonBlockingClient.DisconnectHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#DisconnectHandler">DisconnectHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.DisconnectHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.DisconnectHandler-expanded"><a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"><tt class="py-docstring"> Default disconnect handler. Just raises an IOError. If you choosed to use</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"><tt class="py-docstring"> this class in your production client, override this method or at least</tt> </tt>
+<a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"><tt class="py-docstring"> unregister it.</tt> </tt>
+<a name="L596"></a><tt class="py-lineno">596</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IOError</tt><tt class="py-op">(</tt><tt class="py-string">'Disconnected from server.'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.get_connect_type"></a><div id="NonBlockingClient.get_connect_type-def"><a name="L599"></a><tt class="py-lineno">599</tt> <a class="py-toggle" href="#" id="NonBlockingClient.get_connect_type-toggle" onclick="return toggle('NonBlockingClient.get_connect_type');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#get_connect_type">get_connect_type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.get_connect_type-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.get_connect_type-expanded"><a name="L600"></a><tt class="py-lineno">600</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L601"></a><tt class="py-lineno">601</tt> <tt class="py-line"><tt class="py-docstring"> Return connection state. F.e.: None / 'tls' / 'plain+non_sasl'</tt> </tt>
+<a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">connected</tt> </tt>
+</div><a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingClient.get_peerhost"></a><div id="NonBlockingClient.get_peerhost-def"><a name="L605"></a><tt class="py-lineno">605</tt> <a class="py-toggle" href="#" id="NonBlockingClient.get_peerhost-toggle" onclick="return toggle('NonBlockingClient.get_peerhost');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.client_nb.NonBlockingClient-class.html#get_peerhost">get_peerhost</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingClient.get_peerhost-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingClient.get_peerhost-expanded"><a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L607"></a><tt class="py-lineno">607</tt> <tt class="py-line"><tt class="py-docstring"> Gets the ip address of the account, from which is made connection to the</tt> </tt>
+<a name="L608"></a><tt class="py-lineno">608</tt> <tt class="py-line"><tt class="py-docstring"> server (e.g. IP and port of socket)</tt> </tt>
+<a name="L609"></a><tt class="py-lineno">609</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt> <tt class="py-line"><tt class="py-docstring"> We will create listening socket on the same ip</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: tuple (ip, port) is expected (and checked for) but port num is</tt> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt> <tt class="py-line"> <tt class="py-comment"># useless</tt> </tt>
+<a name="L614"></a><tt class="py-lineno">614</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">peerhost</tt> </tt>
+</div></div><a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.client_nb.NonBlockingClient-class.html b/doc/apidocs/nbxmpp.client_nb.NonBlockingClient-class.html
new file mode 100644
index 0000000..68c164b
--- /dev/null
+++ b/doc/apidocs/nbxmpp.client_nb.NonBlockingClient-class.html
@@ -0,0 +1,1232 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.client_nb.NonBlockingClient</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.client_nb-module.html">Module&nbsp;client_nb</a> ::
+ Class&nbsp;NonBlockingClient
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.client_nb.NonBlockingClient-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingClient</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient">source&nbsp;code</a></span></p>
+Client class is XMPP connection mountpoint. Objects for authentication,
+network communication, roster, xml parsing ... are plugged to client object.
+Client implements the abstract behavior - mostly negotioation and callbacks
+handling, whereas underlying modules take care of feature-specific logic
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">domain</span>,
+ <span class="summary-sig-arg">idlequeue</span>,
+ <span class="summary-sig-arg">caller</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Caches connection data</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#disconnect" class="summary-sig-name">disconnect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">message</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span><br />
+ Called on disconnection - disconnect callback is picked based on state of
+the client.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.disconnect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#connect" class="summary-sig-name">connect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">on_connect</span>,
+ <span class="summary-sig-arg">on_connect_failure</span>,
+ <span class="summary-sig-arg">hostname</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">port</span>=<span class="summary-sig-default">5222</span>,
+ <span class="summary-sig-arg">on_proxy_failure</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">proxy</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">secure_tuple</span>=<span class="summary-sig-default"><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">plain</code><code class="variable-quote">'</code><code class="variable-op">, </code>None<code class="variable-op">, </code>None<code class="variable-group">)</code></span>)</span><br />
+ Open XMPP connection (open XML streams in both directions)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_resolve_hostname" class="summary-sig-name" onclick="show_private();">_resolve_hostname</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">hostname</span>,
+ <span class="summary-sig-arg">port</span>,
+ <span class="summary-sig-arg">on_success</span>)</span><br />
+ Wrapper for getaddinfo call</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._resolve_hostname">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_try_next_ip" class="summary-sig-name" onclick="show_private();">_try_next_ip</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">err_message</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Iterate over IP addresses tries to connect to it</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._try_next_ip">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#incoming_stream_version" class="summary-sig-name">incoming_stream_version</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Get version of xml stream</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.incoming_stream_version">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect" class="summary-sig-name" onclick="show_private();">_xmpp_connect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">socket_type</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Start XMPP connecting process - open the XML stream. Is called after TCP
+connection is established or after switch to TLS when successfully
+negotiated with &lt;starttls&gt;.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._xmpp_connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_xmpp_connect_machine" class="summary-sig-name" onclick="show_private();">_xmpp_connect_machine</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">data</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Finite automaton taking care of stream opening and features tag handling.
+Calls _on_stream_start when stream is started, and disconnect() on
+failure.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._xmpp_connect_machine">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_stream_start" class="summary-sig-name" onclick="show_private();">_on_stream_start</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called after XMPP stream is opened. TLS negotiation may follow if
+supported and desired.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_stream_start">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_tls_negotiation_handler" class="summary-sig-name" onclick="show_private();">_tls_negotiation_handler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">con</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">tag</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Take care of TLS negotioation with &lt;starttls&gt;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._tls_negotiation_handler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_connect" class="summary-sig-name" onclick="show_private();">_on_connect</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Preceed call of on_connect callback</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#raise_event" class="summary-sig-name">raise_event</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">event_type</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Raise event to connection instance. DATA_SENT and DATA_RECIVED events
+are used in XML console to show XMPP traffic</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.raise_event">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#auth" class="summary-sig-name">auth</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">user</span>,
+ <span class="summary-sig-arg">password</span>,
+ <span class="summary-sig-arg">resource</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">sasl</span>=<span class="summary-sig-default">True</span>,
+ <span class="summary-sig-arg">on_auth</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Authenticate connnection and bind resource. If resource is not provided
+random one or library name used</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.auth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_old_auth" class="summary-sig-name" onclick="show_private();">_on_old_auth</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">res</span>)</span><br />
+ Callback used by NON-SASL auth. On auth failure, res is None</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_old_auth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_sasl_auth" class="summary-sig-name" onclick="show_private();">_on_sasl_auth</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">res</span>)</span><br />
+ Used internally. On auth failure, res is None</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_sasl_auth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_doc_attrs" class="summary-sig-name" onclick="show_private();">_on_doc_attrs</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Plug authentication objects and start auth</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_doc_attrs">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_start_sasl" class="summary-sig-name" onclick="show_private();">_on_start_sasl</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Callback used by SASL, called on each auth step</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_start_sasl">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#_on_auth_bind" class="summary-sig-name" onclick="show_private();">_on_auth_bind</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_auth_bind">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#initRoster" class="summary-sig-name">initRoster</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">version</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span><br />
+ Plug in the roster</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.initRoster">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#getRoster" class="summary-sig-name">getRoster</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">on_ready</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">force</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Return the Roster instance, previously plugging it in and requesting
+roster from server if needed</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.getRoster">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#sendPresence" class="summary-sig-name">sendPresence</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">requestRoster</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Send some specific presence state. Can also request roster from server if
+according agrument is set</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.sendPresence">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#RegisterDisconnectHandler" class="summary-sig-name">RegisterDisconnectHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handler</span>)</span><br />
+ Register handler that will be called on disconnect</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.RegisterDisconnectHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#UnregisterDisconnectHandler" class="summary-sig-name">UnregisterDisconnectHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handler</span>)</span><br />
+ Unregister handler that is called on disconnect</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.UnregisterDisconnectHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#DisconnectHandler" class="summary-sig-name">DisconnectHandler</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Default disconnect handler. Just raises an IOError. If you choosed to use
+this class in your production client, override this method or at least
+unregister it.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.DisconnectHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#get_connect_type" class="summary-sig-name">get_connect_type</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return connection state. F.e.: None / 'tls' / 'plain+non_sasl'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.get_connect_type">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.client_nb.NonBlockingClient-class.html#get_peerhost" class="summary-sig-name">get_peerhost</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Gets the ip address of the account, from which is made connection to the
+server (e.g. IP and port of socket)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.get_peerhost">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">domain</span>,
+ <span class="sig-arg">idlequeue</span>,
+ <span class="sig-arg">caller</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Caches connection data
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>domain</code></strong> - domain - for to: attribute (from account info)</li>
+ <li><strong class="pname"><code>idlequeue</code></strong> - processing idlequeue</li>
+ <li><strong class="pname"><code>caller</code></strong> - calling object - it has to implement methods
+_event_dispatcher which is called from dispatcher instance</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="disconnect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">disconnect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">message</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.disconnect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called on disconnection - disconnect callback is picked based on state of
+the client.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="connect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">on_connect</span>,
+ <span class="sig-arg">on_connect_failure</span>,
+ <span class="sig-arg">hostname</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">port</span>=<span class="sig-default">5222</span>,
+ <span class="sig-arg">on_proxy_failure</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">proxy</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">secure_tuple</span>=<span class="sig-default"><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">plain</code><code class="variable-quote">'</code><code class="variable-op">, </code>None<code class="variable-op">, </code>None<code class="variable-group">)</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Open XMPP connection (open XML streams in both directions)
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>on_connect</code></strong> - called after stream is successfully opened</li>
+ <li><strong class="pname"><code>on_connect_failure</code></strong> - called when error occures during connection</li>
+ <li><strong class="pname"><code>hostname</code></strong> - hostname of XMPP server from SRV request</li>
+ <li><strong class="pname"><code>port</code></strong> - port number of XMPP server</li>
+ <li><strong class="pname"><code>on_proxy_failure</code></strong> - called if error occurres during TCP connection to
+proxy server or during proxy connecting process</li>
+ <li><strong class="pname"><code>proxy</code></strong> - dictionary with proxy data. It should contain at least
+values for keys 'host' and 'port' - connection details for proxy serve
+and optionally keys 'user' and 'pass' as proxy credentials</li>
+ <li><strong class="pname"><code>secure_tuple</code></strong> - tuple of (desired connection type, cacerts, mycerts)
+connection type can be 'ssl' - TLS established after TCP connection,
+'tls' - TLS established after negotiation with starttls, or 'plain'.
+cacerts, mycerts - see tls_nb.NonBlockingTLS constructor for more
+details</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_resolve_hostname"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_resolve_hostname</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">hostname</span>,
+ <span class="sig-arg">port</span>,
+ <span class="sig-arg">on_success</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._resolve_hostname">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Wrapper for getaddinfo call</p>
+<p>FIXME: getaddinfo blocks</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_try_next_ip"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_try_next_ip</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">err_message</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._try_next_ip">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Iterate over IP addresses tries to connect to it
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="incoming_stream_version"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">incoming_stream_version</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.incoming_stream_version">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get version of xml stream
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_xmpp_connect"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_xmpp_connect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">socket_type</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._xmpp_connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Start XMPP connecting process - open the XML stream. Is called after TCP
+connection is established or after switch to TLS when successfully
+negotiated with &lt;starttls&gt;.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_xmpp_connect_machine"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_xmpp_connect_machine</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">mode</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">data</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._xmpp_connect_machine">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Finite automaton taking care of stream opening and features tag handling.
+Calls _on_stream_start when stream is started, and disconnect() on
+failure.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_stream_start"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_stream_start</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_stream_start">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called after XMPP stream is opened. TLS negotiation may follow if
+supported and desired.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_tls_negotiation_handler"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_tls_negotiation_handler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">con</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">tag</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._tls_negotiation_handler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Take care of TLS negotioation with &lt;starttls&gt;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_connect"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_connect</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Preceed call of on_connect callback
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="raise_event"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">raise_event</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">event_type</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.raise_event">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Raise event to connection instance. DATA_SENT and DATA_RECIVED events
+are used in XML console to show XMPP traffic
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="auth"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">auth</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">user</span>,
+ <span class="sig-arg">password</span>,
+ <span class="sig-arg">resource</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">sasl</span>=<span class="sig-default">True</span>,
+ <span class="sig-arg">on_auth</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.auth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Authenticate connnection and bind resource. If resource is not provided
+random one or library name used
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>user</code></strong> - XMPP username</li>
+ <li><strong class="pname"><code>password</code></strong> - XMPP password</li>
+ <li><strong class="pname"><code>resource</code></strong> - resource that shall be used for auth/connecting</li>
+ <li><strong class="pname"><code>sasl</code></strong> - Boolean indicating if SASL shall be used. (default: True)</li>
+ <li><strong class="pname"><code>on_auth</code></strong> - Callback, called after auth. On auth failure, argument
+is None.</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_old_auth"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_old_auth</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">res</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_old_auth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Callback used by NON-SASL auth. On auth failure, res is None
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_sasl_auth"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_sasl_auth</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">res</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_sasl_auth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Used internally. On auth failure, res is None
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_doc_attrs"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_doc_attrs</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_doc_attrs">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Plug authentication objects and start auth
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_start_sasl"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_start_sasl</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_start_sasl">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Callback used by SASL, called on each auth step
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_auth_bind"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_auth_bind</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient._on_auth_bind">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="initRoster"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">initRoster</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">version</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.initRoster">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Plug in the roster
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getRoster"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getRoster</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">on_ready</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">force</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.getRoster">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the Roster instance, previously plugging it in and requesting
+roster from server if needed
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="sendPresence"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">sendPresence</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">requestRoster</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.sendPresence">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send some specific presence state. Can also request roster from server if
+according agrument is set
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterDisconnectHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterDisconnectHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.RegisterDisconnectHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Register handler that will be called on disconnect
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="UnregisterDisconnectHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">UnregisterDisconnectHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.UnregisterDisconnectHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Unregister handler that is called on disconnect
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="DisconnectHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">DisconnectHandler</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.DisconnectHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Default disconnect handler. Just raises an IOError. If you choosed to use
+this class in your production client, override this method or at least
+unregister it.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_connect_type"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_connect_type</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.get_connect_type">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return connection state. F.e.: None / 'tls' / 'plain+non_sasl'
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_peerhost"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_peerhost</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.client_nb-pysrc.html#NonBlockingClient.get_peerhost">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Gets the ip address of the account, from which is made connection to the
+server (e.g. IP and port of socket)</p>
+<p>We will create listening socket on the same ip</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.dispatcher_nb-module.html b/doc/apidocs/nbxmpp.dispatcher_nb-module.html
new file mode 100644
index 0000000..27347c9
--- /dev/null
+++ b/doc/apidocs/nbxmpp.dispatcher_nb-module.html
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.dispatcher_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;dispatcher_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.dispatcher_nb-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module dispatcher_nb</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html">source&nbsp;code</a></span></p>
+Main xmpp decision making logic. Provides library with methods to assign
+different handlers to different XMPP stanzas and namespaces
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb.Dispatcher-class.html" class="summary-name">Dispatcher</a><br />
+ Why is this here - I needed to redefine Dispatcher for BOSH and easiest way
+was to inherit original Dispatcher (now renamed to XMPPDispatcher). Trouble
+is that reference used to access dispatcher instance is in Client attribute
+named by __class__.__name__ of the dispatcher instance .. long story short:
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html" class="summary-name">XMPPDispatcher</a><br />
+ Handles XMPP stream and is the first who takes control over a fresh stanza
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html" class="summary-name">BOSHDispatcher</a>
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.dispatcher_nb')">logging.getLogger('nbxmpp.dispatcher_nb')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb-module.html#DEFAULT_TIMEOUT_SECONDS" class="summary-name">DEFAULT_TIMEOUT_SECONDS</a> = <code title="25">25</code><br />
+ default timeout to wait for response for our id
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb-module.html#outgoingID" class="summary-name">outgoingID</a> = <code title="0">0</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb-module.html#XML_DECLARATION" class="summary-name">XML_DECLARATION</a> = <code title="'&lt;?xml version=\'1.0\'?&gt;'"><code class="variable-quote">'</code><code class="variable-string">&lt;?xml version=\'1.0\'?&gt;</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.dispatcher_nb-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <a href="nbxmpp.simplexml-module.html" title="nbxmpp.simplexml">simplexml</a>,
+ <span title="sys">sys</span>,
+ <span title="locale">locale</span>,
+ <span title="re">re</span>,
+ <span title="xml.parsers.expat.ExpatError">ExpatError</span>,
+ <a href="nbxmpp.plugin.PlugIn-class.html" title="nbxmpp.plugin.PlugIn">PlugIn</a>,
+ <span title="nbxmpp.protocol.NS_STREAMS">NS_STREAMS</span>,
+ <span title="nbxmpp.protocol.NS_XMPP_STREAMS">NS_XMPP_STREAMS</span>,
+ <span title="nbxmpp.protocol.NS_HTTP_BIND">NS_HTTP_BIND</span>,
+ <a href="nbxmpp.protocol.Iq-class.html" title="nbxmpp.protocol.Iq">Iq</a>,
+ <a href="nbxmpp.protocol.Presence-class.html" title="nbxmpp.protocol.Presence">Presence</a>,
+ <a href="nbxmpp.protocol.Message-class.html" title="nbxmpp.protocol.Message">Message</a>,
+ <a href="nbxmpp.protocol.Protocol-class.html" title="nbxmpp.protocol.Protocol">Protocol</a>,
+ <a href="nbxmpp.simplexml.Node-class.html" title="nbxmpp.protocol.Node">Node</a>,
+ <a href="nbxmpp.protocol.Error-class.html" title="nbxmpp.protocol.Error">Error</a>,
+ <span title="nbxmpp.protocol.ERR_FEATURE_NOT_IMPLEMENTED">ERR_FEATURE_NOT_IMPLEMENTED</span>,
+ <a href="nbxmpp.protocol.StreamError-class.html" title="nbxmpp.protocol.StreamError">StreamError</a>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.dispatcher_nb')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="DEFAULT_TIMEOUT_SECONDS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">DEFAULT_TIMEOUT_SECONDS</h3>
+ default timeout to wait for response for our id
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+25
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="outgoingID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">outgoingID</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+0
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="XML_DECLARATION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">XML_DECLARATION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">&lt;?xml version=\'1.0\'?&gt;</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.dispatcher_nb-pysrc.html b/doc/apidocs/nbxmpp.dispatcher_nb-pysrc.html
new file mode 100644
index 0000000..ef16fa2
--- /dev/null
+++ b/doc/apidocs/nbxmpp.dispatcher_nb-pysrc.html
@@ -0,0 +1,1063 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.dispatcher_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;dispatcher_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.dispatcher_nb-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.dispatcher_nb-module.html">Module nbxmpp.dispatcher_nb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## dispatcher_nb.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## based on dispatcher.py</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## modified by Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">Main xmpp decision making logic. Provides library with methods to assign</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">different handlers to different XMPP stanzas and namespaces</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.simplexml=nbxmpp.simplexml-module.html"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-0', 'simplexml', 'link-0');">simplexml</a></tt><tt class="py-op">,</tt> <tt class="py-name">sys</tt><tt class="py-op">,</tt> <tt class="py-name">locale</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt> <tt class="py-keyword">import</tt> <tt class="py-name">ExpatError</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugin()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugin,Method nbxmpp.auth_nb.NonBlockingNonSASL.plugin()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin,Method nbxmpp.auth_nb.SASL.plugin()=nbxmpp.auth_nb.SASL-class.html#plugin,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugin()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin,Module nbxmpp.plugin=nbxmpp.plugin-module.html,Method nbxmpp.roster_nb.NonBlockingRoster.plugin()=nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin,Method nbxmpp.tls_nb.NonBlockingTLS.plugin()=nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin,Method nbxmpp.transports_nb.NonBlockingTransport.plugin()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin"><a title="nbxmpp.auth_nb.NonBlockingBind.plugin
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin
+nbxmpp.auth_nb.SASL.plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin
+nbxmpp.plugin
+nbxmpp.roster_nb.NonBlockingRoster.plugin
+nbxmpp.tls_nb.NonBlockingTLS.plugin
+nbxmpp.transports_nb.NonBlockingTransport.plugin" class="py-name" href="#" onclick="return doclink('link-1', 'plugin', 'link-1');">plugin</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn,Method nbxmpp.dispatcher_nb.Dispatcher.PlugIn()=nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn,Class nbxmpp.plugin.PlugIn=nbxmpp.plugin.PlugIn-class.html,Method nbxmpp.plugin.PlugIn.PlugIn()=nbxmpp.plugin.PlugIn-class.html#PlugIn"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-2', 'PlugIn', 'link-2');">PlugIn</a></tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-3', 'protocol', 'link-3');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">(</tt><tt id="link-4" class="py-name" targets="Variable nbxmpp.protocol.NS_STREAMS=nbxmpp.protocol-module.html#NS_STREAMS"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-4', 'NS_STREAMS', 'link-4');">NS_STREAMS</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Variable nbxmpp.protocol.NS_XMPP_STREAMS=nbxmpp.protocol-module.html#NS_XMPP_STREAMS"><a title="nbxmpp.protocol.NS_XMPP_STREAMS" class="py-name" href="#" onclick="return doclink('link-5', 'NS_XMPP_STREAMS', 'link-5');">NS_XMPP_STREAMS</a></tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Variable nbxmpp.protocol.NS_HTTP_BIND=nbxmpp.protocol-module.html#NS_HTTP_BIND"><a title="nbxmpp.protocol.NS_HTTP_BIND" class="py-name" href="#" onclick="return doclink('link-6', 'NS_HTTP_BIND', 'link-6');">NS_HTTP_BIND</a></tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name" targets="Class nbxmpp.protocol.Iq=nbxmpp.protocol.Iq-class.html"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-7', 'Iq', 'link-7');">Iq</a></tt><tt class="py-op">,</tt> <tt id="link-8" class="py-name" targets="Class nbxmpp.protocol.Presence=nbxmpp.protocol.Presence-class.html"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-8', 'Presence', 'link-8');">Presence</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt id="link-9" class="py-name" targets="Class nbxmpp.protocol.Message=nbxmpp.protocol.Message-class.html"><a title="nbxmpp.protocol.Message" class="py-name" href="#" onclick="return doclink('link-9', 'Message', 'link-9');">Message</a></tt><tt class="py-op">,</tt> <tt id="link-10" class="py-name" targets="Class nbxmpp.protocol.Protocol=nbxmpp.protocol.Protocol-class.html"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-10', 'Protocol', 'link-10');">Protocol</a></tt><tt class="py-op">,</tt> <tt id="link-11" class="py-name" targets="Class nbxmpp.simplexml.Node=nbxmpp.simplexml.Node-class.html"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-11', 'Node', 'link-11');">Node</a></tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name" targets="Class nbxmpp.protocol.Error=nbxmpp.protocol.Error-class.html,Class nbxmpp.tls_nb.SSLWrapper.Error=nbxmpp.tls_nb.SSLWrapper.Error-class.html"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-12', 'Error', 'link-12');">Error</a></tt><tt class="py-op">,</tt> <tt id="link-13" class="py-name" targets="Variable nbxmpp.ERR_FEATURE_NOT_IMPLEMENTED=nbxmpp-module.html#ERR_FEATURE_NOT_IMPLEMENTED,Variable nbxmpp.protocol.ERR_FEATURE_NOT_IMPLEMENTED=nbxmpp.protocol-module.html#ERR_FEATURE_NOT_IMPLEMENTED"><a title="nbxmpp.ERR_FEATURE_NOT_IMPLEMENTED
+nbxmpp.protocol.ERR_FEATURE_NOT_IMPLEMENTED" class="py-name" href="#" onclick="return doclink('link-13', 'ERR_FEATURE_NOT_IMPLEMENTED', 'link-13');">ERR_FEATURE_NOT_IMPLEMENTED</a></tt><tt class="py-op">,</tt> <tt id="link-14" class="py-name" targets="Class nbxmpp.protocol.StreamError=nbxmpp.protocol.StreamError-class.html"><a title="nbxmpp.protocol.StreamError" class="py-name" href="#" onclick="return doclink('link-14', 'StreamError', 'link-14');">StreamError</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt id="link-15" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-15', 'log', 'link-15');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.dispatcher_nb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment">#: default timeout to wait for response for our id</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt id="link-16" class="py-name" targets="Variable nbxmpp.dispatcher_nb.DEFAULT_TIMEOUT_SECONDS=nbxmpp.dispatcher_nb-module.html#DEFAULT_TIMEOUT_SECONDS"><a title="nbxmpp.dispatcher_nb.DEFAULT_TIMEOUT_SECONDS" class="py-name" href="#" onclick="return doclink('link-16', 'DEFAULT_TIMEOUT_SECONDS', 'link-16');">DEFAULT_TIMEOUT_SECONDS</a></tt> <tt class="py-op">=</tt> <tt class="py-number">25</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt id="link-17" class="py-name" targets="Variable nbxmpp.dispatcher_nb.outgoingID=nbxmpp.dispatcher_nb-module.html#outgoingID"><a title="nbxmpp.dispatcher_nb.outgoingID" class="py-name" href="#" onclick="return doclink('link-17', 'outgoingID', 'link-17');">outgoingID</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt id="link-18" class="py-name" targets="Variable nbxmpp.dispatcher_nb.XML_DECLARATION=nbxmpp.dispatcher_nb-module.html#XML_DECLARATION"><a title="nbxmpp.dispatcher_nb.XML_DECLARATION" class="py-name" href="#" onclick="return doclink('link-18', 'XML_DECLARATION', 'link-18');">XML_DECLARATION</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'&lt;?xml version=\'1.0\'?&gt;'</tt> </tt>
+<a name="Dispatcher"></a><div id="Dispatcher-def"><a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-comment"># FIXME: ugly</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <a class="py-toggle" href="#" id="Dispatcher-toggle" onclick="return toggle('Dispatcher');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.Dispatcher-class.html">Dispatcher</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Dispatcher-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Dispatcher-expanded"><a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> Why is this here - I needed to redefine Dispatcher for BOSH and easiest way</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> was to inherit original Dispatcher (now renamed to XMPPDispatcher). Trouble</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> is that reference used to access dispatcher instance is in Client attribute</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> named by __class__.__name__ of the dispatcher instance .. long story short:</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> I wrote following to avoid changing each client.Dispatcher.whatever() in xmpp</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring"> If having two kinds of dispatcher will go well, I will rewrite the dispatcher</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> references in other scripts</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
+<a name="Dispatcher.PlugIn"></a><div id="Dispatcher.PlugIn-def"><a name="L52"></a><tt class="py-lineno"> 52</tt> <a class="py-toggle" href="#" id="Dispatcher.PlugIn-toggle" onclick="return toggle('Dispatcher.PlugIn');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn">PlugIn</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">client_obj</tt><tt class="py-op">,</tt> <tt class="py-param">after_SASL</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">old_features</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Dispatcher.PlugIn-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Dispatcher.PlugIn-expanded"><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client_obj</tt><tt class="py-op">.</tt><tt class="py-name">protocol_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'XMPP'</tt><tt class="py-op">:</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt id="link-19" class="py-name" targets="Class nbxmpp.dispatcher_nb.XMPPDispatcher=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher" class="py-name" href="#" onclick="return doclink('link-19', 'XMPPDispatcher', 'link-19');">XMPPDispatcher</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-20', 'PlugIn', 'link-2');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">client_obj</tt><tt class="py-op">)</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">client_obj</tt><tt class="py-op">.</tt><tt class="py-name">protocol_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'BOSH'</tt><tt class="py-op">:</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt id="link-21" class="py-name" targets="Class nbxmpp.dispatcher_nb.BOSHDispatcher=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher" class="py-name" href="#" onclick="return doclink('link-21', 'BOSHDispatcher', 'link-21');">BOSHDispatcher</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-22', 'PlugIn', 'link-2');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">client_obj</tt><tt class="py-op">,</tt> <tt class="py-name">after_SASL</tt><tt class="py-op">,</tt> <tt class="py-name">old_features</tt><tt class="py-op">)</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt> <tt class="py-name">False</tt> <tt class="py-comment"># should never be reached</tt> </tt>
+</div><a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="Dispatcher.get_instance"></a><div id="Dispatcher.get_instance-def"><a name="L61"></a><tt class="py-lineno"> 61</tt> <a class="py-toggle" href="#" id="Dispatcher.get_instance-toggle" onclick="return toggle('Dispatcher.get_instance');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.Dispatcher-class.html#get_instance">get_instance</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Dispatcher.get_instance-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Dispatcher.get_instance-expanded"><a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> Factory Method for object creation</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> Use this instead of directly initializing the class in order to make</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> unit testing much easier.</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher"></a><div id="XMPPDispatcher-def"><a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="XMPPDispatcher-toggle" onclick="return toggle('XMPPDispatcher');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a><tt class="py-op">(</tt><tt class="py-base-class">PlugIn</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="XMPPDispatcher-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-docstring"> Handles XMPP stream and is the first who takes control over a fresh stanza</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> Is plugged into NonBlockingClient but can be replugged to restart handled</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-docstring"> stream headers (used by SASL f.e.).</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.__init__"></a><div id="XMPPDispatcher.__init__-def"><a name="L79"></a><tt class="py-lineno"> 79</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.__init__-toggle" onclick="return toggle('XMPPDispatcher.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.__init__-expanded"><a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-23', 'PlugIn', 'link-2');">PlugIn</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-24', '__init__', 'link-24');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_defaultHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_pendingExceptions</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_eventHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cycleHandlers</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exported_methods</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-25', 'RegisterHandler', 'link-25');">RegisterHandler</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterDefaultHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterDefaultHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterDefaultHandler" class="py-name" href="#" onclick="return doclink('link-26', 'RegisterDefaultHandler', 'link-26');">RegisterDefaultHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterEventHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterEventHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterEventHandler" class="py-name" href="#" onclick="return doclink('link-27', 'RegisterEventHandler', 'link-27');">RegisterEventHandler</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterCycleHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterCycleHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterCycleHandler" class="py-name" href="#" onclick="return doclink('link-28', 'UnregisterCycleHandler', 'link-28');">UnregisterCycleHandler</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterCycleHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterCycleHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterCycleHandler" class="py-name" href="#" onclick="return doclink('link-29', 'RegisterCycleHandler', 'link-29');">RegisterCycleHandler</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandlerOnce()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandlerOnce" class="py-name" href="#" onclick="return doclink('link-30', 'RegisterHandlerOnce', 'link-30');">RegisterHandlerOnce</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.UnregisterHandler" class="py-name" href="#" onclick="return doclink('link-31', 'UnregisterHandler', 'link-31');">UnregisterHandler</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol" class="py-name" href="#" onclick="return doclink('link-32', 'RegisterProtocol', 'link-32');">RegisterProtocol</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse" class="py-name" href="#" onclick="return doclink('link-33', 'SendAndWaitForResponse', 'link-33');">SendAndWaitForResponse</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-34', 'SendAndCallForResponse', 'link-34');">SendAndCallForResponse</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID" class="py-name" href="#" onclick="return doclink('link-35', 'getAnID', 'link-35');">getAnID</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.Event()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-36', 'Event', 'link-36');">Event</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-37', 'send', 'link-37');">send</a></tt><tt class="py-op">]</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-comment"># Let the dispatcher know if there is support for stream management</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-comment"># \ufddo -&gt; \ufdef range</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">c</tt> <tt class="py-op">=</tt> <tt class="py-string">u'\ufdd0'</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-op">(</tt><tt class="py-name">c</tt> <tt class="py-op">&lt;</tt> <tt class="py-string">u'\ufdef'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">c</tt> <tt class="py-op">=</tt> <tt class="py-name">unichr</tt><tt class="py-op">(</tt><tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">+=</tt> <tt class="py-string">'|'</tt> <tt class="py-op">+</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-comment"># \ufffe-\uffff, \u1fffe-\u1ffff, ..., \u10fffe-\u10ffff</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-name">c</tt> <tt class="py-op">=</tt> <tt class="py-string">u'\ufffe'</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">+=</tt> <tt class="py-string">'|'</tt> <tt class="py-op">+</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">+=</tt> <tt class="py-string">'|'</tt> <tt class="py-op">+</tt> <tt class="py-name">unichr</tt><tt class="py-op">(</tt><tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-op">(</tt><tt class="py-name">c</tt> <tt class="py-op">&lt;</tt> <tt class="py-string">u'\U0010fffe'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">c</tt> <tt class="py-op">=</tt> <tt class="py-name">unichr</tt><tt class="py-op">(</tt><tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">0x10000</tt><tt class="py-op">)</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">+=</tt> <tt class="py-string">'|'</tt> <tt class="py-op">+</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">+=</tt> <tt class="py-string">'|'</tt> <tt class="py-op">+</tt> <tt class="py-name">unichr</tt><tt class="py-op">(</tt><tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid_chars_re</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.getAnID"></a><div id="XMPPDispatcher.getAnID-def"><a name="L115"></a><tt class="py-lineno">115</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.getAnID-toggle" onclick="return toggle('XMPPDispatcher.getAnID');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID">getAnID</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.getAnID-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.getAnID-expanded"><a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">global</tt> <tt id="link-38" class="py-name"><a title="nbxmpp.dispatcher_nb.outgoingID" class="py-name" href="#" onclick="return doclink('link-38', 'outgoingID', 'link-17');">outgoingID</a></tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt id="link-39" class="py-name"><a title="nbxmpp.dispatcher_nb.outgoingID" class="py-name" href="#" onclick="return doclink('link-39', 'outgoingID', 'link-17');">outgoingID</a></tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt id="link-40" class="py-name"><a title="nbxmpp.dispatcher_nb.outgoingID" class="py-name" href="#" onclick="return doclink('link-40', 'outgoingID', 'link-17');">outgoingID</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.dumpHandlers"></a><div id="XMPPDispatcher.dumpHandlers-def"><a name="L120"></a><tt class="py-lineno">120</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.dumpHandlers-toggle" onclick="return toggle('XMPPDispatcher.dumpHandlers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers">dumpHandlers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.dumpHandlers-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.dumpHandlers-expanded"><a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"><tt class="py-docstring"> Return set of user-registered callbacks in it's internal format. Used</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"><tt class="py-docstring"> within the library to carry user handlers set over Dispatcher replugins</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt> </tt>
+</div><a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.restoreHandlers"></a><div id="XMPPDispatcher.restoreHandlers-def"><a name="L127"></a><tt class="py-lineno">127</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.restoreHandlers-toggle" onclick="return toggle('XMPPDispatcher.restoreHandlers');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers">restoreHandlers</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handlers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.restoreHandlers-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.restoreHandlers-expanded"><a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> Restore user-registered callbacks structure from dump previously obtained</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> via dumpHandlers. Used within the library to carry user handlers set over</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"> Dispatcher replugins.</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt> <tt class="py-op">=</tt> <tt class="py-name">handlers</tt> </tt>
+</div><a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher._init"></a><div id="XMPPDispatcher._init-def"><a name="L135"></a><tt class="py-lineno">135</tt> <a class="py-toggle" href="#" id="XMPPDispatcher._init-toggle" onclick="return toggle('XMPPDispatcher._init');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_init">_init</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher._init-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher._init-expanded"><a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"><tt class="py-docstring"> Register default namespaces/protocols/handlers. Used internally</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: inject dependencies, do not rely that they are defined by our</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-comment"># owner</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace" class="py-name" href="#" onclick="return doclink('link-41', 'RegisterNamespace', 'link-41');">RegisterNamespace</a></tt><tt class="py-op">(</tt><tt class="py-string">'unknown'</tt><tt class="py-op">)</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace" class="py-name" href="#" onclick="return doclink('link-42', 'RegisterNamespace', 'link-41');">RegisterNamespace</a></tt><tt class="py-op">(</tt><tt id="link-43" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-43', 'NS_STREAMS', 'link-4');">NS_STREAMS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace" class="py-name" href="#" onclick="return doclink('link-44', 'RegisterNamespace', 'link-41');">RegisterNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">defaultNamespace</tt><tt class="py-op">)</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol" class="py-name" href="#" onclick="return doclink('link-45', 'RegisterProtocol', 'link-32');">RegisterProtocol</a></tt><tt class="py-op">(</tt><tt class="py-string">'iq'</tt><tt class="py-op">,</tt> <tt id="link-46" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-46', 'Iq', 'link-7');">Iq</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol" class="py-name" href="#" onclick="return doclink('link-47', 'RegisterProtocol', 'link-32');">RegisterProtocol</a></tt><tt class="py-op">(</tt><tt class="py-string">'presence'</tt><tt class="py-op">,</tt> <tt id="link-48" class="py-name"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-48', 'Presence', 'link-8');">Presence</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol" class="py-name" href="#" onclick="return doclink('link-49', 'RegisterProtocol', 'link-32');">RegisterProtocol</a></tt><tt class="py-op">(</tt><tt class="py-string">'message'</tt><tt class="py-op">,</tt> <tt id="link-50" class="py-name"><a title="nbxmpp.protocol.Message" class="py-name" href="#" onclick="return doclink('link-50', 'Message', 'link-9');">Message</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterDefaultHandler" class="py-name" href="#" onclick="return doclink('link-51', 'RegisterDefaultHandler', 'link-26');">RegisterDefaultHandler</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.returnStanzaHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#returnStanzaHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.returnStanzaHandler" class="py-name" href="#" onclick="return doclink('link-52', 'returnStanzaHandler', 'link-52');">returnStanzaHandler</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterEventHandler" class="py-name" href="#" onclick="return doclink('link-53', 'RegisterEventHandler', 'link-27');">RegisterEventHandler</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">_event_dispatcher</tt><tt class="py-op">)</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_responses</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+</div><a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.plugin"></a><div id="XMPPDispatcher.plugin-def"><a name="L151"></a><tt class="py-lineno">151</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.plugin-toggle" onclick="return toggle('XMPPDispatcher.plugin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin">plugin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.plugin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.plugin-expanded"><a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"><tt class="py-docstring"> Plug the Dispatcher instance into Client class instance and send initial</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"> stream header. Used internally</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher._init()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_init"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher._init" class="py-name" href="#" onclick="return doclink('link-54', '_init', 'link-54');">_init</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">lastErrNode</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">lastErr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">lastErrCode</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">,</tt> <tt class="py-string">'StreamInit'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.StreamInit()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamInit,Method nbxmpp.dispatcher_nb.XMPPDispatcher.StreamInit()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#StreamInit"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.StreamInit
+nbxmpp.dispatcher_nb.XMPPDispatcher.StreamInit" class="py-name" href="#" onclick="return doclink('link-55', 'StreamInit', 'link-55');">StreamInit</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.StreamInit
+nbxmpp.dispatcher_nb.XMPPDispatcher.StreamInit" class="py-name" href="#" onclick="return doclink('link-56', 'StreamInit', 'link-55');">StreamInit</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.plugout"></a><div id="XMPPDispatcher.plugout-def"><a name="L165"></a><tt class="py-lineno">165</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.plugout-toggle" onclick="return toggle('XMPPDispatcher.plugout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout">plugout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.plugout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.plugout-expanded"><a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"><tt class="py-docstring"> Prepare instance to be destructed</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#dispatch,Method nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dispatch,Method nbxmpp.simplexml.NodeBuilder.dispatch()=nbxmpp.simplexml.NodeBuilder-class.html#dispatch"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-57', 'dispatch', 'link-57');">dispatch</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.destroy()=nbxmpp.simplexml.NodeBuilder-class.html#destroy"><a title="nbxmpp.simplexml.NodeBuilder.destroy" class="py-name" href="#" onclick="return doclink('link-58', 'destroy', 'link-58');">destroy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.StreamInit"></a><div id="XMPPDispatcher.StreamInit-def"><a name="L175"></a><tt class="py-lineno">175</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.StreamInit-toggle" onclick="return toggle('XMPPDispatcher.StreamInit');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#StreamInit">StreamInit</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.StreamInit-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.StreamInit-expanded"><a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"><tt class="py-docstring"> Send an initial stream header</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt class="py-name">sendqueue</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt> <tt class="py-op">=</tt> <tt id="link-59" class="py-name"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-59', 'simplexml', 'link-0');">simplexml</a></tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Class nbxmpp.simplexml.NodeBuilder=nbxmpp.simplexml.NodeBuilder-class.html"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-60', 'NodeBuilder', 'link-60');">NodeBuilder</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-61', 'dispatch', 'link-57');">dispatch</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-62', 'dispatch', 'link-57');">dispatch</a></tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_depth</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.stream_header_received()=nbxmpp.simplexml.NodeBuilder-class.html#stream_header_received"><a title="nbxmpp.simplexml.NodeBuilder.stream_header_received" class="py-name" href="#" onclick="return doclink('link-63', 'stream_header_received', 'link-63');">stream_header_received</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher._check_stream_start()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_check_stream_start"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher._check_stream_start" class="py-name" href="#" onclick="return doclink('link-64', '_check_stream_start', 'link-64');">_check_stream_start</a></tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt> <tt class="py-op">=</tt> <tt id="link-65" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-65', 'Node', 'link-11');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'stream:stream'</tt><tt class="py-op">)</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name" targets="Method nbxmpp.simplexml.Node.setNamespace()=nbxmpp.simplexml.Node-class.html#setNamespace"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-66', 'setNamespace', 'link-66');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Namespace</tt><tt class="py-op">)</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name" targets="Method nbxmpp.simplexml.Node.setAttr()=nbxmpp.simplexml.Node-class.html#setAttr"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-67', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'version'</tt><tt class="py-op">,</tt> <tt class="py-string">'1.0'</tt><tt class="py-op">)</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-68', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'xmlns:stream'</tt><tt class="py-op">,</tt> <tt id="link-69" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-69', 'NS_STREAMS', 'link-4');">NS_STREAMS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-70', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'to'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">)</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">locale</tt><tt class="py-op">.</tt><tt class="py-name">getdefaultlocale</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-71', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'xml:lang'</tt><tt class="py-op">,</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">locale</tt><tt class="py-op">.</tt><tt class="py-name">getdefaultlocale</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'_'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-72', 'send', 'link-37');">send</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s%s&gt;"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-73" class="py-name"><a title="nbxmpp.dispatcher_nb.XML_DECLARATION" class="py-name" href="#" onclick="return doclink('link-73', 'XML_DECLARATION', 'link-18');">XML_DECLARATION</a></tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher._check_stream_start"></a><div id="XMPPDispatcher._check_stream_start-def"><a name="L195"></a><tt class="py-lineno">195</tt> <a class="py-toggle" href="#" id="XMPPDispatcher._check_stream_start-toggle" onclick="return toggle('XMPPDispatcher._check_stream_start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_check_stream_start">_check_stream_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher._check_stream_start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher._check_stream_start-expanded"><a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ns</tt> <tt class="py-op">!=</tt> <tt id="link-74" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-74', 'NS_STREAMS', 'link-4');">NS_STREAMS</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">tag</tt><tt class="py-op">!=</tt><tt class="py-string">'stream'</tt><tt class="py-op">:</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'Incorrect stream start: (%s,%s). Terminating.'</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.replace_non_character"></a><div id="XMPPDispatcher.replace_non_character-def"><a name="L200"></a><tt class="py-lineno">200</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.replace_non_character-toggle" onclick="return toggle('XMPPDispatcher.replace_non_character');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character">replace_non_character</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.replace_non_character-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.replace_non_character-expanded"><a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid_chars_re</tt><tt class="py-op">,</tt> <tt class="py-string">u'\ufffd'</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.ProcessNonBlocking"></a><div id="XMPPDispatcher.ProcessNonBlocking-def"><a name="L203"></a><tt class="py-lineno">203</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.ProcessNonBlocking-toggle" onclick="return toggle('XMPPDispatcher.ProcessNonBlocking');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking">ProcessNonBlocking</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.ProcessNonBlocking-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.ProcessNonBlocking-expanded"><a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"><tt class="py-docstring"> Check incoming stream for data waiting</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-docstring"> :param data: data received from transports/IO sockets</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"><tt class="py-docstring"> :return:</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"><tt class="py-docstring"> 1) length of processed data if some data were processed;</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"><tt class="py-docstring"> 2) '0' string if no data were processed but link is alive;</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"><tt class="py-docstring"> 3) 0 (zero) if underlying connection is closed.</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-comment"># FIXME:</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-comment"># When an error occurs we disconnect the transport directly. Client's</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-comment"># disconnect method will never be called.</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-comment"># Is this intended?</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-comment"># also look at transports start_disconnect()</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.replace_non_character()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.replace_non_character" class="py-name" href="#" onclick="return doclink('link-75', 'replace_non_character', 'link-75');">replace_non_character</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">handler</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cycleHandlers</tt><tt class="py-op">:</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_pendingExceptions</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">_pendingException</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_pendingExceptions</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">_pendingException</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">_pendingException</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">_pendingException</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">Parse</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-comment"># end stream:stream tag received</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.has_received_endtag()=nbxmpp.simplexml.NodeBuilder-class.html#has_received_endtag"><a title="nbxmpp.simplexml.NodeBuilder.has_received_endtag" class="py-name" href="#" onclick="return doclink('link-76', 'has_received_endtag', 'link-76');">has_received_endtag</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.disconnect()=nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect,Method nbxmpp.client_nb.NonBlockingClient.disconnect()=nbxmpp.client_nb.NonBlockingClient-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTCP.disconnect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTransport.disconnect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-77', 'disconnect', 'link-77');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">streamError</tt><tt class="py-op">)</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ExpatError</tt><tt class="py-op">:</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt id="link-78" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-78', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid XML received from server. Forcing disconnect.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-79', 'disconnect', 'link-77');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt id="link-80" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-80', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'ValueError: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.pollend()=nbxmpp.idlequeue.IdleCommand-class.html#pollend,Method nbxmpp.idlequeue.IdleObject.pollend()=nbxmpp.idlequeue.IdleObject-class.html#pollend,Method nbxmpp.transports_nb.NonBlockingTCP.pollend()=nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend"><a title="nbxmpp.idlequeue.IdleCommand.pollend
+nbxmpp.idlequeue.IdleObject.pollend
+nbxmpp.transports_nb.NonBlockingTCP.pollend" class="py-name" href="#" onclick="return doclink('link-81', 'pollend', 'link-81');">pollend</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_pendingExceptions</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">_pendingException</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_pendingExceptions</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">_pendingException</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">_pendingException</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">_pendingException</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'0'</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterNamespace"></a><div id="XMPPDispatcher.RegisterNamespace-def"><a name="L245"></a><tt class="py-lineno">245</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterNamespace-toggle" onclick="return toggle('XMPPDispatcher.RegisterNamespace');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace">RegisterNamespace</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">,</tt> <tt class="py-param">order</tt><tt class="py-op">=</tt><tt class="py-string">'info'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterNamespace-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterNamespace-expanded"><a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"><tt class="py-docstring"> Create internal structures for newly registered namespace</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"><tt class="py-docstring"> You can register handlers for this namespace afterwards. By default</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"><tt class="py-docstring"> one namespace is already registered</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"><tt class="py-docstring"> (jabber:client or jabber:component:accept depending on context.</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt id="link-82" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-82', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Registering namespace "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">xmlns</tt><tt class="py-op">)</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol" class="py-name" href="#" onclick="return doclink('link-83', 'RegisterProtocol', 'link-32');">RegisterProtocol</a></tt><tt class="py-op">(</tt><tt class="py-string">'unknown'</tt><tt class="py-op">,</tt> <tt id="link-84" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-84', 'Protocol', 'link-10');">Protocol</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">xmlns</tt><tt class="py-op">)</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol" class="py-name" href="#" onclick="return doclink('link-85', 'RegisterProtocol', 'link-32');">RegisterProtocol</a></tt><tt class="py-op">(</tt><tt class="py-string">'default'</tt><tt class="py-op">,</tt> <tt id="link-86" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-86', 'Protocol', 'link-10');">Protocol</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">xmlns</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterProtocol"></a><div id="XMPPDispatcher.RegisterProtocol-def"><a name="L258"></a><tt class="py-lineno">258</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterProtocol-toggle" onclick="return toggle('XMPPDispatcher.RegisterProtocol');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol">RegisterProtocol</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag_name</tt><tt class="py-op">,</tt> <tt class="py-param">Proto</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">order</tt><tt class="py-op">=</tt><tt class="py-string">'info'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterProtocol-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterProtocol-expanded"><a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"><tt class="py-docstring"> Used to declare some top-level stanza name to dispatcher</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"><tt class="py-docstring"> Needed to start registering handlers for such stanzas. Iq, message and</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"><tt class="py-docstring"> presence protocols are registered by default.</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">xmlns</tt><tt class="py-op">:</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">defaultNamespace</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt id="link-87" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-87', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Registering protocol "%s" as %s(%s)'</tt> <tt class="py-op">%</tt><tt class="py-op">(</tt><tt class="py-name">tag_name</tt><tt class="py-op">,</tt> <tt class="py-name">Proto</tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">tag_name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-name">type</tt><tt class="py-op">:</tt><tt class="py-name">Proto</tt><tt class="py-op">,</tt> <tt class="py-string">'default'</tt><tt class="py-op">:</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">}</tt> </tt>
+</div><a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterNamespaceHandler"></a><div id="XMPPDispatcher.RegisterNamespaceHandler-def"><a name="L270"></a><tt class="py-lineno">270</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterNamespaceHandler-toggle" onclick="return toggle('XMPPDispatcher.RegisterNamespaceHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler">RegisterNamespaceHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-param">makefirst</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-param">system</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterNamespaceHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterNamespaceHandler-expanded"><a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"><tt class="py-docstring"> Register handler for processing all stanzas for specified namespace</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-88', 'RegisterHandler', 'link-25');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'default'</tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt class="py-name">makefirst</tt><tt class="py-op">,</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-name">system</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterHandler"></a><div id="XMPPDispatcher.RegisterHandler-def"><a name="L278"></a><tt class="py-lineno">278</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterHandler-toggle" onclick="return toggle('XMPPDispatcher.RegisterHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler">RegisterHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-param">makefirst</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">system</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterHandler-expanded"><a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"><tt class="py-docstring"> Register user callback as stanzas handler of declared type</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"><tt class="py-docstring"> Callback arguments:</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"><tt class="py-docstring"> dispatcher instance (for replying), incoming return of previous handlers.</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"><tt class="py-docstring"> The callback must raise xmpp.NodeProcessed just before return if it wants</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"><tt class="py-docstring"> to prevent other callbacks to be called with the same stanza as argument</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"><tt class="py-docstring"> _and_, more importantly library from returning stanza to sender with error set.</tt> </tt>
+<a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"><tt class="py-docstring"> :param name: name of stanza. F.e. "iq".</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"><tt class="py-docstring"> :param handler: user callback.</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"><tt class="py-docstring"> :param typ: value of stanza's "type" attribute. If not specified any</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"><tt class="py-docstring"> value will match</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"><tt class="py-docstring"> :param ns: namespace of child that stanza must contain.</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"><tt class="py-docstring"> :param makefirst: insert handler in the beginning of handlers list instead</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"><tt class="py-docstring"> of adding it to the end. Note that more common handlers i.e. w/o "typ"</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"><tt class="py-docstring"> and " will be called first nevertheless.</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"><tt class="py-docstring"> :param system: call handler even if NodeProcessed Exception were raised</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"><tt class="py-docstring"> already.</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">xmlns</tt><tt class="py-op">:</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">defaultNamespace</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt id="link-89" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-89', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Registering handler %s for "%s" type-&gt;%s ns-&gt;%s(%s)'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">handler</tt><tt class="py-op">,</tt> <tt id="link-90" class="py-name" targets="Variable nbxmpp.name=nbxmpp-module.html#name,Variable nbxmpp.protocol.name=nbxmpp.protocol-module.html#name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-90', 'name', 'link-90');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">typ</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">ns</tt><tt class="py-op">:</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-string">'default'</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xmlns</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">:</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace" class="py-name" href="#" onclick="return doclink('link-91', 'RegisterNamespace', 'link-41');">RegisterNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt class="py-string">'warn'</tt><tt class="py-op">)</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-92" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-92', 'name', 'link-90');">name</a></tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterProtocol" class="py-name" href="#" onclick="return doclink('link-93', 'RegisterProtocol', 'link-32');">RegisterProtocol</a></tt><tt class="py-op">(</tt><tt id="link-94" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-94', 'name', 'link-90');">name</a></tt><tt class="py-op">,</tt> <tt id="link-95" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-95', 'Protocol', 'link-10');">Protocol</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt class="py-string">'warn'</tt><tt class="py-op">)</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">ns</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-96" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-96', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-97" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-97', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">ns</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">makefirst</tt><tt class="py-op">:</tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-98" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-98', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">ns</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">insert</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'func'</tt><tt class="py-op">:</tt><tt class="py-name">handler</tt><tt class="py-op">,</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-string">'system'</tt><tt class="py-op">:</tt><tt class="py-name">system</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-99" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-99', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">ns</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">{</tt><tt class="py-string">'func'</tt><tt class="py-op">:</tt><tt class="py-name">handler</tt><tt class="py-op">,</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-string">'system'</tt><tt class="py-op">:</tt><tt class="py-name">system</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterHandlerOnce"></a><div id="XMPPDispatcher.RegisterHandlerOnce-def"><a name="L319"></a><tt class="py-lineno">319</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterHandlerOnce-toggle" onclick="return toggle('XMPPDispatcher.RegisterHandlerOnce');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce">RegisterHandlerOnce</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-param">makefirst</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-param">system</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterHandlerOnce-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterHandlerOnce-expanded"><a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"><tt class="py-docstring"> Unregister handler after first call (not implemented yet)</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-comment"># FIXME Drop or implement</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">xmlns</tt><tt class="py-op">:</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">defaultNamespace</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-100', 'RegisterHandler', 'link-25');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt id="link-101" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-101', 'name', 'link-90');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">handler</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt class="py-name">makefirst</tt><tt class="py-op">,</tt> <tt class="py-name">system</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.UnregisterHandler"></a><div id="XMPPDispatcher.UnregisterHandler-def"><a name="L329"></a><tt class="py-lineno">329</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.UnregisterHandler-toggle" onclick="return toggle('XMPPDispatcher.UnregisterHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler">UnregisterHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.UnregisterHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.UnregisterHandler-expanded"><a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"><tt class="py-docstring"> Unregister handler. "typ" and "ns" must be specified exactly the same as</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"><tt class="py-docstring"> with registering.</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">xmlns</tt><tt class="py-op">:</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">defaultNamespace</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">typ</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">ns</tt><tt class="py-op">:</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-string">'default'</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xmlns</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">:</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-102" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-102', 'name', 'link-90');">name</a></tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">ns</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-103" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-103', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">pack</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-104" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-104', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">ns</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pack</tt><tt class="py-op">[</tt><tt class="py-string">'func'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">handler</tt><tt class="py-op">:</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-105" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-105', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">ns</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">pack</tt><tt class="py-op">)</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterDefaultHandler"></a><div id="XMPPDispatcher.RegisterDefaultHandler-def"><a name="L351"></a><tt class="py-lineno">351</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterDefaultHandler-toggle" onclick="return toggle('XMPPDispatcher.RegisterDefaultHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterDefaultHandler">RegisterDefaultHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterDefaultHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterDefaultHandler-expanded"><a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"><tt class="py-docstring"> Specify the handler that will be used if no NodeProcessed exception were</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"><tt class="py-docstring"> raised. This is returnStanzaHandler by default.</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_defaultHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">handler</tt> </tt>
+</div><a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterEventHandler"></a><div id="XMPPDispatcher.RegisterEventHandler-def"><a name="L358"></a><tt class="py-lineno">358</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterEventHandler-toggle" onclick="return toggle('XMPPDispatcher.RegisterEventHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterEventHandler">RegisterEventHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterEventHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterEventHandler-expanded"><a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"><tt class="py-docstring"> Register handler that will process events. F.e. "FILERECEIVED" event. See</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"><tt class="py-docstring"> common/connection: _event_dispatcher()</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_eventHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">handler</tt> </tt>
+</div><a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.returnStanzaHandler"></a><div id="XMPPDispatcher.returnStanzaHandler-def"><a name="L365"></a><tt class="py-lineno">365</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.returnStanzaHandler-toggle" onclick="return toggle('XMPPDispatcher.returnStanzaHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#returnStanzaHandler">returnStanzaHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">conn</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.returnStanzaHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.returnStanzaHandler-expanded"><a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"><tt class="py-docstring"> Return stanza back to the sender with &lt;feature-not-implemented/&gt; error</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"><tt class="py-docstring"> set</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name" targets="Method nbxmpp.protocol.DataField.getType()=nbxmpp.protocol.DataField-class.html#getType,Method nbxmpp.protocol.DataForm.getType()=nbxmpp.protocol.DataForm-class.html#getType,Method nbxmpp.protocol.Protocol.getType()=nbxmpp.protocol.Protocol-class.html#getType"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-106', 'getType', 'link-106');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt class="py-string">'set'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-107', 'send', 'link-37');">send</a></tt><tt class="py-op">(</tt><tt id="link-108" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-108', 'Error', 'link-12');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt id="link-109" class="py-name"><a title="nbxmpp.ERR_FEATURE_NOT_IMPLEMENTED
+nbxmpp.protocol.ERR_FEATURE_NOT_IMPLEMENTED" class="py-name" href="#" onclick="return doclink('link-109', 'ERR_FEATURE_NOT_IMPLEMENTED', 'link-13');">ERR_FEATURE_NOT_IMPLEMENTED</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.RegisterCycleHandler"></a><div id="XMPPDispatcher.RegisterCycleHandler-def"><a name="L373"></a><tt class="py-lineno">373</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.RegisterCycleHandler-toggle" onclick="return toggle('XMPPDispatcher.RegisterCycleHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterCycleHandler">RegisterCycleHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.RegisterCycleHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.RegisterCycleHandler-expanded"><a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"><tt class="py-docstring"> Register handler that will be called on every Dispatcher.Process() call</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">handler</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cycleHandlers</tt><tt class="py-op">:</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cycleHandlers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.UnregisterCycleHandler"></a><div id="XMPPDispatcher.UnregisterCycleHandler-def"><a name="L380"></a><tt class="py-lineno">380</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.UnregisterCycleHandler-toggle" onclick="return toggle('XMPPDispatcher.UnregisterCycleHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterCycleHandler">UnregisterCycleHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.UnregisterCycleHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.UnregisterCycleHandler-expanded"><a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"><tt class="py-docstring"> Unregister handler that will is called on every Dispatcher.Process() call</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">handler</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cycleHandlers</tt><tt class="py-op">:</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cycleHandlers</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">handler</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.Event"></a><div id="XMPPDispatcher.Event-def"><a name="L387"></a><tt class="py-lineno">387</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.Event-toggle" onclick="return toggle('XMPPDispatcher.Event');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event">Event</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">realm</tt><tt class="py-op">,</tt> <tt class="py-param">event</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.Event-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.Event-expanded"><a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"><tt class="py-docstring"> Raise some event</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"><tt class="py-docstring"> :param realm: scope of event. Usually a namespace.</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"><tt class="py-docstring"> :param event: the event itself. F.e. "SUCCESSFUL SEND".</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"><tt class="py-docstring"> :param data: data that comes along with event. Depends on event.</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_eventHandler</tt><tt class="py-op">:</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_eventHandler</tt><tt class="py-op">(</tt><tt class="py-name">realm</tt><tt class="py-op">,</tt> <tt class="py-name">event</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt id="link-110" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-110', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Received unhandled event: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">event</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.dispatch"></a><div id="XMPPDispatcher.dispatch-def"><a name="L400"></a><tt class="py-lineno">400</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.dispatch-toggle" onclick="return toggle('XMPPDispatcher.dispatch');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dispatch">dispatch</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">,</tt> <tt class="py-param">session</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">direct</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.dispatch-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.dispatch-expanded"><a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"><tt class="py-docstring"> Main procedure that performs XMPP stanza recognition and calling</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"><tt class="py-docstring"> apppropriate handlers for it. Called by simplexml</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: Where do we set session and direct. Why? What are those intended</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-comment"># to do?</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-comment">#log.info('dispatch called: stanza = %s, session = %s, direct= %s'</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-comment"># % (stanza, session, direct))</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">session</tt><tt class="py-op">:</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-name">session</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-name">session</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt id="link-111" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-111', 'name', 'link-90');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.getName()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getName,Method nbxmpp.simplexml.Node.getName()=nbxmpp.simplexml.Node-class.html#getName"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-112', 'getName', 'link-112');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-113" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-113', 'name', 'link-90');">name</a></tt> <tt class="py-op">==</tt> <tt class="py-string">'features'</tt><tt class="py-op">:</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">got_features</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-name">session</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name" targets="Method nbxmpp.simplexml.Node.getNamespace()=nbxmpp.simplexml.Node-class.html#getNamespace"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-114', 'getNamespace', 'link-114');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-comment"># log.info('in dispatch, getting ns for %s, and the ns is %s'</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-comment"># % (stanza, xmlns))</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xmlns</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">:</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt id="link-115" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-115', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Unknown namespace: "</tt> <tt class="py-op">+</tt> <tt class="py-name">xmlns</tt><tt class="py-op">)</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt> <tt class="py-op">=</tt> <tt class="py-string">'unknown'</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-comment"># features stanza has been handled before</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-116" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-116', 'name', 'link-90');">name</a></tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-117" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-117', 'name', 'link-90');">name</a></tt> <tt class="py-op">!=</tt> <tt class="py-string">'features'</tt><tt class="py-op">:</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt id="link-118" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-118', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Unknown stanza: "</tt> <tt class="py-op">+</tt> <tt id="link-119" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-119', 'name', 'link-90');">name</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt id="link-120" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-120', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Got %s/%s stanza"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt id="link-121" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-121', 'name', 'link-90');">name</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt id="link-122" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-122', 'name', 'link-90');">name</a></tt><tt class="py-op">=</tt><tt class="py-string">'unknown'</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt id="link-123" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-123', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Got %s/%s stanza"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt id="link-124" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-124', 'name', 'link-90');">name</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'Node'</tt><tt class="py-op">:</tt> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: this cannot work</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-125" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-125', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">type</tt><tt class="py-op">]</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"> <tt class="py-name">typ</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-126', 'getType', 'link-106');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-name">typ</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt class="py-name">props</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name" targets="Method nbxmpp.protocol.Protocol.getProperties()=nbxmpp.protocol.Protocol-class.html#getProperties"><a title="nbxmpp.protocol.Protocol.getProperties" class="py-name" href="#" onclick="return doclink('link-127', 'getProperties', 'link-127');">getProperties</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-name">ID</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-128" class="py-name" targets="Method nbxmpp.protocol.Protocol.getID()=nbxmpp.protocol.Protocol-class.html#getID"><a title="nbxmpp.protocol.Protocol.getID" class="py-name" href="#" onclick="return doclink('link-128', 'getID', 'link-128');">getID</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-comment"># If server supports stream management</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">enabled</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-129" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-129', 'getName', 'link-112');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'r'</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-130', 'getName', 'link-112');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'a'</tt> <tt class="py-keyword">and</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-131', 'getName', 'link-112');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'enabled'</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-132', 'getName', 'link-112');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'resumed'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-comment"># increments the number of stanzas that has been handled</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">in_h</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">in_h</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-name">list_</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'default'</tt><tt class="py-op">]</tt> <tt class="py-comment"># we will use all handlers:</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-133" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-133', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">)</tt> <tt class="py-comment"># from very common...</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt class="py-name">props</tt><tt class="py-op">:</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-134" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-134', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt> <tt class="py-keyword">and</tt> <tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">prop</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-135" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-135', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">+</tt><tt class="py-name">prop</tt><tt class="py-op">)</tt> <tt class="py-comment"># ...to very particular</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-name">chain</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'default'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'default'</tt><tt class="py-op">]</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">list_</tt><tt class="py-op">:</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt><tt class="py-op">:</tt> </tt>
+<a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-name">chain</tt> <tt class="py-op">=</tt> <tt class="py-name">chain</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">handlers</tt><tt class="py-op">[</tt><tt class="py-name">xmlns</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt id="link-136" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-136', 'name', 'link-90');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ID</tt> <tt class="py-keyword">in</tt> <tt class="py-name">session</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">:</tt> </tt>
+<a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> <tt class="py-name">user</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">session</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">[</tt><tt class="py-name">ID</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> <tt class="py-name">cb</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt> <tt class="py-op">=</tt> <tt class="py-name">session</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">[</tt><tt class="py-name">ID</tt><tt class="py-op">]</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt id="link-137" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-137', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Expected stanza arrived. Callback %s(%s) found!"</tt> <tt class="py-op">%</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">cb</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-name">cb</tt><tt class="py-op">(</tt><tt class="py-name">session</tt><tt class="py-op">,</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt><tt class="py-op">**</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-op">!=</tt> <tt class="py-string">'NodeProcessed'</tt><tt class="py-op">:</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
+<a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L478"></a><tt class="py-lineno">478</tt> <tt class="py-line"> <tt id="link-138" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-138', 'log', 'link-15');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Expected stanza arrived!"</tt><tt class="py-op">)</tt> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-name">session</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">[</tt><tt class="py-name">ID</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt class="py-name">user</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">handler</tt> <tt class="py-keyword">in</tt> <tt class="py-name">chain</tt><tt class="py-op">:</tt> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">user</tt> <tt class="py-keyword">or</tt> <tt class="py-name">handler</tt><tt class="py-op">[</tt><tt class="py-string">'system'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-name">handler</tt><tt class="py-op">[</tt><tt class="py-string">'func'</tt><tt class="py-op">]</tt><tt class="py-op">(</tt><tt class="py-name">session</tt><tt class="py-op">,</tt> <tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-op">!=</tt> <tt class="py-string">'NodeProcessed'</tt><tt class="py-op">:</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_pendingExceptions</tt><tt class="py-op">.</tt><tt class="py-name">insert</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exc_info</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-name">user</tt><tt class="py-op">=</tt><tt class="py-number">0</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">user</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_defaultHandler</tt><tt class="py-op">:</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_defaultHandler</tt><tt class="py-op">(</tt><tt class="py-name">session</tt><tt class="py-op">,</tt> <tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher._WaitForData"></a><div id="XMPPDispatcher._WaitForData-def"><a name="L494"></a><tt class="py-lineno">494</tt> <a class="py-toggle" href="#" id="XMPPDispatcher._WaitForData-toggle" onclick="return toggle('XMPPDispatcher._WaitForData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_WaitForData">_WaitForData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher._WaitForData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher._WaitForData-expanded"><a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"><tt class="py-docstring"> Internal wrapper around ProcessNonBlocking. Will check for</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> <tt class="py-name">res</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking,Method nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-139', 'ProcessNonBlocking', 'link-139');">ProcessNonBlocking</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-comment"># 0 result indicates that we have closed the connection, e.g.</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-comment"># we have released dispatcher, so self._owner has no methods</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">res</tt><tt class="py-op">:</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">_id</tt><tt class="py-op">,</tt> <tt class="py-name">_iq</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">_iq</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-comment"># If the expected Stanza would have arrived, ProcessNonBlocking</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-comment"># would have placed the reply stanza in there</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_responses</tt><tt class="py-op">:</tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.onreceive()=nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive,Method nbxmpp.transports_nb.NonBlockingTransport.onreceive()=nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-140', 'onreceive', 'link-140');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_responses</tt><tt class="py-op">[</tt><tt class="py-name">_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_responses</tt><tt class="py-op">[</tt><tt class="py-name">_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">args</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt class="py-name">resp</tt><tt class="py-op">(</tt><tt class="py-name">_iq</tt><tt class="py-op">)</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> <tt class="py-name">resp</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">,</tt> <tt class="py-name">_iq</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">[</tt><tt class="py-name">_id</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.SendAndWaitForResponse"></a><div id="XMPPDispatcher.SendAndWaitForResponse-def"><a name="L521"></a><tt class="py-lineno">521</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.SendAndWaitForResponse-toggle" onclick="return toggle('XMPPDispatcher.SendAndWaitForResponse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse">SendAndWaitForResponse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">func</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">args</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.SendAndWaitForResponse-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.SendAndWaitForResponse-expanded"><a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"><tt class="py-docstring"> Send stanza and wait for recipient's response to it. Will call transports</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"><tt class="py-docstring"> on_timeout callback if response is not retrieved in time</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"><tt class="py-docstring"> Be aware: Only timeout of latest call of SendAndWait is active.</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt id="link-141" class="py-name"><a title="nbxmpp.dispatcher_nb.DEFAULT_TIMEOUT_SECONDS" class="py-name" href="#" onclick="return doclink('link-141', 'DEFAULT_TIMEOUT_SECONDS', 'link-16');">DEFAULT_TIMEOUT_SECONDS</a></tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-name">_waitid</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-142', 'send', 'link-37');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">func</tt><tt class="py-op">:</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_responses</tt><tt class="py-op">[</tt><tt class="py-name">_waitid</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">func</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.set_timeout()=nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout,Method nbxmpp.transports_nb.NonBlockingTCP.set_timeout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout,Method nbxmpp.transports_nb.NonBlockingTransport.set_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout"><a title="nbxmpp.bosh.NonBlockingBOSH.set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout" class="py-name" href="#" onclick="return doclink('link-143', 'set_timeout', 'link-143');">set_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-144', 'onreceive', 'link-140');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher._WaitForData()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_WaitForData"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher._WaitForData" class="py-name" href="#" onclick="return doclink('link-145', '_WaitForData', 'link-145');">_WaitForData</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_expected</tt><tt class="py-op">[</tt><tt class="py-name">_waitid</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">_waitid</tt> </tt>
+</div><a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.SendAndCallForResponse"></a><div id="XMPPDispatcher.SendAndCallForResponse-def"><a name="L539"></a><tt class="py-lineno">539</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.SendAndCallForResponse-toggle" onclick="return toggle('XMPPDispatcher.SendAndCallForResponse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse">SendAndCallForResponse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">,</tt> <tt class="py-param">func</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">args</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.SendAndCallForResponse-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.SendAndCallForResponse-expanded"><a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"><tt class="py-docstring"> Put stanza on the wire and call back when recipient replies. Additional</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"><tt class="py-docstring"> callback arguments can be specified in args</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndWaitForResponse" class="py-name" href="#" onclick="return doclink('link-146', 'SendAndWaitForResponse', 'link-33');">SendAndWaitForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">func</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> </tt>
+<a name="XMPPDispatcher.send"></a><div id="XMPPDispatcher.send-def"><a name="L546"></a><tt class="py-lineno">546</tt> <a class="py-toggle" href="#" id="XMPPDispatcher.send-toggle" onclick="return toggle('XMPPDispatcher.send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send">send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMPPDispatcher.send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMPPDispatcher.send-expanded"><a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"><tt class="py-docstring"> Wrap transports send method when plugged into NonBlockingClient. Makes</tt> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"><tt class="py-docstring"> sure stanzas get ID and from tag.</tt> </tt>
+<a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> <tt class="py-name">ID</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt id="link-147" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-147', 'Protocol', 'link-10');">Protocol</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> <tt class="py-name">ID</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="nbxmpp.protocol.Protocol.getID" class="py-name" href="#" onclick="return doclink('link-148', 'getID', 'link-128');">getID</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ID</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name" targets="Method nbxmpp.protocol.Protocol.setID()=nbxmpp.protocol.Protocol-class.html#setID"><a title="nbxmpp.protocol.Protocol.setID" class="py-name" href="#" onclick="return doclink('link-149', 'setID', 'link-149');">setID</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID" class="py-name" href="#" onclick="return doclink('link-150', 'getAnID', 'link-35');">getAnID</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-name">ID</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="nbxmpp.protocol.Protocol.getID" class="py-name" href="#" onclick="return doclink('link-151', 'getID', 'link-128');">getID</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_registered_name</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttr()=nbxmpp.simplexml.Node-class.html#getAttr"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-152', 'getAttr', 'link-152');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'from'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-153', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'from'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_registered_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"> <tt class="py-comment"># If no ID then it is a whitespace</tt> </tt>
+<a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">enabled</tt> <tt class="py-keyword">and</tt> <tt class="py-name">ID</tt><tt class="py-op">:</tt> </tt>
+<a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+<a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">out_h</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">out_h</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt class="py-name">max_queue</tt><tt class="py-op">:</tt> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sm</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name" targets="Method nbxmpp.smacks.Smacks.request_ack()=nbxmpp.smacks.Smacks-class.html#request_ack"><a title="nbxmpp.smacks.Smacks.request_ack" class="py-name" href="#" onclick="return doclink('link-154', 'request_ack', 'link-154');">request_ack</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-155', 'send', 'link-37');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">now</tt><tt class="py-op">)</tt> </tt>
+<a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ID</tt> </tt>
+</div></div><a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> </tt>
+<a name="BOSHDispatcher"></a><div id="BOSHDispatcher-def"><a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> </tt>
+<a name="L572"></a><tt class="py-lineno">572</tt> <a class="py-toggle" href="#" id="BOSHDispatcher-toggle" onclick="return toggle('BOSHDispatcher');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html">BOSHDispatcher</a><tt class="py-op">(</tt><tt class="py-base-class">XMPPDispatcher</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHDispatcher-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BOSHDispatcher-expanded"><a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> </tt>
+<a name="BOSHDispatcher.PlugIn"></a><div id="BOSHDispatcher.PlugIn-def"><a name="L574"></a><tt class="py-lineno">574</tt> <a class="py-toggle" href="#" id="BOSHDispatcher.PlugIn-toggle" onclick="return toggle('BOSHDispatcher.PlugIn');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn">PlugIn</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">,</tt> <tt class="py-param">after_SASL</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">old_features</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHDispatcher.PlugIn-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="BOSHDispatcher.PlugIn-expanded"><a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">old_features</tt> <tt class="py-op">=</tt> <tt class="py-name">old_features</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">after_SASL</tt> <tt class="py-op">=</tt> <tt class="py-name">after_SASL</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"> <tt id="link-156" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher" class="py-name" href="#" onclick="return doclink('link-156', 'XMPPDispatcher', 'link-19');">XMPPDispatcher</a></tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-157', 'PlugIn', 'link-2');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">owner</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> </tt>
+<a name="BOSHDispatcher.StreamInit"></a><div id="BOSHDispatcher.StreamInit-def"><a name="L579"></a><tt class="py-lineno">579</tt> <a class="py-toggle" href="#" id="BOSHDispatcher.StreamInit-toggle" onclick="return toggle('BOSHDispatcher.StreamInit');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamInit">StreamInit</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHDispatcher.StreamInit-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="BOSHDispatcher.StreamInit-expanded"><a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"><tt class="py-docstring"> Send an initial stream header</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt> <tt class="py-op">=</tt> <tt id="link-158" class="py-name"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-158', 'simplexml', 'link-0');">simplexml</a></tt><tt class="py-op">.</tt><tt id="link-159" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-159', 'NodeBuilder', 'link-60');">NodeBuilder</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-160', 'dispatch', 'link-57');">dispatch</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-161', 'dispatch', 'link-57');">dispatch</a></tt> </tt>
+<a name="L585"></a><tt class="py-lineno">585</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_depth</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt>
+<a name="L586"></a><tt class="py-lineno">586</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.stream_header_received" class="py-name" href="#" onclick="return doclink('link-162', 'stream_header_received', 'link-63');">stream_header_received</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher._check_stream_start" class="py-name" href="#" onclick="return doclink('link-163', '_check_stream_start', 'link-64');">_check_stream_start</a></tt> </tt>
+<a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">old_features</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt> <tt class="py-op">=</tt> <tt id="link-164" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-164', 'Node', 'link-11');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'stream:stream'</tt><tt class="py-op">)</tt> </tt>
+<a name="L590"></a><tt class="py-lineno">590</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-165', 'setNamespace', 'link-66');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Namespace</tt><tt class="py-op">)</tt> </tt>
+<a name="L591"></a><tt class="py-lineno">591</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-166', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'version'</tt><tt class="py-op">,</tt> <tt class="py-string">'1.0'</tt><tt class="py-op">)</tt> </tt>
+<a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-167', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'xmlns:stream'</tt><tt class="py-op">,</tt> <tt id="link-168" class="py-name"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-168', 'NS_STREAMS', 'link-4');">NS_STREAMS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-169" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-169', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'to'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">)</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">locale</tt><tt class="py-op">.</tt><tt class="py-name">getdefaultlocale</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-170', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'xml:lang'</tt><tt class="py-op">,</tt> </tt>
+<a name="L596"></a><tt class="py-lineno">596</tt> <tt class="py-line"> <tt class="py-name">locale</tt><tt class="py-op">.</tt><tt class="py-name">getdefaultlocale</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'_'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> </tt>
+<a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">restart</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L599"></a><tt class="py-lineno">599</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send_init()=nbxmpp.bosh.NonBlockingBOSH-class.html#send_init"><a title="nbxmpp.bosh.NonBlockingBOSH.send_init" class="py-name" href="#" onclick="return doclink('link-171', 'send_init', 'link-171');">send_init</a></tt><tt class="py-op">(</tt><tt class="py-name">after_SASL</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">after_SASL</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L600"></a><tt class="py-lineno">600</tt> <tt class="py-line"> </tt>
+<a name="BOSHDispatcher.StreamTerminate"></a><div id="BOSHDispatcher.StreamTerminate-def"><a name="L601"></a><tt class="py-lineno">601</tt> <a class="py-toggle" href="#" id="BOSHDispatcher.StreamTerminate-toggle" onclick="return toggle('BOSHDispatcher.StreamTerminate');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamTerminate">StreamTerminate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHDispatcher.StreamTerminate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="BOSHDispatcher.StreamTerminate-expanded"><a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"><tt class="py-docstring"> Send a stream terminator</tt> </tt>
+<a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L605"></a><tt class="py-lineno">605</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt class="py-name">send_terminator</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"> </tt>
+<a name="BOSHDispatcher.ProcessNonBlocking"></a><div id="BOSHDispatcher.ProcessNonBlocking-def"><a name="L607"></a><tt class="py-lineno">607</tt> <a class="py-toggle" href="#" id="BOSHDispatcher.ProcessNonBlocking-toggle" onclick="return toggle('BOSHDispatcher.ProcessNonBlocking');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking">ProcessNonBlocking</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHDispatcher.ProcessNonBlocking-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="BOSHDispatcher.ProcessNonBlocking-expanded"><a name="L608"></a><tt class="py-lineno">608</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">restart</tt><tt class="py-op">:</tt> </tt>
+<a name="L609"></a><tt class="py-lineno">609</tt> <tt class="py-line"> <tt class="py-name">fromstream</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_metastream</tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt> <tt class="py-line"> <tt class="py-name">fromstream</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-172', 'setAttr', 'link-67');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'from'</tt><tt class="py-op">,</tt> <tt class="py-name">fromstream</tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-173', 'getAttr', 'link-152');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'to'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"> <tt class="py-name">fromstream</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name" targets="Method nbxmpp.simplexml.Node.delAttr()=nbxmpp.simplexml.Node-class.html#delAttr"><a title="nbxmpp.simplexml.Node.delAttr" class="py-name" href="#" onclick="return doclink('link-174', 'delAttr', 'link-174');">delAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'to'</tt><tt class="py-op">)</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s%s&gt;%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-175" class="py-name"><a title="nbxmpp.dispatcher_nb.XML_DECLARATION" class="py-name" href="#" onclick="return doclink('link-175', 'XML_DECLARATION', 'link-18');">XML_DECLARATION</a></tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">fromstream</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">restart</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L614"></a><tt class="py-lineno">614</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-176" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher" class="py-name" href="#" onclick="return doclink('link-176', 'XMPPDispatcher', 'link-19');">XMPPDispatcher</a></tt><tt class="py-op">.</tt><tt id="link-177" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-177', 'ProcessNonBlocking', 'link-139');">ProcessNonBlocking</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> </tt>
+<a name="BOSHDispatcher.dispatch"></a><div id="BOSHDispatcher.dispatch-def"><a name="L616"></a><tt class="py-lineno">616</tt> <a class="py-toggle" href="#" id="BOSHDispatcher.dispatch-toggle" onclick="return toggle('BOSHDispatcher.dispatch');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#dispatch">dispatch</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">,</tt> <tt class="py-param">session</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">direct</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHDispatcher.dispatch-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="BOSHDispatcher.dispatch-expanded"><a name="L617"></a><tt class="py-lineno">617</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-178', 'getName', 'link-112');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">and</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-179', 'getNamespace', 'link-114');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-180" class="py-name"><a title="nbxmpp.protocol.NS_HTTP_BIND" class="py-name" href="#" onclick="return doclink('link-180', 'NS_HTTP_BIND', 'link-6');">NS_HTTP_BIND</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L618"></a><tt class="py-lineno">618</tt> <tt class="py-line"> </tt>
+<a name="L619"></a><tt class="py-lineno">619</tt> <tt class="py-line"> <tt class="py-name">stanza_attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttrs()=nbxmpp.simplexml.Node-class.html#getAttrs"><a title="nbxmpp.simplexml.Node.getAttrs" class="py-name" href="#" onclick="return doclink('link-181', 'getAttrs', 'link-181');">getAttrs</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L620"></a><tt class="py-lineno">620</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'authid'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L621"></a><tt class="py-lineno">621</tt> <tt class="py-line"> <tt class="py-comment"># should be only in init response</tt> </tt>
+<a name="L622"></a><tt class="py-lineno">622</tt> <tt class="py-line"> <tt class="py-comment"># auth module expects id of stream in document attributes</tt> </tt>
+<a name="L623"></a><tt class="py-lineno">623</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Stream</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'id'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza_attrs</tt><tt class="py-op">[</tt><tt class="py-string">'authid'</tt><tt class="py-op">]</tt> </tt>
+<a name="L624"></a><tt class="py-lineno">624</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.handle_body_attrs()=nbxmpp.bosh.NonBlockingBOSH-class.html#handle_body_attrs"><a title="nbxmpp.bosh.NonBlockingBOSH.handle_body_attrs" class="py-name" href="#" onclick="return doclink('link-182', 'handle_body_attrs', 'link-182');">handle_body_attrs</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza_attrs</tt><tt class="py-op">)</tt> </tt>
+<a name="L625"></a><tt class="py-lineno">625</tt> <tt class="py-line"> </tt>
+<a name="L626"></a><tt class="py-lineno">626</tt> <tt class="py-line"> <tt class="py-name">children</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name" targets="Method nbxmpp.simplexml.Node.getChildren()=nbxmpp.simplexml.Node-class.html#getChildren"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-183', 'getChildren', 'link-183');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L627"></a><tt class="py-lineno">627</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L628"></a><tt class="py-lineno">628</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child</tt> <tt class="py-keyword">in</tt> <tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L629"></a><tt class="py-lineno">629</tt> <tt class="py-line"> <tt class="py-comment"># if child doesn't have any ns specified, simplexml (or expat)</tt> </tt>
+<a name="L630"></a><tt class="py-lineno">630</tt> <tt class="py-line"> <tt class="py-comment"># thinks it's of parent's (BOSH body) namespace, so we have to</tt> </tt>
+<a name="L631"></a><tt class="py-lineno">631</tt> <tt class="py-line"> <tt class="py-comment"># rewrite it to jabber:client</tt> </tt>
+<a name="L632"></a><tt class="py-lineno">632</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-184', 'getNamespace', 'link-114');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-185" class="py-name"><a title="nbxmpp.protocol.NS_HTTP_BIND" class="py-name" href="#" onclick="return doclink('link-185', 'NS_HTTP_BIND', 'link-6');">NS_HTTP_BIND</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L633"></a><tt class="py-lineno">633</tt> <tt class="py-line"> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-186', 'setNamespace', 'link-66');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">defaultNamespace</tt><tt class="py-op">)</tt> </tt>
+<a name="L634"></a><tt class="py-lineno">634</tt> <tt class="py-line"> <tt id="link-187" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher" class="py-name" href="#" onclick="return doclink('link-187', 'XMPPDispatcher', 'link-19');">XMPPDispatcher</a></tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-188', 'dispatch', 'link-57');">dispatch</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">child</tt><tt class="py-op">,</tt> <tt class="py-name">session</tt><tt class="py-op">,</tt> <tt class="py-name">direct</tt><tt class="py-op">)</tt> </tt>
+<a name="L635"></a><tt class="py-lineno">635</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L636"></a><tt class="py-lineno">636</tt> <tt class="py-line"> <tt id="link-189" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher" class="py-name" href="#" onclick="return doclink('link-189', 'XMPPDispatcher', 'link-19');">XMPPDispatcher</a></tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-190', 'dispatch', 'link-57');">dispatch</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">session</tt><tt class="py-op">,</tt> <tt class="py-name">direct</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L637"></a><tt class="py-lineno">637</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.dispatcher_nb.BOSHDispatcher-class.html b/doc/apidocs/nbxmpp.dispatcher_nb.BOSHDispatcher-class.html
new file mode 100644
index 0000000..f10a26f
--- /dev/null
+++ b/doc/apidocs/nbxmpp.dispatcher_nb.BOSHDispatcher-class.html
@@ -0,0 +1,469 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.dispatcher_nb.BOSHDispatcher</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.dispatcher_nb-module.html">Module&nbsp;dispatcher_nb</a> ::
+ Class&nbsp;BOSHDispatcher
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class BOSHDispatcher</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_d" name="uml_class_diagram_for_nbxmpp_d">
+<area shape="rect" id="node9" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="141,473,519,492"/>
+<area shape="rect" id="node9" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamInit" title="Send an initial stream header" alt="" coords="141,492,519,511"/>
+<area shape="rect" id="node9" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamTerminate" title="Send a stream terminator" alt="" coords="141,511,519,529"/>
+<area shape="rect" id="node9" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking" title="Check incoming stream for data waiting" alt="" coords="141,529,519,548"/>
+<area shape="rect" id="node9" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#dispatch" title="Main procedure that performs XMPP stanza recognition and calling apppropriate handlers for it. Called by simplexml" alt="" coords="141,548,519,567"/>
+<area shape="rect" id="node1" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html" title="nbxmpp.dispatcher_nb.BOSHDispatcher" alt="" coords="129,441,529,573"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__" title="nbxmpp.dispatcher_nb.XMPPDispatcher.__init__" alt="" coords="17,135,644,153"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID" title="nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID" alt="" coords="17,153,644,172"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers" title="Return set of user&#45;registered callbacks in it&#39;s internal format. Used within the library to carry user handlers set over Dispatcher replugins" alt="" coords="17,172,644,191"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers" title="Restore user&#45;registered callbacks structure from dump previously obtained via dumpHandlers. Used within the library to carry user handlers set over Dispatcher replugins." alt="" coords="17,191,644,209"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin" title="Plug the Dispatcher instance into Client class instance and send initial stream header. Used internally" alt="" coords="17,209,644,228"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout" title="Prepare instance to be destructed" alt="" coords="17,228,644,247"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character" title="nbxmpp.dispatcher_nb.XMPPDispatcher.replace_non_character" alt="" coords="17,247,644,265"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace" title="Create internal structures for newly registered namespace" alt="" coords="17,265,644,284"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol" title="Used to declare some top&#45;level stanza name to dispatcher" alt="" coords="17,284,644,303"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler" title="Register handler for processing all stanzas for specified namespace" alt="" coords="17,303,644,321"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler" title="Register user callback as stanzas handler of declared type" alt="" coords="17,321,644,340"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce" title="Unregister handler after first call (not implemented yet)" alt="" coords="17,340,644,359"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler" title="Unregister handler. &quot;typ&quot; and &quot;ns&quot; must be specified exactly the same as with registering." alt="" coords="17,359,644,377"/>
+<area shape="rect" id="node10" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send" title="Wrap transports send method when plugged into NonBlockingClient. Makes sure stanzas get ID and from tag." alt="" coords="17,396,644,415"/>
+<area shape="rect" id="node2" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html" title="Handles XMPP stream and is the first who takes control over a fresh stanza" alt="" coords="5,102,656,421"/>
+<area shape="rect" id="node11" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="217,39,443,57"/>
+<area shape="rect" id="node11" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="217,57,443,76"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="205,6,453,82"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_d.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_d" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn" class="summary-sig-name">PlugIn</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>,
+ <span class="summary-sig-arg">after_SASL</span>=<span class="summary-sig-default">False</span>,
+ <span class="summary-sig-arg">old_features</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Attach to owner and register ourself and our _exported_methods in it.
+If defined by a subclass, call self.plugin(owner) to execute hook
+code after plugging</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.PlugIn">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamInit" class="summary-sig-name">StreamInit</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Send an initial stream header</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.StreamInit">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#StreamTerminate" class="summary-sig-name">StreamTerminate</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Send a stream terminator</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.StreamTerminate">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking" class="summary-sig-name">ProcessNonBlocking</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Check incoming stream for data waiting</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.ProcessNonBlocking">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#dispatch" class="summary-sig-name">dispatch</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>,
+ <span class="summary-sig-arg">session</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">direct</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Main procedure that performs XMPP stanza recognition and calling
+apppropriate handlers for it. Called by simplexml</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.dispatch">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a></code></b>:
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event">Event</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterCycleHandler">RegisterCycleHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterDefaultHandler">RegisterDefaultHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterEventHandler">RegisterEventHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler">RegisterHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce">RegisterHandlerOnce</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace">RegisterNamespace</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler">RegisterNamespaceHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol">RegisterProtocol</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse">SendAndCallForResponse</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse">SendAndWaitForResponse</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterCycleHandler">UnregisterCycleHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler">UnregisterHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__">__init__</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers">dumpHandlers</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID">getAnID</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin">plugin</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout">plugout</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character">replace_non_character</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers">restoreHandlers</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#returnStanzaHandler">returnStanzaHandler</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send">send</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html">XMPPDispatcher</a></code></b> (private):
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_WaitForData" onclick="show_private();">_WaitForData</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_check_stream_start" onclick="show_private();">_check_stream_start</a></code>,
+ <code><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_init" onclick="show_private();">_init</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="PlugIn"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">PlugIn</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>,
+ <span class="sig-arg">after_SASL</span>=<span class="sig-default">False</span>,
+ <span class="sig-arg">old_features</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.PlugIn">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Attach to owner and register ourself and our _exported_methods in it.
+If defined by a subclass, call self.plugin(owner) to execute hook
+code after plugging
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">plugin.PlugIn.PlugIn</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="StreamInit"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">StreamInit</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.StreamInit">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send an initial stream header
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#StreamInit">XMPPDispatcher.StreamInit</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="StreamTerminate"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">StreamTerminate</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.StreamTerminate">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send a stream terminator
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="ProcessNonBlocking"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">ProcessNonBlocking</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.ProcessNonBlocking">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Check incoming stream for data waiting
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>data</code></strong> - data received from transports/IO sockets</li>
+ </ul></dd>
+ <dt>Returns:</dt>
+ <dd><ol class="rst-arabic simple">
+<li>length of processed data if some data were processed;</li>
+<li>'0' string if no data were processed but link is alive;</li>
+<li>0 (zero) if underlying connection is closed.</li>
+</ol></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking">XMPPDispatcher.ProcessNonBlocking</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="dispatch"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">dispatch</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>,
+ <span class="sig-arg">session</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">direct</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#BOSHDispatcher.dispatch">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Main procedure that performs XMPP stanza recognition and calling
+apppropriate handlers for it. Called by simplexml
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dispatch">XMPPDispatcher.dispatch</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.dispatcher_nb.Dispatcher-class.html b/doc/apidocs/nbxmpp.dispatcher_nb.Dispatcher-class.html
new file mode 100644
index 0000000..7a66738
--- /dev/null
+++ b/doc/apidocs/nbxmpp.dispatcher_nb.Dispatcher-class.html
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.dispatcher_nb.Dispatcher</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.dispatcher_nb-module.html">Module&nbsp;dispatcher_nb</a> ::
+ Class&nbsp;Dispatcher
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.dispatcher_nb.Dispatcher-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Dispatcher</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#Dispatcher">source&nbsp;code</a></span></p>
+<p>Why is this here - I needed to redefine Dispatcher for BOSH and easiest way
+was to inherit original Dispatcher (now renamed to XMPPDispatcher). Trouble
+is that reference used to access dispatcher instance is in Client attribute
+named by __class__.__name__ of the dispatcher instance .. long story short:</p>
+<p>I wrote following to avoid changing each client.Dispatcher.whatever() in xmpp</p>
+<p>If having two kinds of dispatcher will go well, I will rewrite the dispatcher
+references in other scripts</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn" class="summary-sig-name">PlugIn</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">client_obj</span>,
+ <span class="summary-sig-arg">after_SASL</span>=<span class="summary-sig-default">False</span>,
+ <span class="summary-sig-arg">old_features</span>=<span class="summary-sig-default">None</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#Dispatcher.PlugIn">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.Dispatcher-class.html#get_instance" class="summary-sig-name">get_instance</a>(<span class="summary-sig-arg">cls</span>,
+ <span class="summary-sig-arg">*args</span>,
+ <span class="summary-sig-arg">**kwargs</span>)</span><br />
+ Factory Method for object creation</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#Dispatcher.get_instance">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="PlugIn"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">PlugIn</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">client_obj</span>,
+ <span class="sig-arg">after_SASL</span>=<span class="sig-default">False</span>,
+ <span class="sig-arg">old_features</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#Dispatcher.PlugIn">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_instance"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_instance</span>(<span class="sig-arg">cls</span>,
+ <span class="sig-arg">*args</span>,
+ <span class="sig-arg">**kwargs</span>)</span>
+ <br /><em class="fname">Class Method</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#Dispatcher.get_instance">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Factory Method for object creation</p>
+<p>Use this instead of directly initializing the class in order to make
+unit testing much easier.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.dispatcher_nb.XMPPDispatcher-class.html b/doc/apidocs/nbxmpp.dispatcher_nb.XMPPDispatcher-class.html
new file mode 100644
index 0000000..2548942
--- /dev/null
+++ b/doc/apidocs/nbxmpp.dispatcher_nb.XMPPDispatcher-class.html
@@ -0,0 +1,1411 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.dispatcher_nb.XMPPDispatcher</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.dispatcher_nb-module.html">Module&nbsp;dispatcher_nb</a> ::
+ Class&nbsp;XMPPDispatcher
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class XMPPDispatcher</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_d_2" name="uml_class_diagram_for_nbxmpp_d_2">
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__" title="nbxmpp.dispatcher_nb.XMPPDispatcher.__init__" alt="" coords="17,153,644,172"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID" title="nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID" alt="" coords="17,172,644,191"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers" title="Return set of user&#45;registered callbacks in it&#39;s internal format. Used within the library to carry user handlers set over Dispatcher replugins" alt="" coords="17,191,644,209"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers" title="Restore user&#45;registered callbacks structure from dump previously obtained via dumpHandlers. Used within the library to carry user handlers set over Dispatcher replugins." alt="" coords="17,209,644,228"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin" title="Plug the Dispatcher instance into Client class instance and send initial stream header. Used internally" alt="" coords="17,228,644,247"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout" title="Prepare instance to be destructed" alt="" coords="17,247,644,265"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#StreamInit" title="Send an initial stream header" alt="" coords="17,265,644,284"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character" title="nbxmpp.dispatcher_nb.XMPPDispatcher.replace_non_character" alt="" coords="17,284,644,303"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking" title="Check incoming stream for data waiting" alt="" coords="17,303,644,321"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace" title="Create internal structures for newly registered namespace" alt="" coords="17,321,644,340"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol" title="Used to declare some top&#45;level stanza name to dispatcher" alt="" coords="17,340,644,359"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler" title="Register handler for processing all stanzas for specified namespace" alt="" coords="17,359,644,377"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler" title="Register user callback as stanzas handler of declared type" alt="" coords="17,377,644,396"/>
+<area shape="rect" id="node12" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send" title="Wrap transports send method when plugged into NonBlockingClient. Makes sure stanzas get ID and from tag." alt="" coords="17,415,644,433"/>
+<area shape="rect" id="node1" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html" title="Handles XMPP stream and is the first who takes control over a fresh stanza" alt="" coords="5,121,656,439"/>
+<area shape="rect" id="node3" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html" title="nbxmpp.dispatcher_nb.BOSHDispatcher" alt="" coords="259,459,403,498"/>
+<area shape="rect" id="node13" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="217,39,443,57"/>
+<area shape="rect" id="node13" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="217,57,443,76"/>
+<area shape="rect" id="node13" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="217,76,443,95"/>
+<area shape="rect" id="node2" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="205,6,453,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_d_2.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_d_2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>Handles XMPP stream and is the first who takes control over a fresh stanza</p>
+<p>Is plugged into NonBlockingClient but can be replugged to restart handled
+stream headers (used by SASL f.e.).</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID" class="summary-sig-name">getAnID</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.getAnID">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dumpHandlers" class="summary-sig-name">dumpHandlers</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return set of user-registered callbacks in it's internal format. Used
+within the library to carry user handlers set over Dispatcher replugins</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.dumpHandlers">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#restoreHandlers" class="summary-sig-name">restoreHandlers</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handlers</span>)</span><br />
+ Restore user-registered callbacks structure from dump previously obtained
+via dumpHandlers. Used within the library to carry user handlers set over
+Dispatcher replugins.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.restoreHandlers">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_init" class="summary-sig-name" onclick="show_private();">_init</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Register default namespaces/protocols/handlers. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher._init">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin" class="summary-sig-name">plugin</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span><br />
+ Plug the Dispatcher instance into Client class instance and send initial
+stream header. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.plugin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout" class="summary-sig-name">plugout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Prepare instance to be destructed</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.plugout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#StreamInit" class="summary-sig-name">StreamInit</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Send an initial stream header</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.StreamInit">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_check_stream_start" class="summary-sig-name" onclick="show_private();">_check_stream_start</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">ns</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">attrs</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher._check_stream_start">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#replace_non_character" class="summary-sig-name">replace_non_character</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.replace_non_character">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking" class="summary-sig-name">ProcessNonBlocking</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Check incoming stream for data waiting</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.ProcessNonBlocking">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace" class="summary-sig-name">RegisterNamespace</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">xmlns</span>,
+ <span class="summary-sig-arg">order</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">info</code><code class="variable-quote">'</code></span>)</span><br />
+ Create internal structures for newly registered namespace</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterNamespace">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterProtocol" class="summary-sig-name">RegisterProtocol</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag_name</span>,
+ <span class="summary-sig-arg">Proto</span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">order</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">info</code><code class="variable-quote">'</code></span>)</span><br />
+ Used to declare some top-level stanza name to dispatcher</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterProtocol">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespaceHandler" class="summary-sig-name">RegisterNamespaceHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">xmlns</span>,
+ <span class="summary-sig-arg">handler</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">ns</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">makefirst</span>=<span class="summary-sig-default">0</span>,
+ <span class="summary-sig-arg">system</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Register handler for processing all stanzas for specified namespace</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterNamespaceHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler" class="summary-sig-name">RegisterHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">handler</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">ns</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">makefirst</span>=<span class="summary-sig-default">False</span>,
+ <span class="summary-sig-arg">system</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Register user callback as stanzas handler of declared type</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandlerOnce" class="summary-sig-name">RegisterHandlerOnce</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">handler</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">ns</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">makefirst</span>=<span class="summary-sig-default">0</span>,
+ <span class="summary-sig-arg">system</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Unregister handler after first call (not implemented yet)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterHandlerOnce">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterHandler" class="summary-sig-name">UnregisterHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">handler</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">ns</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Unregister handler. &quot;typ&quot; and &quot;ns&quot; must be specified exactly the same as
+with registering.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.UnregisterHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterDefaultHandler" class="summary-sig-name">RegisterDefaultHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handler</span>)</span><br />
+ Specify the handler that will be used if no NodeProcessed exception were
+raised. This is returnStanzaHandler by default.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterDefaultHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterEventHandler" class="summary-sig-name">RegisterEventHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handler</span>)</span><br />
+ Register handler that will process events. F.e. &quot;FILERECEIVED&quot; event. See
+common/connection: _event_dispatcher()</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterEventHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#returnStanzaHandler" class="summary-sig-name">returnStanzaHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">conn</span>,
+ <span class="summary-sig-arg">stanza</span>)</span><br />
+ Return stanza back to the sender with &lt;feature-not-implemented/&gt; error
+set</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.returnStanzaHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterCycleHandler" class="summary-sig-name">RegisterCycleHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handler</span>)</span><br />
+ Register handler that will be called on every Dispatcher.Process() call</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterCycleHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#UnregisterCycleHandler" class="summary-sig-name">UnregisterCycleHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handler</span>)</span><br />
+ Unregister handler that will is called on every Dispatcher.Process() call</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.UnregisterCycleHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event" class="summary-sig-name">Event</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">realm</span>,
+ <span class="summary-sig-arg">event</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Raise some event</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.Event">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dispatch" class="summary-sig-name">dispatch</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>,
+ <span class="summary-sig-arg">session</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">direct</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Main procedure that performs XMPP stanza recognition and calling
+apppropriate handlers for it. Called by simplexml</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.dispatch">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#_WaitForData" class="summary-sig-name" onclick="show_private();">_WaitForData</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Internal wrapper around ProcessNonBlocking. Will check for</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher._WaitForData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndWaitForResponse" class="summary-sig-name">SendAndWaitForResponse</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>,
+ <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">func</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Send stanza and wait for recipient's response to it. Will call transports
+on_timeout callback if response is not retrieved in time</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.SendAndWaitForResponse">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse" class="summary-sig-name">SendAndCallForResponse</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>,
+ <span class="summary-sig-arg">func</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Put stanza on the wire and call back when recipient replies. Additional
+callback arguments can be specified in args</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.SendAndCallForResponse">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send" class="summary-sig-name">send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Wrap transports send method when plugged into NonBlockingClient. Makes
+sure stanzas get ID and from tag.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="getAnID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getAnID</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.getAnID">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="dumpHandlers"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">dumpHandlers</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.dumpHandlers">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return set of user-registered callbacks in it's internal format. Used
+within the library to carry user handlers set over Dispatcher replugins
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="restoreHandlers"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">restoreHandlers</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handlers</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.restoreHandlers">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Restore user-registered callbacks structure from dump previously obtained
+via dumpHandlers. Used within the library to carry user handlers set over
+Dispatcher replugins.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_init"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_init</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher._init">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Register default namespaces/protocols/handlers. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugin</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.plugin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Plug the Dispatcher instance into Client class instance and send initial
+stream header. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.plugout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Prepare instance to be destructed
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="StreamInit"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">StreamInit</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.StreamInit">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send an initial stream header
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_check_stream_start"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_check_stream_start</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">ns</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">attrs</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher._check_stream_start">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="replace_non_character"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">replace_non_character</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.replace_non_character">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="ProcessNonBlocking"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">ProcessNonBlocking</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.ProcessNonBlocking">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Check incoming stream for data waiting
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>data</code></strong> - data received from transports/IO sockets</li>
+ </ul></dd>
+ <dt>Returns:</dt>
+ <dd><ol class="rst-rst-arabic simple rst-arabic simple">
+<li><p class="rst-first rst-first">length of processed data if some data were processed;</p>
+</li>
+<li><p class="rst-first rst-first">'0' string if no data were processed but link is alive;</p>
+</li>
+<li><p class="rst-first rst-first">0 (zero) if underlying connection is closed.</p>
+</li>
+</ol></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterNamespace"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterNamespace</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">xmlns</span>,
+ <span class="sig-arg">order</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">info</code><code class="variable-quote">'</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterNamespace">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Create internal structures for newly registered namespace</p>
+<p>You can register handlers for this namespace afterwards. By default
+one namespace is already registered
+(jabber:client or jabber:component:accept depending on context.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterProtocol"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterProtocol</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag_name</span>,
+ <span class="sig-arg">Proto</span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">order</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">info</code><code class="variable-quote">'</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterProtocol">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Used to declare some top-level stanza name to dispatcher</p>
+<p>Needed to start registering handlers for such stanzas. Iq, message and
+presence protocols are registered by default.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterNamespaceHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterNamespaceHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">xmlns</span>,
+ <span class="sig-arg">handler</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">ns</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">makefirst</span>=<span class="sig-default">0</span>,
+ <span class="sig-arg">system</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterNamespaceHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Register handler for processing all stanzas for specified namespace
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">handler</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">ns</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">makefirst</span>=<span class="sig-default">False</span>,
+ <span class="sig-arg">system</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Register user callback as stanzas handler of declared type</p>
+<p>Callback arguments:
+dispatcher instance (for replying), incoming return of previous handlers.
+The callback must raise xmpp.NodeProcessed just before return if it wants
+to prevent other callbacks to be called with the same stanza as argument
+_and_, more importantly library from returning stanza to sender with error set.</p>
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>name</code></strong> - name of stanza. F.e. &quot;iq&quot;.</li>
+ <li><strong class="pname"><code>handler</code></strong> - user callback.</li>
+ <li><strong class="pname"><code>typ</code></strong> - value of stanza's &quot;type&quot; attribute. If not specified any
+value will match</li>
+ <li><strong class="pname"><code>ns</code></strong> - namespace of child that stanza must contain.</li>
+ <li><strong class="pname"><code>makefirst</code></strong> - insert handler in the beginning of handlers list instead
+of adding it to the end. Note that more common handlers i.e. w/o &quot;typ&quot;
+and &quot; will be called first nevertheless.</li>
+ <li><strong class="pname"><code>system</code></strong> - call handler even if NodeProcessed Exception were raised
+already.</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterHandlerOnce"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterHandlerOnce</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">handler</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">ns</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">makefirst</span>=<span class="sig-default">0</span>,
+ <span class="sig-arg">system</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterHandlerOnce">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Unregister handler after first call (not implemented yet)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="UnregisterHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">UnregisterHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">handler</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">ns</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.UnregisterHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Unregister handler. &quot;typ&quot; and &quot;ns&quot; must be specified exactly the same as
+with registering.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterDefaultHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterDefaultHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterDefaultHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Specify the handler that will be used if no NodeProcessed exception were
+raised. This is returnStanzaHandler by default.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterEventHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterEventHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterEventHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Register handler that will process events. F.e. &quot;FILERECEIVED&quot; event. See
+common/connection: _event_dispatcher()
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="returnStanzaHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">returnStanzaHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">conn</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.returnStanzaHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return stanza back to the sender with &lt;feature-not-implemented/&gt; error
+set
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RegisterCycleHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RegisterCycleHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.RegisterCycleHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Register handler that will be called on every Dispatcher.Process() call
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="UnregisterCycleHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">UnregisterCycleHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.UnregisterCycleHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Unregister handler that will is called on every Dispatcher.Process() call
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="Event"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">Event</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">realm</span>,
+ <span class="sig-arg">event</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.Event">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Raise some event
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>realm</code></strong> - scope of event. Usually a namespace.</li>
+ <li><strong class="pname"><code>event</code></strong> - the event itself. F.e. &quot;SUCCESSFUL SEND&quot;.</li>
+ <li><strong class="pname"><code>data</code></strong> - data that comes along with event. Depends on event.</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="dispatch"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">dispatch</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>,
+ <span class="sig-arg">session</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">direct</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.dispatch">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Main procedure that performs XMPP stanza recognition and calling
+apppropriate handlers for it. Called by simplexml
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_WaitForData"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_WaitForData</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher._WaitForData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Internal wrapper around ProcessNonBlocking. Will check for
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="SendAndWaitForResponse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">SendAndWaitForResponse</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>,
+ <span class="sig-arg">timeout</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">func</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">args</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.SendAndWaitForResponse">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Send stanza and wait for recipient's response to it. Will call transports
+on_timeout callback if response is not retrieved in time</p>
+<p>Be aware: Only timeout of latest call of SendAndWait is active.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="SendAndCallForResponse"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">SendAndCallForResponse</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>,
+ <span class="sig-arg">func</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">args</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.SendAndCallForResponse">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Put stanza on the wire and call back when recipient replies. Additional
+callback arguments can be specified in args
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.dispatcher_nb-pysrc.html#XMPPDispatcher.send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Wrap transports send method when plugged into NonBlockingClient. Makes
+sure stanzas get ID and from tag.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.features_nb-module.html b/doc/apidocs/nbxmpp.features_nb-module.html
new file mode 100644
index 0000000..9995c64
--- /dev/null
+++ b/doc/apidocs/nbxmpp.features_nb-module.html
@@ -0,0 +1,982 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.features_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;features_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.features_nb-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module features_nb</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html">source&nbsp;code</a></span></p>
+Different stuff that wasn't worth separating it into modules
+(Registration, Privacy Lists, ...)
+
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#_on_default_response" class="summary-sig-name" onclick="show_private();">_on_default_response</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">iq</span>,
+ <span class="summary-sig-arg">cb</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#_on_default_response">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#getRegInfo" class="summary-sig-name">getRegInfo</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">host</span>,
+ <span class="summary-sig-arg">info</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">sync</span>=<span class="summary-sig-default">True</span>)</span><br />
+ Get registration form from remote host. Info dict can be prefilled
+:param disp: plugged dispatcher instance
+:param info: dict, like {'username':'joey'}.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getRegInfo">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#_ReceivedRegInfo" class="summary-sig-name" onclick="show_private();">_ReceivedRegInfo</a>(<span class="summary-sig-arg">con</span>,
+ <span class="summary-sig-arg">resp</span>,
+ <span class="summary-sig-arg">agent</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#_ReceivedRegInfo">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#register" class="summary-sig-name">register</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">host</span>,
+ <span class="summary-sig-arg">info</span>,
+ <span class="summary-sig-arg">cb</span>,
+ <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Perform registration on remote server with provided info</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#register">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#unregister" class="summary-sig-name">unregister</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">host</span>,
+ <span class="summary-sig-arg">cb</span>)</span><br />
+ Unregisters with host (permanently removes account). Returns true on success</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#unregister">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#changePasswordTo" class="summary-sig-name">changePasswordTo</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">newpassword</span>,
+ <span class="summary-sig-arg">host</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">cb</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Changes password on specified or current (if not specified) server. Returns
+true on success.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#changePasswordTo">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#getPrivacyLists" class="summary-sig-name">getPrivacyLists</a>(<span class="summary-sig-arg">disp</span>)</span><br />
+ Request privacy lists from connected server. Returns dictionary of existing
+lists on success.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getPrivacyLists">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#getActiveAndDefaultPrivacyLists" class="summary-sig-name">getActiveAndDefaultPrivacyLists</a>(<span class="summary-sig-arg">disp</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getActiveAndDefaultPrivacyLists">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#getPrivacyList" class="summary-sig-name">getPrivacyList</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">listname</span>)</span><br />
+ Request specific privacy list listname. Returns list of XML nodes (rules)
+taken from the server responce.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getPrivacyList">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#setActivePrivacyList" class="summary-sig-name">setActivePrivacyList</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">listname</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">active</code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">cb</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Switch privacy list 'listname' to specified type. By default the type is
+'active'. Returns true on success.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#setActivePrivacyList">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#setDefaultPrivacyList" class="summary-sig-name">setDefaultPrivacyList</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">listname</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Set the default privacy list as 'listname'. Returns true on success</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#setDefaultPrivacyList">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#setPrivacyList" class="summary-sig-name">setPrivacyList</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">listname</span>,
+ <span class="summary-sig-arg">tags</span>)</span><br />
+ Set the ruleset</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#setPrivacyList">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.features_nb-module.html#delPrivacyList" class="summary-sig-name">delPrivacyList</a>(<span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">listname</span>,
+ <span class="summary-sig-arg">cb</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Deletes privacy list 'listname'. Returns true on success.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#delPrivacyList">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#REGISTER_DATA_RECEIVED" class="summary-name">REGISTER_DATA_RECEIVED</a> = <code title="'REGISTER DATA RECEIVED'"><code class="variable-quote">'</code><code class="variable-string">REGISTER DATA RECEIVED</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PL_TYPE_JID" class="summary-name">PL_TYPE_JID</a> = <code title="'jid'"><code class="variable-quote">'</code><code class="variable-string">jid</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PL_TYPE_GROUP" class="summary-name">PL_TYPE_GROUP</a> = <code title="'group'"><code class="variable-quote">'</code><code class="variable-string">group</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PL_TYPE_SUBC" class="summary-name">PL_TYPE_SUBC</a> = <code title="'subscription'"><code class="variable-quote">'</code><code class="variable-string">subscription</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PL_ACT_ALLOW" class="summary-name">PL_ACT_ALLOW</a> = <code title="'allow'"><code class="variable-quote">'</code><code class="variable-string">allow</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PL_ACT_DENY" class="summary-name">PL_ACT_DENY</a> = <code title="'deny'"><code class="variable-quote">'</code><code class="variable-string">deny</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_RECEIVED" class="summary-name">PRIVACY_LISTS_RECEIVED</a> = <code title="'PRIVACY LISTS RECEIVED'"><code class="variable-quote">'</code><code class="variable-string">PRIVACY LISTS RECEIVED</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PRIVACY_LIST_RECEIVED" class="summary-name">PRIVACY_LIST_RECEIVED</a> = <code title="'PRIVACY LIST RECEIVED'"><code class="variable-quote">'</code><code class="variable-string">PRIVACY LIST RECEIVED</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_ACTIVE_DEFAULT" class="summary-name">PRIVACY_LISTS_ACTIVE_DEFAULT</a> = <code title="'PRIVACY LISTS ACTIVE DEFAULT'"><code class="variable-quote">'</code><code class="variable-string">PRIVACY LISTS ACTIVE DEFAULT</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.features_nb-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="nbxmpp.protocol.NS_REGISTER">NS_REGISTER</span>,
+ <span title="nbxmpp.protocol.NS_PRIVACY">NS_PRIVACY</span>,
+ <span title="nbxmpp.protocol.NS_DATA">NS_DATA</span>,
+ <a href="nbxmpp.protocol.Iq-class.html" title="nbxmpp.protocol.Iq">Iq</a>,
+ <a href="nbxmpp.protocol-module.html#isResultNode" title="nbxmpp.protocol.isResultNode">isResultNode</a>,
+ <a href="nbxmpp.simplexml.Node-class.html" title="nbxmpp.protocol.Node">Node</a>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="_on_default_response"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_default_response</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">iq</span>,
+ <span class="sig-arg">cb</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#_on_default_response">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getRegInfo"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getRegInfo</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">host</span>,
+ <span class="sig-arg">info</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">sync</span>=<span class="sig-default">True</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getRegInfo">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Get registration form from remote host. Info dict can be prefilled
+:param disp: plugged dispatcher instance
+:param info: dict, like {'username':'joey'}.</p>
+<p>See JEP-0077 for details.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_ReceivedRegInfo"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_ReceivedRegInfo</span>(<span class="sig-arg">con</span>,
+ <span class="sig-arg">resp</span>,
+ <span class="sig-arg">agent</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#_ReceivedRegInfo">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="register"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">register</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">host</span>,
+ <span class="sig-arg">info</span>,
+ <span class="sig-arg">cb</span>,
+ <span class="sig-arg">args</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#register">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Perform registration on remote server with provided info</p>
+<p>If registration fails you can get additional info from the dispatcher's
+owner attributes lastErrNode, lastErr and lastErrCode.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="unregister"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">unregister</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">host</span>,
+ <span class="sig-arg">cb</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#unregister">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Unregisters with host (permanently removes account). Returns true on success
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="changePasswordTo"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">changePasswordTo</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">newpassword</span>,
+ <span class="sig-arg">host</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">cb</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#changePasswordTo">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Changes password on specified or current (if not specified) server. Returns
+true on success.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getPrivacyLists"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getPrivacyLists</span>(<span class="sig-arg">disp</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getPrivacyLists">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Request privacy lists from connected server. Returns dictionary of existing
+lists on success.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getActiveAndDefaultPrivacyLists"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getActiveAndDefaultPrivacyLists</span>(<span class="sig-arg">disp</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getActiveAndDefaultPrivacyLists">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getPrivacyList"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getPrivacyList</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">listname</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#getPrivacyList">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Request specific privacy list listname. Returns list of XML nodes (rules)
+taken from the server responce.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setActivePrivacyList"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setActivePrivacyList</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">listname</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">active</code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">cb</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#setActivePrivacyList">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Switch privacy list 'listname' to specified type. By default the type is
+'active'. Returns true on success.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setDefaultPrivacyList"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setDefaultPrivacyList</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">listname</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#setDefaultPrivacyList">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the default privacy list as 'listname'. Returns true on success
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setPrivacyList"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setPrivacyList</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">listname</span>,
+ <span class="sig-arg">tags</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#setPrivacyList">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Set the ruleset</p>
+<p>'list' should be the simpleXML node formatted according to RFC 3921
+(XMPP-IM) I.e. Node('list',{'name':listname},payload=[...]).</p>
+<p>Returns true on success.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="delPrivacyList"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">delPrivacyList</span>(<span class="sig-arg">disp</span>,
+ <span class="sig-arg">listname</span>,
+ <span class="sig-arg">cb</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.features_nb-pysrc.html#delPrivacyList">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Deletes privacy list 'listname'. Returns true on success.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="REGISTER_DATA_RECEIVED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">REGISTER_DATA_RECEIVED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">REGISTER DATA RECEIVED</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PL_TYPE_JID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PL_TYPE_JID</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jid</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PL_TYPE_GROUP"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PL_TYPE_GROUP</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">group</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PL_TYPE_SUBC"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PL_TYPE_SUBC</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">subscription</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PL_ACT_ALLOW"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PL_ACT_ALLOW</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">allow</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PL_ACT_DENY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PL_ACT_DENY</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">deny</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PRIVACY_LISTS_RECEIVED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PRIVACY_LISTS_RECEIVED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">PRIVACY LISTS RECEIVED</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PRIVACY_LIST_RECEIVED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PRIVACY_LIST_RECEIVED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">PRIVACY LIST RECEIVED</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PRIVACY_LISTS_ACTIVE_DEFAULT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PRIVACY_LISTS_ACTIVE_DEFAULT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">PRIVACY LISTS ACTIVE DEFAULT</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.features_nb-pysrc.html b/doc/apidocs/nbxmpp.features_nb-pysrc.html
new file mode 100644
index 0000000..0ecc944
--- /dev/null
+++ b/doc/apidocs/nbxmpp.features_nb-pysrc.html
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.features_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;features_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.features_nb-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.features_nb-module.html">Module nbxmpp.features_nb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## features.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2007 Julien Pivotto &lt;roidelapluie@gmail.com&gt;</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"># $Id: features.py,v 1.22 2005/09/30 20:13:04 mikealbon Exp $</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">Different stuff that wasn't worth separating it into modules</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">(Registration, Privacy Lists, ...)</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-0', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Variable nbxmpp.protocol.NS_REGISTER=nbxmpp.protocol-module.html#NS_REGISTER"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-1', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Variable nbxmpp.protocol.NS_PRIVACY=nbxmpp.protocol-module.html#NS_PRIVACY"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-2', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Variable nbxmpp.protocol.NS_DATA=nbxmpp.protocol-module.html#NS_DATA"><a title="nbxmpp.protocol.NS_DATA" class="py-name" href="#" onclick="return doclink('link-3', 'NS_DATA', 'link-3');">NS_DATA</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Class nbxmpp.protocol.Iq=nbxmpp.protocol.Iq-class.html"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-4', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Function nbxmpp.protocol.isResultNode()=nbxmpp.protocol-module.html#isResultNode"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-5', 'isResultNode', 'link-5');">isResultNode</a></tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Class nbxmpp.simplexml.Node=nbxmpp.simplexml.Node-class.html"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-6', 'Node', 'link-6');">Node</a></tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> </tt>
+<a name="_on_default_response"></a><div id="_on_default_response-def"><a name="L25"></a><tt class="py-lineno"> 25</tt> <a class="py-toggle" href="#" id="_on_default_response-toggle" onclick="return toggle('_on_default_response');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#_on_default_response">_on_default_response</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">iq</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_on_default_response-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_on_default_response-expanded"><a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">_on_response</tt><tt class="py-op">(</tt><tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-7" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-7', 'isResultNode', 'link-5');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cb</tt><tt class="py-op">:</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> <tt class="py-name">cb</tt><tt class="py-op">(</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cb</tt><tt class="py-op">:</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> <tt class="py-name">cb</tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#SendAndCallForResponse"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-8', 'SendAndCallForResponse', 'link-8');">SendAndCallForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">_on_response</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-comment">### Registration</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt id="link-9" class="py-name" targets="Variable nbxmpp.features_nb.REGISTER_DATA_RECEIVED=nbxmpp.features_nb-module.html#REGISTER_DATA_RECEIVED"><a title="nbxmpp.features_nb.REGISTER_DATA_RECEIVED" class="py-name" href="#" onclick="return doclink('link-9', 'REGISTER_DATA_RECEIVED', 'link-9');">REGISTER_DATA_RECEIVED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'REGISTER DATA RECEIVED'</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> </tt>
+<a name="getRegInfo"></a><div id="getRegInfo-def"><a name="L40"></a><tt class="py-lineno"> 40</tt> <a class="py-toggle" href="#" id="getRegInfo-toggle" onclick="return toggle('getRegInfo');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#getRegInfo">getRegInfo</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">,</tt> <tt class="py-param">info</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">sync</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="getRegInfo-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="getRegInfo-expanded"><a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> Get registration form from remote host. Info dict can be prefilled</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> :param disp: plugged dispatcher instance</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> :param info: dict, like {'username':'joey'}.</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> See JEP-0077 for details.</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">=</tt><tt id="link-10" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-10', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt id="link-11" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-11', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">host</tt><tt class="py-op">)</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">info</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.keys()=nbxmpp.roster_nb.NonBlockingRoster-class.html#keys"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-12', 'keys', 'link-12');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method nbxmpp.simplexml.Node.setTagData()=nbxmpp.simplexml.Node-class.html#setTagData"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-13', 'setTagData', 'link-13');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">info</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">sync</tt><tt class="py-op">:</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-14', 'SendAndCallForResponse', 'link-8');">SendAndCallForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt id="link-15" class="py-name" targets="Function nbxmpp.features_nb._ReceivedRegInfo()=nbxmpp.features_nb-module.html#_ReceivedRegInfo"><a title="nbxmpp.features_nb._ReceivedRegInfo" class="py-name" href="#" onclick="return doclink('link-15', '_ReceivedRegInfo', 'link-15');">_ReceivedRegInfo</a></tt><tt class="py-op">(</tt><tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Class nbxmpp.dispatcher_nb.Dispatcher=nbxmpp.dispatcher_nb.Dispatcher-class.html"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-16', 'Dispatcher', 'link-16');">Dispatcher</a></tt><tt class="py-op">,</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">host</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-17', 'SendAndCallForResponse', 'link-8');">SendAndCallForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt id="link-18" class="py-name"><a title="nbxmpp.features_nb._ReceivedRegInfo" class="py-name" href="#" onclick="return doclink('link-18', '_ReceivedRegInfo', 'link-15');">_ReceivedRegInfo</a></tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'agent'</tt><tt class="py-op">:</tt> <tt class="py-name">host</tt> <tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> </tt>
+<a name="_ReceivedRegInfo"></a><div id="_ReceivedRegInfo-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="_ReceivedRegInfo-toggle" onclick="return toggle('_ReceivedRegInfo');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#_ReceivedRegInfo">_ReceivedRegInfo</a><tt class="py-op">(</tt><tt class="py-param">con</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">agent</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_ReceivedRegInfo-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_ReceivedRegInfo-expanded"><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt id="link-19" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-19', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt id="link-20" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-20', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">agent</tt><tt class="py-op">)</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-21" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-21', 'isResultNode', 'link-5');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method nbxmpp.protocol.Protocol.getErrorMsg()=nbxmpp.protocol.Protocol-class.html#getErrorMsg"><a title="nbxmpp.protocol.Protocol.getErrorMsg" class="py-name" href="#" onclick="return doclink('link-22', 'getErrorMsg', 'link-22');">getErrorMsg</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">con</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.Event()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#Event"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-23', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-24" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-24', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt id="link-25" class="py-name"><a title="nbxmpp.features_nb.REGISTER_DATA_RECEIVED" class="py-name" href="#" onclick="return doclink('link-25', 'REGISTER_DATA_RECEIVED', 'link-9');">REGISTER_DATA_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">agent</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">error_msg</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">tag</tt><tt class="py-op">=</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method nbxmpp.simplexml.Node.getTag()=nbxmpp.simplexml.Node-class.html#getTag"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-26', 'getTag', 'link-26');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-27" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-27', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name"><a title="nbxmpp.protocol.Protocol.getErrorMsg" class="py-name" href="#" onclick="return doclink('link-28', 'getErrorMsg', 'link-22');">getErrorMsg</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">con</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-29', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-30" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-30', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt id="link-31" class="py-name"><a title="nbxmpp.features_nb.REGISTER_DATA_RECEIVED" class="py-name" href="#" onclick="return doclink('link-31', 'REGISTER_DATA_RECEIVED', 'link-9');">REGISTER_DATA_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">agent</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">error_msg</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">df</tt><tt class="py-op">=</tt><tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-32', 'getTag', 'link-26');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-33" class="py-name"><a title="nbxmpp.protocol.NS_DATA" class="py-name" href="#" onclick="return doclink('link-33', 'NS_DATA', 'link-3');">NS_DATA</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">df</tt><tt class="py-op">:</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">con</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-34', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-35" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-35', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt id="link-36" class="py-name"><a title="nbxmpp.features_nb.REGISTER_DATA_RECEIVED" class="py-name" href="#" onclick="return doclink('link-36', 'REGISTER_DATA_RECEIVED', 'link-9');">REGISTER_DATA_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">agent</tt><tt class="py-op">,</tt> <tt class="py-name">df</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">tag</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">df</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method nbxmpp.protocol.Iq.getQueryPayload()=nbxmpp.protocol.Iq-class.html#getQueryPayload"><a title="nbxmpp.protocol.Iq.getQueryPayload" class="py-name" href="#" onclick="return doclink('link-37', 'getQueryPayload', 'link-37');">getQueryPayload</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt id="link-38" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-38', 'Node', 'link-6');">Node</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">df</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.getName()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getName,Method nbxmpp.simplexml.Node.getName()=nbxmpp.simplexml.Node-class.html#getName"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-39', 'getName', 'link-39');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method nbxmpp.simplexml.Node.getData()=nbxmpp.simplexml.Node-class.html#getData"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-40', 'getData', 'link-40');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">con</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-41', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-42" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-42', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt id="link-43" class="py-name"><a title="nbxmpp.features_nb.REGISTER_DATA_RECEIVED" class="py-name" href="#" onclick="return doclink('link-43', 'REGISTER_DATA_RECEIVED', 'link-9');">REGISTER_DATA_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">agent</tt><tt class="py-op">,</tt> <tt class="py-name">df</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> </tt>
+<a name="register"></a><div id="register-def"><a name="L80"></a><tt class="py-lineno"> 80</tt> <a class="py-toggle" href="#" id="register-toggle" onclick="return toggle('register');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#register">register</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">,</tt> <tt class="py-param">info</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt><tt class="py-op">,</tt> <tt class="py-param">args</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="register-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="register-expanded"><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> Perform registration on remote server with provided info</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt class="py-docstring"> If registration fails you can get additional info from the dispatcher's</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-docstring"> owner attributes lastErrNode, lastErr and lastErrCode.</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">=</tt><tt id="link-44" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-44', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-45" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-45', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">host</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">info</tt><tt class="py-op">,</tt> <tt class="py-name">dict</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">info</tt><tt class="py-op">=</tt><tt class="py-name">info</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Method nbxmpp.protocol.DataForm.asDict()=nbxmpp.protocol.DataForm-class.html#asDict"><a title="nbxmpp.protocol.DataForm.asDict" class="py-name" href="#" onclick="return doclink('link-46', 'asDict', 'link-46');">asDict</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">info</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-47', 'keys', 'link-12');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method nbxmpp.simplexml.Node.setTag()=nbxmpp.simplexml.Node-class.html#setTag"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-48', 'setTag', 'link-48');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-49', 'setTagData', 'link-13');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">info</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-50', 'SendAndCallForResponse', 'link-8');">SendAndCallForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">cb</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> </tt>
+<a name="unregister"></a><div id="unregister-def"><a name="L94"></a><tt class="py-lineno"> 94</tt> <a class="py-toggle" href="#" id="unregister-toggle" onclick="return toggle('unregister');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#unregister">unregister</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="unregister-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="unregister-expanded"><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"><tt class="py-docstring"> Unregisters with host (permanently removes account). Returns true on success</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-51" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-51', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-52" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-52', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">host</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-53" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-53', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'remove'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt id="link-54" class="py-name" targets="Function nbxmpp.features_nb._on_default_response()=nbxmpp.features_nb-module.html#_on_default_response"><a title="nbxmpp.features_nb._on_default_response" class="py-name" href="#" onclick="return doclink('link-54', '_on_default_response', 'link-54');">_on_default_response</a></tt><tt class="py-op">(</tt><tt class="py-name">disp</tt><tt class="py-op">,</tt> <tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">cb</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> </tt>
+<a name="changePasswordTo"></a><div id="changePasswordTo-def"><a name="L101"></a><tt class="py-lineno">101</tt> <a class="py-toggle" href="#" id="changePasswordTo-toggle" onclick="return toggle('changePasswordTo');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#changePasswordTo">changePasswordTo</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">newpassword</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="changePasswordTo-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="changePasswordTo-expanded"><a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"><tt class="py-docstring"> Changes password on specified or current (if not specified) server. Returns</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"><tt class="py-docstring"> true on success.</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">host</tt><tt class="py-op">:</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">host</tt> <tt class="py-op">=</tt> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-55" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-55', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-56" class="py-name"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-56', 'NS_REGISTER', 'link-1');">NS_REGISTER</a></tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">host</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-57" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-57', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'username'</tt><tt class="py-op">,</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">disp</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-58" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-58', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'password'</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">newpassword</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt id="link-59" class="py-name"><a title="nbxmpp.features_nb._on_default_response" class="py-name" href="#" onclick="return doclink('link-59', '_on_default_response', 'link-54');">_on_default_response</a></tt><tt class="py-op">(</tt><tt class="py-name">disp</tt><tt class="py-op">,</tt> <tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">cb</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"><tt class="py-comment">### Privacy List</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"><tt id="link-60" class="py-name" targets="Variable nbxmpp.features_nb.PL_TYPE_JID=nbxmpp.features_nb-module.html#PL_TYPE_JID"><a title="nbxmpp.features_nb.PL_TYPE_JID" class="py-name" href="#" onclick="return doclink('link-60', 'PL_TYPE_JID', 'link-60');">PL_TYPE_JID</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jid'</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"><tt id="link-61" class="py-name" targets="Variable nbxmpp.features_nb.PL_TYPE_GROUP=nbxmpp.features_nb-module.html#PL_TYPE_GROUP"><a title="nbxmpp.features_nb.PL_TYPE_GROUP" class="py-name" href="#" onclick="return doclink('link-61', 'PL_TYPE_GROUP', 'link-61');">PL_TYPE_GROUP</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'group'</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"><tt id="link-62" class="py-name" targets="Variable nbxmpp.features_nb.PL_TYPE_SUBC=nbxmpp.features_nb-module.html#PL_TYPE_SUBC"><a title="nbxmpp.features_nb.PL_TYPE_SUBC" class="py-name" href="#" onclick="return doclink('link-62', 'PL_TYPE_SUBC', 'link-62');">PL_TYPE_SUBC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'subscription'</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"><tt id="link-63" class="py-name" targets="Variable nbxmpp.features_nb.PL_ACT_ALLOW=nbxmpp.features_nb-module.html#PL_ACT_ALLOW"><a title="nbxmpp.features_nb.PL_ACT_ALLOW" class="py-name" href="#" onclick="return doclink('link-63', 'PL_ACT_ALLOW', 'link-63');">PL_ACT_ALLOW</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'allow'</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt id="link-64" class="py-name" targets="Variable nbxmpp.features_nb.PL_ACT_DENY=nbxmpp.features_nb-module.html#PL_ACT_DENY"><a title="nbxmpp.features_nb.PL_ACT_DENY" class="py-name" href="#" onclick="return doclink('link-64', 'PL_ACT_DENY', 'link-64');">PL_ACT_DENY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'deny'</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"><tt id="link-65" class="py-name" targets="Variable nbxmpp.features_nb.PRIVACY_LISTS_RECEIVED=nbxmpp.features_nb-module.html#PRIVACY_LISTS_RECEIVED"><a title="nbxmpp.features_nb.PRIVACY_LISTS_RECEIVED" class="py-name" href="#" onclick="return doclink('link-65', 'PRIVACY_LISTS_RECEIVED', 'link-65');">PRIVACY_LISTS_RECEIVED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'PRIVACY LISTS RECEIVED'</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"><tt id="link-66" class="py-name" targets="Variable nbxmpp.features_nb.PRIVACY_LIST_RECEIVED=nbxmpp.features_nb-module.html#PRIVACY_LIST_RECEIVED"><a title="nbxmpp.features_nb.PRIVACY_LIST_RECEIVED" class="py-name" href="#" onclick="return doclink('link-66', 'PRIVACY_LIST_RECEIVED', 'link-66');">PRIVACY_LIST_RECEIVED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'PRIVACY LIST RECEIVED'</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"><tt id="link-67" class="py-name" targets="Variable nbxmpp.features_nb.PRIVACY_LISTS_ACTIVE_DEFAULT=nbxmpp.features_nb-module.html#PRIVACY_LISTS_ACTIVE_DEFAULT"><a title="nbxmpp.features_nb.PRIVACY_LISTS_ACTIVE_DEFAULT" class="py-name" href="#" onclick="return doclink('link-67', 'PRIVACY_LISTS_ACTIVE_DEFAULT', 'link-67');">PRIVACY_LISTS_ACTIVE_DEFAULT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'PRIVACY LISTS ACTIVE DEFAULT'</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> </tt>
+<a name="getPrivacyLists"></a><div id="getPrivacyLists-def"><a name="L126"></a><tt class="py-lineno">126</tt> <a class="py-toggle" href="#" id="getPrivacyLists-toggle" onclick="return toggle('getPrivacyLists');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#getPrivacyLists">getPrivacyLists</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="getPrivacyLists-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="getPrivacyLists-expanded"><a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"><tt class="py-docstring"> Request privacy lists from connected server. Returns dictionary of existing</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> lists on success.</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-68" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-68', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt id="link-69" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-69', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">_on_response</tt><tt class="py-op">(</tt><tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">dict_</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'lists'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">}</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-70" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-70', 'isResultNode', 'link-5');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-71', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-72" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-72', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt id="link-73" class="py-name"><a title="nbxmpp.features_nb.PRIVACY_LISTS_RECEIVED" class="py-name" href="#" onclick="return doclink('link-73', 'PRIVACY_LISTS_RECEIVED', 'link-65');">PRIVACY_LISTS_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">list_</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="nbxmpp.protocol.Iq.getQueryPayload" class="py-name" href="#" onclick="return doclink('link-74', 'getQueryPayload', 'link-37');">getQueryPayload</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-75', 'getName', 'link-39');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">==</tt><tt class="py-string">'list'</tt><tt class="py-op">:</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">dict_</tt><tt class="py-op">[</tt><tt class="py-string">'lists'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttr()=nbxmpp.simplexml.Node-class.html#getAttr"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-76', 'getAttr', 'link-76');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'name'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-name">dict_</tt><tt class="py-op">[</tt><tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-77', 'getName', 'link-39');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-78', 'getAttr', 'link-76');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'name'</tt><tt class="py-op">)</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-79', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-80" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-80', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt id="link-81" class="py-name"><a title="nbxmpp.features_nb.PRIVACY_LISTS_RECEIVED" class="py-name" href="#" onclick="return doclink('link-81', 'PRIVACY_LISTS_RECEIVED', 'link-65');">PRIVACY_LISTS_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">dict_</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-82', 'SendAndCallForResponse', 'link-8');">SendAndCallForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">_on_response</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> </tt>
+<a name="getActiveAndDefaultPrivacyLists"></a><div id="getActiveAndDefaultPrivacyLists-def"><a name="L145"></a><tt class="py-lineno">145</tt> <a class="py-toggle" href="#" id="getActiveAndDefaultPrivacyLists-toggle" onclick="return toggle('getActiveAndDefaultPrivacyLists');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#getActiveAndDefaultPrivacyLists">getActiveAndDefaultPrivacyLists</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="getActiveAndDefaultPrivacyLists-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="getActiveAndDefaultPrivacyLists-expanded"><a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-83', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt id="link-84" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-84', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">_on_response</tt><tt class="py-op">(</tt><tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">dict_</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'active'</tt><tt class="py-op">:</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">'default'</tt><tt class="py-op">:</tt> <tt class="py-string">''</tt><tt class="py-op">}</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-85" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-85', 'isResultNode', 'link-5');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-86', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-87" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-87', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt id="link-88" class="py-name"><a title="nbxmpp.features_nb.PRIVACY_LISTS_ACTIVE_DEFAULT" class="py-name" href="#" onclick="return doclink('link-88', 'PRIVACY_LISTS_ACTIVE_DEFAULT', 'link-67');">PRIVACY_LISTS_ACTIVE_DEFAULT</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">list_</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="nbxmpp.protocol.Iq.getQueryPayload" class="py-name" href="#" onclick="return doclink('link-89', 'getQueryPayload', 'link-37');">getQueryPayload</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-90', 'getName', 'link-39');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'active'</tt><tt class="py-op">:</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">dict_</tt><tt class="py-op">[</tt><tt class="py-string">'active'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-91', 'getAttr', 'link-76');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'name'</tt><tt class="py-op">)</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-92', 'getName', 'link-39');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'default'</tt><tt class="py-op">:</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">dict_</tt><tt class="py-op">[</tt><tt class="py-string">'default'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">list_</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-93', 'getAttr', 'link-76');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'name'</tt><tt class="py-op">)</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-94', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-95" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-95', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt id="link-96" class="py-name"><a title="nbxmpp.features_nb.PRIVACY_LISTS_ACTIVE_DEFAULT" class="py-name" href="#" onclick="return doclink('link-96', 'PRIVACY_LISTS_ACTIVE_DEFAULT', 'link-67');">PRIVACY_LISTS_ACTIVE_DEFAULT</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">dict_</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-97', 'SendAndCallForResponse', 'link-8');">SendAndCallForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">_on_response</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> </tt>
+<a name="getPrivacyList"></a><div id="getPrivacyList-def"><a name="L160"></a><tt class="py-lineno">160</tt> <a class="py-toggle" href="#" id="getPrivacyList-toggle" onclick="return toggle('getPrivacyList');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#getPrivacyList">getPrivacyList</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">listname</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="getPrivacyList-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="getPrivacyList-expanded"><a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"><tt class="py-docstring"> Request specific privacy list listname. Returns list of XML nodes (rules)</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-docstring"> taken from the server responce.</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-keyword">def</tt> <tt class="py-def-name">_on_response</tt><tt class="py-op">(</tt><tt class="py-param">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-98" class="py-name"><a title="nbxmpp.protocol.isResultNode" class="py-name" href="#" onclick="return doclink('link-98', 'isResultNode', 'link-5');">isResultNode</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-99', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-100" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-100', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt id="link-101" class="py-name"><a title="nbxmpp.features_nb.PRIVACY_LIST_RECEIVED" class="py-name" href="#" onclick="return doclink('link-101', 'PRIVACY_LIST_RECEIVED', 'link-66');">PRIVACY_LIST_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.Event" class="py-name" href="#" onclick="return doclink('link-102', 'Event', 'link-23');">Event</a></tt><tt class="py-op">(</tt><tt id="link-103" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-103', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt id="link-104" class="py-name"><a title="nbxmpp.features_nb.PRIVACY_LIST_RECEIVED" class="py-name" href="#" onclick="return doclink('link-104', 'PRIVACY_LIST_RECEIVED', 'link-66');">PRIVACY_LIST_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-105" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-105', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt id="link-106" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-106', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-107" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-107', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'list'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'name'</tt><tt class="py-op">:</tt> <tt class="py-name">listname</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-name">disp</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.SendAndCallForResponse" class="py-name" href="#" onclick="return doclink('link-108', 'SendAndCallForResponse', 'link-8');">SendAndCallForResponse</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">_on_response</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> </tt>
+<a name="setActivePrivacyList"></a><div id="setActivePrivacyList-def"><a name="L173"></a><tt class="py-lineno">173</tt> <a class="py-toggle" href="#" id="setActivePrivacyList-toggle" onclick="return toggle('setActivePrivacyList');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#setActivePrivacyList">setActivePrivacyList</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">listname</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-string">'active'</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="setActivePrivacyList-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="setActivePrivacyList-expanded"><a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"><tt class="py-docstring"> Switch privacy list 'listname' to specified type. By default the type is</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"><tt class="py-docstring"> 'active'. Returns true on success.</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">listname</tt><tt class="py-op">:</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'name'</tt><tt class="py-op">:</tt><tt class="py-name">listname</tt><tt class="py-op">}</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-109" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-109', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-110" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-110', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-111" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-111', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt id="link-112" class="py-name"><a title="nbxmpp.features_nb._on_default_response" class="py-name" href="#" onclick="return doclink('link-112', '_on_default_response', 'link-54');">_on_default_response</a></tt><tt class="py-op">(</tt><tt class="py-name">disp</tt><tt class="py-op">,</tt> <tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">cb</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> </tt>
+<a name="setDefaultPrivacyList"></a><div id="setDefaultPrivacyList-def"><a name="L185"></a><tt class="py-lineno">185</tt> <a class="py-toggle" href="#" id="setDefaultPrivacyList-toggle" onclick="return toggle('setDefaultPrivacyList');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#setDefaultPrivacyList">setDefaultPrivacyList</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">listname</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="setDefaultPrivacyList-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="setDefaultPrivacyList-expanded"><a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"><tt class="py-docstring"> Set the default privacy list as 'listname'. Returns true on success</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-113" class="py-name" targets="Function nbxmpp.features_nb.setActivePrivacyList()=nbxmpp.features_nb-module.html#setActivePrivacyList"><a title="nbxmpp.features_nb.setActivePrivacyList" class="py-name" href="#" onclick="return doclink('link-113', 'setActivePrivacyList', 'link-113');">setActivePrivacyList</a></tt><tt class="py-op">(</tt><tt class="py-name">disp</tt><tt class="py-op">,</tt> <tt class="py-name">listname</tt><tt class="py-op">,</tt> <tt class="py-string">'default'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> </tt>
+<a name="setPrivacyList"></a><div id="setPrivacyList-def"><a name="L191"></a><tt class="py-lineno">191</tt> <a class="py-toggle" href="#" id="setPrivacyList-toggle" onclick="return toggle('setPrivacyList');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#setPrivacyList">setPrivacyList</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">listname</tt><tt class="py-op">,</tt> <tt class="py-param">tags</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="setPrivacyList-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="setPrivacyList-expanded"><a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"><tt class="py-docstring"> Set the ruleset</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"><tt class="py-docstring"> 'list' should be the simpleXML node formatted according to RFC 3921</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"><tt class="py-docstring"> (XMPP-IM) I.e. Node('list',{'name':listname},payload=[...]).</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"><tt class="py-docstring"> Returns true on success.</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-114" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-114', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-115" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-115', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-name">list_query</tt> <tt class="py-op">=</tt> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-116', 'getTag', 'link-26');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-117', 'setTag', 'link-48');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'list'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'name'</tt><tt class="py-op">:</tt> <tt class="py-name">listname</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">item</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tags</tt><tt class="py-op">:</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'type'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">item</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'value'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">item</tt><tt class="py-op">:</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">item_tag</tt> <tt class="py-op">=</tt> <tt class="py-name">list_query</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-118', 'setTag', 'link-48');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'action'</tt><tt class="py-op">:</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'action'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-string">'order'</tt><tt class="py-op">:</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'order'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-string">'value'</tt><tt class="py-op">:</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'value'</tt><tt class="py-op">]</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">item_tag</tt> <tt class="py-op">=</tt> <tt class="py-name">list_query</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-119', 'setTag', 'link-48');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'action'</tt><tt class="py-op">:</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'action'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-string">'order'</tt><tt class="py-op">:</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'order'</tt><tt class="py-op">]</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'child'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">item</tt><tt class="py-op">:</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child_tag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'child'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">item_tag</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-120', 'setTag', 'link-48');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-name">child_tag</tt><tt class="py-op">)</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt id="link-121" class="py-name"><a title="nbxmpp.features_nb._on_default_response" class="py-name" href="#" onclick="return doclink('link-121', '_on_default_response', 'link-54');">_on_default_response</a></tt><tt class="py-op">(</tt><tt class="py-name">disp</tt><tt class="py-op">,</tt> <tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> </tt>
+<a name="delPrivacyList"></a><div id="delPrivacyList-def"><a name="L215"></a><tt class="py-lineno">215</tt> <a class="py-toggle" href="#" id="delPrivacyList-toggle" onclick="return toggle('delPrivacyList');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.features_nb-module.html#delPrivacyList">delPrivacyList</a><tt class="py-op">(</tt><tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">listname</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="delPrivacyList-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="delPrivacyList-expanded"><a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-docstring">''' Deletes privacy list 'listname'. Returns true on success. '''</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-122" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-122', 'Iq', 'link-4');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-123" class="py-name"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-123', 'NS_PRIVACY', 'link-2');">NS_PRIVACY</a></tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-124" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-124', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'list'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'name'</tt><tt class="py-op">:</tt><tt class="py-name">listname</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt id="link-125" class="py-name"><a title="nbxmpp.features_nb._on_default_response" class="py-name" href="#" onclick="return doclink('link-125', '_on_default_response', 'link-54');">_on_default_response</a></tt><tt class="py-op">(</tt><tt class="py-name">disp</tt><tt class="py-op">,</tt> <tt class="py-name">iq</tt><tt class="py-op">,</tt> <tt class="py-name">cb</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.idlequeue-module.html b/doc/apidocs/nbxmpp.idlequeue-module.html
new file mode 100644
index 0000000..238bc02
--- /dev/null
+++ b/doc/apidocs/nbxmpp.idlequeue-module.html
@@ -0,0 +1,551 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.idlequeue</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;idlequeue
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.idlequeue-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module idlequeue</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html">source&nbsp;code</a></span></p>
+Idlequeues are Gajim's network heartbeat. Transports can be plugged as idle
+objects and be informed about possible IO
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.IdleObject-class.html" class="summary-name">IdleObject</a><br />
+ Idle listener interface. Listed methods are called by IdleQueue.
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.IdleCommand-class.html" class="summary-name">IdleCommand</a><br />
+ Can be subclassed to execute commands asynchronously by the idlequeue.
+Result will be optained via file descriptor of created pipe
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html" class="summary-name">IdleQueue</a><br />
+ IdleQueue provide three distinct time based features. Uses select.poll()
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.SelectIdleQueue-class.html" class="summary-name">SelectIdleQueue</a><br />
+ Extends IdleQueue to use select.select() for polling
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.GlibIdleQueue-class.html" class="summary-name">GlibIdleQueue</a><br />
+ Extends IdleQueue to use glib io_add_wath, instead of select/poll In another
+'non gui' implementation of Gajim IdleQueue can be used safetly
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue-module.html#get_idlequeue" class="summary-sig-name">get_idlequeue</a>()</span><br />
+ Get an appropriate idlequeue</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#get_idlequeue">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.idlequeue')">logging.getLogger('nbxmpp.idlequeue')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#HAVE_GOBJECT" class="summary-name">HAVE_GOBJECT</a> = <code title="True">True</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#FLAG_WRITE" class="summary-name">FLAG_WRITE</a> = <code title="20">20</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#FLAG_READ" class="summary-name">FLAG_READ</a> = <code title="19">19</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#FLAG_READ_WRITE" class="summary-name">FLAG_READ_WRITE</a> = <code title="23">23</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#FLAG_CLOSE" class="summary-name">FLAG_CLOSE</a> = <code title="16">16</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#PENDING_READ" class="summary-name">PENDING_READ</a> = <code title="3">3</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#PENDING_WRITE" class="summary-name">PENDING_WRITE</a> = <code title="4">4</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#IS_CLOSED" class="summary-name">IS_CLOSED</a> = <code title="16">16</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="os">os</span>,
+ <span title="select">select</span>,
+ <span title="logging">logging</span>,
+ <span title="gobject">gobject</span>,
+ <span title="subprocess.STDOUT">STDOUT</span>,
+ <span title="subprocess.PIPE">PIPE</span>,
+ <span title="subprocess.call">call</span>,
+ <span title="subprocess.CalledProcessError">CalledProcessError</span>,
+ <span title="subprocess.Popen">Popen</span>,
+ <span title="subprocess.check_call">check_call</span>,
+ <span title="subprocess.check_output">check_output</span>,
+ <span title="fcntl">fcntl</span>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="get_idlequeue"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_idlequeue</span>()</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#get_idlequeue">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get an appropriate idlequeue
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.idlequeue')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="HAVE_GOBJECT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">HAVE_GOBJECT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+True
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="FLAG_WRITE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">FLAG_WRITE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+20
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="FLAG_READ"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">FLAG_READ</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+19
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="FLAG_READ_WRITE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">FLAG_READ_WRITE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+23
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="FLAG_CLOSE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">FLAG_CLOSE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+16
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PENDING_READ"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PENDING_READ</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+3
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PENDING_WRITE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PENDING_WRITE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+4
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="IS_CLOSED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">IS_CLOSED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+16
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.idlequeue-pysrc.html b/doc/apidocs/nbxmpp.idlequeue-pysrc.html
new file mode 100644
index 0000000..3bfc63d
--- /dev/null
+++ b/doc/apidocs/nbxmpp.idlequeue-pysrc.html
@@ -0,0 +1,812 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.idlequeue</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;idlequeue
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.idlequeue-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.idlequeue-module.html">Module nbxmpp.idlequeue</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## idlequeue.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2006 Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-docstring">Idlequeues are Gajim's network heartbeat. Transports can be plugged as idle</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">objects and be informed about possible IO</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">select</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-0', 'log', 'link-0');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.idlequeue'</tt><tt class="py-op">)</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment"># needed for get_idleqeue</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">gobject</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> <tt id="link-1" class="py-name" targets="Variable nbxmpp.idlequeue.HAVE_GOBJECT=nbxmpp.idlequeue-module.html#HAVE_GOBJECT"><a title="nbxmpp.idlequeue.HAVE_GOBJECT" class="py-name" href="#" onclick="return doclink('link-1', 'HAVE_GOBJECT', 'link-1');">HAVE_GOBJECT</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> <tt id="link-2" class="py-name"><a title="nbxmpp.idlequeue.HAVE_GOBJECT" class="py-name" href="#" onclick="return doclink('link-2', 'HAVE_GOBJECT', 'link-1');">HAVE_GOBJECT</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment"># needed for idlecommand</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Variable nbxmpp.name=nbxmpp-module.html#name,Variable nbxmpp.protocol.name=nbxmpp.protocol-module.html#name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-3', 'name', 'link-3');">name</a></tt> <tt class="py-op">==</tt> <tt class="py-string">'nt'</tt><tt class="py-op">:</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt class="py-name">subprocess</tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> <tt class="py-comment"># python24 only. we ask this for Windows</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-keyword">elif</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-4', 'name', 'link-3');">name</a></tt> <tt class="py-op">==</tt> <tt class="py-string">'posix'</tt><tt class="py-op">:</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">fcntl</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable nbxmpp.idlequeue.FLAG_WRITE=nbxmpp.idlequeue-module.html#FLAG_WRITE"><a title="nbxmpp.idlequeue.FLAG_WRITE" class="py-name" href="#" onclick="return doclink('link-5', 'FLAG_WRITE', 'link-5');">FLAG_WRITE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">20</tt> <tt class="py-comment"># write only</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable nbxmpp.idlequeue.FLAG_READ=nbxmpp.idlequeue-module.html#FLAG_READ"><a title="nbxmpp.idlequeue.FLAG_READ" class="py-name" href="#" onclick="return doclink('link-6', 'FLAG_READ', 'link-6');">FLAG_READ</a></tt> <tt class="py-op">=</tt> <tt class="py-number">19</tt> <tt class="py-comment"># read only</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt id="link-7" class="py-name" targets="Variable nbxmpp.idlequeue.FLAG_READ_WRITE=nbxmpp.idlequeue-module.html#FLAG_READ_WRITE"><a title="nbxmpp.idlequeue.FLAG_READ_WRITE" class="py-name" href="#" onclick="return doclink('link-7', 'FLAG_READ_WRITE', 'link-7');">FLAG_READ_WRITE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">23</tt> <tt class="py-comment"># read and write</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable nbxmpp.idlequeue.FLAG_CLOSE=nbxmpp.idlequeue-module.html#FLAG_CLOSE"><a title="nbxmpp.idlequeue.FLAG_CLOSE" class="py-name" href="#" onclick="return doclink('link-8', 'FLAG_CLOSE', 'link-8');">FLAG_CLOSE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">16</tt> <tt class="py-comment"># wait for close</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt id="link-9" class="py-name" targets="Variable nbxmpp.idlequeue.PENDING_READ=nbxmpp.idlequeue-module.html#PENDING_READ"><a title="nbxmpp.idlequeue.PENDING_READ" class="py-name" href="#" onclick="return doclink('link-9', 'PENDING_READ', 'link-9');">PENDING_READ</a></tt> <tt class="py-op">=</tt> <tt class="py-number">3</tt> <tt class="py-comment"># waiting read event</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable nbxmpp.idlequeue.PENDING_WRITE=nbxmpp.idlequeue-module.html#PENDING_WRITE"><a title="nbxmpp.idlequeue.PENDING_WRITE" class="py-name" href="#" onclick="return doclink('link-10', 'PENDING_WRITE', 'link-10');">PENDING_WRITE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">4</tt> <tt class="py-comment"># waiting write event</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt id="link-11" class="py-name" targets="Variable nbxmpp.idlequeue.IS_CLOSED=nbxmpp.idlequeue-module.html#IS_CLOSED"><a title="nbxmpp.idlequeue.IS_CLOSED" class="py-name" href="#" onclick="return doclink('link-11', 'IS_CLOSED', 'link-11');">IS_CLOSED</a></tt> <tt class="py-op">=</tt> <tt class="py-number">16</tt> <tt class="py-comment"># channel closed</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> </tt>
+<a name="get_idlequeue"></a><div id="get_idlequeue-def"><a name="L49"></a><tt class="py-lineno"> 49</tt> <a class="py-toggle" href="#" id="get_idlequeue-toggle" onclick="return toggle('get_idlequeue');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue-module.html#get_idlequeue">get_idlequeue</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="get_idlequeue-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="get_idlequeue-expanded"><a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-docstring"> Get an appropriate idlequeue</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-12', 'name', 'link-3');">name</a></tt> <tt class="py-op">==</tt> <tt class="py-string">'nt'</tt><tt class="py-op">:</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-comment"># gobject.io_add_watch does not work on windows</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-13" class="py-name" targets="Class nbxmpp.idlequeue.SelectIdleQueue=nbxmpp.idlequeue.SelectIdleQueue-class.html"><a title="nbxmpp.idlequeue.SelectIdleQueue" class="py-name" href="#" onclick="return doclink('link-13', 'SelectIdleQueue', 'link-13');">SelectIdleQueue</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-14" class="py-name"><a title="nbxmpp.idlequeue.HAVE_GOBJECT" class="py-name" href="#" onclick="return doclink('link-14', 'HAVE_GOBJECT', 'link-1');">HAVE_GOBJECT</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-comment"># Gajim's default Idlequeue</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-15" class="py-name" targets="Class nbxmpp.idlequeue.GlibIdleQueue=nbxmpp.idlequeue.GlibIdleQueue-class.html"><a title="nbxmpp.idlequeue.GlibIdleQueue" class="py-name" href="#" onclick="return doclink('link-15', 'GlibIdleQueue', 'link-15');">GlibIdleQueue</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-comment"># GUI less implementation</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-16" class="py-name"><a title="nbxmpp.idlequeue.SelectIdleQueue" class="py-name" href="#" onclick="return doclink('link-16', 'SelectIdleQueue', 'link-13');">SelectIdleQueue</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> </tt>
+<a name="IdleObject"></a><div id="IdleObject-def"><a name="L65"></a><tt class="py-lineno"> 65</tt> <a class="py-toggle" href="#" id="IdleObject-toggle" onclick="return toggle('IdleObject');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a><tt class="py-op">:</tt> </tt>
+</div><div id="IdleObject-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IdleObject-expanded"><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> Idle listener interface. Listed methods are called by IdleQueue.</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> </tt>
+<a name="IdleObject.__init__"></a><div id="IdleObject.__init__-def"><a name="L70"></a><tt class="py-lineno"> 70</tt> <a class="py-toggle" href="#" id="IdleObject.__init__-toggle" onclick="return toggle('IdleObject.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleObject-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleObject.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleObject.__init__-expanded"><a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> <tt class="py-comment">#: filedescriptor, must be unique for each IdleObject</tt> </tt>
+</div><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> </tt>
+<a name="IdleObject.pollend"></a><div id="IdleObject.pollend-def"><a name="L73"></a><tt class="py-lineno"> 73</tt> <a class="py-toggle" href="#" id="IdleObject.pollend-toggle" onclick="return toggle('IdleObject.pollend');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleObject-class.html#pollend">pollend</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleObject.pollend-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleObject.pollend-expanded"><a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> Called on stream failure</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> </tt>
+<a name="IdleObject.pollin"></a><div id="IdleObject.pollin-def"><a name="L79"></a><tt class="py-lineno"> 79</tt> <a class="py-toggle" href="#" id="IdleObject.pollin-toggle" onclick="return toggle('IdleObject.pollin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleObject-class.html#pollin">pollin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleObject.pollin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleObject.pollin-expanded"><a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> Called on new read event</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
+<a name="IdleObject.pollout"></a><div id="IdleObject.pollout-def"><a name="L85"></a><tt class="py-lineno"> 85</tt> <a class="py-toggle" href="#" id="IdleObject.pollout-toggle" onclick="return toggle('IdleObject.pollout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleObject-class.html#pollout">pollout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleObject.pollout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleObject.pollout-expanded"><a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-docstring"> Called on new write event (connect in sockets is a pollout)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> </tt>
+<a name="IdleObject.read_timeout"></a><div id="IdleObject.read_timeout-def"><a name="L91"></a><tt class="py-lineno"> 91</tt> <a class="py-toggle" href="#" id="IdleObject.read_timeout-toggle" onclick="return toggle('IdleObject.read_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleObject-class.html#read_timeout">read_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleObject.read_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleObject.read_timeout-expanded"><a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt class="py-docstring"> Called when timeout happened</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div></div><a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand"></a><div id="IdleCommand-def"><a name="L98"></a><tt class="py-lineno"> 98</tt> <a class="py-toggle" href="#" id="IdleCommand-toggle" onclick="return toggle('IdleCommand');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html">IdleCommand</a><tt class="py-op">(</tt><tt class="py-base-class">IdleObject</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IdleCommand-expanded"><a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-docstring"> Can be subclassed to execute commands asynchronously by the idlequeue.</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt class="py-docstring"> Result will be optained via file descriptor of created pipe</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.__init__"></a><div id="IdleCommand.__init__-def"><a name="L104"></a><tt class="py-lineno">104</tt> <a class="py-toggle" href="#" id="IdleCommand.__init__-toggle" onclick="return toggle('IdleCommand.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">on_result</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.__init__-expanded"><a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt id="link-17" class="py-name" targets="Class nbxmpp.idlequeue.IdleObject=nbxmpp.idlequeue.IdleObject-class.html"><a title="nbxmpp.idlequeue.IdleObject" class="py-name" href="#" onclick="return doclink('link-17', 'IdleObject', 'link-17');">IdleObject</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-18', '__init__', 'link-18');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-comment"># how long (sec.) to wait for result ( 0 - forever )</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-comment"># it is a class var, instead of a constant and we can override it.</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">commandtimeout</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-comment"># when we have some kind of result (valid, ot not) we call this handler</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result_handler</tt> <tt class="py-op">=</tt> <tt class="py-name">on_result</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-comment"># if it is True, we can safetely execute the command</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">canexecute</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Module nbxmpp.idlequeue=nbxmpp.idlequeue-module.html"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-19', 'idlequeue', 'link-19');">idlequeue</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result</tt> <tt class="py-op">=</tt><tt class="py-string">''</tt> </tt>
+</div><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.set_idlequeue"></a><div id="IdleCommand.set_idlequeue-def"><a name="L116"></a><tt class="py-lineno">116</tt> <a class="py-toggle" href="#" id="IdleCommand.set_idlequeue-toggle" onclick="return toggle('IdleCommand.set_idlequeue');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#set_idlequeue">set_idlequeue</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">idlequeue</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.set_idlequeue-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.set_idlequeue-expanded"><a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-20', 'idlequeue', 'link-19');">idlequeue</a></tt> <tt class="py-op">=</tt> <tt id="link-21" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-21', 'idlequeue', 'link-19');">idlequeue</a></tt> </tt>
+</div><a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand._return_result"></a><div id="IdleCommand._return_result-def"><a name="L119"></a><tt class="py-lineno">119</tt> <a class="py-toggle" href="#" id="IdleCommand._return_result-toggle" onclick="return toggle('IdleCommand._return_result');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#_return_result">_return_result</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand._return_result-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand._return_result-expanded"><a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result_handler</tt><tt class="py-op">:</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result_handler</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result_handler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand._compose_command_args"></a><div id="IdleCommand._compose_command_args-def"><a name="L124"></a><tt class="py-lineno">124</tt> <a class="py-toggle" href="#" id="IdleCommand._compose_command_args-toggle" onclick="return toggle('IdleCommand._compose_command_args');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_args">_compose_command_args</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand._compose_command_args-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand._compose_command_args-expanded"><a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-string">'echo'</tt><tt class="py-op">,</tt> <tt class="py-string">'da'</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand._compose_command_line"></a><div id="IdleCommand._compose_command_line-def"><a name="L127"></a><tt class="py-lineno">127</tt> <a class="py-toggle" href="#" id="IdleCommand._compose_command_line-toggle" onclick="return toggle('IdleCommand._compose_command_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_line">_compose_command_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand._compose_command_line-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand._compose_command_line-expanded"><a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> Return one line representation of command and its arguments</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">reduce</tt><tt class="py-op">(</tt><tt class="py-keyword">lambda</tt> <tt class="py-name">left</tt><tt class="py-op">,</tt> <tt class="py-name">right</tt><tt class="py-op">:</tt> <tt class="py-name">left</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">right</tt><tt class="py-op">,</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand._compose_command_args()=nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_args"><a title="nbxmpp.idlequeue.IdleCommand._compose_command_args" class="py-name" href="#" onclick="return doclink('link-22', '_compose_command_args', 'link-22');">_compose_command_args</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.wait_child"></a><div id="IdleCommand.wait_child-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="IdleCommand.wait_child-toggle" onclick="return toggle('IdleCommand.wait_child');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#wait_child">wait_child</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.wait_child-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.wait_child-expanded"><a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-comment"># result timeout</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">endtime</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-23', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.current_time()=nbxmpp.idlequeue.IdleQueue-class.html#current_time"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-24', 'current_time', 'link-24');">current_time</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand._return_result()=nbxmpp.idlequeue.IdleCommand-class.html#_return_result"><a title="nbxmpp.idlequeue.IdleCommand._return_result" class="py-name" href="#" onclick="return doclink('link-25', '_return_result', 'link-25');">_return_result</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-comment"># child is still active, continue to wait</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-26', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.set_alarm()=nbxmpp.idlequeue.IdleQueue-class.html#set_alarm"><a title="nbxmpp.idlequeue.IdleQueue.set_alarm" class="py-name" href="#" onclick="return doclink('link-27', 'set_alarm', 'link-27');">set_alarm</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.wait_child()=nbxmpp.idlequeue.IdleCommand-class.html#wait_child"><a title="nbxmpp.idlequeue.IdleCommand.wait_child" class="py-name" href="#" onclick="return doclink('link-28', 'wait_child', 'link-28');">wait_child</a></tt><tt class="py-op">,</tt> <tt class="py-number">0.1</tt><tt class="py-op">)</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-comment"># child has quit</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand._return_result" class="py-name" href="#" onclick="return doclink('link-29', '_return_result', 'link-25');">_return_result</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.start"></a><div id="IdleCommand.start-def"><a name="L151"></a><tt class="py-lineno">151</tt> <a class="py-toggle" href="#" id="IdleCommand.start-toggle" onclick="return toggle('IdleCommand.start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#start">start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.start-expanded"><a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">canexecute</tt><tt class="py-op">:</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand._return_result" class="py-name" href="#" onclick="return doclink('link-30', '_return_result', 'link-25');">_return_result</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-31', 'name', 'link-3');">name</a></tt> <tt class="py-op">==</tt> <tt class="py-string">'nt'</tt><tt class="py-op">:</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand._start_nt()=nbxmpp.idlequeue.IdleCommand-class.html#_start_nt"><a title="nbxmpp.idlequeue.IdleCommand._start_nt" class="py-name" href="#" onclick="return doclink('link-32', '_start_nt', 'link-32');">_start_nt</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-33', 'name', 'link-3');">name</a></tt> <tt class="py-op">==</tt> <tt class="py-string">'posix'</tt><tt class="py-op">:</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand._start_posix()=nbxmpp.idlequeue.IdleCommand-class.html#_start_posix"><a title="nbxmpp.idlequeue.IdleCommand._start_posix" class="py-name" href="#" onclick="return doclink('link-34', '_start_posix', 'link-34');">_start_posix</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand._start_nt"></a><div id="IdleCommand._start_nt-def"><a name="L161"></a><tt class="py-lineno">161</tt> <a class="py-toggle" href="#" id="IdleCommand._start_nt-toggle" onclick="return toggle('IdleCommand._start_nt');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#_start_nt">_start_nt</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand._start_nt-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand._start_nt-expanded"><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-comment"># if program is started from noninteraactive shells stdin is closed and</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-comment"># cannot be forwarded, so we have to keep it open</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt> <tt class="py-op">=</tt> <tt class="py-name">Popen</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand._compose_command_args" class="py-name" href="#" onclick="return doclink('link-35', '_compose_command_args', 'link-22');">_compose_command_args</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">stdout</tt><tt class="py-op">=</tt><tt class="py-name">PIPE</tt><tt class="py-op">,</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">bufsize</tt> <tt class="py-op">=</tt> <tt class="py-number">1024</tt><tt class="py-op">,</tt> <tt class="py-name">shell</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">stderr</tt> <tt class="py-op">=</tt> <tt class="py-name">STDOUT</tt><tt class="py-op">,</tt> <tt class="py-name">stdin</tt> <tt class="py-op">=</tt> <tt class="py-name">PIPE</tt><tt class="py-op">)</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">commandtimeout</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">endtime</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-36', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-37', 'current_time', 'link-24');">current_time</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">commandtimeout</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-38', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.set_alarm" class="py-name" href="#" onclick="return doclink('link-39', 'set_alarm', 'link-27');">set_alarm</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.wait_child" class="py-name" href="#" onclick="return doclink('link-40', 'wait_child', 'link-28');">wait_child</a></tt><tt class="py-op">,</tt> <tt class="py-number">0.1</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand._start_posix"></a><div id="IdleCommand._start_posix-def"><a name="L170"></a><tt class="py-lineno">170</tt> <a class="py-toggle" href="#" id="IdleCommand._start_posix-toggle" onclick="return toggle('IdleCommand._start_posix');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#_start_posix">_start_posix</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand._start_posix-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand._start_posix-expanded"><a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">popen</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand._compose_command_line()=nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_line"><a title="nbxmpp.idlequeue.IdleCommand._compose_command_line" class="py-name" href="#" onclick="return doclink('link-41', '_compose_command_line', 'link-41');">_compose_command_line</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">fcntl</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">,</tt> <tt class="py-name">fcntl</tt><tt class="py-op">.</tt><tt class="py-name">F_SETFL</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">O_NONBLOCK</tt><tt class="py-op">)</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-42', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.plug_idle()=nbxmpp.idlequeue.IdleQueue-class.html#plug_idle"><a title="nbxmpp.idlequeue.IdleQueue.plug_idle" class="py-name" href="#" onclick="return doclink('link-43', 'plug_idle', 'link-43');">plug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">commandtimeout</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-44', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-45" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.set_read_timeout()=nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout"><a title="nbxmpp.idlequeue.IdleQueue.set_read_timeout" class="py-name" href="#" onclick="return doclink('link-45', 'set_read_timeout', 'link-45');">set_read_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">commandtimeout</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.end"></a><div id="IdleCommand.end-def"><a name="L178"></a><tt class="py-lineno">178</tt> <a class="py-toggle" href="#" id="IdleCommand.end-toggle" onclick="return toggle('IdleCommand.end');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#end">end</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.end-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.end-expanded"><a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-46', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.unplug_idle()=nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle"><a title="nbxmpp.idlequeue.IdleQueue.unplug_idle" class="py-name" href="#" onclick="return doclink('link-47', 'unplug_idle', 'link-47');">unplug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.pollend"></a><div id="IdleCommand.pollend-def"><a name="L185"></a><tt class="py-lineno">185</tt> <a class="py-toggle" href="#" id="IdleCommand.pollend-toggle" onclick="return toggle('IdleCommand.pollend');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#pollend">pollend</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.pollend-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.pollend-expanded"><a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-48', 'idlequeue', 'link-19');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.remove_timeout()=nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout,Method nbxmpp.transports_nb.NonBlockingTCP.remove_timeout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout,Method nbxmpp.transports_nb.NonBlockingTransport.remove_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-49', 'remove_timeout', 'link-49');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.end()=nbxmpp.idlequeue.IdleCommand-class.html#end"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-50', 'end', 'link-50');">end</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand._return_result" class="py-name" href="#" onclick="return doclink('link-51', '_return_result', 'link-25');">_return_result</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.pollin"></a><div id="IdleCommand.pollin-def"><a name="L190"></a><tt class="py-lineno">190</tt> <a class="py-toggle" href="#" id="IdleCommand.pollin-toggle" onclick="return toggle('IdleCommand.pollin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#pollin">pollin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.pollin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.pollin-expanded"><a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">res</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pipe</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">res</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">res</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.pollend()=nbxmpp.idlequeue.IdleCommand-class.html#pollend,Method nbxmpp.idlequeue.IdleObject.pollend()=nbxmpp.idlequeue.IdleObject-class.html#pollend,Method nbxmpp.transports_nb.NonBlockingTCP.pollend()=nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend"><a title="nbxmpp.idlequeue.IdleCommand.pollend
+nbxmpp.idlequeue.IdleObject.pollend
+nbxmpp.transports_nb.NonBlockingTCP.pollend" class="py-name" href="#" onclick="return doclink('link-52', 'pollend', 'link-52');">pollend</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">result</tt> <tt class="py-op">+=</tt> <tt class="py-name">res</tt> </tt>
+</div><a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> </tt>
+<a name="IdleCommand.read_timeout"></a><div id="IdleCommand.read_timeout-def"><a name="L200"></a><tt class="py-lineno">200</tt> <a class="py-toggle" href="#" id="IdleCommand.read_timeout-toggle" onclick="return toggle('IdleCommand.read_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleCommand-class.html#read_timeout">read_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleCommand.read_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleCommand.read_timeout-expanded"><a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-53', 'end', 'link-50');">end</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand._return_result" class="py-name" href="#" onclick="return doclink('link-54', '_return_result', 'link-25');">_return_result</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue"></a><div id="IdleQueue-def"><a name="L205"></a><tt class="py-lineno">205</tt> <a class="py-toggle" href="#" id="IdleQueue-toggle" onclick="return toggle('IdleQueue');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IdleQueue-expanded"><a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-docstring"> IdleQueue provide three distinct time based features. Uses select.poll()</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"><tt class="py-docstring"> 1. Alarm timeout: Execute a callback after foo seconds</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"><tt class="py-docstring"> 2. Timeout event: Call read_timeout() of an plugged object if a timeout</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"><tt class="py-docstring"> has been set, but not removed in time.</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"><tt class="py-docstring"> 3. Check file descriptor of plugged objects for read, write and error</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"><tt class="py-docstring"> events</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-comment"># (timeout, boolean)</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-comment"># Boolean is True if timeout is specified in seconds, False means miliseconds</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt id="link-55" class="py-name" targets="Variable nbxmpp.idlequeue.GlibIdleQueue.PROCESS_TIMEOUT=nbxmpp.idlequeue.GlibIdleQueue-class.html#PROCESS_TIMEOUT,Variable nbxmpp.idlequeue.IdleQueue.PROCESS_TIMEOUT=nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT"><a title="nbxmpp.idlequeue.GlibIdleQueue.PROCESS_TIMEOUT
+nbxmpp.idlequeue.IdleQueue.PROCESS_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-55', 'PROCESS_TIMEOUT', 'link-55');">PROCESS_TIMEOUT</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">100</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.__init__"></a><div id="IdleQueue.__init__-def"><a name="L221"></a><tt class="py-lineno">221</tt> <a class="py-toggle" href="#" id="IdleQueue.__init__-toggle" onclick="return toggle('IdleQueue.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.__init__-expanded"><a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-comment"># when there is a timeout it executes obj.read_timeout()</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-comment"># timeout is not removed automatically!</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-comment"># {fd1: {timeout1: func1, timeout2: func2}}</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-comment"># timout are unique (timeout1 must be != timeout2)</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-comment"># If func1 is None, read_time function is called</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-comment"># cb, which are executed after XX sec., alarms are removed automatically</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Method nbxmpp.idlequeue.GlibIdleQueue._init_idle()=nbxmpp.idlequeue.GlibIdleQueue-class.html#_init_idle,Method nbxmpp.idlequeue.IdleQueue._init_idle()=nbxmpp.idlequeue.IdleQueue-class.html#_init_idle,Method nbxmpp.idlequeue.SelectIdleQueue._init_idle()=nbxmpp.idlequeue.SelectIdleQueue-class.html#_init_idle"><a title="nbxmpp.idlequeue.GlibIdleQueue._init_idle
+nbxmpp.idlequeue.IdleQueue._init_idle
+nbxmpp.idlequeue.SelectIdleQueue._init_idle" class="py-name" href="#" onclick="return doclink('link-56', '_init_idle', 'link-56');">_init_idle</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue._init_idle"></a><div id="IdleQueue._init_idle-def"><a name="L235"></a><tt class="py-lineno">235</tt> <a class="py-toggle" href="#" id="IdleQueue._init_idle-toggle" onclick="return toggle('IdleQueue._init_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#_init_idle">_init_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue._init_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue._init_idle-expanded"><a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"><tt class="py-docstring"> Hook method for subclassed. Will be called by __init__</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">selector</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.set_alarm"></a><div id="IdleQueue.set_alarm-def"><a name="L241"></a><tt class="py-lineno">241</tt> <a class="py-toggle" href="#" id="IdleQueue.set_alarm-toggle" onclick="return toggle('IdleQueue.set_alarm');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm">set_alarm</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">alarm_cb</tt><tt class="py-op">,</tt> <tt class="py-param">seconds</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.set_alarm-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.set_alarm-expanded"><a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"><tt class="py-docstring"> Set up a new alarm. alarm_cb will be called after specified seconds.</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-name">alarm_time</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-57', 'current_time', 'link-24');">current_time</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">seconds</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-comment"># almost impossible, but in case we have another alarm_cb at this time</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">alarm_time</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">:</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">alarm_cb</tt><tt class="py-op">)</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">alarm_cb</tt><tt class="py-op">]</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">alarm_time</tt> </tt>
+</div><a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.remove_alarm"></a><div id="IdleQueue.remove_alarm-def"><a name="L253"></a><tt class="py-lineno">253</tt> <a class="py-toggle" href="#" id="IdleQueue.remove_alarm-toggle" onclick="return toggle('IdleQueue.remove_alarm');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm">remove_alarm</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">alarm_cb</tt><tt class="py-op">,</tt> <tt class="py-param">alarm_time</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.remove_alarm-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.remove_alarm-expanded"><a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"><tt class="py-docstring"> Remove alarm callback alarm_cb scheduled on alarm_time. Returns True if</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"><tt class="py-docstring"> it was removed sucessfully, otherwise False</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">alarm_time</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">:</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-name">i</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-comment"># let's not modify the list inside the loop</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">alarm_cb</tt><tt class="py-op">:</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">i</tt> <tt class="py-op">!=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.remove_timeout"></a><div id="IdleQueue.remove_timeout-def"><a name="L273"></a><tt class="py-lineno">273</tt> <a class="py-toggle" href="#" id="IdleQueue.remove_timeout-toggle" onclick="return toggle('IdleQueue.remove_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout">remove_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.remove_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.remove_timeout-expanded"><a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"><tt class="py-docstring"> Remove the read timeout</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt id="link-58" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-58', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'read timeout removed for fd %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">:</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt><tt class="py-op">:</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">timeout</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.set_read_timeout"></a><div id="IdleQueue.set_read_timeout-def"><a name="L287"></a><tt class="py-lineno">287</tt> <a class="py-toggle" href="#" id="IdleQueue.set_read_timeout-toggle" onclick="return toggle('IdleQueue.set_read_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout">set_read_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">seconds</tt><tt class="py-op">,</tt> <tt class="py-param">func</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.set_read_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.set_read_timeout-expanded"><a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"><tt class="py-docstring"> Seta a new timeout. If it is not removed after specified seconds,</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"><tt class="py-docstring"> func or obj.read_timeout() will be called</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"><tt class="py-docstring"> A filedescriptor fd can have several timeouts.</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-name">log_txt</tt> <tt class="py-op">=</tt> <tt class="py-string">'read timeout set for fd %s on %s seconds'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">seconds</tt><tt class="py-op">)</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">func</tt><tt class="py-op">:</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">log_txt</tt> <tt class="py-op">+=</tt> <tt class="py-string">' with function '</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">func</tt><tt class="py-op">)</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt id="link-59" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-59', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-name">log_txt</tt><tt class="py-op">)</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-name">timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-60', 'current_time', 'link-24');">current_time</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">seconds</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">:</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">timeout</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">func</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-name">timeout</tt><tt class="py-op">:</tt> <tt class="py-name">func</tt><tt class="py-op">}</tt> </tt>
+</div><a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue._check_time_events"></a><div id="IdleQueue._check_time_events-def"><a name="L304"></a><tt class="py-lineno">304</tt> <a class="py-toggle" href="#" id="IdleQueue._check_time_events-toggle" onclick="return toggle('IdleQueue._check_time_events');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events">_check_time_events</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue._check_time_events-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue._check_time_events-expanded"><a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"><tt class="py-docstring"> Execute and remove alarm callbacks and execute func() or read_timeout()</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"><tt class="py-docstring"> for plugged objects if specified time has ellapsed</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt id="link-61" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-61', 'current_time', 'link-24');">current_time</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-62', 'current_time', 'link-24');">current_time</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">timeouts</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_timeouts</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">:</tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-63', 'remove_timeout', 'link-49');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">func</tt> <tt class="py-keyword">in</tt> <tt class="py-name">timeouts</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timeout</tt> <tt class="py-op">&gt;</tt> <tt id="link-64" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-64', 'current_time', 'link-24');">current_time</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">func</tt><tt class="py-op">:</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt id="link-65" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-65', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Calling %s for fd %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">func</tt><tt class="py-op">,</tt> <tt class="py-name">fd</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-name">func</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt id="link-66" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-66', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Calling read_timeout for fd %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.read_timeout()=nbxmpp.idlequeue.IdleCommand-class.html#read_timeout,Method nbxmpp.idlequeue.IdleObject.read_timeout()=nbxmpp.idlequeue.IdleObject-class.html#read_timeout,Method nbxmpp.transports_nb.NonBlockingTCP.read_timeout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout,Method nbxmpp.transports_nb.NonBlockingTransport.read_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout"><a title="nbxmpp.idlequeue.IdleCommand.read_timeout
+nbxmpp.idlequeue.IdleObject.read_timeout
+nbxmpp.transports_nb.NonBlockingTCP.read_timeout
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout" class="py-name" href="#" onclick="return doclink('link-67', 'read_timeout', 'link-67');">read_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-68', 'remove_timeout', 'link-49');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-name">times</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.keys()=nbxmpp.roster_nb.NonBlockingRoster-class.html#keys"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-69', 'keys', 'link-69');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">alarm_time</tt> <tt class="py-keyword">in</tt> <tt class="py-name">times</tt><tt class="py-op">:</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">alarm_time</tt> <tt class="py-op">&gt;</tt> <tt id="link-70" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-70', 'current_time', 'link-24');">current_time</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">alarm_time</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">:</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">callback</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-name">callback</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">alarm_time</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">:</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">alarms</tt><tt class="py-op">[</tt><tt class="py-name">alarm_time</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.plug_idle"></a><div id="IdleQueue.plug_idle-def"><a name="L336"></a><tt class="py-lineno">336</tt> <a class="py-toggle" href="#" id="IdleQueue.plug_idle-toggle" onclick="return toggle('IdleQueue.plug_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle">plug_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">obj</tt><tt class="py-op">,</tt> <tt class="py-param">writable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">readable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.plug_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.plug_idle-expanded"><a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"><tt class="py-docstring"> Plug an IdleObject into idlequeue. Filedescriptor fd must be set</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"><tt class="py-docstring"> :param obj: the IdleObject</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"><tt class="py-docstring"> :param writable: True if obj has data to sent</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"><tt class="py-docstring"> :param readable: True if obj expects data to be reiceived</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">:</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.unplug_idle" class="py-name" href="#" onclick="return doclink('link-71', 'unplug_idle', 'link-47');">unplug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">[</tt><tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">writable</tt><tt class="py-op">:</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">readable</tt><tt class="py-op">:</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-name">flags</tt> <tt class="py-op">=</tt> <tt id="link-72" class="py-name"><a title="nbxmpp.idlequeue.FLAG_WRITE" class="py-name" href="#" onclick="return doclink('link-72', 'FLAG_WRITE', 'link-5');">FLAG_WRITE</a></tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-name">flags</tt> <tt class="py-op">=</tt> <tt id="link-73" class="py-name"><a title="nbxmpp.idlequeue.FLAG_READ_WRITE" class="py-name" href="#" onclick="return doclink('link-73', 'FLAG_READ_WRITE', 'link-7');">FLAG_READ_WRITE</a></tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">readable</tt><tt class="py-op">:</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-name">flags</tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name"><a title="nbxmpp.idlequeue.FLAG_READ" class="py-name" href="#" onclick="return doclink('link-74', 'FLAG_READ', 'link-6');">FLAG_READ</a></tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-comment"># when we paused a FT, we expect only a close event</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-name">flags</tt> <tt class="py-op">=</tt> <tt id="link-75" class="py-name"><a title="nbxmpp.idlequeue.FLAG_CLOSE" class="py-name" href="#" onclick="return doclink('link-75', 'FLAG_CLOSE', 'link-8');">FLAG_CLOSE</a></tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method nbxmpp.idlequeue.GlibIdleQueue._add_idle()=nbxmpp.idlequeue.GlibIdleQueue-class.html#_add_idle,Method nbxmpp.idlequeue.IdleQueue._add_idle()=nbxmpp.idlequeue.IdleQueue-class.html#_add_idle,Method nbxmpp.idlequeue.SelectIdleQueue._add_idle()=nbxmpp.idlequeue.SelectIdleQueue-class.html#_add_idle"><a title="nbxmpp.idlequeue.GlibIdleQueue._add_idle
+nbxmpp.idlequeue.IdleQueue._add_idle
+nbxmpp.idlequeue.SelectIdleQueue._add_idle" class="py-name" href="#" onclick="return doclink('link-76', '_add_idle', 'link-76');">_add_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue._add_idle"></a><div id="IdleQueue._add_idle-def"><a name="L362"></a><tt class="py-lineno">362</tt> <a class="py-toggle" href="#" id="IdleQueue._add_idle-toggle" onclick="return toggle('IdleQueue._add_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#_add_idle">_add_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue._add_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue._add_idle-expanded"><a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"><tt class="py-docstring"> Hook method for subclasses, called by plug_idle</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">selector</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name" targets="Function nbxmpp.features_nb.register()=nbxmpp.features_nb-module.html#register"><a title="nbxmpp.features_nb.register" class="py-name" href="#" onclick="return doclink('link-77', 'register', 'link-77');">register</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.unplug_idle"></a><div id="IdleQueue.unplug_idle-def"><a name="L368"></a><tt class="py-lineno">368</tt> <a class="py-toggle" href="#" id="IdleQueue.unplug_idle-toggle" onclick="return toggle('IdleQueue.unplug_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle">unplug_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.unplug_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.unplug_idle-expanded"><a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"><tt class="py-docstring"> Remove plugged IdleObject, specified by filedescriptor fd</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">:</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method nbxmpp.idlequeue.GlibIdleQueue._remove_idle()=nbxmpp.idlequeue.GlibIdleQueue-class.html#_remove_idle,Method nbxmpp.idlequeue.IdleQueue._remove_idle()=nbxmpp.idlequeue.IdleQueue-class.html#_remove_idle,Method nbxmpp.idlequeue.SelectIdleQueue._remove_idle()=nbxmpp.idlequeue.SelectIdleQueue-class.html#_remove_idle"><a title="nbxmpp.idlequeue.GlibIdleQueue._remove_idle
+nbxmpp.idlequeue.IdleQueue._remove_idle
+nbxmpp.idlequeue.SelectIdleQueue._remove_idle" class="py-name" href="#" onclick="return doclink('link-78', '_remove_idle', 'link-78');">_remove_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.current_time"></a><div id="IdleQueue.current_time-def"><a name="L376"></a><tt class="py-lineno">376</tt> <a class="py-toggle" href="#" id="IdleQueue.current_time-toggle" onclick="return toggle('IdleQueue.current_time');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#current_time">current_time</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.current_time-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.current_time-expanded"><a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt class="py-name">time</tt> <tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue._remove_idle"></a><div id="IdleQueue._remove_idle-def"><a name="L380"></a><tt class="py-lineno">380</tt> <a class="py-toggle" href="#" id="IdleQueue._remove_idle-toggle" onclick="return toggle('IdleQueue._remove_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#_remove_idle">_remove_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue._remove_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue._remove_idle-expanded"><a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"><tt class="py-docstring"> Hook method for subclassed, called by unplug_idle</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">selector</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name" targets="Function nbxmpp.features_nb.unregister()=nbxmpp.features_nb-module.html#unregister"><a title="nbxmpp.features_nb.unregister" class="py-name" href="#" onclick="return doclink('link-79', 'unregister', 'link-79');">unregister</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue._process_events"></a><div id="IdleQueue._process_events-def"><a name="L386"></a><tt class="py-lineno">386</tt> <a class="py-toggle" href="#" id="IdleQueue._process_events-toggle" onclick="return toggle('IdleQueue._process_events');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#_process_events">_process_events</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue._process_events-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue._process_events-expanded"><a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method nbxmpp.bosh.KeyStack.get()=nbxmpp.bosh.KeyStack-class.html#get"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-80', 'get', 'link-80');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">obj</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.unplug_idle" class="py-name" href="#" onclick="return doclink('link-81', 'unplug_idle', 'link-47');">unplug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-name">read_write</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">flags</tt> <tt class="py-op">&amp;</tt> <tt id="link-82" class="py-name"><a title="nbxmpp.idlequeue.PENDING_READ" class="py-name" href="#" onclick="return doclink('link-82', 'PENDING_READ', 'link-9');">PENDING_READ</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-comment">#print 'waiting read on %d, flags are %d' % (fd, flags)</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.pollin()=nbxmpp.idlequeue.IdleCommand-class.html#pollin,Method nbxmpp.idlequeue.IdleObject.pollin()=nbxmpp.idlequeue.IdleObject-class.html#pollin,Method nbxmpp.transports_nb.NonBlockingTCP.pollin()=nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin"><a title="nbxmpp.idlequeue.IdleCommand.pollin
+nbxmpp.idlequeue.IdleObject.pollin
+nbxmpp.transports_nb.NonBlockingTCP.pollin" class="py-name" href="#" onclick="return doclink('link-83', 'pollin', 'link-83');">pollin</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-name">read_write</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">flags</tt> <tt class="py-op">&amp;</tt> <tt id="link-84" class="py-name"><a title="nbxmpp.idlequeue.PENDING_WRITE" class="py-name" href="#" onclick="return doclink('link-84', 'PENDING_WRITE', 'link-10');">PENDING_WRITE</a></tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">flags</tt> <tt class="py-op">&amp;</tt> <tt id="link-85" class="py-name"><a title="nbxmpp.idlequeue.IS_CLOSED" class="py-name" href="#" onclick="return doclink('link-85', 'IS_CLOSED', 'link-11');">IS_CLOSED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Method nbxmpp.idlequeue.IdleObject.pollout()=nbxmpp.idlequeue.IdleObject-class.html#pollout,Method nbxmpp.transports_nb.NonBlockingTCP.pollout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout"><a title="nbxmpp.idlequeue.IdleObject.pollout
+nbxmpp.transports_nb.NonBlockingTCP.pollout" class="py-name" href="#" onclick="return doclink('link-86', 'pollout', 'link-86');">pollout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt class="py-name">read_write</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">flags</tt> <tt class="py-op">&amp;</tt> <tt id="link-87" class="py-name"><a title="nbxmpp.idlequeue.IS_CLOSED" class="py-name" href="#" onclick="return doclink('link-87', 'IS_CLOSED', 'link-11');">IS_CLOSED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-comment"># io error, don't expect more events</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-88', 'remove_timeout', 'link-49');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.unplug_idle" class="py-name" href="#" onclick="return doclink('link-89', 'unplug_idle', 'link-47');">unplug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.pollend
+nbxmpp.idlequeue.IdleObject.pollend
+nbxmpp.transports_nb.NonBlockingTCP.pollend" class="py-name" href="#" onclick="return doclink('link-90', 'pollend', 'link-52');">pollend</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">read_write</tt><tt class="py-op">:</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> </tt>
+<a name="IdleQueue.process"></a><div id="IdleQueue.process-def"><a name="L413"></a><tt class="py-lineno">413</tt> <a class="py-toggle" href="#" id="IdleQueue.process-toggle" onclick="return toggle('IdleQueue.process');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.IdleQueue-class.html#process">process</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IdleQueue.process-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IdleQueue.process-expanded"><a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"><tt class="py-docstring"> Process idlequeue. Check for any pending timeout or alarm events. Call</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"><tt class="py-docstring"> IdleObjects on possible and requested read, write and error events on</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"><tt class="py-docstring"> their file descriptors</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"><tt class="py-docstring"> Call this in regular intervals.</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">:</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-comment"># check for timeouts/alert also when there are no active fds</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue._check_time_events()=nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events"><a title="nbxmpp.idlequeue.IdleQueue._check_time_events" class="py-name" href="#" onclick="return doclink('link-91', '_check_time_events', 'link-91');">_check_time_events</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-name">waiting_descriptors</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">selector</tt><tt class="py-op">.</tt><tt class="py-name">poll</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-name">waiting_descriptors</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-number">4</tt><tt class="py-op">:</tt> <tt class="py-comment"># interrupt</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt> <tt class="py-keyword">in</tt> <tt class="py-name">waiting_descriptors</tt><tt class="py-op">:</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name" targets="Method nbxmpp.idlequeue.GlibIdleQueue._process_events()=nbxmpp.idlequeue.GlibIdleQueue-class.html#_process_events,Method nbxmpp.idlequeue.IdleQueue._process_events()=nbxmpp.idlequeue.IdleQueue-class.html#_process_events"><a title="nbxmpp.idlequeue.GlibIdleQueue._process_events
+nbxmpp.idlequeue.IdleQueue._process_events" class="py-name" href="#" onclick="return doclink('link-92', '_process_events', 'link-92');">_process_events</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue._check_time_events" class="py-name" href="#" onclick="return doclink('link-93', '_check_time_events', 'link-91');">_check_time_events</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div></div><a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> </tt>
+<a name="SelectIdleQueue"></a><div id="SelectIdleQueue-def"><a name="L437"></a><tt class="py-lineno">437</tt> <a class="py-toggle" href="#" id="SelectIdleQueue-toggle" onclick="return toggle('SelectIdleQueue');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.idlequeue.SelectIdleQueue-class.html">SelectIdleQueue</a><tt class="py-op">(</tt><tt class="py-base-class">IdleQueue</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SelectIdleQueue-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SelectIdleQueue-expanded"><a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"><tt class="py-docstring"> Extends IdleQueue to use select.select() for polling</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"><tt class="py-docstring"> This class exisists for the sake of gtk2.8 on windows, which doesn't seem to</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"><tt class="py-docstring"> support io_add_watch properly (yet)</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> </tt>
+<a name="SelectIdleQueue._init_idle"></a><div id="SelectIdleQueue._init_idle-def"><a name="L445"></a><tt class="py-lineno">445</tt> <a class="py-toggle" href="#" id="SelectIdleQueue._init_idle-toggle" onclick="return toggle('SelectIdleQueue._init_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_init_idle">_init_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SelectIdleQueue._init_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SelectIdleQueue._init_idle-expanded"><a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"><tt class="py-docstring"> Create a dict, which maps file/pipe/sock descriptor to glib event id</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_fds</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_fds</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">error_fds</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+</div><a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> </tt>
+<a name="SelectIdleQueue._add_idle"></a><div id="SelectIdleQueue._add_idle-def"><a name="L453"></a><tt class="py-lineno">453</tt> <a class="py-toggle" href="#" id="SelectIdleQueue._add_idle-toggle" onclick="return toggle('SelectIdleQueue._add_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_add_idle">_add_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SelectIdleQueue._add_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SelectIdleQueue._add_idle-expanded"><a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"><tt class="py-docstring"> This method is called when we plug a new idle object. Remove descriptor</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"><tt class="py-docstring"> to read/write/error lists, according flags</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">flags</tt> <tt class="py-op">&amp;</tt> <tt class="py-number">3</tt><tt class="py-op">:</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_fds</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">fd</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">flags</tt> <tt class="py-op">&amp;</tt> <tt class="py-number">4</tt><tt class="py-op">:</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_fds</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">fd</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">error_fds</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">fd</tt> </tt>
+</div><a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> </tt>
+<a name="SelectIdleQueue._remove_idle"></a><div id="SelectIdleQueue._remove_idle-def"><a name="L464"></a><tt class="py-lineno">464</tt> <a class="py-toggle" href="#" id="SelectIdleQueue._remove_idle-toggle" onclick="return toggle('SelectIdleQueue._remove_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_remove_idle">_remove_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SelectIdleQueue._remove_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SelectIdleQueue._remove_idle-expanded"><a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"><tt class="py-docstring"> This method is called when we unplug a new idle object. Remove descriptor</tt> </tt>
+<a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"><tt class="py-docstring"> from read/write/error lists</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_fds</tt><tt class="py-op">:</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_fds</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_fds</tt><tt class="py-op">:</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_fds</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">error_fds</tt><tt class="py-op">:</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">error_fds</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> </tt>
+<a name="SelectIdleQueue.process"></a><div id="SelectIdleQueue.process-def"><a name="L476"></a><tt class="py-lineno">476</tt> <a class="py-toggle" href="#" id="SelectIdleQueue.process-toggle" onclick="return toggle('SelectIdleQueue.process');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.SelectIdleQueue-class.html#process">process</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SelectIdleQueue.process-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SelectIdleQueue.process-expanded"><a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_fds</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_fds</tt><tt class="py-op">:</tt> </tt>
+<a name="L478"></a><tt class="py-lineno">478</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue._check_time_events" class="py-name" href="#" onclick="return doclink('link-94', '_check_time_events', 'link-91');">_check_time_events</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt class="py-name">waiting_descriptors</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">select</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">read_fds</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-95', 'keys', 'link-69');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_fds</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-96', 'keys', 'link-69');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">error_fds</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-97', 'keys', 'link-69');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-name">waiting_descriptors</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-number">4</tt><tt class="py-op">:</tt> <tt class="py-comment"># interrupt</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">waiting_descriptors</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-98', 'get', 'link-80');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">q</tt><tt class="py-op">:</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-name">q</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.pollin
+nbxmpp.idlequeue.IdleObject.pollin
+nbxmpp.transports_nb.NonBlockingTCP.pollin" class="py-name" href="#" onclick="return doclink('link-99', 'pollin', 'link-83');">pollin</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">waiting_descriptors</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"> <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-100', 'get', 'link-80');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">q</tt><tt class="py-op">:</tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt class="py-name">q</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="nbxmpp.idlequeue.IdleObject.pollout
+nbxmpp.transports_nb.NonBlockingTCP.pollout" class="py-name" href="#" onclick="return doclink('link-101', 'pollout', 'link-86');">pollout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">waiting_descriptors</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">queue</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-102', 'get', 'link-80');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">q</tt><tt class="py-op">:</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-name">q</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.pollend
+nbxmpp.idlequeue.IdleObject.pollend
+nbxmpp.transports_nb.NonBlockingTCP.pollend" class="py-name" href="#" onclick="return doclink('link-103', 'pollend', 'link-52');">pollend</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue._check_time_events" class="py-name" href="#" onclick="return doclink('link-104', '_check_time_events', 'link-91');">_check_time_events</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div></div><a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> </tt>
+<a name="GlibIdleQueue"></a><div id="GlibIdleQueue-def"><a name="L503"></a><tt class="py-lineno">503</tt> <a class="py-toggle" href="#" id="GlibIdleQueue-toggle" onclick="return toggle('GlibIdleQueue');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.idlequeue.GlibIdleQueue-class.html">GlibIdleQueue</a><tt class="py-op">(</tt><tt class="py-base-class">IdleQueue</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="GlibIdleQueue-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="GlibIdleQueue-expanded"><a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"><tt class="py-docstring"> Extends IdleQueue to use glib io_add_wath, instead of select/poll In another</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"><tt class="py-docstring"> 'non gui' implementation of Gajim IdleQueue can be used safetly</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> <tt class="py-comment"># (timeout, boolean)</tt> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"> <tt class="py-comment"># Boolean is True if timeout is specified in seconds, False means miliseconds</tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt id="link-105" class="py-name"><a title="nbxmpp.idlequeue.GlibIdleQueue.PROCESS_TIMEOUT
+nbxmpp.idlequeue.IdleQueue.PROCESS_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-105', 'PROCESS_TIMEOUT', 'link-55');">PROCESS_TIMEOUT</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> </tt>
+<a name="GlibIdleQueue._init_idle"></a><div id="GlibIdleQueue._init_idle-def"><a name="L513"></a><tt class="py-lineno">513</tt> <a class="py-toggle" href="#" id="GlibIdleQueue._init_idle-toggle" onclick="return toggle('GlibIdleQueue._init_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_init_idle">_init_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="GlibIdleQueue._init_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GlibIdleQueue._init_idle-expanded"><a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"><tt class="py-docstring"> Creates a dict, which maps file/pipe/sock descriptor to glib event id</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> <tt class="py-comment"># time() is already called in glib, we just get the last value</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> <tt class="py-comment"># overrides IdleQueue.current_time()</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.current_time" class="py-name" href="#" onclick="return doclink('link-106', 'current_time', 'link-24');">current_time</a></tt> <tt class="py-op">=</tt> <tt class="py-name">gobject</tt><tt class="py-op">.</tt><tt class="py-name">get_current_time</tt> </tt>
+</div><a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> </tt>
+<a name="GlibIdleQueue._add_idle"></a><div id="GlibIdleQueue._add_idle-def"><a name="L522"></a><tt class="py-lineno">522</tt> <a class="py-toggle" href="#" id="GlibIdleQueue._add_idle-toggle" onclick="return toggle('GlibIdleQueue._add_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_add_idle">_add_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="GlibIdleQueue._add_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GlibIdleQueue._add_idle-expanded"><a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"><tt class="py-docstring"> This method is called when we plug a new idle object. Start listening for</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"><tt class="py-docstring"> events from fd</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"> <tt class="py-name">res</tt> <tt class="py-op">=</tt> <tt class="py-name">gobject</tt><tt class="py-op">.</tt><tt class="py-name">io_add_watch</tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="nbxmpp.idlequeue.GlibIdleQueue._process_events
+nbxmpp.idlequeue.IdleQueue._process_events" class="py-name" href="#" onclick="return doclink('link-107', '_process_events', 'link-92');">_process_events</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-name">priority</tt><tt class="py-op">=</tt><tt class="py-name">gobject</tt><tt class="py-op">.</tt><tt class="py-name">PRIORITY_LOW</tt><tt class="py-op">)</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-comment"># store the id of the watch, so that we can remove it on unplug</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">events</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">res</tt> </tt>
+</div><a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> </tt>
+<a name="GlibIdleQueue._process_events"></a><div id="GlibIdleQueue._process_events-def"><a name="L532"></a><tt class="py-lineno">532</tt> <a class="py-toggle" href="#" id="GlibIdleQueue._process_events-toggle" onclick="return toggle('GlibIdleQueue._process_events');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_process_events">_process_events</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="GlibIdleQueue._process_events-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GlibIdleQueue._process_events-expanded"><a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-108" class="py-name" targets="Class nbxmpp.idlequeue.IdleQueue=nbxmpp.idlequeue.IdleQueue-class.html"><a title="nbxmpp.idlequeue.IdleQueue" class="py-name" href="#" onclick="return doclink('link-108', 'IdleQueue', 'link-108');">IdleQueue</a></tt><tt class="py-op">.</tt><tt id="link-109" class="py-name"><a title="nbxmpp.idlequeue.GlibIdleQueue._process_events
+nbxmpp.idlequeue.IdleQueue._process_events" class="py-name" href="#" onclick="return doclink('link-109', '_process_events', 'link-92');">_process_events</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="nbxmpp.idlequeue.GlibIdleQueue._remove_idle
+nbxmpp.idlequeue.IdleQueue._remove_idle
+nbxmpp.idlequeue.SelectIdleQueue._remove_idle" class="py-name" href="#" onclick="return doclink('link-110', '_remove_idle', 'link-78');">_remove_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="nbxmpp.idlequeue.GlibIdleQueue._add_idle
+nbxmpp.idlequeue.IdleQueue._add_idle
+nbxmpp.idlequeue.SelectIdleQueue._add_idle" class="py-name" href="#" onclick="return doclink('link-111', '_add_idle', 'link-76');">_add_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt>
+</div><a name="L539"></a><tt class="py-lineno">539</tt> <tt class="py-line"> </tt>
+<a name="GlibIdleQueue._remove_idle"></a><div id="GlibIdleQueue._remove_idle-def"><a name="L540"></a><tt class="py-lineno">540</tt> <a class="py-toggle" href="#" id="GlibIdleQueue._remove_idle-toggle" onclick="return toggle('GlibIdleQueue._remove_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_remove_idle">_remove_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="GlibIdleQueue._remove_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GlibIdleQueue._remove_idle-expanded"><a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"><tt class="py-docstring"> This method is called when we unplug a new idle object. Stop listening</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"><tt class="py-docstring"> for events from fd</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">fd</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">events</tt><tt class="py-op">:</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-name">gobject</tt><tt class="py-op">.</tt><tt class="py-name">source_remove</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">events</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> <tt class="py-keyword">del</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">events</tt><tt class="py-op">[</tt><tt class="py-name">fd</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> </tt>
+<a name="GlibIdleQueue.process"></a><div id="GlibIdleQueue.process-def"><a name="L550"></a><tt class="py-lineno">550</tt> <a class="py-toggle" href="#" id="GlibIdleQueue.process-toggle" onclick="return toggle('GlibIdleQueue.process');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.idlequeue.GlibIdleQueue-class.html#process">process</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="GlibIdleQueue.process-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="GlibIdleQueue.process-expanded"><a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue._check_time_events" class="py-name" href="#" onclick="return doclink('link-112', '_check_time_events', 'link-91');">_check_time_events</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.idlequeue.GlibIdleQueue-class.html b/doc/apidocs/nbxmpp.idlequeue.GlibIdleQueue-class.html
new file mode 100644
index 0000000..e5da4ba
--- /dev/null
+++ b/doc/apidocs/nbxmpp.idlequeue.GlibIdleQueue-class.html
@@ -0,0 +1,467 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.idlequeue.GlibIdleQueue</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.idlequeue-module.html">Module&nbsp;idlequeue</a> ::
+ Class&nbsp;GlibIdleQueue
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.idlequeue.GlibIdleQueue-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class GlibIdleQueue</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_i" name="uml_class_diagram_for_nbxmpp_i">
+<area shape="rect" id="node15" href="nbxmpp.idlequeue.GlibIdleQueue-class.html#PROCESS_TIMEOUT" title="nbxmpp.idlequeue.GlibIdleQueue.PROCESS_TIMEOUT" alt="" coords="109,239,241,257"/>
+<area shape="rect" id="node15" href="nbxmpp.idlequeue.GlibIdleQueue-class.html#process" title="Process idlequeue. Check for any pending timeout or alarm events. &#160;Call IdleObjects on possible and requested read, write and error events on their file descriptors" alt="" coords="109,260,241,279"/>
+<area shape="rect" id="node1" href="nbxmpp.idlequeue.GlibIdleQueue-class.html" title="Extends IdleQueue to use glib io_add_wath, instead of select/poll In another &#39;non gui&#39; implementation of Gajim IdleQueue can be used safetly" alt="" coords="97,214,252,285"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#__init__" title="nbxmpp.idlequeue.IdleQueue.__init__" alt="" coords="17,39,335,57"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm" title="Set up a new alarm. alarm_cb will be called after specified seconds." alt="" coords="17,57,335,76"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm" title="Remove alarm callback alarm_cb scheduled on alarm_time. Returns True if it was removed sucessfully, otherwise False" alt="" coords="17,76,335,95"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout" title="Remove the read timeout" alt="" coords="17,95,335,113"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout" title="Seta a new timeout. If it is not removed after specified seconds, func or obj.read_timeout() will be called" alt="" coords="17,113,335,132"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle" title="Plug an IdleObject into idlequeue. Filedescriptor fd must be set" alt="" coords="17,132,335,151"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle" title="Remove plugged IdleObject, specified by filedescriptor fd" alt="" coords="17,151,335,169"/>
+<area shape="rect" id="node16" href="nbxmpp.idlequeue.IdleQueue-class.html#current_time" title="nbxmpp.idlequeue.IdleQueue.current_time" alt="" coords="17,169,335,188"/>
+<area shape="rect" id="node2" href="nbxmpp.idlequeue.IdleQueue-class.html" title="IdleQueue provide three distinct time based features. Uses select.poll()" alt="" coords="5,6,347,194"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_i.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_i" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Extends IdleQueue to use glib io_add_wath, instead of select/poll In another
+'non gui' implementation of Gajim IdleQueue can be used safetly
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_init_idle" class="summary-sig-name" onclick="show_private();">_init_idle</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Creates a dict, which maps file/pipe/sock descriptor to glib event id</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._init_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_add_idle" class="summary-sig-name" onclick="show_private();">_add_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>,
+ <span class="summary-sig-arg">flags</span>)</span><br />
+ This method is called when we plug a new idle object. Start listening for
+events from fd</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._add_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_process_events" class="summary-sig-name" onclick="show_private();">_process_events</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>,
+ <span class="summary-sig-arg">flags</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._process_events">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#_remove_idle" class="summary-sig-name" onclick="show_private();">_remove_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>)</span><br />
+ This method is called when we unplug a new idle object. Stop listening
+for events from fd</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._remove_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#process" class="summary-sig-name">process</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Process idlequeue. Check for any pending timeout or alarm events. Call
+IdleObjects on possible and requested read, write and error events on
+their file descriptors</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue.process">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#__init__">__init__</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#current_time">current_time</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle">plug_idle</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm">remove_alarm</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout">remove_timeout</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm">set_alarm</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout">set_read_timeout</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle">unplug_idle</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a></code></b> (private):
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events" onclick="show_private();">_check_time_events</a></code>
+ </p></div>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.GlibIdleQueue-class.html#PROCESS_TIMEOUT" class="summary-name">PROCESS_TIMEOUT</a> = <code title="(2, True)"><code class="variable-group">(</code>2<code class="variable-op">, </code>True<code class="variable-group">)</code></code>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="_init_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_init_idle</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._init_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Creates a dict, which maps file/pipe/sock descriptor to glib event id
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#_init_idle" onclick="show_private();">IdleQueue._init_idle</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_add_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_add_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>,
+ <span class="sig-arg">flags</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._add_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ This method is called when we plug a new idle object. Start listening for
+events from fd
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#_add_idle" onclick="show_private();">IdleQueue._add_idle</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_process_events"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_process_events</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>,
+ <span class="sig-arg">flags</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._process_events">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#_process_events" onclick="show_private();">IdleQueue._process_events</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_remove_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_remove_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue._remove_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ This method is called when we unplug a new idle object. Stop listening
+for events from fd
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#_remove_idle" onclick="show_private();">IdleQueue._remove_idle</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="process"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">process</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#GlibIdleQueue.process">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Process idlequeue. Check for any pending timeout or alarm events. Call
+IdleObjects on possible and requested read, write and error events on
+their file descriptors</p>
+<p>Call this in regular intervals.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#process">IdleQueue.process</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
+<a name="section-ClassVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variable Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariableDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="PROCESS_TIMEOUT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PROCESS_TIMEOUT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">(</code>2<code class="variable-op">, </code>True<code class="variable-group">)</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.idlequeue.IdleCommand-class.html b/doc/apidocs/nbxmpp.idlequeue.IdleCommand-class.html
new file mode 100644
index 0000000..ce9dcc8
--- /dev/null
+++ b/doc/apidocs/nbxmpp.idlequeue.IdleCommand-class.html
@@ -0,0 +1,685 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.idlequeue.IdleCommand</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.idlequeue-module.html">Module&nbsp;idlequeue</a> ::
+ Class&nbsp;IdleCommand
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.idlequeue.IdleCommand-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class IdleCommand</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_i_2" name="uml_class_diagram_for_nbxmpp_i_2">
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#__init__" title="nbxmpp.idlequeue.IdleCommand.__init__" alt="" coords="17,129,216,148"/>
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#set_idlequeue" title="nbxmpp.idlequeue.IdleCommand.set_idlequeue" alt="" coords="17,148,216,167"/>
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#wait_child" title="nbxmpp.idlequeue.IdleCommand.wait_child" alt="" coords="17,167,216,185"/>
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#start" title="nbxmpp.idlequeue.IdleCommand.start" alt="" coords="17,185,216,204"/>
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#end" title="nbxmpp.idlequeue.IdleCommand.end" alt="" coords="17,204,216,223"/>
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#pollend" title="Called on stream failure" alt="" coords="17,223,216,241"/>
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#pollin" title="Called on new read event" alt="" coords="17,241,216,260"/>
+<area shape="rect" id="node17" href="nbxmpp.idlequeue.IdleCommand-class.html#read_timeout" title="Called when timeout happened" alt="" coords="17,260,216,279"/>
+<area shape="rect" id="node1" href="nbxmpp.idlequeue.IdleCommand-class.html" title="Can be subclassed to execute commands asynchronously by the idlequeue. Result will be optained via file descriptor of created pipe" alt="" coords="5,97,227,285"/>
+<area shape="rect" id="node18" href="nbxmpp.idlequeue.IdleObject-class.html#fd" title="filedescriptor, must be unique for each IdleObject" alt="" coords="76,31,159,49"/>
+<area shape="rect" id="node18" href="nbxmpp.idlequeue.IdleObject-class.html#pollout" title="Called on new write event (connect in sockets is a pollout)" alt="" coords="76,52,159,71"/>
+<area shape="rect" id="node2" href="nbxmpp.idlequeue.IdleObject-class.html" title="Idle listener interface. Listed methods are called by IdleQueue." alt="" coords="64,6,171,77"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_i_2.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_i_2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Can be subclassed to execute commands asynchronously by the idlequeue.
+Result will be optained via file descriptor of created pipe
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">on_result</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#set_idlequeue" class="summary-sig-name">set_idlequeue</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">idlequeue</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.set_idlequeue">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_return_result" class="summary-sig-name" onclick="show_private();">_return_result</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._return_result">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_args" class="summary-sig-name" onclick="show_private();">_compose_command_args</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._compose_command_args">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_compose_command_line" class="summary-sig-name" onclick="show_private();">_compose_command_line</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return one line representation of command and its arguments</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._compose_command_line">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#wait_child" class="summary-sig-name">wait_child</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.wait_child">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#start" class="summary-sig-name">start</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.start">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_start_nt" class="summary-sig-name" onclick="show_private();">_start_nt</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._start_nt">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#_start_posix" class="summary-sig-name" onclick="show_private();">_start_posix</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._start_posix">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#end" class="summary-sig-name">end</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.end">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#pollend" class="summary-sig-name">pollend</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called on stream failure</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.pollend">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#pollin" class="summary-sig-name">pollin</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called on new read event</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.pollin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleCommand-class.html#read_timeout" class="summary-sig-name">read_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called when timeout happened</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.read_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleObject-class.html#pollout">pollout</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleObject-class.html">IdleObject</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleObject-class.html#fd">fd</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">on_result</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#__init__">IdleObject.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_idlequeue"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_idlequeue</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">idlequeue</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.set_idlequeue">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_return_result"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_return_result</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._return_result">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_compose_command_args"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_compose_command_args</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._compose_command_args">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_compose_command_line"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_compose_command_line</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._compose_command_line">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return one line representation of command and its arguments
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="wait_child"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">wait_child</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.wait_child">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="start"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">start</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.start">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_start_nt"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_start_nt</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._start_nt">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_start_posix"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_start_posix</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand._start_posix">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="end"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">end</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.end">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollend"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollend</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.pollend">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called on stream failure
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#pollend">IdleObject.pollend</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollin</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.pollin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called on new read event
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#pollin">IdleObject.pollin</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="read_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">read_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleCommand.read_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called when timeout happened
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#read_timeout">IdleObject.read_timeout</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.idlequeue.IdleObject-class.html b/doc/apidocs/nbxmpp.idlequeue.IdleObject-class.html
new file mode 100644
index 0000000..d6a0924
--- /dev/null
+++ b/doc/apidocs/nbxmpp.idlequeue.IdleObject-class.html
@@ -0,0 +1,408 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.idlequeue.IdleObject</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.idlequeue-module.html">Module&nbsp;idlequeue</a> ::
+ Class&nbsp;IdleObject
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.idlequeue.IdleObject-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class IdleObject</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_i_3" name="uml_class_diagram_for_nbxmpp_i_3">
+<area shape="rect" id="node19" href="nbxmpp.idlequeue.IdleObject-class.html#fd" title="filedescriptor, must be unique for each IdleObject" alt="" coords="185,31,311,49"/>
+<area shape="rect" id="node19" href="nbxmpp.idlequeue.IdleObject-class.html#__init__" title="nbxmpp.idlequeue.IdleObject.__init__" alt="" coords="185,52,311,71"/>
+<area shape="rect" id="node19" href="nbxmpp.idlequeue.IdleObject-class.html#pollend" title="Called on stream failure" alt="" coords="185,71,311,89"/>
+<area shape="rect" id="node19" href="nbxmpp.idlequeue.IdleObject-class.html#pollin" title="Called on new read event" alt="" coords="185,89,311,108"/>
+<area shape="rect" id="node19" href="nbxmpp.idlequeue.IdleObject-class.html#pollout" title="Called on new write event (connect in sockets is a pollout)" alt="" coords="185,108,311,127"/>
+<area shape="rect" id="node19" href="nbxmpp.idlequeue.IdleObject-class.html#read_timeout" title="Called when timeout happened" alt="" coords="185,127,311,145"/>
+<area shape="rect" id="node1" href="nbxmpp.idlequeue.IdleObject-class.html" title="Idle listener interface. Listed methods are called by IdleQueue." alt="" coords="173,6,323,151"/>
+<area shape="rect" id="node2" href="nbxmpp.transports_nb.NonBlockingTCP-class.html" title="Non&#45;blocking TCP socket wrapper" alt="" coords="28,171,260,210"/>
+<area shape="rect" id="node3" href="nbxmpp.idlequeue.IdleCommand-class.html" title="Can be subclassed to execute commands asynchronously by the idlequeue. Result will be optained via file descriptor of created pipe" alt="" coords="289,171,415,210"/>
+<area shape="rect" id="node5" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html" title="Socket wrapper that creates HTTP message out of sent data and peels&#45;off HTTP headers from incoming messages" alt="" coords="24,230,264,269"/>
+<area shape="rect" id="node4" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" title="Class for BOSH HTTP connections. Slightly redefines HTTP transport by calling bosh bodytag generating callback before putting data on wire" alt="" coords="5,289,283,327"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_i_3.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_i_3" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Idle listener interface. Listed methods are called by IdleQueue.
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleObject-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleObject-class.html#pollend" class="summary-sig-name">pollend</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called on stream failure</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.pollend">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleObject-class.html#pollin" class="summary-sig-name">pollin</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called on new read event</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.pollin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleObject-class.html#pollout" class="summary-sig-name">pollout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called on new write event (connect in sockets is a pollout)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.pollout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleObject-class.html#read_timeout" class="summary-sig-name">read_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called when timeout happened</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.read_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#fd" class="summary-name">fd</a><br />
+ filedescriptor, must be unique for each IdleObject
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollend"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollend</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.pollend">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called on stream failure
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollin</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.pollin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called on new read event
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.pollout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called on new write event (connect in sockets is a pollout)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="read_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">read_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleObject.read_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called when timeout happened
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== INSTANCE VARIABLE DETAILS ==================== -->
+<a name="section-InstanceVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Variable Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceVariableDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="fd"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">fd</h3>
+ filedescriptor, must be unique for each IdleObject
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.idlequeue.IdleQueue-class.html b/doc/apidocs/nbxmpp.idlequeue.IdleQueue-class.html
new file mode 100644
index 0000000..3000afe
--- /dev/null
+++ b/doc/apidocs/nbxmpp.idlequeue.IdleQueue-class.html
@@ -0,0 +1,801 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.idlequeue.IdleQueue</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.idlequeue-module.html">Module&nbsp;idlequeue</a> ::
+ Class&nbsp;IdleQueue
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.idlequeue.IdleQueue-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class IdleQueue</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_i_4" name="uml_class_diagram_for_nbxmpp_i_4">
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT" title="nbxmpp.idlequeue.IdleQueue.PROCESS_TIMEOUT" alt="" coords="17,31,335,49"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#__init__" title="nbxmpp.idlequeue.IdleQueue.__init__" alt="" coords="17,52,335,71"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm" title="Set up a new alarm. alarm_cb will be called after specified seconds." alt="" coords="17,71,335,89"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm" title="Remove alarm callback alarm_cb scheduled on alarm_time. Returns True if it was removed sucessfully, otherwise False" alt="" coords="17,89,335,108"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout" title="Remove the read timeout" alt="" coords="17,108,335,127"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout" title="Seta a new timeout. If it is not removed after specified seconds, func or obj.read_timeout() will be called" alt="" coords="17,127,335,145"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle" title="Plug an IdleObject into idlequeue. Filedescriptor fd must be set" alt="" coords="17,145,335,164"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle" title="Remove plugged IdleObject, specified by filedescriptor fd" alt="" coords="17,164,335,183"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#current_time" title="nbxmpp.idlequeue.IdleQueue.current_time" alt="" coords="17,183,335,201"/>
+<area shape="rect" id="node24" href="nbxmpp.idlequeue.IdleQueue-class.html#process" title="Process idlequeue. Check for any pending timeout or alarm events. &#160;Call IdleObjects on possible and requested read, write and error events on their file descriptors" alt="" coords="17,201,335,220"/>
+<area shape="rect" id="node1" href="nbxmpp.idlequeue.IdleQueue-class.html" title="IdleQueue provide three distinct time based features. Uses select.poll()" alt="" coords="5,6,347,226"/>
+<area shape="rect" id="node2" href="nbxmpp.idlequeue.GlibIdleQueue-class.html" title="Extends IdleQueue to use glib io_add_wath, instead of select/poll In another &#39;non gui&#39; implementation of Gajim IdleQueue can be used safetly" alt="" coords="32,246,157,285"/>
+<area shape="rect" id="node3" href="nbxmpp.idlequeue.SelectIdleQueue-class.html" title="Extends IdleQueue to use select.select() for polling" alt="" coords="187,246,328,285"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_i_4.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_i_4" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>IdleQueue provide three distinct time based features. Uses select.poll()</p>
+<blockquote>
+<ol class="rst-arabic simple">
+<li>Alarm timeout: Execute a callback after foo seconds</li>
+<li>Timeout event: Call read_timeout() of an plugged object if a timeout
+has been set, but not removed in time.</li>
+<li>Check file descriptor of plugged objects for read, write and error
+events</li>
+</ol>
+</blockquote>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_init_idle" class="summary-sig-name" onclick="show_private();">_init_idle</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Hook method for subclassed. Will be called by __init__</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._init_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm" class="summary-sig-name">set_alarm</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">alarm_cb</span>,
+ <span class="summary-sig-arg">seconds</span>)</span><br />
+ Set up a new alarm. alarm_cb will be called after specified seconds.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.set_alarm">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm" class="summary-sig-name">remove_alarm</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">alarm_cb</span>,
+ <span class="summary-sig-arg">alarm_time</span>)</span><br />
+ Remove alarm callback alarm_cb scheduled on alarm_time. Returns True if
+it was removed sucessfully, otherwise False</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.remove_alarm">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout" class="summary-sig-name">remove_timeout</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>,
+ <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Remove the read timeout</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.remove_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout" class="summary-sig-name">set_read_timeout</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>,
+ <span class="summary-sig-arg">seconds</span>,
+ <span class="summary-sig-arg">func</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Seta a new timeout. If it is not removed after specified seconds,
+func or obj.read_timeout() will be called</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.set_read_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events" class="summary-sig-name" onclick="show_private();">_check_time_events</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Execute and remove alarm callbacks and execute func() or read_timeout()
+for plugged objects if specified time has ellapsed</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._check_time_events">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle" class="summary-sig-name">plug_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">obj</span>,
+ <span class="summary-sig-arg">writable</span>=<span class="summary-sig-default">True</span>,
+ <span class="summary-sig-arg">readable</span>=<span class="summary-sig-default">True</span>)</span><br />
+ Plug an IdleObject into idlequeue. Filedescriptor fd must be set</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.plug_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_add_idle" class="summary-sig-name" onclick="show_private();">_add_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>,
+ <span class="summary-sig-arg">flags</span>)</span><br />
+ Hook method for subclasses, called by plug_idle</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._add_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle" class="summary-sig-name">unplug_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>)</span><br />
+ Remove plugged IdleObject, specified by filedescriptor fd</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.unplug_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#current_time" class="summary-sig-name">current_time</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.current_time">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_remove_idle" class="summary-sig-name" onclick="show_private();">_remove_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>)</span><br />
+ Hook method for subclassed, called by unplug_idle</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._remove_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#_process_events" class="summary-sig-name" onclick="show_private();">_process_events</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>,
+ <span class="summary-sig-arg">flags</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._process_events">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.IdleQueue-class.html#process" class="summary-sig-name">process</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Process idlequeue. Check for any pending timeout or alarm events. Call
+IdleObjects on possible and requested read, write and error events on
+their file descriptors</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.process">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT" class="summary-name">PROCESS_TIMEOUT</a> = <code title="(100, False)"><code class="variable-group">(</code>100<code class="variable-op">, </code>False<code class="variable-group">)</code></code>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_init_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_init_idle</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._init_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Hook method for subclassed. Will be called by __init__
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_alarm"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_alarm</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">alarm_cb</span>,
+ <span class="sig-arg">seconds</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.set_alarm">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set up a new alarm. alarm_cb will be called after specified seconds.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="remove_alarm"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">remove_alarm</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">alarm_cb</span>,
+ <span class="sig-arg">alarm_time</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.remove_alarm">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Remove alarm callback alarm_cb scheduled on alarm_time. Returns True if
+it was removed sucessfully, otherwise False
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="remove_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">remove_timeout</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>,
+ <span class="sig-arg">timeout</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.remove_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Remove the read timeout
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_read_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_read_timeout</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>,
+ <span class="sig-arg">seconds</span>,
+ <span class="sig-arg">func</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.set_read_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Seta a new timeout. If it is not removed after specified seconds,
+func or obj.read_timeout() will be called</p>
+<p>A filedescriptor fd can have several timeouts.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_check_time_events"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_check_time_events</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._check_time_events">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Execute and remove alarm callbacks and execute func() or read_timeout()
+for plugged objects if specified time has ellapsed
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plug_idle"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plug_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">obj</span>,
+ <span class="sig-arg">writable</span>=<span class="sig-default">True</span>,
+ <span class="sig-arg">readable</span>=<span class="sig-default">True</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.plug_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Plug an IdleObject into idlequeue. Filedescriptor fd must be set
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>obj</code></strong> - the IdleObject</li>
+ <li><strong class="pname"><code>writable</code></strong> - True if obj has data to sent</li>
+ <li><strong class="pname"><code>readable</code></strong> - True if obj expects data to be reiceived</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_add_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_add_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>,
+ <span class="sig-arg">flags</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._add_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Hook method for subclasses, called by plug_idle
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="unplug_idle"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">unplug_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.unplug_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Remove plugged IdleObject, specified by filedescriptor fd
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="current_time"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">current_time</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.current_time">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_remove_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_remove_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._remove_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Hook method for subclassed, called by unplug_idle
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_process_events"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_process_events</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>,
+ <span class="sig-arg">flags</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue._process_events">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="process"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">process</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#IdleQueue.process">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Process idlequeue. Check for any pending timeout or alarm events. Call
+IdleObjects on possible and requested read, write and error events on
+their file descriptors</p>
+<p>Call this in regular intervals.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
+<a name="section-ClassVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variable Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariableDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="PROCESS_TIMEOUT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PROCESS_TIMEOUT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">(</code>100<code class="variable-op">, </code>False<code class="variable-group">)</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.idlequeue.SelectIdleQueue-class.html b/doc/apidocs/nbxmpp.idlequeue.SelectIdleQueue-class.html
new file mode 100644
index 0000000..203d351
--- /dev/null
+++ b/doc/apidocs/nbxmpp.idlequeue.SelectIdleQueue-class.html
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.idlequeue.SelectIdleQueue</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.idlequeue-module.html">Module&nbsp;idlequeue</a> ::
+ Class&nbsp;SelectIdleQueue
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.idlequeue.SelectIdleQueue-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class SelectIdleQueue</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_i_5" name="uml_class_diagram_for_nbxmpp_i_5">
+<area shape="rect" id="node27" href="nbxmpp.idlequeue.SelectIdleQueue-class.html#process" title="Process idlequeue. Check for any pending timeout or alarm events. &#160;Call IdleObjects on possible and requested read, write and error events on their file descriptors" alt="" coords="123,260,229,279"/>
+<area shape="rect" id="node1" href="nbxmpp.idlequeue.SelectIdleQueue-class.html" title="Extends IdleQueue to use select.select() for polling" alt="" coords="111,227,241,285"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT" title="nbxmpp.idlequeue.IdleQueue.PROCESS_TIMEOUT" alt="" coords="17,31,335,49"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#__init__" title="nbxmpp.idlequeue.IdleQueue.__init__" alt="" coords="17,52,335,71"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm" title="Set up a new alarm. alarm_cb will be called after specified seconds." alt="" coords="17,71,335,89"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm" title="Remove alarm callback alarm_cb scheduled on alarm_time. Returns True if it was removed sucessfully, otherwise False" alt="" coords="17,89,335,108"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout" title="Remove the read timeout" alt="" coords="17,108,335,127"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout" title="Seta a new timeout. If it is not removed after specified seconds, func or obj.read_timeout() will be called" alt="" coords="17,127,335,145"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle" title="Plug an IdleObject into idlequeue. Filedescriptor fd must be set" alt="" coords="17,145,335,164"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle" title="Remove plugged IdleObject, specified by filedescriptor fd" alt="" coords="17,164,335,183"/>
+<area shape="rect" id="node28" href="nbxmpp.idlequeue.IdleQueue-class.html#current_time" title="nbxmpp.idlequeue.IdleQueue.current_time" alt="" coords="17,183,335,201"/>
+<area shape="rect" id="node2" href="nbxmpp.idlequeue.IdleQueue-class.html" title="IdleQueue provide three distinct time based features. Uses select.poll()" alt="" coords="5,6,347,207"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_i_5.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_i_5" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>Extends IdleQueue to use select.select() for polling</p>
+<p>This class exisists for the sake of gtk2.8 on windows, which doesn't seem to
+support io_add_watch properly (yet)</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_init_idle" class="summary-sig-name" onclick="show_private();">_init_idle</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Create a dict, which maps file/pipe/sock descriptor to glib event id</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue._init_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_add_idle" class="summary-sig-name" onclick="show_private();">_add_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>,
+ <span class="summary-sig-arg">flags</span>)</span><br />
+ This method is called when we plug a new idle object. Remove descriptor
+to read/write/error lists, according flags</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue._add_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#_remove_idle" class="summary-sig-name" onclick="show_private();">_remove_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fd</span>)</span><br />
+ This method is called when we unplug a new idle object. Remove descriptor
+from read/write/error lists</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue._remove_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.idlequeue.SelectIdleQueue-class.html#process" class="summary-sig-name">process</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Process idlequeue. Check for any pending timeout or alarm events. Call
+IdleObjects on possible and requested read, write and error events on
+their file descriptors</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue.process">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#__init__">__init__</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#current_time">current_time</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#plug_idle">plug_idle</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_alarm">remove_alarm</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout">remove_timeout</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_alarm">set_alarm</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout">set_read_timeout</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle">unplug_idle</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a></code></b> (private):
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#_check_time_events" onclick="show_private();">_check_time_events</a></code>,
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#_process_events" onclick="show_private();">_process_events</a></code>
+ </p></div>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleQueue-class.html">IdleQueue</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleQueue-class.html#PROCESS_TIMEOUT">PROCESS_TIMEOUT</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="_init_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_init_idle</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue._init_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Create a dict, which maps file/pipe/sock descriptor to glib event id
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#_init_idle" onclick="show_private();">IdleQueue._init_idle</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_add_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_add_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>,
+ <span class="sig-arg">flags</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue._add_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ This method is called when we plug a new idle object. Remove descriptor
+to read/write/error lists, according flags
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#_add_idle" onclick="show_private();">IdleQueue._add_idle</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_remove_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_remove_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fd</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue._remove_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ This method is called when we unplug a new idle object. Remove descriptor
+from read/write/error lists
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#_remove_idle" onclick="show_private();">IdleQueue._remove_idle</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="process"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">process</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.idlequeue-pysrc.html#SelectIdleQueue.process">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Process idlequeue. Check for any pending timeout or alarm events. Call
+IdleObjects on possible and requested read, write and error events on
+their file descriptors</p>
+<p>Call this in regular intervals.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleQueue-class.html#process">IdleQueue.process</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.plugin-module.html b/doc/apidocs/nbxmpp.plugin-module.html
new file mode 100644
index 0000000..0b6bfbc
--- /dev/null
+++ b/doc/apidocs/nbxmpp.plugin-module.html
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.plugin</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;plugin
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.plugin-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module plugin</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.plugin-pysrc.html">source&nbsp;code</a></span></p>
+Provides PlugIn class functionality to develop extentions for xmpppy
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.plugin.PlugIn-class.html" class="summary-name">PlugIn</a><br />
+ Abstract xmpppy plugin infrastructure code, providing plugging in/out and
+debugging functionality
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.plugin-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.plugin')">logging.getLogger('nbxmpp.plugin')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.plugin-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.plugin')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.plugin-pysrc.html b/doc/apidocs/nbxmpp.plugin-pysrc.html
new file mode 100644
index 0000000..c0da1eb
--- /dev/null
+++ b/doc/apidocs/nbxmpp.plugin-pysrc.html
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.plugin</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;plugin
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.plugin-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.plugin-module.html">Module nbxmpp.plugin</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## plugin.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"> </tt>
+<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"># $Id: client.py,v 1.52 2006/01/02 19:40:55 normanr Exp $</tt> </tt>
+<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-docstring">Provides PlugIn class functionality to develop extentions for xmpppy</tt> </tt>
+<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-0', 'log', 'link-0');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.plugin'</tt><tt class="py-op">)</tt> </tt>
+<a name="PlugIn"></a><div id="PlugIn-def"><a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"> </tt>
+<a name="L24"></a><tt class="py-lineno">24</tt> <a class="py-toggle" href="#" id="PlugIn-toggle" onclick="return toggle('PlugIn');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.plugin.PlugIn-class.html">PlugIn</a><tt class="py-op">:</tt> </tt>
+</div><div id="PlugIn-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="PlugIn-expanded"><a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt class="py-docstring"> Abstract xmpppy plugin infrastructure code, providing plugging in/out and</tt> </tt>
+<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"><tt class="py-docstring"> debugging functionality</tt> </tt>
+<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt class="py-docstring"> Inherit to develop pluggable objects. No code change on the owner class</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"><tt class="py-docstring"> required (the object where we plug into)</tt> </tt>
+<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"><tt class="py-docstring"> For every instance of PlugIn class the 'owner' is the class in what the plug</tt> </tt>
+<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"><tt class="py-docstring"> was plugged.</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"> </tt>
+<a name="PlugIn.__init__"></a><div id="PlugIn.__init__-def"><a name="L36"></a><tt class="py-lineno">36</tt> <a class="py-toggle" href="#" id="PlugIn.__init__-toggle" onclick="return toggle('PlugIn.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.plugin.PlugIn-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PlugIn.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="PlugIn.__init__-expanded"><a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exported_methods</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"> </tt>
+<a name="PlugIn.PlugIn"></a><div id="PlugIn.PlugIn-def"><a name="L39"></a><tt class="py-lineno">39</tt> <a class="py-toggle" href="#" id="PlugIn.PlugIn-toggle" onclick="return toggle('PlugIn.PlugIn');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PlugIn.PlugIn-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="PlugIn.PlugIn-expanded"><a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"><tt class="py-docstring"> Attach to owner and register ourself and our _exported_methods in it.</tt> </tt>
+<a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"><tt class="py-docstring"> If defined by a subclass, call self.plugin(owner) to execute hook</tt> </tt>
+<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"><tt class="py-docstring"> code after plugging</tt> </tt>
+<a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">=</tt><tt class="py-name">owner</tt> </tt>
+<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"> <tt id="link-1" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-1', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Plugging %s __INTO__ %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-keyword">in</tt> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> <tt id="link-2" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-2', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Plugging ignored: another instance already plugged.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_old_owners_methods</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">method</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exported_methods</tt><tt class="py-op">:</tt> </tt>
+<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-keyword">in</tt> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_old_owners_methods</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">method</tt> </tt>
+<a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'Dispatcher'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: I need BOSHDispatcher or XMPPDispatcher on .Dispatcher</tt> </tt>
+<a name="L57"></a><tt class="py-lineno">57</tt> <tt class="py-line"> <tt class="py-comment"># there must be a better way..</tt> </tt>
+<a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'Dispatcher'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">self</tt> </tt>
+<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">self</tt> </tt>
+<a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"> </tt>
+<a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"> <tt class="py-comment"># Execute hook</tt> </tt>
+<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'plugin'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugin()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugin,Method nbxmpp.auth_nb.NonBlockingNonSASL.plugin()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin,Method nbxmpp.auth_nb.SASL.plugin()=nbxmpp.auth_nb.SASL-class.html#plugin,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugin()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin,Module nbxmpp.plugin=nbxmpp.plugin-module.html,Method nbxmpp.roster_nb.NonBlockingRoster.plugin()=nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin,Method nbxmpp.tls_nb.NonBlockingTLS.plugin()=nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin,Method nbxmpp.transports_nb.NonBlockingTransport.plugin()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin"><a title="nbxmpp.auth_nb.NonBlockingBind.plugin
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin
+nbxmpp.auth_nb.SASL.plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin
+nbxmpp.plugin
+nbxmpp.roster_nb.NonBlockingRoster.plugin
+nbxmpp.tls_nb.NonBlockingTLS.plugin
+nbxmpp.transports_nb.NonBlockingTransport.plugin" class="py-name" href="#" onclick="return doclink('link-3', 'plugin', 'link-3');">plugin</a></tt><tt class="py-op">(</tt><tt class="py-name">owner</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"> </tt>
+<a name="PlugIn.PlugOut"></a><div id="PlugIn.PlugOut-def"><a name="L66"></a><tt class="py-lineno">66</tt> <a class="py-toggle" href="#" id="PlugIn.PlugOut-toggle" onclick="return toggle('PlugIn.PlugOut');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PlugIn.PlugOut-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="PlugIn.PlugOut-expanded"><a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"><tt class="py-docstring"> Unregister our _exported_methods from owner and detach from it.</tt> </tt>
+<a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"><tt class="py-docstring"> If defined by a subclass, call self.plugout() after unplugging to execute</tt> </tt>
+<a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"><tt class="py-docstring"> hook code</tt> </tt>
+<a name="L71"></a><tt class="py-lineno">71</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L72"></a><tt class="py-lineno">72</tt> <tt class="py-line"> <tt id="link-4" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-4', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Plugging %s __OUT__ of %s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">method</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exported_methods</tt><tt class="py-op">:</tt> </tt>
+<a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">]</tt> </tt>
+<a name="L75"></a><tt class="py-lineno">75</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">method</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_old_owners_methods</tt><tt class="py-op">:</tt> </tt>
+<a name="L76"></a><tt class="py-lineno">76</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">method</tt> </tt>
+<a name="L77"></a><tt class="py-lineno">77</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: Dispatcher workaround</tt> </tt>
+<a name="L78"></a><tt class="py-lineno">78</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'Dispatcher'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L79"></a><tt class="py-lineno">79</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'Dispatcher'</tt><tt class="py-op">]</tt> </tt>
+<a name="L80"></a><tt class="py-lineno">80</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L81"></a><tt class="py-lineno">81</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">]</tt> </tt>
+<a name="L82"></a><tt class="py-lineno">82</tt> <tt class="py-line"> <tt class="py-comment"># Execute hook</tt> </tt>
+<a name="L83"></a><tt class="py-lineno">83</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'plugout'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L84"></a><tt class="py-lineno">84</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugout()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugout,Method nbxmpp.auth_nb.SASL.plugout()=nbxmpp.auth_nb.SASL-class.html#plugout,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugout()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugout,Method nbxmpp.transports_nb.NonBlockingTransport.plugout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout"><a title="nbxmpp.auth_nb.NonBlockingBind.plugout
+nbxmpp.auth_nb.SASL.plugout
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugout
+nbxmpp.transports_nb.NonBlockingTransport.plugout" class="py-name" href="#" onclick="return doclink('link-5', 'plugout', 'link-5');">plugout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L85"></a><tt class="py-lineno">85</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> </tt>
+</div><a name="L86"></a><tt class="py-lineno">86</tt> <tt class="py-line"> </tt>
+<a name="L87"></a><tt class="py-lineno">87</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="PlugIn.get_instance"></a><div id="PlugIn.get_instance-def"><a name="L88"></a><tt class="py-lineno">88</tt> <a class="py-toggle" href="#" id="PlugIn.get_instance-toggle" onclick="return toggle('PlugIn.get_instance');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PlugIn.get_instance-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="PlugIn.get_instance-expanded"><a name="L89"></a><tt class="py-lineno">89</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L90"></a><tt class="py-lineno">90</tt> <tt class="py-line"><tt class="py-docstring"> Factory Method for object creation</tt> </tt>
+<a name="L91"></a><tt class="py-lineno">91</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L92"></a><tt class="py-lineno">92</tt> <tt class="py-line"><tt class="py-docstring"> Use this instead of directly initializing the class in order to make</tt> </tt>
+<a name="L93"></a><tt class="py-lineno">93</tt> <tt class="py-line"><tt class="py-docstring"> unit testing easier. For testing, this method can be patched to inject</tt> </tt>
+<a name="L94"></a><tt class="py-lineno">94</tt> <tt class="py-line"><tt class="py-docstring"> mock objects.</tt> </tt>
+<a name="L95"></a><tt class="py-lineno">95</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L96"></a><tt class="py-lineno">96</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L97"></a><tt class="py-lineno">97</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.plugin.PlugIn-class.html b/doc/apidocs/nbxmpp.plugin.PlugIn-class.html
new file mode 100644
index 0000000..b520e0f
--- /dev/null
+++ b/doc/apidocs/nbxmpp.plugin.PlugIn-class.html
@@ -0,0 +1,363 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.plugin.PlugIn</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.plugin-module.html">Module&nbsp;plugin</a> ::
+ Class&nbsp;PlugIn
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.plugin.PlugIn-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class PlugIn</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.plugin-pysrc.html#PlugIn">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p" name="uml_class_diagram_for_nbxmpp_p">
+<area shape="rect" id="node29" href="nbxmpp.plugin.PlugIn-class.html#__init__" title="nbxmpp.plugin.PlugIn.__init__" alt="" coords="673,39,899,57"/>
+<area shape="rect" id="node29" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="673,57,899,76"/>
+<area shape="rect" id="node29" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="673,76,899,95"/>
+<area shape="rect" id="node29" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="673,95,899,113"/>
+<area shape="rect" id="node1" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="661,6,909,119"/>
+<area shape="rect" id="node2" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html" title="Handles XMPP stream and is the first who takes control over a fresh stanza" alt="" coords="7,139,241,178"/>
+<area shape="rect" id="node3" href="nbxmpp.auth_nb.SASL-class.html" title="Implements SASL authentication. Can be plugged into NonBlockingClient to start authentication" alt="" coords="271,139,396,178"/>
+<area shape="rect" id="node4" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html" title="Implements old Non&#45;SASL (JEP&#45;0078) authentication used in jabberd1.4 and transport authentication" alt="" coords="425,139,657,178"/>
+<area shape="rect" id="node6" href="nbxmpp.auth_nb.NonBlockingBind-class.html" title="Bind some JID to the current connection to allow router know of our location. Must be plugged after successful SASL auth" alt="" coords="687,139,887,178"/>
+<area shape="rect" id="node7" href="nbxmpp.tls_nb.NonBlockingTLS-class.html" title="TLS connection used to encrypts already estabilished tcp connection" alt="" coords="916,139,1097,178"/>
+<area shape="rect" id="node8" href="nbxmpp.roster_nb.NonBlockingRoster-class.html" title="Defines a plenty of methods that will allow you to manage roster. Also automatically track presences from remote JIDs taking into account that every JID can have multiple resources connected. Does not currently support &#39;error&#39; presences. You can also use mapping interface for access to the internal representation of contacts in roster" alt="" coords="1127,139,1348,178"/>
+<area shape="rect" id="node10" href="nbxmpp.transports_nb.NonBlockingTransport-class.html" title="Abstract class representing a transport" alt="" coords="1377,139,1644,178"/>
+<area shape="rect" id="node9" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html" title="nbxmpp.dispatcher_nb.BOSHDispatcher" alt="" coords="5,198,243,237"/>
+<area shape="rect" id="node5" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html" title="Socket wrapper that creates HTTP message out of sent data and peels&#45;off HTTP headers from incoming messages" alt="" coords="1511,257,1751,295"/>
+<area shape="rect" id="node12" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" title="Class for BOSH HTTP connections. Slightly redefines HTTP transport by calling bosh bodytag generating callback before putting data on wire" alt="" coords="1492,315,1769,354"/>
+<area shape="rect" id="node11" href="nbxmpp.bosh.NonBlockingBOSH-class.html" title="nbxmpp.bosh.NonBlockingBOSH" alt="" coords="1296,198,1485,237"/>
+<area shape="rect" id="node13" href="nbxmpp.transports_nb.NonBlockingTCP-class.html" title="Non&#45;blocking TCP socket wrapper" alt="" coords="1515,198,1747,237"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>Abstract xmpppy plugin infrastructure code, providing plugging in/out and
+debugging functionality</p>
+<p>Inherit to develop pluggable objects. No code change on the owner class
+required (the object where we plug into)</p>
+<p>For every instance of PlugIn class the 'owner' is the class in what the plug
+was plugged.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.plugin.PlugIn-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.plugin-pysrc.html#PlugIn.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn" class="summary-sig-name">PlugIn</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span><br />
+ Attach to owner and register ourself and our _exported_methods in it.
+If defined by a subclass, call self.plugin(owner) to execute hook
+code after plugging</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.plugin-pysrc.html#PlugIn.PlugIn">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut" class="summary-sig-name">PlugOut</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Unregister our _exported_methods from owner and detach from it.
+If defined by a subclass, call self.plugout() after unplugging to execute
+hook code</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.plugin-pysrc.html#PlugIn.PlugOut">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.plugin.PlugIn-class.html#get_instance" class="summary-sig-name">get_instance</a>(<span class="summary-sig-arg">cls</span>,
+ <span class="summary-sig-arg">*args</span>,
+ <span class="summary-sig-arg">**kwargs</span>)</span><br />
+ Factory Method for object creation</td>
+ <td align="right" valign="top">
+
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.plugin-pysrc.html#PlugIn.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="PlugIn"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">PlugIn</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.plugin-pysrc.html#PlugIn.PlugIn">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Attach to owner and register ourself and our _exported_methods in it.
+If defined by a subclass, call self.plugin(owner) to execute hook
+code after plugging
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="PlugOut"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">PlugOut</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.plugin-pysrc.html#PlugIn.PlugOut">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Unregister our _exported_methods from owner and detach from it.
+If defined by a subclass, call self.plugout() after unplugging to execute
+hook code
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_instance"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_instance</span>(<span class="sig-arg">cls</span>,
+ <span class="sig-arg">*args</span>,
+ <span class="sig-arg">**kwargs</span>)</span>
+ <br /><em class="fname">Class Method</em>
+ </h3>
+ </td><td align="right" valign="top"
+ >&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Factory Method for object creation</p>
+<p>Use this instead of directly initializing the class in order to make
+unit testing easier. For testing, this method can be patched to inject
+mock objects.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol-module.html b/doc/apidocs/nbxmpp.protocol-module.html
new file mode 100644
index 0000000..9a1a719
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol-module.html
@@ -0,0 +1,5651 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;protocol
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module protocol</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html">source&nbsp;code</a></span></p>
+Protocol module contains tools that are needed for processing of xmpp-related
+data structures, including jabber-objects like JID or different stanzas and
+sub- stanzas) handling routines
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.NodeProcessed-class.html" class="summary-name">NodeProcessed</a><br />
+ Exception that should be raised by handler when the handling should be
+stopped
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.StreamError-class.html" class="summary-name">StreamError</a><br />
+ Base exception class for stream errors
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.BadFormat-class.html" class="summary-name">BadFormat</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.BadNamespacePrefix-class.html" class="summary-name">BadNamespacePrefix</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Conflict-class.html" class="summary-name">Conflict</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.ConnectionTimeout-class.html" class="summary-name">ConnectionTimeout</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.HostGone-class.html" class="summary-name">HostGone</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.HostUnknown-class.html" class="summary-name">HostUnknown</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.ImproperAddressing-class.html" class="summary-name">ImproperAddressing</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.InternalServerError-class.html" class="summary-name">InternalServerError</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.InvalidFrom-class.html" class="summary-name">InvalidFrom</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.InvalidID-class.html" class="summary-name">InvalidID</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.InvalidNamespace-class.html" class="summary-name">InvalidNamespace</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.InvalidXML-class.html" class="summary-name">InvalidXML</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.NotAuthorized-class.html" class="summary-name">NotAuthorized</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.PolicyViolation-class.html" class="summary-name">PolicyViolation</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.RemoteConnectionFailed-class.html" class="summary-name">RemoteConnectionFailed</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.ResourceConstraint-class.html" class="summary-name">ResourceConstraint</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.RestrictedXML-class.html" class="summary-name">RestrictedXML</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.SeeOtherHost-class.html" class="summary-name">SeeOtherHost</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.SystemShutdown-class.html" class="summary-name">SystemShutdown</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.UndefinedCondition-class.html" class="summary-name">UndefinedCondition</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.UnsupportedEncoding-class.html" class="summary-name">UnsupportedEncoding</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.UnsupportedStanzaType-class.html" class="summary-name">UnsupportedStanzaType</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.UnsupportedVersion-class.html" class="summary-name">UnsupportedVersion</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.XMLNotWellFormed-class.html" class="summary-name">XMLNotWellFormed</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.JID-class.html" class="summary-name">JID</a><br />
+ JID can be built from string, modified, compared, serialised into string
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.BOSHBody-class.html" class="summary-name">BOSHBody</a><br />
+ &lt;body&gt; tag that wraps usual XMPP stanzas in XMPP over BOSH
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Protocol-class.html" class="summary-name">Protocol</a><br />
+ A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs
+and messages
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Message-class.html" class="summary-name">Message</a><br />
+ XMPP Message stanza - &quot;push&quot; mechanism
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Presence-class.html" class="summary-name">Presence</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Iq-class.html" class="summary-name">Iq</a><br />
+ XMPP Iq object - get/set dialog mechanism
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Hashes-class.html" class="summary-name">Hashes</a><br />
+ Hash elements for various XEPs as defined in XEP-300
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Acks-class.html" class="summary-name">Acks</a><br />
+ Acknowledgement elements for Stream Management
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.ErrorNode-class.html" class="summary-name">ErrorNode</a><br />
+ XMPP-style error element
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Error-class.html" class="summary-name">Error</a><br />
+ Used to quickly transform received stanza into error reply
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.DataField-class.html" class="summary-name">DataField</a><br />
+ This class is used in the DataForm class to describe the single data item
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.DataForm-class.html" class="summary-name">DataForm</a><br />
+ Used for manipulating dataforms in XMPP
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol-module.html#ascii_upper" class="summary-sig-name">ascii_upper</a>(<span class="summary-sig-arg">s</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ascii_upper">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol-module.html#isResultNode" class="summary-sig-name">isResultNode</a>(<span class="summary-sig-arg">node</span>)</span><br />
+ Return true if the node is a positive reply</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#isResultNode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol-module.html#isErrorNode" class="summary-sig-name">isErrorNode</a>(<span class="summary-sig-arg">node</span>)</span><br />
+ Return true if the node is a negative reply</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#isErrorNode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ACTIVITY" class="summary-name">NS_ACTIVITY</a> = <code title="'http://jabber.org/protocol/activity'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/activity</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ADDRESS" class="summary-name">NS_ADDRESS</a> = <code title="'http://jabber.org/protocol/address'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/address</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_AGENTS" class="summary-name">NS_AGENTS</a> = <code title="'jabber:iq:agents'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:agents</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_AMP" class="summary-name">NS_AMP</a> = <code title="'http://jabber.org/protocol/amp'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/amp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_AMP_ERRORS" class="summary-name">NS_AMP_ERRORS</a> = <code title="'http://jabber.org/protocol/amp#errors'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/amp#errors</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ARCHIVE" class="summary-name">NS_ARCHIVE</a> = <code title="'urn:xmpp:archive'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ARCHIVE_AUTO" class="summary-name">NS_ARCHIVE_AUTO</a> = <code title="'urn:xmpp:archive:auto'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:auto</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANAGE" class="summary-name">NS_ARCHIVE_MANAGE</a> = <code title="'urn:xmpp:archive:manage'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:manage</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANUAL" class="summary-name">NS_ARCHIVE_MANUAL</a> = <code title="'urn:xmpp:archive:manual'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:manual</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ARCHIVE_PREF" class="summary-name">NS_ARCHIVE_PREF</a> = <code title="'urn:xmpp:archive:pref'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:pref</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ATOM" class="summary-name">NS_ATOM</a> = <code title="'http://www.w3.org/2005/Atom'"><code class="variable-quote">'</code><code class="variable-string">http://www.w3.org/2005/Atom</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ATTENTION" class="summary-name">NS_ATTENTION</a> = <code title="'urn:xmpp:attention:0'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:attention:0</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_AUTH" class="summary-name">NS_AUTH</a> = <code title="'jabber:iq:auth'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:auth</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_AVATAR" class="summary-name">NS_AVATAR</a> = <code title="'http://www.xmpp.org/extensions/xep-0084.html#ns-metadata'"><code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0084.html#ns-m</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_BIND" class="summary-name">NS_BIND</a> = <code title="'urn:ietf:params:xml:ns:xmpp-bind'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-bind</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_BOB" class="summary-name">NS_BOB</a> = <code title="'urn:xmpp:bob'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:bob</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_BOOKMARKS" class="summary-name">NS_BOOKMARKS</a> = <code title="'storage:bookmarks'"><code class="variable-quote">'</code><code class="variable-string">storage:bookmarks</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_BROWSE" class="summary-name">NS_BROWSE</a> = <code title="'jabber:iq:browse'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:browse</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_BROWSING" class="summary-name">NS_BROWSING</a> = <code title="'http://jabber.org/protocol/browsing'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/browsing</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_BYTESTREAM" class="summary-name">NS_BYTESTREAM</a> = <code title="'http://jabber.org/protocol/bytestreams'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/bytestreams</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CAPS" class="summary-name">NS_CAPS</a> = <code title="'http://jabber.org/protocol/caps'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/caps</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CAPTCHA" class="summary-name">NS_CAPTCHA</a> = <code title="'urn:xmpp:captcha'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:captcha</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CARBONS" class="summary-name">NS_CARBONS</a> = <code title="'urn:xmpp:carbons:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:carbons:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CHATSTATES" class="summary-name">NS_CHATSTATES</a> = <code title="'http://jabber.org/protocol/chatstates'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/chatstates</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CHATTING" class="summary-name">NS_CHATTING</a> = <code title="'http://jabber.org/protocol/chatting'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/chatting</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CLIENT" class="summary-name">NS_CLIENT</a> = <code title="'jabber:client'"><code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CONDITIONS" class="summary-name">NS_CONDITIONS</a> = <code title="'urn:xmpp:muc:conditions:0'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:muc:conditions:0</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_COMMANDS" class="summary-name">NS_COMMANDS</a> = <code title="'http://jabber.org/protocol/commands'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/commands</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_COMPONENT_ACCEPT" class="summary-name">NS_COMPONENT_ACCEPT</a> = <code title="'jabber:component:accept'"><code class="variable-quote">'</code><code class="variable-string">jabber:component:accept</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_COMPONENT_1" class="summary-name">NS_COMPONENT_1</a> = <code title="'http://jabberd.jabberstudio.org/ns/component/1.0'"><code class="variable-quote">'</code><code class="variable-string">http://jabberd.jabberstudio.org/ns/component</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_COMPRESS" class="summary-name">NS_COMPRESS</a> = <code title="'http://jabber.org/protocol/compress'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/compress</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_CONFERENCE" class="summary-name">NS_CONFERENCE</a> = <code title="'jabber:x:conference'"><code class="variable-quote">'</code><code class="variable-string">jabber:x:conference</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DATA" class="summary-name">NS_DATA</a> = <code title="'jabber:x:data'"><code class="variable-quote">'</code><code class="variable-string">jabber:x:data</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DATA_MEDIA" class="summary-name">NS_DATA_MEDIA</a> = <code title="'urn:xmpp:media-element'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:media-element</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DELAY" class="summary-name">NS_DELAY</a> = <code title="'jabber:x:delay'"><code class="variable-quote">'</code><code class="variable-string">jabber:x:delay</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DELAY2" class="summary-name">NS_DELAY2</a> = <code title="'urn:xmpp:delay'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:delay</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DIALBACK" class="summary-name">NS_DIALBACK</a> = <code title="'jabber:server:dialback'"><code class="variable-quote">'</code><code class="variable-string">jabber:server:dialback</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DISCO" class="summary-name">NS_DISCO</a> = <code title="'http://jabber.org/protocol/disco'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/disco</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DISCO_INFO" class="summary-name">NS_DISCO_INFO</a> = <code title="'http://jabber.org/protocol/disco#info'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/disco#info</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DISCO_ITEMS" class="summary-name">NS_DISCO_ITEMS</a> = <code title="'http://jabber.org/protocol/disco#items'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/disco#items</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ENCRYPTED" class="summary-name">NS_ENCRYPTED</a> = <code title="'jabber:x:encrypted'"><code class="variable-quote">'</code><code class="variable-string">jabber:x:encrypted</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ESESSION" class="summary-name">NS_ESESSION</a> = <code title="'http://www.xmpp.org/extensions/xep-0116.html#ns'"><code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0116.html#ns</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ESESSION_INIT" class="summary-name">NS_ESESSION_INIT</a> = <code title="'http://www.xmpp.org/extensions/xep-0116.html#ns-init'"><code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0116.ht</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_EVENT" class="summary-name">NS_EVENT</a> = <code title="'jabber:x:event'"><code class="variable-quote">'</code><code class="variable-string">jabber:x:event</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_FEATURE" class="summary-name">NS_FEATURE</a> = <code title="'http://jabber.org/protocol/feature-neg'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/feature-neg</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_FILE" class="summary-name">NS_FILE</a> = <code title="'http://jabber.org/protocol/si/profile/file-transfer'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/si/profile/file-transfer</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_FORWARD" class="summary-name">NS_FORWARD</a> = <code title="'urn:xmpp:forward:0'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:forward:0</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_GAMING" class="summary-name">NS_GAMING</a> = <code title="'http://jabber.org/protocol/gaming'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/gaming</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_GATEWAY" class="summary-name">NS_GATEWAY</a> = <code title="'jabber:iq:gateway'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:gateway</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_GEOLOC" class="summary-name">NS_GEOLOC</a> = <code title="'http://jabber.org/protocol/geoloc'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/geoloc</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_GROUPCHAT" class="summary-name">NS_GROUPCHAT</a> = <code title="'gc-1.0'"><code class="variable-quote">'</code><code class="variable-string">gc-1.0</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_HTTP_AUTH" class="summary-name">NS_HTTP_AUTH</a> = <code title="'http://jabber.org/protocol/http-auth'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/http-auth</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_HTTP_BIND" class="summary-name">NS_HTTP_BIND</a> = <code title="'http://jabber.org/protocol/httpbind'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/httpbind</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_IBB" class="summary-name">NS_IBB</a> = <code title="'http://jabber.org/protocol/ibb'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/ibb</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_INVISIBLE" class="summary-name">NS_INVISIBLE</a> = <code title="'presence-invisible'"><code class="variable-quote">'</code><code class="variable-string">presence-invisible</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_IQ" class="summary-name">NS_IQ</a> = <code title="'iq'"><code class="variable-quote">'</code><code class="variable-string">iq</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE" class="summary-name">NS_JINGLE</a> = <code title="'urn:xmpp:jingle:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_ERRORS" class="summary-name">NS_JINGLE_ERRORS</a> = <code title="'urn:xmpp:jingle:errors:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:errors:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_RTP" class="summary-name">NS_JINGLE_RTP</a> = <code title="'urn:xmpp:jingle:apps:rtp:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:rtp:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_AUDIO" class="summary-name">NS_JINGLE_RTP_AUDIO</a> = <code title="'urn:xmpp:jingle:apps:rtp:audio'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:rtp:audio</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_VIDEO" class="summary-name">NS_JINGLE_RTP_VIDEO</a> = <code title="'urn:xmpp:jingle:apps:rtp:video'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:rtp:video</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_FILE_TRANSFER" class="summary-name">NS_JINGLE_FILE_TRANSFER</a> = <code title="'urn:xmpp:jingle:apps:file-transfer:3'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:file-transfer:3</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_XTLS" class="summary-name">NS_JINGLE_XTLS</a> = <code title="'urn:xmpp:jingle:security:xtls:0'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:security:xtls:0</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_RAW_UDP" class="summary-name">NS_JINGLE_RAW_UDP</a> = <code title="'urn:xmpp:jingle:transports:raw-udp:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:raw-udp:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_ICE_UDP" class="summary-name">NS_JINGLE_ICE_UDP</a> = <code title="'urn:xmpp:jingle:transports:ice-udp:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:ice-udp:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_BYTESTREAM" class="summary-name">NS_JINGLE_BYTESTREAM</a> = <code title="'urn:xmpp:jingle:transports:s5b:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:s5b:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_JINGLE_IBB" class="summary-name">NS_JINGLE_IBB</a> = <code title="'urn:xmpp:jingle:transports:ibb:1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:ibb:1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_LAST" class="summary-name">NS_LAST</a> = <code title="'jabber:iq:last'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:last</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_LOCATION" class="summary-name">NS_LOCATION</a> = <code title="'http://jabber.org/protocol/geoloc'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/geoloc</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MESSAGE" class="summary-name">NS_MESSAGE</a> = <code title="'message'"><code class="variable-quote">'</code><code class="variable-string">message</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MOOD" class="summary-name">NS_MOOD</a> = <code title="'http://jabber.org/protocol/mood'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/mood</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MUC" class="summary-name">NS_MUC</a> = <code title="'http://jabber.org/protocol/muc'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MUC_USER" class="summary-name">NS_MUC_USER</a> = <code title="'http://jabber.org/protocol/muc#user'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#user</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MUC_ADMIN" class="summary-name">NS_MUC_ADMIN</a> = <code title="'http://jabber.org/protocol/muc#admin'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#admin</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MUC_OWNER" class="summary-name">NS_MUC_OWNER</a> = <code title="'http://jabber.org/protocol/muc#owner'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#owner</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MUC_UNIQUE" class="summary-name">NS_MUC_UNIQUE</a> = <code title="'http://jabber.org/protocol/muc#unique'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#unique</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_MUC_CONFIG" class="summary-name">NS_MUC_CONFIG</a> = <code title="'http://jabber.org/protocol/muc#roomconfig'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#roomconfig</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_NICK" class="summary-name">NS_NICK</a> = <code title="'http://jabber.org/protocol/nick'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/nick</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_OFFLINE" class="summary-name">NS_OFFLINE</a> = <code title="'http://www.jabber.org/jeps/jep-0030.html'"><code class="variable-quote">'</code><code class="variable-string">http://www.jabber.org/jeps/jep-0030.html</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PHYSLOC" class="summary-name">NS_PHYSLOC</a> = <code title="'http://jabber.org/protocol/physloc'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/physloc</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PING" class="summary-name">NS_PING</a> = <code title="'urn:xmpp:ping'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:ping</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PRESENCE" class="summary-name">NS_PRESENCE</a> = <code title="'presence'"><code class="variable-quote">'</code><code class="variable-string">presence</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PRIVACY" class="summary-name">NS_PRIVACY</a> = <code title="'jabber:iq:privacy'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:privacy</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PRIVATE" class="summary-name">NS_PRIVATE</a> = <code title="'jabber:iq:private'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:private</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PROFILE" class="summary-name">NS_PROFILE</a> = <code title="'http://jabber.org/protocol/profile'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/profile</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PUBSUB" class="summary-name">NS_PUBSUB</a> = <code title="'http://jabber.org/protocol/pubsub'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PUBSUB_EVENT" class="summary-name">NS_PUBSUB_EVENT</a> = <code title="'http://jabber.org/protocol/pubsub#event'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub#event</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PUBSUB_PUBLISH_OPTIONS" class="summary-name">NS_PUBSUB_PUBLISH_OPTIONS</a> = <code title="'http://jabber.org/protocol/pubsub#publish-options'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PUBSUB_OWNER" class="summary-name">NS_PUBSUB_OWNER</a> = <code title="'http://jabber.org/protocol/pubsub#owner'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub#owner</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_REGISTER" class="summary-name">NS_REGISTER</a> = <code title="'jabber:iq:register'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:register</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ROSTER" class="summary-name">NS_ROSTER</a> = <code title="'jabber:iq:roster'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:roster</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ROSTERNOTES" class="summary-name">NS_ROSTERNOTES</a> = <code title="'storage:rosternotes'"><code class="variable-quote">'</code><code class="variable-string">storage:rosternotes</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ROSTERX" class="summary-name">NS_ROSTERX</a> = <code title="'http://jabber.org/protocol/rosterx'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/rosterx</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_ROSTER_VER" class="summary-name">NS_ROSTER_VER</a> = <code title="'urn:xmpp:features:rosterver'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:features:rosterver</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_RPC" class="summary-name">NS_RPC</a> = <code title="'jabber:iq:rpc'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:rpc</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_RSM" class="summary-name">NS_RSM</a> = <code title="'http://jabber.org/protocol/rsm'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/rsm</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SASL" class="summary-name">NS_SASL</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SECLABEL" class="summary-name">NS_SECLABEL</a> = <code title="'urn:xmpp:sec-label:0'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sec-label:0</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SECLABEL_CATALOG" class="summary-name">NS_SECLABEL_CATALOG</a> = <code title="'urn:xmpp:sec-label:catalog:2'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sec-label:catalog:2</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SEARCH" class="summary-name">NS_SEARCH</a> = <code title="'jabber:iq:search'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:search</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SERVER" class="summary-name">NS_SERVER</a> = <code title="'jabber:server'"><code class="variable-quote">'</code><code class="variable-string">jabber:server</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SESSION" class="summary-name">NS_SESSION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-session'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-session</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SI" class="summary-name">NS_SI</a> = <code title="'http://jabber.org/protocol/si'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/si</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SI_PUB" class="summary-name">NS_SI_PUB</a> = <code title="'http://jabber.org/protocol/sipub'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/sipub</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SIGNED" class="summary-name">NS_SIGNED</a> = <code title="'jabber:x:signed'"><code class="variable-quote">'</code><code class="variable-string">jabber:x:signed</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_SSN" class="summary-name">NS_SSN</a> = <code title="'urn:xmpp:ssn'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:ssn</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_STANZA_CRYPTO" class="summary-name">NS_STANZA_CRYPTO</a> = <code title="'http://www.xmpp.org/extensions/xep-0200.html#ns'"><code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0200.ht</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_STANZAS" class="summary-name">NS_STANZAS</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_STREAM" class="summary-name">NS_STREAM</a> = <code title="'http://affinix.com/jabber/stream'"><code class="variable-quote">'</code><code class="variable-string">http://affinix.com/jabber/stream</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_STREAMS" class="summary-name">NS_STREAMS</a> = <code title="'http://etherx.jabber.org/streams'"><code class="variable-quote">'</code><code class="variable-string">http://etherx.jabber.org/streams</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_TIME" class="summary-name">NS_TIME</a> = <code title="'jabber:iq:time'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:time</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_TIME_REVISED" class="summary-name">NS_TIME_REVISED</a> = <code title="'urn:xmpp:time'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:time</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_TLS" class="summary-name">NS_TLS</a> = <code title="'urn:ietf:params:xml:ns:xmpp-tls'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-tls</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_TUNE" class="summary-name">NS_TUNE</a> = <code title="'http://jabber.org/protocol/tune'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/tune</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_VACATION" class="summary-name">NS_VACATION</a> = <code title="'http://jabber.org/protocol/vacation'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/vacation</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_VCARD" class="summary-name">NS_VCARD</a> = <code title="'vcard-temp'"><code class="variable-quote">'</code><code class="variable-string">vcard-temp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_GMAILNOTIFY" class="summary-name">NS_GMAILNOTIFY</a> = <code title="'google:mail:notify'"><code class="variable-quote">'</code><code class="variable-string">google:mail:notify</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_GTALKSETTING" class="summary-name">NS_GTALKSETTING</a> = <code title="'google:setting'"><code class="variable-quote">'</code><code class="variable-string">google:setting</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_VCARD_UPDATE" class="summary-name">NS_VCARD_UPDATE</a> = <code title="'vcard-temp:x:update'"><code class="variable-quote">'</code><code class="variable-string">vcard-temp:x:update</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_VERSION" class="summary-name">NS_VERSION</a> = <code title="'jabber:iq:version'"><code class="variable-quote">'</code><code class="variable-string">jabber:iq:version</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_VIEWING" class="summary-name">NS_VIEWING</a> = <code title="'http://jabber.org/protocol/viewing'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/viewing</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_WAITINGLIST" class="summary-name">NS_WAITINGLIST</a> = <code title="'http://jabber.org/protocol/waitinglist'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/waitinglist</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_XHTML_IM" class="summary-name">NS_XHTML_IM</a> = <code title="'http://jabber.org/protocol/xhtml-im'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/xhtml-im</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_XHTML" class="summary-name">NS_XHTML</a> = <code title="'http://www.w3.org/1999/xhtml'"><code class="variable-quote">'</code><code class="variable-string">http://www.w3.org/1999/xhtml</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DATA_LAYOUT" class="summary-name">NS_DATA_LAYOUT</a> = <code title="'http://jabber.org/protocol/xdata-layout'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/xdata-layout</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_DATA_VALIDATE" class="summary-name">NS_DATA_VALIDATE</a> = <code title="'http://jabber.org/protocol/xdata-validate'"><code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/xdata-validate</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_XMPP_STREAMS" class="summary-name">NS_XMPP_STREAMS</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_RECEIPTS" class="summary-name">NS_RECEIPTS</a> = <code title="'urn:xmpp:receipts'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:receipts</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PUBKEY_PUBKEY" class="summary-name">NS_PUBKEY_PUBKEY</a> = <code title="'urn:xmpp:pubkey:2'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:pubkey:2</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PUBKEY_REVOKE" class="summary-name">NS_PUBKEY_REVOKE</a> = <code title="'urn:xmpp:revoke:2'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:revoke:2</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_PUBKEY_ATTEST" class="summary-name">NS_PUBKEY_ATTEST</a> = <code title="'urn:xmpp:attest:2'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:attest:2</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_STREAM_MGMT" class="summary-name">NS_STREAM_MGMT</a> = <code title="'urn:xmpp:sm:2'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sm:2</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_HASHES" class="summary-name">NS_HASHES</a> = <code title="'urn:xmpp:hashes:0'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hashes:0</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_HASHES_MD5" class="summary-name">NS_HASHES_MD5</a> = <code title="'urn:xmpp:hash-function-textual-names:md5'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:md5</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_HASHES_SHA1" class="summary-name">NS_HASHES_SHA1</a> = <code title="'urn:xmpp:hash-function-textual-names:sha-1'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:sha-1</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_HASHES_SHA256" class="summary-name">NS_HASHES_SHA256</a> = <code title="'urn:xmpp:hash-function-textual-names:sha-256'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:sha-256</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#NS_HASHES_SHA512" class="summary-name">NS_HASHES_SHA512</a> = <code title="'urn:xmpp:hash-function-textual-names:sha-512'"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:sha-512</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#xmpp_stream_error_conditions" class="summary-name">xmpp_stream_error_conditions</a> = <code title="'''
+bad-format -- -- -- The entity has sent XML that cannot be processed\
+.
+bad-namespace-prefix -- -- -- The entity has sent a namespace prefix\
+ that is unsupported, or has sent no namespace prefix on an element th\
+at requires such a prefix.
+conflict -- -- -- The server is closing the active stream for this e\
+ntity because a new stream has been initiated that conflicts with the \
+..."><code class="variable-quote">'</code><code class="variable-string">\nbad-format -- -- -- The en</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#xmpp_stanza_error_conditions" class="summary-name">xmpp_stanza_error_conditions</a> = <code title="'''
+bad-request -- 400 -- modify -- The sender has sent XML that is malfor\
+med or that cannot be processed.
+conflict -- 409 -- cancel -- Access cannot be granted because an exist\
+ing resource or session exists with the same name or address.
+feature-not-implemented -- 501 -- cancel -- The feature requested is n\
+ot implemented by the recipient or server and therefore cannot be proc\
+essed.
+..."><code class="variable-quote">'</code><code class="variable-string">\nbad-request -- 400 -- modify</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#sasl_error_conditions" class="summary-name">sasl_error_conditions</a> = <code title="'''
+aborted -- -- -- The receiving entity acknowledges an &lt;abort/&gt; eleme\
+nt sent by the initiating entity; sent in reply to the &lt;abort/&gt; elemen\
+t.
+incorrect-encoding -- -- -- The data provided by the initiating enti\
+ty could not be processed because the [BASE64]Josefsson, S., The Base1\
+6, Base32, and Base64 Data Encodings, July 2003. encoding is incorrect\
+ (e.g., because the encoding does not adhere to the definition in Sect\
+..."><code class="variable-quote">'</code><code class="variable-string">\naborted -- -- -- The receiving en</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#stream_exceptions" class="summary-name">stream_exceptions</a> = <code title="{'bad-format': &lt;class 'nbxmpp.protocol.BadFormat'&gt;,
+ 'bad-namespace-prefix': &lt;class 'nbxmpp.protocol.BadNamespacePrefix'&gt;,
+ 'conflict': &lt;class 'nbxmpp.protocol.Conflict'&gt;,
+ 'connection-timeout': &lt;class 'nbxmpp.protocol.ConnectionTimeout'&gt;,
+ 'host-gone': &lt;class 'nbxmpp.protocol.HostGone'&gt;,
+ 'host-unknown': &lt;class 'nbxmpp.protocol.HostUnknown'&gt;,
+ 'improper-addressing': &lt;class 'nbxmpp.protocol.ImproperAddressing'&gt;,
+ 'internal-server-error': &lt;class 'nbxmpp.protocol.InternalServerError'\
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">bad-format</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.Bad<code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERRORS" class="summary-name">ERRORS</a> = <code title="{'urn:ietf:params:xml:ns:xmpp-sasl aborted': ['',
+ '',
+ 'The receiving entity ac\
+knowledges an &lt;abort/&gt; element sent by the initiating entity; sent in \
+reply to the &lt;abort/&gt; element.'],
+ 'urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding': ['',
+ '',
+ 'The data pro\
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_BAD_REQUEST" class="summary-name">ERR_BAD_REQUEST</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas bad-request'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas bad-req</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_CONFLICT" class="summary-name">ERR_CONFLICT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas conflict'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas conflict</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_FEATURE_NOT_IMPLEMENTED" class="summary-name">ERR_FEATURE_NOT_IMPLEMENTED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas feature-not-implemented'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sta</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_FORBIDDEN" class="summary-name">ERR_FORBIDDEN</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas forbidden'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas forbidden</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_GONE" class="summary-name">ERR_GONE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas gone'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas gone</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_INTERNAL_SERVER_ERROR" class="summary-name">ERR_INTERNAL_SERVER_ERROR</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas internal-server-error'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_ITEM_NOT_FOUND" class="summary-name">ERR_ITEM_NOT_FOUND</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas item-not-found'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas item</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_JID_MALFORMED" class="summary-name">ERR_JID_MALFORMED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas jid-malformed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas jid-m</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_NOT_ACCEPTABLE" class="summary-name">ERR_NOT_ACCEPTABLE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas not-acceptable'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_NOT_ALLOWED" class="summary-name">ERR_NOT_ALLOWED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas not-allowed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-all</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_NOT_AUTHORIZED" class="summary-name">ERR_NOT_AUTHORIZED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas not-authorized'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_PAYMENT_REQUIRED" class="summary-name">ERR_PAYMENT_REQUIRED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas payment-required'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas pa</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_RECIPIENT_UNAVAILABLE" class="summary-name">ERR_RECIPIENT_UNAVAILABLE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas recipient-unavailable'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_REDIRECT" class="summary-name">ERR_REDIRECT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas redirect'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas redirect</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_REGISTRATION_REQUIRED" class="summary-name">ERR_REGISTRATION_REQUIRED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas registration-required'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_NOT_FOUND" class="summary-name">ERR_REMOTE_SERVER_NOT_FOUND</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas remote-server-not-found'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sta</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_TIMEOUT" class="summary-name">ERR_REMOTE_SERVER_TIMEOUT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas remote-server-timeout'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_RESOURCE_CONSTRAINT" class="summary-name">ERR_RESOURCE_CONSTRAINT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas resource-constraint'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_SERVICE_UNAVAILABLE" class="summary-name">ERR_SERVICE_UNAVAILABLE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas service-unavailable'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_SUBSCRIPTION_REQUIRED" class="summary-name">ERR_SUBSCRIPTION_REQUIRED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas subscription-required'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanz</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_UNDEFINED_CONDITION" class="summary-name">ERR_UNDEFINED_CONDITION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas undefined-condition'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#ERR_UNEXPECTED_REQUEST" class="summary-name">ERR_UNEXPECTED_REQUEST</a> = <code title="'urn:ietf:params:xml:ns:xmpp-stanzas unexpected-request'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas </code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#SASL_ABORTED" class="summary-name">SASL_ABORTED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl aborted'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#SASL_INCORRECT_ENCODING" class="summary-name">SASL_INCORRECT_ENCODING</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl in</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#SASL_INVALID_AUTHZID" class="summary-name">SASL_INVALID_AUTHZID</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl invalid-authzid'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl inval</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#SASL_INVALID_MECHANISM" class="summary-name">SASL_INVALID_MECHANISM</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl invalid-mechanism'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl inv</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#SASL_MECHANISM_TOO_WEAK" class="summary-name">SASL_MECHANISM_TOO_WEAK</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl mechanism-too-weak'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl me</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#SASL_NOT_AUTHORIZED" class="summary-name">SASL_NOT_AUTHORIZED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl not-authorized'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl not-au</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#SASL_TEMPORARY_AUTH_FAILURE" class="summary-name">SASL_TEMPORARY_AUTH_FAILURE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-sasl temporary-auth-failure'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sas</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_BAD_FORMAT" class="summary-name">STREAM_BAD_FORMAT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams bad-format'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams bad-f</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_BAD_NAMESPACE_PREFIX" class="summary-name">STREAM_BAD_NAMESPACE_PREFIX</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams bad-namespace-prefix'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-str</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_CONFLICT" class="summary-name">STREAM_CONFLICT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams conflict'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams conflict</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_CONNECTION_TIMEOUT" class="summary-name">STREAM_CONNECTION_TIMEOUT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams connection-timeout'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-strea</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_HOST_GONE" class="summary-name">STREAM_HOST_GONE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams host-gone'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams host-g</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_HOST_UNKNOWN" class="summary-name">STREAM_HOST_UNKNOWN</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams host-unknown'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams hos</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_IMPROPER_ADDRESSING" class="summary-name">STREAM_IMPROPER_ADDRESSING</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams improper-addressing'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_INTERNAL_SERVER_ERROR" class="summary-name">STREAM_INTERNAL_SERVER_ERROR</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams internal-server-error'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-st</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_INVALID_FROM" class="summary-name">STREAM_INVALID_FROM</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-from'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams inv</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_INVALID_ID" class="summary-name">STREAM_INVALID_ID</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-id'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams inval</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_INVALID_NAMESPACE" class="summary-name">STREAM_INVALID_NAMESPACE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-namespace'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stream</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_INVALID_XML" class="summary-name">STREAM_INVALID_XML</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams invalid-xml'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams inva</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_NOT_AUTHORIZED" class="summary-name">STREAM_NOT_AUTHORIZED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams not-authorized'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams n</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_POLICY_VIOLATION" class="summary-name">STREAM_POLICY_VIOLATION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams policy-violation'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_REMOTE_CONNECTION_FAILED" class="summary-name">STREAM_REMOTE_CONNECTION_FAILED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams remote-connection-failed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_RESOURCE_CONSTRAINT" class="summary-name">STREAM_RESOURCE_CONSTRAINT</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams resource-constraint'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_RESTRICTED_XML" class="summary-name">STREAM_RESTRICTED_XML</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams restricted-xml'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams r</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_SEE_OTHER_HOST" class="summary-name">STREAM_SEE_OTHER_HOST</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams see-other-host'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams s</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_SYSTEM_SHUTDOWN" class="summary-name">STREAM_SYSTEM_SHUTDOWN</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams system-shutdown'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams </code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_UNDEFINED_CONDITION" class="summary-name">STREAM_UNDEFINED_CONDITION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams undefined-condition'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_ENCODING" class="summary-name">STREAM_UNSUPPORTED_ENCODING</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams unsupported-encoding'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-str</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_STANZA_TYPE" class="summary-name">STREAM_UNSUPPORTED_STANZA_TYPE</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams unsupported-stanza-type'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_VERSION" class="summary-name">STREAM_UNSUPPORTED_VERSION</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams unsupported-version'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#STREAM_XML_NOT_WELL_FORMED" class="summary-name">STREAM_XML_NOT_WELL_FORMED</a> = <code title="'urn:ietf:params:xml:ns:xmpp-streams xml-not-well-formed'"><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stre</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#_errorcodes" class="summary-name" onclick="show_private();">_errorcodes</a> = <code title="{'302': 'redirect',
+ '400': 'unexpected-request',
+ '401': 'not-authorized',
+ '402': 'payment-required',
+ '403': 'forbidden',
+ '404': 'remote-server-not-found',
+ '405': 'not-allowed',
+ '406': 'not-acceptable',
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">302</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">redirect</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">400</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">unexpected-request</code><code class="variable-quote">'</code><code class="variable-op">,</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol-module.html#name" class="summary-name">name</a> = <code title="'SASL_TEMPORARY_AUTH_FAILURE'"><code class="variable-quote">'</code><code class="variable-string">SASL_TEMPORARY_AUTH_FAILURE</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <a href="nbxmpp.simplexml.Node-class.html" title="nbxmpp.simplexml.Node">Node</a>,
+ <a href="nbxmpp.simplexml.NodeBuilder-class.html" title="nbxmpp.simplexml.NodeBuilder">NodeBuilder</a>,
+ <span title="time">time</span>,
+ <span title="string">string</span>,
+ <span title="hashlib">hashlib</span>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="ascii_upper"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">ascii_upper</span>(<span class="sig-arg">s</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ascii_upper">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="isResultNode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">isResultNode</span>(<span class="sig-arg">node</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#isResultNode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return true if the node is a positive reply
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="isErrorNode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">isErrorNode</span>(<span class="sig-arg">node</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#isErrorNode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return true if the node is a negative reply
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="NS_ACTIVITY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ACTIVITY</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/activity</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ADDRESS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ADDRESS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/address</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_AGENTS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_AGENTS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:agents</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_AMP"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_AMP</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/amp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_AMP_ERRORS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_AMP_ERRORS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/amp#errors</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ARCHIVE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ARCHIVE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ARCHIVE_AUTO"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ARCHIVE_AUTO</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:auto</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ARCHIVE_MANAGE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ARCHIVE_MANAGE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:manage</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ARCHIVE_MANUAL"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ARCHIVE_MANUAL</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:manual</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ARCHIVE_PREF"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ARCHIVE_PREF</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:archive:pref</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ATOM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ATOM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://www.w3.org/2005/Atom</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ATTENTION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ATTENTION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:attention:0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_AUTH"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_AUTH</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:auth</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_AVATAR"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_AVATAR</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0084.html#ns-metadata</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_BIND"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_BIND</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-bind</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_BOB"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_BOB</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:bob</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_BOOKMARKS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_BOOKMARKS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">storage:bookmarks</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_BROWSE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_BROWSE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:browse</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_BROWSING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_BROWSING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/browsing</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_BYTESTREAM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_BYTESTREAM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/bytestreams</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CAPS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CAPS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/caps</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CAPTCHA"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CAPTCHA</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:captcha</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CARBONS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CARBONS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:carbons:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CHATSTATES"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CHATSTATES</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/chatstates</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CHATTING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CHATTING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/chatting</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CLIENT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CLIENT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CONDITIONS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CONDITIONS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:muc:conditions:0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_COMMANDS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_COMMANDS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/commands</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_COMPONENT_ACCEPT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_COMPONENT_ACCEPT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:component:accept</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_COMPONENT_1"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_COMPONENT_1</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabberd.jabberstudio.org/ns/component/1.0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_COMPRESS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_COMPRESS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/compress</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_CONFERENCE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_CONFERENCE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:x:conference</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DATA"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DATA</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:x:data</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DATA_MEDIA"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DATA_MEDIA</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:media-element</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DELAY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DELAY</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:x:delay</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DELAY2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DELAY2</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:delay</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DIALBACK"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DIALBACK</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:server:dialback</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DISCO"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DISCO</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/disco</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DISCO_INFO"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DISCO_INFO</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/disco#info</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DISCO_ITEMS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DISCO_ITEMS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/disco#items</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ENCRYPTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ENCRYPTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:x:encrypted</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ESESSION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ESESSION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0116.html#ns</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ESESSION_INIT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ESESSION_INIT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0116.html#ns-init</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_EVENT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_EVENT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:x:event</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_FEATURE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_FEATURE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/feature-neg</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_FILE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_FILE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/si/profile/file-transfer</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_FORWARD"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_FORWARD</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:forward:0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_GAMING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_GAMING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/gaming</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_GATEWAY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_GATEWAY</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:gateway</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_GEOLOC"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_GEOLOC</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/geoloc</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_GROUPCHAT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_GROUPCHAT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">gc-1.0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_HTTP_AUTH"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_HTTP_AUTH</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/http-auth</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_HTTP_BIND"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_HTTP_BIND</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/httpbind</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_IBB"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_IBB</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/ibb</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_INVISIBLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_INVISIBLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">presence-invisible</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_IQ"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_IQ</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">iq</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_ERRORS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_ERRORS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:errors:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_RTP"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_RTP</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:rtp:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_RTP_AUDIO"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_RTP_AUDIO</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:rtp:audio</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_RTP_VIDEO"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_RTP_VIDEO</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:rtp:video</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_FILE_TRANSFER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_FILE_TRANSFER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:apps:file-transfer:3</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_XTLS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_XTLS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:security:xtls:0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_RAW_UDP"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_RAW_UDP</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:raw-udp:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_ICE_UDP"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_ICE_UDP</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:ice-udp:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_BYTESTREAM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_BYTESTREAM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:s5b:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_JINGLE_IBB"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_JINGLE_IBB</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:jingle:transports:ibb:1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_LAST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_LAST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:last</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_LOCATION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_LOCATION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/geoloc</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MESSAGE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MESSAGE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">message</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MOOD"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MOOD</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/mood</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MUC"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MUC</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MUC_USER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MUC_USER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#user</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MUC_ADMIN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MUC_ADMIN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#admin</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MUC_OWNER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MUC_OWNER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#owner</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MUC_UNIQUE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MUC_UNIQUE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#unique</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_MUC_CONFIG"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_MUC_CONFIG</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/muc#roomconfig</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_NICK"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_NICK</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/nick</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_OFFLINE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_OFFLINE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://www.jabber.org/jeps/jep-0030.html</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PHYSLOC"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PHYSLOC</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/physloc</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:ping</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PRESENCE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PRESENCE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">presence</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PRIVACY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PRIVACY</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:privacy</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PRIVATE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PRIVATE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:private</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PROFILE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PROFILE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/profile</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PUBSUB"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PUBSUB</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PUBSUB_EVENT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PUBSUB_EVENT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub#event</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PUBSUB_PUBLISH_OPTIONS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PUBSUB_PUBLISH_OPTIONS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub#publish-options</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PUBSUB_OWNER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PUBSUB_OWNER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/pubsub#owner</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_REGISTER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_REGISTER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:register</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ROSTER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ROSTER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:roster</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ROSTERNOTES"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ROSTERNOTES</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">storage:rosternotes</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ROSTERX"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ROSTERX</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/rosterx</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_ROSTER_VER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_ROSTER_VER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:features:rosterver</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_RPC"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_RPC</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:rpc</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_RSM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_RSM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/rsm</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SASL"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SASL</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SECLABEL"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SECLABEL</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sec-label:0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SECLABEL_CATALOG"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SECLABEL_CATALOG</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sec-label:catalog:2</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SEARCH"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SEARCH</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:search</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SERVER"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SERVER</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:server</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SESSION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SESSION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-session</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SI"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SI</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/si</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SI_PUB"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SI_PUB</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/sipub</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SIGNED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SIGNED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:x:signed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_SSN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_SSN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:ssn</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_STANZA_CRYPTO"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_STANZA_CRYPTO</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://www.xmpp.org/extensions/xep-0200.html#ns</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_STANZAS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_STANZAS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_STREAM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_STREAM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://affinix.com/jabber/stream</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_STREAMS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_STREAMS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://etherx.jabber.org/streams</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_TIME"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_TIME</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:time</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_TIME_REVISED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_TIME_REVISED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:time</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_TLS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_TLS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-tls</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_TUNE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_TUNE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/tune</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_VACATION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_VACATION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/vacation</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_VCARD"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_VCARD</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">vcard-temp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_GMAILNOTIFY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_GMAILNOTIFY</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">google:mail:notify</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_GTALKSETTING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_GTALKSETTING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">google:setting</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_VCARD_UPDATE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_VCARD_UPDATE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">vcard-temp:x:update</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_VERSION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_VERSION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">jabber:iq:version</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_VIEWING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_VIEWING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/viewing</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_WAITINGLIST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_WAITINGLIST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/waitinglist</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_XHTML_IM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_XHTML_IM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/xhtml-im</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_XHTML"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_XHTML</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://www.w3.org/1999/xhtml</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DATA_LAYOUT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DATA_LAYOUT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/xdata-layout</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_DATA_VALIDATE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_DATA_VALIDATE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">http://jabber.org/protocol/xdata-validate</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_XMPP_STREAMS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_XMPP_STREAMS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_RECEIPTS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_RECEIPTS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:receipts</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PUBKEY_PUBKEY"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PUBKEY_PUBKEY</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:pubkey:2</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PUBKEY_REVOKE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PUBKEY_REVOKE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:revoke:2</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_PUBKEY_ATTEST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_PUBKEY_ATTEST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:attest:2</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_STREAM_MGMT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_STREAM_MGMT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sm:2</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_HASHES"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_HASHES</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hashes:0</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_HASHES_MD5"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_HASHES_MD5</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:md5</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_HASHES_SHA1"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_HASHES_SHA1</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:sha-1</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_HASHES_SHA256"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_HASHES_SHA256</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:sha-256</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="NS_HASHES_SHA512"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">NS_HASHES_SHA512</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hash-function-textual-names:sha-512</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="xmpp_stream_error_conditions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">xmpp_stream_error_conditions</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'''</code><code class="variable-string"></code>
+<code class="variable-string">bad-format -- -- -- The entity has sent XML that cannot be processed</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">.</code>
+<code class="variable-string">bad-namespace-prefix -- -- -- The entity has sent a namespace prefix</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string"> that is unsupported, or has sent no namespace prefix on an element th</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">at requires such a prefix.</code>
+<code class="variable-string">conflict -- -- -- The server is closing the active stream for this e</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">ntity because a new stream has been initiated that conflicts with the </code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="xmpp_stanza_error_conditions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">xmpp_stanza_error_conditions</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'''</code><code class="variable-string"></code>
+<code class="variable-string">bad-request -- 400 -- modify -- The sender has sent XML that is malfor</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">med or that cannot be processed.</code>
+<code class="variable-string">conflict -- 409 -- cancel -- Access cannot be granted because an exist</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">ing resource or session exists with the same name or address.</code>
+<code class="variable-string">feature-not-implemented -- 501 -- cancel -- The feature requested is n</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">ot implemented by the recipient or server and therefore cannot be proc</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">essed.</code>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="sasl_error_conditions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">sasl_error_conditions</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'''</code><code class="variable-string"></code>
+<code class="variable-string">aborted -- -- -- The receiving entity acknowledges an &lt;abort/&gt; eleme</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">nt sent by the initiating entity; sent in reply to the &lt;abort/&gt; elemen</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">t.</code>
+<code class="variable-string">incorrect-encoding -- -- -- The data provided by the initiating enti</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">ty could not be processed because the [BASE64]Josefsson, S., The Base1</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">6, Base32, and Base64 Data Encodings, July 2003. encoding is incorrect</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string"> (e.g., because the encoding does not adhere to the definition in Sect</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="stream_exceptions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">stream_exceptions</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">bad-format</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.BadFormat'&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">bad-namespace-prefix</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.BadNamespacePrefix'&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">conflict</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.Conflict'&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">connection-timeout</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.ConnectionTimeout'&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">host-gone</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.HostGone'&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">host-unknown</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.HostUnknown'&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">improper-addressing</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.ImproperAddressing'&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">internal-server-error</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;class 'nbxmpp.protocol.InternalServerError'<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERRORS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERRORS</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">The receiving entity ac</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">knowledges an &lt;abort/&gt; element sent by the initiating entity; sent in </code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-string">reply to the &lt;abort/&gt; element.</code><code class="variable-quote">'</code><code class="variable-group">]</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">The data pro</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_BAD_REQUEST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_BAD_REQUEST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas bad-request</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_CONFLICT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_CONFLICT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas conflict</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_FEATURE_NOT_IMPLEMENTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_FEATURE_NOT_IMPLEMENTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas feature-not-implemented</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_FORBIDDEN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_FORBIDDEN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas forbidden</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_GONE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_GONE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas gone</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_INTERNAL_SERVER_ERROR"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_INTERNAL_SERVER_ERROR</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas internal-server-error</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_ITEM_NOT_FOUND"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_ITEM_NOT_FOUND</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas item-not-found</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_JID_MALFORMED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_JID_MALFORMED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas jid-malformed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_NOT_ACCEPTABLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_NOT_ACCEPTABLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-acceptable</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_NOT_ALLOWED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_NOT_ALLOWED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-allowed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_NOT_AUTHORIZED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_NOT_AUTHORIZED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas not-authorized</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_PAYMENT_REQUIRED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_PAYMENT_REQUIRED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas payment-required</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_RECIPIENT_UNAVAILABLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_RECIPIENT_UNAVAILABLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas recipient-unavailable</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REDIRECT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REDIRECT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas redirect</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REGISTRATION_REQUIRED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REGISTRATION_REQUIRED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas registration-required</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REMOTE_SERVER_NOT_FOUND"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REMOTE_SERVER_NOT_FOUND</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas remote-server-not-found</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_REMOTE_SERVER_TIMEOUT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_REMOTE_SERVER_TIMEOUT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas remote-server-timeout</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_RESOURCE_CONSTRAINT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_RESOURCE_CONSTRAINT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas resource-constraint</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_SERVICE_UNAVAILABLE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_SERVICE_UNAVAILABLE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas service-unavailable</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_SUBSCRIPTION_REQUIRED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_SUBSCRIPTION_REQUIRED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas subscription-required</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_UNDEFINED_CONDITION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_UNDEFINED_CONDITION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas undefined-condition</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ERR_UNEXPECTED_REQUEST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ERR_UNEXPECTED_REQUEST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-stanzas unexpected-request</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_ABORTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_ABORTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl aborted</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_INCORRECT_ENCODING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_INCORRECT_ENCODING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl incorrect-encoding</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_INVALID_AUTHZID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_INVALID_AUTHZID</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl invalid-authzid</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_INVALID_MECHANISM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_INVALID_MECHANISM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl invalid-mechanism</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_MECHANISM_TOO_WEAK"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_MECHANISM_TOO_WEAK</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl mechanism-too-weak</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_NOT_AUTHORIZED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_NOT_AUTHORIZED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl not-authorized</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="SASL_TEMPORARY_AUTH_FAILURE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">SASL_TEMPORARY_AUTH_FAILURE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-sasl temporary-auth-failure</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_BAD_FORMAT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_BAD_FORMAT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams bad-format</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_BAD_NAMESPACE_PREFIX"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_BAD_NAMESPACE_PREFIX</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams bad-namespace-prefix</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_CONFLICT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_CONFLICT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams conflict</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_CONNECTION_TIMEOUT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_CONNECTION_TIMEOUT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams connection-timeout</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_HOST_GONE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_HOST_GONE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams host-gone</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_HOST_UNKNOWN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_HOST_UNKNOWN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams host-unknown</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_IMPROPER_ADDRESSING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_IMPROPER_ADDRESSING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams improper-addressing</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INTERNAL_SERVER_ERROR"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INTERNAL_SERVER_ERROR</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams internal-server-error</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_FROM"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_FROM</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-from</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_ID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_ID</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-id</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_NAMESPACE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_NAMESPACE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-namespace</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_INVALID_XML"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_INVALID_XML</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams invalid-xml</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_NOT_AUTHORIZED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_NOT_AUTHORIZED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams not-authorized</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_POLICY_VIOLATION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_POLICY_VIOLATION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams policy-violation</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_REMOTE_CONNECTION_FAILED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_REMOTE_CONNECTION_FAILED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams remote-connection-failed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_RESOURCE_CONSTRAINT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_RESOURCE_CONSTRAINT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams resource-constraint</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_RESTRICTED_XML"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_RESTRICTED_XML</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams restricted-xml</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_SEE_OTHER_HOST"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_SEE_OTHER_HOST</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams see-other-host</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_SYSTEM_SHUTDOWN"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_SYSTEM_SHUTDOWN</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams system-shutdown</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNDEFINED_CONDITION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNDEFINED_CONDITION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams undefined-condition</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNSUPPORTED_ENCODING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNSUPPORTED_ENCODING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams unsupported-encoding</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNSUPPORTED_STANZA_TYPE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNSUPPORTED_STANZA_TYPE</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams unsupported-stanza-type</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_UNSUPPORTED_VERSION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_UNSUPPORTED_VERSION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams unsupported-version</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STREAM_XML_NOT_WELL_FORMED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STREAM_XML_NOT_WELL_FORMED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">urn:ietf:params:xml:ns:xmpp-streams xml-not-well-formed</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_errorcodes"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">_errorcodes</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">302</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">redirect</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">400</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">unexpected-request</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">401</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">not-authorized</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">402</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">payment-required</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">403</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">forbidden</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">404</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">remote-server-not-found</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">405</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">not-allowed</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">406</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">not-acceptable</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="name"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">name</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">SASL_TEMPORARY_AUTH_FAILURE</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol-pysrc.html b/doc/apidocs/nbxmpp.protocol-pysrc.html
new file mode 100644
index 0000000..63f88db
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol-pysrc.html
@@ -0,0 +1,2183 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;protocol
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.protocol-module.html">Module nbxmpp.protocol</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## protocol.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># $Id: protocol.py,v 1.52 2006/01/09 22:08:57 normanr Exp $</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">Protocol module contains tools that are needed for processing of xmpp-related</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">data structures, including jabber-objects like JID or different stanzas and</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">sub- stanzas) handling routines</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.simplexml=nbxmpp.simplexml-module.html"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-0', 'simplexml', 'link-0');">simplexml</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Class nbxmpp.simplexml.Node=nbxmpp.simplexml.Node-class.html"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-1', 'Node', 'link-1');">Node</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Class nbxmpp.simplexml.NodeBuilder=nbxmpp.simplexml.NodeBuilder-class.html"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-2', 'NodeBuilder', 'link-2');">NodeBuilder</a></tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">string</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">hashlib</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> </tt>
+<a name="ascii_upper"></a><div id="ascii_upper-def"><a name="L28"></a><tt class="py-lineno"> 28</tt> <a class="py-toggle" href="#" id="ascii_upper-toggle" onclick="return toggle('ascii_upper');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol-module.html#ascii_upper">ascii_upper</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ascii_upper-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ascii_upper-expanded"><a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> <tt class="py-name">trans_table</tt> <tt class="py-op">=</tt> <tt class="py-name">string</tt><tt class="py-op">.</tt><tt class="py-name">maketrans</tt><tt class="py-op">(</tt><tt class="py-name">string</tt><tt class="py-op">.</tt><tt class="py-name">ascii_lowercase</tt><tt class="py-op">,</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> <tt class="py-name">string</tt><tt class="py-op">.</tt><tt class="py-name">ascii_uppercase</tt><tt class="py-op">)</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">translate</tt><tt class="py-op">(</tt><tt class="py-name">trans_table</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable nbxmpp.protocol.NS_ACTIVITY=nbxmpp.protocol-module.html#NS_ACTIVITY"><a title="nbxmpp.protocol.NS_ACTIVITY" class="py-name" href="#" onclick="return doclink('link-3', 'NS_ACTIVITY', 'link-3');">NS_ACTIVITY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/activity'</tt> <tt class="py-comment"># XEP-0108</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable nbxmpp.protocol.NS_ADDRESS=nbxmpp.protocol-module.html#NS_ADDRESS"><a title="nbxmpp.protocol.NS_ADDRESS" class="py-name" href="#" onclick="return doclink('link-4', 'NS_ADDRESS', 'link-4');">NS_ADDRESS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/address'</tt> <tt class="py-comment"># XEP-0033</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable nbxmpp.protocol.NS_AGENTS=nbxmpp.protocol-module.html#NS_AGENTS"><a title="nbxmpp.protocol.NS_AGENTS" class="py-name" href="#" onclick="return doclink('link-5', 'NS_AGENTS', 'link-5');">NS_AGENTS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:agents'</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable nbxmpp.protocol.NS_AMP=nbxmpp.protocol-module.html#NS_AMP"><a title="nbxmpp.protocol.NS_AMP" class="py-name" href="#" onclick="return doclink('link-6', 'NS_AMP', 'link-6');">NS_AMP</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/amp'</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt id="link-7" class="py-name" targets="Variable nbxmpp.protocol.NS_AMP_ERRORS=nbxmpp.protocol-module.html#NS_AMP_ERRORS"><a title="nbxmpp.protocol.NS_AMP_ERRORS" class="py-name" href="#" onclick="return doclink('link-7', 'NS_AMP_ERRORS', 'link-7');">NS_AMP_ERRORS</a></tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name"><a title="nbxmpp.protocol.NS_AMP" class="py-name" href="#" onclick="return doclink('link-8', 'NS_AMP', 'link-6');">NS_AMP</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#errors'</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt id="link-9" class="py-name" targets="Variable nbxmpp.protocol.NS_ARCHIVE=nbxmpp.protocol-module.html#NS_ARCHIVE"><a title="nbxmpp.protocol.NS_ARCHIVE" class="py-name" href="#" onclick="return doclink('link-9', 'NS_ARCHIVE', 'link-9');">NS_ARCHIVE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:archive'</tt> <tt class="py-comment"># XEP-0136</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable nbxmpp.protocol.NS_ARCHIVE_AUTO=nbxmpp.protocol-module.html#NS_ARCHIVE_AUTO"><a title="nbxmpp.protocol.NS_ARCHIVE_AUTO" class="py-name" href="#" onclick="return doclink('link-10', 'NS_ARCHIVE_AUTO', 'link-10');">NS_ARCHIVE_AUTO</a></tt> <tt class="py-op">=</tt> <tt id="link-11" class="py-name"><a title="nbxmpp.protocol.NS_ARCHIVE" class="py-name" href="#" onclick="return doclink('link-11', 'NS_ARCHIVE', 'link-9');">NS_ARCHIVE</a></tt> <tt class="py-op">+</tt> <tt class="py-string">':auto'</tt> <tt class="py-comment"># XEP-0136</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable nbxmpp.protocol.NS_ARCHIVE_MANAGE=nbxmpp.protocol-module.html#NS_ARCHIVE_MANAGE"><a title="nbxmpp.protocol.NS_ARCHIVE_MANAGE" class="py-name" href="#" onclick="return doclink('link-12', 'NS_ARCHIVE_MANAGE', 'link-12');">NS_ARCHIVE_MANAGE</a></tt> <tt class="py-op">=</tt> <tt id="link-13" class="py-name"><a title="nbxmpp.protocol.NS_ARCHIVE" class="py-name" href="#" onclick="return doclink('link-13', 'NS_ARCHIVE', 'link-9');">NS_ARCHIVE</a></tt> <tt class="py-op">+</tt> <tt class="py-string">':manage'</tt> <tt class="py-comment"># XEP-0136</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt id="link-14" class="py-name" targets="Variable nbxmpp.protocol.NS_ARCHIVE_MANUAL=nbxmpp.protocol-module.html#NS_ARCHIVE_MANUAL"><a title="nbxmpp.protocol.NS_ARCHIVE_MANUAL" class="py-name" href="#" onclick="return doclink('link-14', 'NS_ARCHIVE_MANUAL', 'link-14');">NS_ARCHIVE_MANUAL</a></tt> <tt class="py-op">=</tt> <tt id="link-15" class="py-name"><a title="nbxmpp.protocol.NS_ARCHIVE" class="py-name" href="#" onclick="return doclink('link-15', 'NS_ARCHIVE', 'link-9');">NS_ARCHIVE</a></tt> <tt class="py-op">+</tt> <tt class="py-string">':manual'</tt> <tt class="py-comment"># XEP-0136</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt id="link-16" class="py-name" targets="Variable nbxmpp.protocol.NS_ARCHIVE_PREF=nbxmpp.protocol-module.html#NS_ARCHIVE_PREF"><a title="nbxmpp.protocol.NS_ARCHIVE_PREF" class="py-name" href="#" onclick="return doclink('link-16', 'NS_ARCHIVE_PREF', 'link-16');">NS_ARCHIVE_PREF</a></tt> <tt class="py-op">=</tt> <tt id="link-17" class="py-name"><a title="nbxmpp.protocol.NS_ARCHIVE" class="py-name" href="#" onclick="return doclink('link-17', 'NS_ARCHIVE', 'link-9');">NS_ARCHIVE</a></tt> <tt class="py-op">+</tt> <tt class="py-string">':pref'</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt id="link-18" class="py-name" targets="Variable nbxmpp.protocol.NS_ATOM=nbxmpp.protocol-module.html#NS_ATOM"><a title="nbxmpp.protocol.NS_ATOM" class="py-name" href="#" onclick="return doclink('link-18', 'NS_ATOM', 'link-18');">NS_ATOM</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://www.w3.org/2005/Atom'</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt id="link-19" class="py-name" targets="Variable nbxmpp.protocol.NS_ATTENTION=nbxmpp.protocol-module.html#NS_ATTENTION"><a title="nbxmpp.protocol.NS_ATTENTION" class="py-name" href="#" onclick="return doclink('link-19', 'NS_ATTENTION', 'link-19');">NS_ATTENTION</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:attention:0'</tt> <tt class="py-comment"># XEP-0224</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt id="link-20" class="py-name" targets="Variable nbxmpp.protocol.NS_AUTH=nbxmpp.protocol-module.html#NS_AUTH"><a title="nbxmpp.protocol.NS_AUTH" class="py-name" href="#" onclick="return doclink('link-20', 'NS_AUTH', 'link-20');">NS_AUTH</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:auth'</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt id="link-21" class="py-name" targets="Variable nbxmpp.protocol.NS_AVATAR=nbxmpp.protocol-module.html#NS_AVATAR"><a title="nbxmpp.protocol.NS_AVATAR" class="py-name" href="#" onclick="return doclink('link-21', 'NS_AVATAR', 'link-21');">NS_AVATAR</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://www.xmpp.org/extensions/xep-0084.html#ns-metadata'</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt id="link-22" class="py-name" targets="Variable nbxmpp.protocol.NS_BIND=nbxmpp.protocol-module.html#NS_BIND"><a title="nbxmpp.protocol.NS_BIND" class="py-name" href="#" onclick="return doclink('link-22', 'NS_BIND', 'link-22');">NS_BIND</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:params:xml:ns:xmpp-bind'</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt id="link-23" class="py-name" targets="Variable nbxmpp.protocol.NS_BOB=nbxmpp.protocol-module.html#NS_BOB"><a title="nbxmpp.protocol.NS_BOB" class="py-name" href="#" onclick="return doclink('link-23', 'NS_BOB', 'link-23');">NS_BOB</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:bob'</tt> <tt class="py-comment"># XEP-0231</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt id="link-24" class="py-name" targets="Variable nbxmpp.protocol.NS_BOOKMARKS=nbxmpp.protocol-module.html#NS_BOOKMARKS"><a title="nbxmpp.protocol.NS_BOOKMARKS" class="py-name" href="#" onclick="return doclink('link-24', 'NS_BOOKMARKS', 'link-24');">NS_BOOKMARKS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'storage:bookmarks'</tt> <tt class="py-comment"># XEP-0048</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt id="link-25" class="py-name" targets="Variable nbxmpp.protocol.NS_BROWSE=nbxmpp.protocol-module.html#NS_BROWSE"><a title="nbxmpp.protocol.NS_BROWSE" class="py-name" href="#" onclick="return doclink('link-25', 'NS_BROWSE', 'link-25');">NS_BROWSE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:browse'</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt id="link-26" class="py-name" targets="Variable nbxmpp.protocol.NS_BROWSING=nbxmpp.protocol-module.html#NS_BROWSING"><a title="nbxmpp.protocol.NS_BROWSING" class="py-name" href="#" onclick="return doclink('link-26', 'NS_BROWSING', 'link-26');">NS_BROWSING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/browsing'</tt> <tt class="py-comment"># XEP-0195</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt id="link-27" class="py-name" targets="Variable nbxmpp.protocol.NS_BYTESTREAM=nbxmpp.protocol-module.html#NS_BYTESTREAM"><a title="nbxmpp.protocol.NS_BYTESTREAM" class="py-name" href="#" onclick="return doclink('link-27', 'NS_BYTESTREAM', 'link-27');">NS_BYTESTREAM</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/bytestreams'</tt> <tt class="py-comment"># XEP-0065</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt id="link-28" class="py-name" targets="Variable nbxmpp.protocol.NS_CAPS=nbxmpp.protocol-module.html#NS_CAPS"><a title="nbxmpp.protocol.NS_CAPS" class="py-name" href="#" onclick="return doclink('link-28', 'NS_CAPS', 'link-28');">NS_CAPS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/caps'</tt> <tt class="py-comment"># XEP-0115</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt id="link-29" class="py-name" targets="Variable nbxmpp.protocol.NS_CAPTCHA=nbxmpp.protocol-module.html#NS_CAPTCHA"><a title="nbxmpp.protocol.NS_CAPTCHA" class="py-name" href="#" onclick="return doclink('link-29', 'NS_CAPTCHA', 'link-29');">NS_CAPTCHA</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:captcha'</tt> <tt class="py-comment"># XEP-0158</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt id="link-30" class="py-name" targets="Variable nbxmpp.protocol.NS_CARBONS=nbxmpp.protocol-module.html#NS_CARBONS"><a title="nbxmpp.protocol.NS_CARBONS" class="py-name" href="#" onclick="return doclink('link-30', 'NS_CARBONS', 'link-30');">NS_CARBONS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:carbons:1'</tt> <tt class="py-comment"># XEP-0280</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt id="link-31" class="py-name" targets="Variable nbxmpp.protocol.NS_CHATSTATES=nbxmpp.protocol-module.html#NS_CHATSTATES"><a title="nbxmpp.protocol.NS_CHATSTATES" class="py-name" href="#" onclick="return doclink('link-31', 'NS_CHATSTATES', 'link-31');">NS_CHATSTATES</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/chatstates'</tt> <tt class="py-comment"># XEP-0085</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt id="link-32" class="py-name" targets="Variable nbxmpp.protocol.NS_CHATTING=nbxmpp.protocol-module.html#NS_CHATTING"><a title="nbxmpp.protocol.NS_CHATTING" class="py-name" href="#" onclick="return doclink('link-32', 'NS_CHATTING', 'link-32');">NS_CHATTING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/chatting'</tt> <tt class="py-comment"># XEP-0194</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt id="link-33" class="py-name" targets="Variable nbxmpp.protocol.NS_CLIENT=nbxmpp.protocol-module.html#NS_CLIENT"><a title="nbxmpp.protocol.NS_CLIENT" class="py-name" href="#" onclick="return doclink('link-33', 'NS_CLIENT', 'link-33');">NS_CLIENT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:client'</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt id="link-34" class="py-name" targets="Variable nbxmpp.protocol.NS_CONDITIONS=nbxmpp.protocol-module.html#NS_CONDITIONS"><a title="nbxmpp.protocol.NS_CONDITIONS" class="py-name" href="#" onclick="return doclink('link-34', 'NS_CONDITIONS', 'link-34');">NS_CONDITIONS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:muc:conditions:0'</tt> <tt class="py-comment"># XEP-0306</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt id="link-35" class="py-name" targets="Variable nbxmpp.protocol.NS_COMMANDS=nbxmpp.protocol-module.html#NS_COMMANDS"><a title="nbxmpp.protocol.NS_COMMANDS" class="py-name" href="#" onclick="return doclink('link-35', 'NS_COMMANDS', 'link-35');">NS_COMMANDS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/commands'</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt id="link-36" class="py-name" targets="Variable nbxmpp.protocol.NS_COMPONENT_ACCEPT=nbxmpp.protocol-module.html#NS_COMPONENT_ACCEPT"><a title="nbxmpp.protocol.NS_COMPONENT_ACCEPT" class="py-name" href="#" onclick="return doclink('link-36', 'NS_COMPONENT_ACCEPT', 'link-36');">NS_COMPONENT_ACCEPT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:component:accept'</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt id="link-37" class="py-name" targets="Variable nbxmpp.protocol.NS_COMPONENT_1=nbxmpp.protocol-module.html#NS_COMPONENT_1"><a title="nbxmpp.protocol.NS_COMPONENT_1" class="py-name" href="#" onclick="return doclink('link-37', 'NS_COMPONENT_1', 'link-37');">NS_COMPONENT_1</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabberd.jabberstudio.org/ns/component/1.0'</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt id="link-38" class="py-name" targets="Variable nbxmpp.protocol.NS_COMPRESS=nbxmpp.protocol-module.html#NS_COMPRESS"><a title="nbxmpp.protocol.NS_COMPRESS" class="py-name" href="#" onclick="return doclink('link-38', 'NS_COMPRESS', 'link-38');">NS_COMPRESS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/compress'</tt> <tt class="py-comment"># XEP-0138</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt id="link-39" class="py-name" targets="Variable nbxmpp.protocol.NS_CONFERENCE=nbxmpp.protocol-module.html#NS_CONFERENCE"><a title="nbxmpp.protocol.NS_CONFERENCE" class="py-name" href="#" onclick="return doclink('link-39', 'NS_CONFERENCE', 'link-39');">NS_CONFERENCE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:x:conference'</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt id="link-40" class="py-name" targets="Variable nbxmpp.protocol.NS_DATA=nbxmpp.protocol-module.html#NS_DATA"><a title="nbxmpp.protocol.NS_DATA" class="py-name" href="#" onclick="return doclink('link-40', 'NS_DATA', 'link-40');">NS_DATA</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:x:data'</tt> <tt class="py-comment"># XEP-0004</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt id="link-41" class="py-name" targets="Variable nbxmpp.protocol.NS_DATA_MEDIA=nbxmpp.protocol-module.html#NS_DATA_MEDIA"><a title="nbxmpp.protocol.NS_DATA_MEDIA" class="py-name" href="#" onclick="return doclink('link-41', 'NS_DATA_MEDIA', 'link-41');">NS_DATA_MEDIA</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:media-element'</tt> <tt class="py-comment"># XEP-0221</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt id="link-42" class="py-name" targets="Variable nbxmpp.protocol.NS_DELAY=nbxmpp.protocol-module.html#NS_DELAY"><a title="nbxmpp.protocol.NS_DELAY" class="py-name" href="#" onclick="return doclink('link-42', 'NS_DELAY', 'link-42');">NS_DELAY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:x:delay'</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt id="link-43" class="py-name" targets="Variable nbxmpp.protocol.NS_DELAY2=nbxmpp.protocol-module.html#NS_DELAY2"><a title="nbxmpp.protocol.NS_DELAY2" class="py-name" href="#" onclick="return doclink('link-43', 'NS_DELAY2', 'link-43');">NS_DELAY2</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:delay'</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt id="link-44" class="py-name" targets="Variable nbxmpp.protocol.NS_DIALBACK=nbxmpp.protocol-module.html#NS_DIALBACK"><a title="nbxmpp.protocol.NS_DIALBACK" class="py-name" href="#" onclick="return doclink('link-44', 'NS_DIALBACK', 'link-44');">NS_DIALBACK</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:server:dialback'</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt id="link-45" class="py-name" targets="Variable nbxmpp.protocol.NS_DISCO=nbxmpp.protocol-module.html#NS_DISCO"><a title="nbxmpp.protocol.NS_DISCO" class="py-name" href="#" onclick="return doclink('link-45', 'NS_DISCO', 'link-45');">NS_DISCO</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/disco'</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt id="link-46" class="py-name" targets="Variable nbxmpp.protocol.NS_DISCO_INFO=nbxmpp.protocol-module.html#NS_DISCO_INFO"><a title="nbxmpp.protocol.NS_DISCO_INFO" class="py-name" href="#" onclick="return doclink('link-46', 'NS_DISCO_INFO', 'link-46');">NS_DISCO_INFO</a></tt> <tt class="py-op">=</tt> <tt id="link-47" class="py-name"><a title="nbxmpp.protocol.NS_DISCO" class="py-name" href="#" onclick="return doclink('link-47', 'NS_DISCO', 'link-45');">NS_DISCO</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#info'</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt id="link-48" class="py-name" targets="Variable nbxmpp.protocol.NS_DISCO_ITEMS=nbxmpp.protocol-module.html#NS_DISCO_ITEMS"><a title="nbxmpp.protocol.NS_DISCO_ITEMS" class="py-name" href="#" onclick="return doclink('link-48', 'NS_DISCO_ITEMS', 'link-48');">NS_DISCO_ITEMS</a></tt> <tt class="py-op">=</tt> <tt id="link-49" class="py-name"><a title="nbxmpp.protocol.NS_DISCO" class="py-name" href="#" onclick="return doclink('link-49', 'NS_DISCO', 'link-45');">NS_DISCO</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#items'</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable nbxmpp.protocol.NS_ENCRYPTED=nbxmpp.protocol-module.html#NS_ENCRYPTED"><a title="nbxmpp.protocol.NS_ENCRYPTED" class="py-name" href="#" onclick="return doclink('link-50', 'NS_ENCRYPTED', 'link-50');">NS_ENCRYPTED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:x:encrypted'</tt> <tt class="py-comment"># XEP-0027</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable nbxmpp.protocol.NS_ESESSION=nbxmpp.protocol-module.html#NS_ESESSION"><a title="nbxmpp.protocol.NS_ESESSION" class="py-name" href="#" onclick="return doclink('link-51', 'NS_ESESSION', 'link-51');">NS_ESESSION</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://www.xmpp.org/extensions/xep-0116.html#ns'</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt id="link-52" class="py-name" targets="Variable nbxmpp.protocol.NS_ESESSION_INIT=nbxmpp.protocol-module.html#NS_ESESSION_INIT"><a title="nbxmpp.protocol.NS_ESESSION_INIT" class="py-name" href="#" onclick="return doclink('link-52', 'NS_ESESSION_INIT', 'link-52');">NS_ESESSION_INIT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://www.xmpp.org/extensions/xep-0116.html#ns-init'</tt> <tt class="py-comment"># XEP-0116</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt id="link-53" class="py-name" targets="Variable nbxmpp.protocol.NS_EVENT=nbxmpp.protocol-module.html#NS_EVENT"><a title="nbxmpp.protocol.NS_EVENT" class="py-name" href="#" onclick="return doclink('link-53', 'NS_EVENT', 'link-53');">NS_EVENT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:x:event'</tt> <tt class="py-comment"># XEP-0022</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt id="link-54" class="py-name" targets="Variable nbxmpp.protocol.NS_FEATURE=nbxmpp.protocol-module.html#NS_FEATURE"><a title="nbxmpp.protocol.NS_FEATURE" class="py-name" href="#" onclick="return doclink('link-54', 'NS_FEATURE', 'link-54');">NS_FEATURE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/feature-neg'</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt id="link-55" class="py-name" targets="Variable nbxmpp.protocol.NS_FILE=nbxmpp.protocol-module.html#NS_FILE"><a title="nbxmpp.protocol.NS_FILE" class="py-name" href="#" onclick="return doclink('link-55', 'NS_FILE', 'link-55');">NS_FILE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/si/profile/file-transfer'</tt> <tt class="py-comment"># XEP-0096</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt id="link-56" class="py-name" targets="Variable nbxmpp.protocol.NS_FORWARD=nbxmpp.protocol-module.html#NS_FORWARD"><a title="nbxmpp.protocol.NS_FORWARD" class="py-name" href="#" onclick="return doclink('link-56', 'NS_FORWARD', 'link-56');">NS_FORWARD</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:forward:0'</tt> <tt class="py-comment"># XEP-0297</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt id="link-57" class="py-name" targets="Variable nbxmpp.protocol.NS_GAMING=nbxmpp.protocol-module.html#NS_GAMING"><a title="nbxmpp.protocol.NS_GAMING" class="py-name" href="#" onclick="return doclink('link-57', 'NS_GAMING', 'link-57');">NS_GAMING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/gaming'</tt> <tt class="py-comment"># XEP-0196</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt id="link-58" class="py-name" targets="Variable nbxmpp.protocol.NS_GATEWAY=nbxmpp.protocol-module.html#NS_GATEWAY"><a title="nbxmpp.protocol.NS_GATEWAY" class="py-name" href="#" onclick="return doclink('link-58', 'NS_GATEWAY', 'link-58');">NS_GATEWAY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:gateway'</tt> <tt class="py-comment"># XEP-0100</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt id="link-59" class="py-name" targets="Variable nbxmpp.protocol.NS_GEOLOC=nbxmpp.protocol-module.html#NS_GEOLOC"><a title="nbxmpp.protocol.NS_GEOLOC" class="py-name" href="#" onclick="return doclink('link-59', 'NS_GEOLOC', 'link-59');">NS_GEOLOC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/geoloc'</tt> <tt class="py-comment"># XEP-0080</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt id="link-60" class="py-name" targets="Variable nbxmpp.protocol.NS_GROUPCHAT=nbxmpp.protocol-module.html#NS_GROUPCHAT"><a title="nbxmpp.protocol.NS_GROUPCHAT" class="py-name" href="#" onclick="return doclink('link-60', 'NS_GROUPCHAT', 'link-60');">NS_GROUPCHAT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'gc-1.0'</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt id="link-61" class="py-name" targets="Variable nbxmpp.protocol.NS_HTTP_AUTH=nbxmpp.protocol-module.html#NS_HTTP_AUTH"><a title="nbxmpp.protocol.NS_HTTP_AUTH" class="py-name" href="#" onclick="return doclink('link-61', 'NS_HTTP_AUTH', 'link-61');">NS_HTTP_AUTH</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/http-auth'</tt> <tt class="py-comment"># XEP-0070</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt id="link-62" class="py-name" targets="Variable nbxmpp.protocol.NS_HTTP_BIND=nbxmpp.protocol-module.html#NS_HTTP_BIND"><a title="nbxmpp.protocol.NS_HTTP_BIND" class="py-name" href="#" onclick="return doclink('link-62', 'NS_HTTP_BIND', 'link-62');">NS_HTTP_BIND</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/httpbind'</tt> <tt class="py-comment"># XEP-0124</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt id="link-63" class="py-name" targets="Variable nbxmpp.protocol.NS_IBB=nbxmpp.protocol-module.html#NS_IBB"><a title="nbxmpp.protocol.NS_IBB" class="py-name" href="#" onclick="return doclink('link-63', 'NS_IBB', 'link-63');">NS_IBB</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/ibb'</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt id="link-64" class="py-name" targets="Variable nbxmpp.protocol.NS_INVISIBLE=nbxmpp.protocol-module.html#NS_INVISIBLE"><a title="nbxmpp.protocol.NS_INVISIBLE" class="py-name" href="#" onclick="return doclink('link-64', 'NS_INVISIBLE', 'link-64');">NS_INVISIBLE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'presence-invisible'</tt> <tt class="py-comment"># Jabberd2</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt id="link-65" class="py-name" targets="Variable nbxmpp.protocol.NS_IQ=nbxmpp.protocol-module.html#NS_IQ"><a title="nbxmpp.protocol.NS_IQ" class="py-name" href="#" onclick="return doclink('link-65', 'NS_IQ', 'link-65');">NS_IQ</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'iq'</tt> <tt class="py-comment"># Jabberd2</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"><tt id="link-66" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE=nbxmpp.protocol-module.html#NS_JINGLE"><a title="nbxmpp.protocol.NS_JINGLE" class="py-name" href="#" onclick="return doclink('link-66', 'NS_JINGLE', 'link-66');">NS_JINGLE</a></tt> <tt class="py-op">=</tt><tt class="py-string">'urn:xmpp:jingle:1'</tt> <tt class="py-comment"># XEP-0166</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"><tt id="link-67" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_ERRORS=nbxmpp.protocol-module.html#NS_JINGLE_ERRORS"><a title="nbxmpp.protocol.NS_JINGLE_ERRORS" class="py-name" href="#" onclick="return doclink('link-67', 'NS_JINGLE_ERRORS', 'link-67');">NS_JINGLE_ERRORS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:jingle:errors:1'</tt> <tt class="py-comment"># XEP-0166</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt id="link-68" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_RTP=nbxmpp.protocol-module.html#NS_JINGLE_RTP"><a title="nbxmpp.protocol.NS_JINGLE_RTP" class="py-name" href="#" onclick="return doclink('link-68', 'NS_JINGLE_RTP', 'link-68');">NS_JINGLE_RTP</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:jingle:apps:rtp:1'</tt> <tt class="py-comment"># XEP-0167</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt id="link-69" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_RTP_AUDIO=nbxmpp.protocol-module.html#NS_JINGLE_RTP_AUDIO"><a title="nbxmpp.protocol.NS_JINGLE_RTP_AUDIO" class="py-name" href="#" onclick="return doclink('link-69', 'NS_JINGLE_RTP_AUDIO', 'link-69');">NS_JINGLE_RTP_AUDIO</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:jingle:apps:rtp:audio'</tt> <tt class="py-comment"># XEP-0167</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt id="link-70" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_RTP_VIDEO=nbxmpp.protocol-module.html#NS_JINGLE_RTP_VIDEO"><a title="nbxmpp.protocol.NS_JINGLE_RTP_VIDEO" class="py-name" href="#" onclick="return doclink('link-70', 'NS_JINGLE_RTP_VIDEO', 'link-70');">NS_JINGLE_RTP_VIDEO</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:jingle:apps:rtp:video'</tt> <tt class="py-comment"># XEP-0167</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt id="link-71" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_FILE_TRANSFER=nbxmpp.protocol-module.html#NS_JINGLE_FILE_TRANSFER"><a title="nbxmpp.protocol.NS_JINGLE_FILE_TRANSFER" class="py-name" href="#" onclick="return doclink('link-71', 'NS_JINGLE_FILE_TRANSFER', 'link-71');">NS_JINGLE_FILE_TRANSFER</a></tt> <tt class="py-op">=</tt><tt class="py-string">'urn:xmpp:jingle:apps:file-transfer:3'</tt> <tt class="py-comment"># XEP-0234</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"><tt id="link-72" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_XTLS=nbxmpp.protocol-module.html#NS_JINGLE_XTLS"><a title="nbxmpp.protocol.NS_JINGLE_XTLS" class="py-name" href="#" onclick="return doclink('link-72', 'NS_JINGLE_XTLS', 'link-72');">NS_JINGLE_XTLS</a></tt><tt class="py-op">=</tt><tt class="py-string">'urn:xmpp:jingle:security:xtls:0'</tt> <tt class="py-comment"># XTLS: EXPERIMENTAL security layer of jingle</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"><tt id="link-73" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_RAW_UDP=nbxmpp.protocol-module.html#NS_JINGLE_RAW_UDP"><a title="nbxmpp.protocol.NS_JINGLE_RAW_UDP" class="py-name" href="#" onclick="return doclink('link-73', 'NS_JINGLE_RAW_UDP', 'link-73');">NS_JINGLE_RAW_UDP</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:jingle:transports:raw-udp:1'</tt> <tt class="py-comment"># XEP-0177</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"><tt id="link-74" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_ICE_UDP=nbxmpp.protocol-module.html#NS_JINGLE_ICE_UDP"><a title="nbxmpp.protocol.NS_JINGLE_ICE_UDP" class="py-name" href="#" onclick="return doclink('link-74', 'NS_JINGLE_ICE_UDP', 'link-74');">NS_JINGLE_ICE_UDP</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:jingle:transports:ice-udp:1'</tt> <tt class="py-comment"># XEP-0176</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"><tt id="link-75" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_BYTESTREAM=nbxmpp.protocol-module.html#NS_JINGLE_BYTESTREAM"><a title="nbxmpp.protocol.NS_JINGLE_BYTESTREAM" class="py-name" href="#" onclick="return doclink('link-75', 'NS_JINGLE_BYTESTREAM', 'link-75');">NS_JINGLE_BYTESTREAM</a></tt> <tt class="py-op">=</tt><tt class="py-string">'urn:xmpp:jingle:transports:s5b:1'</tt> <tt class="py-comment"># XEP-0260</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt id="link-76" class="py-name" targets="Variable nbxmpp.protocol.NS_JINGLE_IBB=nbxmpp.protocol-module.html#NS_JINGLE_IBB"><a title="nbxmpp.protocol.NS_JINGLE_IBB" class="py-name" href="#" onclick="return doclink('link-76', 'NS_JINGLE_IBB', 'link-76');">NS_JINGLE_IBB</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:jingle:transports:ibb:1'</tt> <tt class="py-comment"># XEP-0261</tt> </tt>
+<a name="L100"></a><tt class="py-lineno"> 100</tt> <tt class="py-line"><tt id="link-77" class="py-name" targets="Variable nbxmpp.protocol.NS_LAST=nbxmpp.protocol-module.html#NS_LAST"><a title="nbxmpp.protocol.NS_LAST" class="py-name" href="#" onclick="return doclink('link-77', 'NS_LAST', 'link-77');">NS_LAST</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:last'</tt> </tt>
+<a name="L101"></a><tt class="py-lineno"> 101</tt> <tt class="py-line"><tt id="link-78" class="py-name" targets="Variable nbxmpp.protocol.NS_LOCATION=nbxmpp.protocol-module.html#NS_LOCATION"><a title="nbxmpp.protocol.NS_LOCATION" class="py-name" href="#" onclick="return doclink('link-78', 'NS_LOCATION', 'link-78');">NS_LOCATION</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/geoloc'</tt> <tt class="py-comment"># XEP-0080</tt> </tt>
+<a name="L102"></a><tt class="py-lineno"> 102</tt> <tt class="py-line"><tt id="link-79" class="py-name" targets="Variable nbxmpp.protocol.NS_MESSAGE=nbxmpp.protocol-module.html#NS_MESSAGE"><a title="nbxmpp.protocol.NS_MESSAGE" class="py-name" href="#" onclick="return doclink('link-79', 'NS_MESSAGE', 'link-79');">NS_MESSAGE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'message'</tt> <tt class="py-comment"># Jabberd2</tt> </tt>
+<a name="L103"></a><tt class="py-lineno"> 103</tt> <tt class="py-line"><tt id="link-80" class="py-name" targets="Variable nbxmpp.protocol.NS_MOOD=nbxmpp.protocol-module.html#NS_MOOD"><a title="nbxmpp.protocol.NS_MOOD" class="py-name" href="#" onclick="return doclink('link-80', 'NS_MOOD', 'link-80');">NS_MOOD</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/mood'</tt> <tt class="py-comment"># XEP-0107</tt> </tt>
+<a name="L104"></a><tt class="py-lineno"> 104</tt> <tt class="py-line"><tt id="link-81" class="py-name" targets="Variable nbxmpp.protocol.NS_MUC=nbxmpp.protocol-module.html#NS_MUC"><a title="nbxmpp.protocol.NS_MUC" class="py-name" href="#" onclick="return doclink('link-81', 'NS_MUC', 'link-81');">NS_MUC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/muc'</tt> </tt>
+<a name="L105"></a><tt class="py-lineno"> 105</tt> <tt class="py-line"><tt id="link-82" class="py-name" targets="Variable nbxmpp.protocol.NS_MUC_USER=nbxmpp.protocol-module.html#NS_MUC_USER"><a title="nbxmpp.protocol.NS_MUC_USER" class="py-name" href="#" onclick="return doclink('link-82', 'NS_MUC_USER', 'link-82');">NS_MUC_USER</a></tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name"><a title="nbxmpp.protocol.NS_MUC" class="py-name" href="#" onclick="return doclink('link-83', 'NS_MUC', 'link-81');">NS_MUC</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#user'</tt> </tt>
+<a name="L106"></a><tt class="py-lineno"> 106</tt> <tt class="py-line"><tt id="link-84" class="py-name" targets="Variable nbxmpp.protocol.NS_MUC_ADMIN=nbxmpp.protocol-module.html#NS_MUC_ADMIN"><a title="nbxmpp.protocol.NS_MUC_ADMIN" class="py-name" href="#" onclick="return doclink('link-84', 'NS_MUC_ADMIN', 'link-84');">NS_MUC_ADMIN</a></tt> <tt class="py-op">=</tt> <tt id="link-85" class="py-name"><a title="nbxmpp.protocol.NS_MUC" class="py-name" href="#" onclick="return doclink('link-85', 'NS_MUC', 'link-81');">NS_MUC</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#admin'</tt> </tt>
+<a name="L107"></a><tt class="py-lineno"> 107</tt> <tt class="py-line"><tt id="link-86" class="py-name" targets="Variable nbxmpp.protocol.NS_MUC_OWNER=nbxmpp.protocol-module.html#NS_MUC_OWNER"><a title="nbxmpp.protocol.NS_MUC_OWNER" class="py-name" href="#" onclick="return doclink('link-86', 'NS_MUC_OWNER', 'link-86');">NS_MUC_OWNER</a></tt> <tt class="py-op">=</tt> <tt id="link-87" class="py-name"><a title="nbxmpp.protocol.NS_MUC" class="py-name" href="#" onclick="return doclink('link-87', 'NS_MUC', 'link-81');">NS_MUC</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#owner'</tt> </tt>
+<a name="L108"></a><tt class="py-lineno"> 108</tt> <tt class="py-line"><tt id="link-88" class="py-name" targets="Variable nbxmpp.protocol.NS_MUC_UNIQUE=nbxmpp.protocol-module.html#NS_MUC_UNIQUE"><a title="nbxmpp.protocol.NS_MUC_UNIQUE" class="py-name" href="#" onclick="return doclink('link-88', 'NS_MUC_UNIQUE', 'link-88');">NS_MUC_UNIQUE</a></tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name"><a title="nbxmpp.protocol.NS_MUC" class="py-name" href="#" onclick="return doclink('link-89', 'NS_MUC', 'link-81');">NS_MUC</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#unique'</tt> </tt>
+<a name="L109"></a><tt class="py-lineno"> 109</tt> <tt class="py-line"><tt id="link-90" class="py-name" targets="Variable nbxmpp.protocol.NS_MUC_CONFIG=nbxmpp.protocol-module.html#NS_MUC_CONFIG"><a title="nbxmpp.protocol.NS_MUC_CONFIG" class="py-name" href="#" onclick="return doclink('link-90', 'NS_MUC_CONFIG', 'link-90');">NS_MUC_CONFIG</a></tt> <tt class="py-op">=</tt> <tt id="link-91" class="py-name"><a title="nbxmpp.protocol.NS_MUC" class="py-name" href="#" onclick="return doclink('link-91', 'NS_MUC', 'link-81');">NS_MUC</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#roomconfig'</tt> </tt>
+<a name="L110"></a><tt class="py-lineno"> 110</tt> <tt class="py-line"><tt id="link-92" class="py-name" targets="Variable nbxmpp.protocol.NS_NICK=nbxmpp.protocol-module.html#NS_NICK"><a title="nbxmpp.protocol.NS_NICK" class="py-name" href="#" onclick="return doclink('link-92', 'NS_NICK', 'link-92');">NS_NICK</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/nick'</tt> <tt class="py-comment"># XEP-0172</tt> </tt>
+<a name="L111"></a><tt class="py-lineno"> 111</tt> <tt class="py-line"><tt id="link-93" class="py-name" targets="Variable nbxmpp.protocol.NS_OFFLINE=nbxmpp.protocol-module.html#NS_OFFLINE"><a title="nbxmpp.protocol.NS_OFFLINE" class="py-name" href="#" onclick="return doclink('link-93', 'NS_OFFLINE', 'link-93');">NS_OFFLINE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://www.jabber.org/jeps/jep-0030.html'</tt> <tt class="py-comment"># XEP-0013</tt> </tt>
+<a name="L112"></a><tt class="py-lineno"> 112</tt> <tt class="py-line"><tt id="link-94" class="py-name" targets="Variable nbxmpp.protocol.NS_PHYSLOC=nbxmpp.protocol-module.html#NS_PHYSLOC"><a title="nbxmpp.protocol.NS_PHYSLOC" class="py-name" href="#" onclick="return doclink('link-94', 'NS_PHYSLOC', 'link-94');">NS_PHYSLOC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/physloc'</tt> <tt class="py-comment"># XEP-0112</tt> </tt>
+<a name="L113"></a><tt class="py-lineno"> 113</tt> <tt class="py-line"><tt id="link-95" class="py-name" targets="Variable nbxmpp.protocol.NS_PING=nbxmpp.protocol-module.html#NS_PING"><a title="nbxmpp.protocol.NS_PING" class="py-name" href="#" onclick="return doclink('link-95', 'NS_PING', 'link-95');">NS_PING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:ping'</tt> <tt class="py-comment"># XEP-0199</tt> </tt>
+<a name="L114"></a><tt class="py-lineno"> 114</tt> <tt class="py-line"><tt id="link-96" class="py-name" targets="Variable nbxmpp.protocol.NS_PRESENCE=nbxmpp.protocol-module.html#NS_PRESENCE"><a title="nbxmpp.protocol.NS_PRESENCE" class="py-name" href="#" onclick="return doclink('link-96', 'NS_PRESENCE', 'link-96');">NS_PRESENCE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'presence'</tt> <tt class="py-comment"># Jabberd2</tt> </tt>
+<a name="L115"></a><tt class="py-lineno"> 115</tt> <tt class="py-line"><tt id="link-97" class="py-name" targets="Variable nbxmpp.protocol.NS_PRIVACY=nbxmpp.protocol-module.html#NS_PRIVACY"><a title="nbxmpp.protocol.NS_PRIVACY" class="py-name" href="#" onclick="return doclink('link-97', 'NS_PRIVACY', 'link-97');">NS_PRIVACY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:privacy'</tt> </tt>
+<a name="L116"></a><tt class="py-lineno"> 116</tt> <tt class="py-line"><tt id="link-98" class="py-name" targets="Variable nbxmpp.protocol.NS_PRIVATE=nbxmpp.protocol-module.html#NS_PRIVATE"><a title="nbxmpp.protocol.NS_PRIVATE" class="py-name" href="#" onclick="return doclink('link-98', 'NS_PRIVATE', 'link-98');">NS_PRIVATE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:private'</tt> </tt>
+<a name="L117"></a><tt class="py-lineno"> 117</tt> <tt class="py-line"><tt id="link-99" class="py-name" targets="Variable nbxmpp.protocol.NS_PROFILE=nbxmpp.protocol-module.html#NS_PROFILE"><a title="nbxmpp.protocol.NS_PROFILE" class="py-name" href="#" onclick="return doclink('link-99', 'NS_PROFILE', 'link-99');">NS_PROFILE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/profile'</tt> <tt class="py-comment"># XEP-0154</tt> </tt>
+<a name="L118"></a><tt class="py-lineno"> 118</tt> <tt class="py-line"><tt id="link-100" class="py-name" targets="Variable nbxmpp.protocol.NS_PUBSUB=nbxmpp.protocol-module.html#NS_PUBSUB"><a title="nbxmpp.protocol.NS_PUBSUB" class="py-name" href="#" onclick="return doclink('link-100', 'NS_PUBSUB', 'link-100');">NS_PUBSUB</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/pubsub'</tt> <tt class="py-comment"># XEP-0060</tt> </tt>
+<a name="L119"></a><tt class="py-lineno"> 119</tt> <tt class="py-line"><tt id="link-101" class="py-name" targets="Variable nbxmpp.protocol.NS_PUBSUB_EVENT=nbxmpp.protocol-module.html#NS_PUBSUB_EVENT"><a title="nbxmpp.protocol.NS_PUBSUB_EVENT" class="py-name" href="#" onclick="return doclink('link-101', 'NS_PUBSUB_EVENT', 'link-101');">NS_PUBSUB_EVENT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/pubsub#event'</tt> </tt>
+<a name="L120"></a><tt class="py-lineno"> 120</tt> <tt class="py-line"><tt id="link-102" class="py-name" targets="Variable nbxmpp.protocol.NS_PUBSUB_PUBLISH_OPTIONS=nbxmpp.protocol-module.html#NS_PUBSUB_PUBLISH_OPTIONS"><a title="nbxmpp.protocol.NS_PUBSUB_PUBLISH_OPTIONS" class="py-name" href="#" onclick="return doclink('link-102', 'NS_PUBSUB_PUBLISH_OPTIONS', 'link-102');">NS_PUBSUB_PUBLISH_OPTIONS</a></tt> <tt class="py-op">=</tt> <tt id="link-103" class="py-name"><a title="nbxmpp.protocol.NS_PUBSUB" class="py-name" href="#" onclick="return doclink('link-103', 'NS_PUBSUB', 'link-100');">NS_PUBSUB</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'#publish-options'</tt> <tt class="py-comment"># XEP-0060</tt> </tt>
+<a name="L121"></a><tt class="py-lineno"> 121</tt> <tt class="py-line"><tt id="link-104" class="py-name" targets="Variable nbxmpp.protocol.NS_PUBSUB_OWNER=nbxmpp.protocol-module.html#NS_PUBSUB_OWNER"><a title="nbxmpp.protocol.NS_PUBSUB_OWNER" class="py-name" href="#" onclick="return doclink('link-104', 'NS_PUBSUB_OWNER', 'link-104');">NS_PUBSUB_OWNER</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/pubsub#owner'</tt> <tt class="py-comment"># XEP-0060</tt> </tt>
+<a name="L122"></a><tt class="py-lineno"> 122</tt> <tt class="py-line"><tt id="link-105" class="py-name" targets="Variable nbxmpp.protocol.NS_REGISTER=nbxmpp.protocol-module.html#NS_REGISTER"><a title="nbxmpp.protocol.NS_REGISTER" class="py-name" href="#" onclick="return doclink('link-105', 'NS_REGISTER', 'link-105');">NS_REGISTER</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:register'</tt> </tt>
+<a name="L123"></a><tt class="py-lineno"> 123</tt> <tt class="py-line"><tt id="link-106" class="py-name" targets="Variable nbxmpp.protocol.NS_ROSTER=nbxmpp.protocol-module.html#NS_ROSTER"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-106', 'NS_ROSTER', 'link-106');">NS_ROSTER</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:roster'</tt> </tt>
+<a name="L124"></a><tt class="py-lineno"> 124</tt> <tt class="py-line"><tt id="link-107" class="py-name" targets="Variable nbxmpp.protocol.NS_ROSTERNOTES=nbxmpp.protocol-module.html#NS_ROSTERNOTES"><a title="nbxmpp.protocol.NS_ROSTERNOTES" class="py-name" href="#" onclick="return doclink('link-107', 'NS_ROSTERNOTES', 'link-107');">NS_ROSTERNOTES</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'storage:rosternotes'</tt> </tt>
+<a name="L125"></a><tt class="py-lineno"> 125</tt> <tt class="py-line"><tt id="link-108" class="py-name" targets="Variable nbxmpp.protocol.NS_ROSTERX=nbxmpp.protocol-module.html#NS_ROSTERX"><a title="nbxmpp.protocol.NS_ROSTERX" class="py-name" href="#" onclick="return doclink('link-108', 'NS_ROSTERX', 'link-108');">NS_ROSTERX</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/rosterx'</tt> <tt class="py-comment"># XEP-0144</tt> </tt>
+<a name="L126"></a><tt class="py-lineno"> 126</tt> <tt class="py-line"><tt id="link-109" class="py-name" targets="Variable nbxmpp.protocol.NS_ROSTER_VER=nbxmpp.protocol-module.html#NS_ROSTER_VER"><a title="nbxmpp.protocol.NS_ROSTER_VER" class="py-name" href="#" onclick="return doclink('link-109', 'NS_ROSTER_VER', 'link-109');">NS_ROSTER_VER</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:features:rosterver'</tt> <tt class="py-comment"># XEP-0273</tt> </tt>
+<a name="L127"></a><tt class="py-lineno"> 127</tt> <tt class="py-line"><tt id="link-110" class="py-name" targets="Variable nbxmpp.protocol.NS_RPC=nbxmpp.protocol-module.html#NS_RPC"><a title="nbxmpp.protocol.NS_RPC" class="py-name" href="#" onclick="return doclink('link-110', 'NS_RPC', 'link-110');">NS_RPC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:rpc'</tt> <tt class="py-comment"># XEP-0009</tt> </tt>
+<a name="L128"></a><tt class="py-lineno"> 128</tt> <tt class="py-line"><tt id="link-111" class="py-name" targets="Variable nbxmpp.protocol.NS_RSM=nbxmpp.protocol-module.html#NS_RSM"><a title="nbxmpp.protocol.NS_RSM" class="py-name" href="#" onclick="return doclink('link-111', 'NS_RSM', 'link-111');">NS_RSM</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/rsm'</tt> </tt>
+<a name="L129"></a><tt class="py-lineno"> 129</tt> <tt class="py-line"><tt id="link-112" class="py-name" targets="Variable nbxmpp.protocol.NS_SASL=nbxmpp.protocol-module.html#NS_SASL"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-112', 'NS_SASL', 'link-112');">NS_SASL</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:params:xml:ns:xmpp-sasl'</tt> </tt>
+<a name="L130"></a><tt class="py-lineno"> 130</tt> <tt class="py-line"><tt id="link-113" class="py-name" targets="Variable nbxmpp.protocol.NS_SECLABEL=nbxmpp.protocol-module.html#NS_SECLABEL"><a title="nbxmpp.protocol.NS_SECLABEL" class="py-name" href="#" onclick="return doclink('link-113', 'NS_SECLABEL', 'link-113');">NS_SECLABEL</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:sec-label:0'</tt> </tt>
+<a name="L131"></a><tt class="py-lineno"> 131</tt> <tt class="py-line"><tt id="link-114" class="py-name" targets="Variable nbxmpp.protocol.NS_SECLABEL_CATALOG=nbxmpp.protocol-module.html#NS_SECLABEL_CATALOG"><a title="nbxmpp.protocol.NS_SECLABEL_CATALOG" class="py-name" href="#" onclick="return doclink('link-114', 'NS_SECLABEL_CATALOG', 'link-114');">NS_SECLABEL_CATALOG</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:sec-label:catalog:2'</tt> </tt>
+<a name="L132"></a><tt class="py-lineno"> 132</tt> <tt class="py-line"><tt id="link-115" class="py-name" targets="Variable nbxmpp.protocol.NS_SEARCH=nbxmpp.protocol-module.html#NS_SEARCH"><a title="nbxmpp.protocol.NS_SEARCH" class="py-name" href="#" onclick="return doclink('link-115', 'NS_SEARCH', 'link-115');">NS_SEARCH</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:search'</tt> </tt>
+<a name="L133"></a><tt class="py-lineno"> 133</tt> <tt class="py-line"><tt id="link-116" class="py-name" targets="Variable nbxmpp.protocol.NS_SERVER=nbxmpp.protocol-module.html#NS_SERVER"><a title="nbxmpp.protocol.NS_SERVER" class="py-name" href="#" onclick="return doclink('link-116', 'NS_SERVER', 'link-116');">NS_SERVER</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:server'</tt> </tt>
+<a name="L134"></a><tt class="py-lineno"> 134</tt> <tt class="py-line"><tt id="link-117" class="py-name" targets="Variable nbxmpp.protocol.NS_SESSION=nbxmpp.protocol-module.html#NS_SESSION"><a title="nbxmpp.protocol.NS_SESSION" class="py-name" href="#" onclick="return doclink('link-117', 'NS_SESSION', 'link-117');">NS_SESSION</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:params:xml:ns:xmpp-session'</tt> </tt>
+<a name="L135"></a><tt class="py-lineno"> 135</tt> <tt class="py-line"><tt id="link-118" class="py-name" targets="Variable nbxmpp.protocol.NS_SI=nbxmpp.protocol-module.html#NS_SI"><a title="nbxmpp.protocol.NS_SI" class="py-name" href="#" onclick="return doclink('link-118', 'NS_SI', 'link-118');">NS_SI</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/si'</tt> <tt class="py-comment"># XEP-0096</tt> </tt>
+<a name="L136"></a><tt class="py-lineno"> 136</tt> <tt class="py-line"><tt id="link-119" class="py-name" targets="Variable nbxmpp.protocol.NS_SI_PUB=nbxmpp.protocol-module.html#NS_SI_PUB"><a title="nbxmpp.protocol.NS_SI_PUB" class="py-name" href="#" onclick="return doclink('link-119', 'NS_SI_PUB', 'link-119');">NS_SI_PUB</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/sipub'</tt> <tt class="py-comment"># XEP-0137</tt> </tt>
+<a name="L137"></a><tt class="py-lineno"> 137</tt> <tt class="py-line"><tt id="link-120" class="py-name" targets="Variable nbxmpp.protocol.NS_SIGNED=nbxmpp.protocol-module.html#NS_SIGNED"><a title="nbxmpp.protocol.NS_SIGNED" class="py-name" href="#" onclick="return doclink('link-120', 'NS_SIGNED', 'link-120');">NS_SIGNED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:x:signed'</tt> <tt class="py-comment"># XEP-0027</tt> </tt>
+<a name="L138"></a><tt class="py-lineno"> 138</tt> <tt class="py-line"><tt id="link-121" class="py-name" targets="Variable nbxmpp.protocol.NS_SSN=nbxmpp.protocol-module.html#NS_SSN"><a title="nbxmpp.protocol.NS_SSN" class="py-name" href="#" onclick="return doclink('link-121', 'NS_SSN', 'link-121');">NS_SSN</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:ssn'</tt> <tt class="py-comment"># XEP-0155</tt> </tt>
+<a name="L139"></a><tt class="py-lineno"> 139</tt> <tt class="py-line"><tt id="link-122" class="py-name" targets="Variable nbxmpp.protocol.NS_STANZA_CRYPTO=nbxmpp.protocol-module.html#NS_STANZA_CRYPTO"><a title="nbxmpp.protocol.NS_STANZA_CRYPTO" class="py-name" href="#" onclick="return doclink('link-122', 'NS_STANZA_CRYPTO', 'link-122');">NS_STANZA_CRYPTO</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://www.xmpp.org/extensions/xep-0200.html#ns'</tt> <tt class="py-comment"># XEP-0200</tt> </tt>
+<a name="L140"></a><tt class="py-lineno"> 140</tt> <tt class="py-line"><tt id="link-123" class="py-name" targets="Variable nbxmpp.protocol.NS_STANZAS=nbxmpp.protocol-module.html#NS_STANZAS"><a title="nbxmpp.protocol.NS_STANZAS" class="py-name" href="#" onclick="return doclink('link-123', 'NS_STANZAS', 'link-123');">NS_STANZAS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:params:xml:ns:xmpp-stanzas'</tt> </tt>
+<a name="L141"></a><tt class="py-lineno"> 141</tt> <tt class="py-line"><tt id="link-124" class="py-name" targets="Variable nbxmpp.protocol.NS_STREAM=nbxmpp.protocol-module.html#NS_STREAM"><a title="nbxmpp.protocol.NS_STREAM" class="py-name" href="#" onclick="return doclink('link-124', 'NS_STREAM', 'link-124');">NS_STREAM</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://affinix.com/jabber/stream'</tt> </tt>
+<a name="L142"></a><tt class="py-lineno"> 142</tt> <tt class="py-line"><tt id="link-125" class="py-name" targets="Variable nbxmpp.protocol.NS_STREAMS=nbxmpp.protocol-module.html#NS_STREAMS"><a title="nbxmpp.protocol.NS_STREAMS" class="py-name" href="#" onclick="return doclink('link-125', 'NS_STREAMS', 'link-125');">NS_STREAMS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://etherx.jabber.org/streams'</tt> </tt>
+<a name="L143"></a><tt class="py-lineno"> 143</tt> <tt class="py-line"><tt id="link-126" class="py-name" targets="Variable nbxmpp.protocol.NS_TIME=nbxmpp.protocol-module.html#NS_TIME"><a title="nbxmpp.protocol.NS_TIME" class="py-name" href="#" onclick="return doclink('link-126', 'NS_TIME', 'link-126');">NS_TIME</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:time'</tt> <tt class="py-comment"># XEP-0900</tt> </tt>
+<a name="L144"></a><tt class="py-lineno"> 144</tt> <tt class="py-line"><tt id="link-127" class="py-name" targets="Variable nbxmpp.protocol.NS_TIME_REVISED=nbxmpp.protocol-module.html#NS_TIME_REVISED"><a title="nbxmpp.protocol.NS_TIME_REVISED" class="py-name" href="#" onclick="return doclink('link-127', 'NS_TIME_REVISED', 'link-127');">NS_TIME_REVISED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:time'</tt> <tt class="py-comment"># XEP-0202</tt> </tt>
+<a name="L145"></a><tt class="py-lineno"> 145</tt> <tt class="py-line"><tt id="link-128" class="py-name" targets="Variable nbxmpp.protocol.NS_TLS=nbxmpp.protocol-module.html#NS_TLS"><a title="nbxmpp.protocol.NS_TLS" class="py-name" href="#" onclick="return doclink('link-128', 'NS_TLS', 'link-128');">NS_TLS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:params:xml:ns:xmpp-tls'</tt> </tt>
+<a name="L146"></a><tt class="py-lineno"> 146</tt> <tt class="py-line"><tt id="link-129" class="py-name" targets="Variable nbxmpp.protocol.NS_TUNE=nbxmpp.protocol-module.html#NS_TUNE"><a title="nbxmpp.protocol.NS_TUNE" class="py-name" href="#" onclick="return doclink('link-129', 'NS_TUNE', 'link-129');">NS_TUNE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/tune'</tt> <tt class="py-comment"># XEP-0118</tt> </tt>
+<a name="L147"></a><tt class="py-lineno"> 147</tt> <tt class="py-line"><tt id="link-130" class="py-name" targets="Variable nbxmpp.protocol.NS_VACATION=nbxmpp.protocol-module.html#NS_VACATION"><a title="nbxmpp.protocol.NS_VACATION" class="py-name" href="#" onclick="return doclink('link-130', 'NS_VACATION', 'link-130');">NS_VACATION</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/vacation'</tt> </tt>
+<a name="L148"></a><tt class="py-lineno"> 148</tt> <tt class="py-line"><tt id="link-131" class="py-name" targets="Variable nbxmpp.protocol.NS_VCARD=nbxmpp.protocol-module.html#NS_VCARD"><a title="nbxmpp.protocol.NS_VCARD" class="py-name" href="#" onclick="return doclink('link-131', 'NS_VCARD', 'link-131');">NS_VCARD</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'vcard-temp'</tt> </tt>
+<a name="L149"></a><tt class="py-lineno"> 149</tt> <tt class="py-line"><tt id="link-132" class="py-name" targets="Variable nbxmpp.protocol.NS_GMAILNOTIFY=nbxmpp.protocol-module.html#NS_GMAILNOTIFY"><a title="nbxmpp.protocol.NS_GMAILNOTIFY" class="py-name" href="#" onclick="return doclink('link-132', 'NS_GMAILNOTIFY', 'link-132');">NS_GMAILNOTIFY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'google:mail:notify'</tt> </tt>
+<a name="L150"></a><tt class="py-lineno"> 150</tt> <tt class="py-line"><tt id="link-133" class="py-name" targets="Variable nbxmpp.protocol.NS_GTALKSETTING=nbxmpp.protocol-module.html#NS_GTALKSETTING"><a title="nbxmpp.protocol.NS_GTALKSETTING" class="py-name" href="#" onclick="return doclink('link-133', 'NS_GTALKSETTING', 'link-133');">NS_GTALKSETTING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'google:setting'</tt> </tt>
+<a name="L151"></a><tt class="py-lineno"> 151</tt> <tt class="py-line"><tt id="link-134" class="py-name" targets="Variable nbxmpp.protocol.NS_VCARD_UPDATE=nbxmpp.protocol-module.html#NS_VCARD_UPDATE"><a title="nbxmpp.protocol.NS_VCARD_UPDATE" class="py-name" href="#" onclick="return doclink('link-134', 'NS_VCARD_UPDATE', 'link-134');">NS_VCARD_UPDATE</a></tt> <tt class="py-op">=</tt> <tt id="link-135" class="py-name"><a title="nbxmpp.protocol.NS_VCARD" class="py-name" href="#" onclick="return doclink('link-135', 'NS_VCARD', 'link-131');">NS_VCARD</a></tt> <tt class="py-op">+</tt> <tt class="py-string">':x:update'</tt> </tt>
+<a name="L152"></a><tt class="py-lineno"> 152</tt> <tt class="py-line"><tt id="link-136" class="py-name" targets="Variable nbxmpp.protocol.NS_VERSION=nbxmpp.protocol-module.html#NS_VERSION"><a title="nbxmpp.protocol.NS_VERSION" class="py-name" href="#" onclick="return doclink('link-136', 'NS_VERSION', 'link-136');">NS_VERSION</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'jabber:iq:version'</tt> </tt>
+<a name="L153"></a><tt class="py-lineno"> 153</tt> <tt class="py-line"><tt id="link-137" class="py-name" targets="Variable nbxmpp.protocol.NS_VIEWING=nbxmpp.protocol-module.html#NS_VIEWING"><a title="nbxmpp.protocol.NS_VIEWING" class="py-name" href="#" onclick="return doclink('link-137', 'NS_VIEWING', 'link-137');">NS_VIEWING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/viewing'</tt> <tt class="py-comment"># XEP--197</tt> </tt>
+<a name="L154"></a><tt class="py-lineno"> 154</tt> <tt class="py-line"><tt id="link-138" class="py-name" targets="Variable nbxmpp.protocol.NS_WAITINGLIST=nbxmpp.protocol-module.html#NS_WAITINGLIST"><a title="nbxmpp.protocol.NS_WAITINGLIST" class="py-name" href="#" onclick="return doclink('link-138', 'NS_WAITINGLIST', 'link-138');">NS_WAITINGLIST</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/waitinglist'</tt> <tt class="py-comment"># XEP-0130</tt> </tt>
+<a name="L155"></a><tt class="py-lineno"> 155</tt> <tt class="py-line"><tt id="link-139" class="py-name" targets="Variable nbxmpp.protocol.NS_XHTML_IM=nbxmpp.protocol-module.html#NS_XHTML_IM"><a title="nbxmpp.protocol.NS_XHTML_IM" class="py-name" href="#" onclick="return doclink('link-139', 'NS_XHTML_IM', 'link-139');">NS_XHTML_IM</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/xhtml-im'</tt> <tt class="py-comment"># XEP-0071</tt> </tt>
+<a name="L156"></a><tt class="py-lineno"> 156</tt> <tt class="py-line"><tt id="link-140" class="py-name" targets="Variable nbxmpp.protocol.NS_XHTML=nbxmpp.protocol-module.html#NS_XHTML"><a title="nbxmpp.protocol.NS_XHTML" class="py-name" href="#" onclick="return doclink('link-140', 'NS_XHTML', 'link-140');">NS_XHTML</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://www.w3.org/1999/xhtml'</tt> <tt class="py-comment"># "</tt> </tt>
+<a name="L157"></a><tt class="py-lineno"> 157</tt> <tt class="py-line"><tt id="link-141" class="py-name" targets="Variable nbxmpp.protocol.NS_DATA_LAYOUT=nbxmpp.protocol-module.html#NS_DATA_LAYOUT"><a title="nbxmpp.protocol.NS_DATA_LAYOUT" class="py-name" href="#" onclick="return doclink('link-141', 'NS_DATA_LAYOUT', 'link-141');">NS_DATA_LAYOUT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/xdata-layout'</tt> <tt class="py-comment"># XEP-0141</tt> </tt>
+<a name="L158"></a><tt class="py-lineno"> 158</tt> <tt class="py-line"><tt id="link-142" class="py-name" targets="Variable nbxmpp.protocol.NS_DATA_VALIDATE=nbxmpp.protocol-module.html#NS_DATA_VALIDATE"><a title="nbxmpp.protocol.NS_DATA_VALIDATE" class="py-name" href="#" onclick="return doclink('link-142', 'NS_DATA_VALIDATE', 'link-142');">NS_DATA_VALIDATE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://jabber.org/protocol/xdata-validate'</tt> <tt class="py-comment"># XEP-0122</tt> </tt>
+<a name="L159"></a><tt class="py-lineno"> 159</tt> <tt class="py-line"><tt id="link-143" class="py-name" targets="Variable nbxmpp.protocol.NS_XMPP_STREAMS=nbxmpp.protocol-module.html#NS_XMPP_STREAMS"><a title="nbxmpp.protocol.NS_XMPP_STREAMS" class="py-name" href="#" onclick="return doclink('link-143', 'NS_XMPP_STREAMS', 'link-143');">NS_XMPP_STREAMS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:params:xml:ns:xmpp-streams'</tt> </tt>
+<a name="L160"></a><tt class="py-lineno"> 160</tt> <tt class="py-line"><tt id="link-144" class="py-name" targets="Variable nbxmpp.protocol.NS_RECEIPTS=nbxmpp.protocol-module.html#NS_RECEIPTS"><a title="nbxmpp.protocol.NS_RECEIPTS" class="py-name" href="#" onclick="return doclink('link-144', 'NS_RECEIPTS', 'link-144');">NS_RECEIPTS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:receipts'</tt> </tt>
+<a name="L161"></a><tt class="py-lineno"> 161</tt> <tt class="py-line"><tt id="link-145" class="py-name" targets="Variable nbxmpp.protocol.NS_PUBKEY_PUBKEY=nbxmpp.protocol-module.html#NS_PUBKEY_PUBKEY"><a title="nbxmpp.protocol.NS_PUBKEY_PUBKEY" class="py-name" href="#" onclick="return doclink('link-145', 'NS_PUBKEY_PUBKEY', 'link-145');">NS_PUBKEY_PUBKEY</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:pubkey:2'</tt> <tt class="py-comment"># XEP-0189</tt> </tt>
+<a name="L162"></a><tt class="py-lineno"> 162</tt> <tt class="py-line"><tt id="link-146" class="py-name" targets="Variable nbxmpp.protocol.NS_PUBKEY_REVOKE=nbxmpp.protocol-module.html#NS_PUBKEY_REVOKE"><a title="nbxmpp.protocol.NS_PUBKEY_REVOKE" class="py-name" href="#" onclick="return doclink('link-146', 'NS_PUBKEY_REVOKE', 'link-146');">NS_PUBKEY_REVOKE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:revoke:2'</tt> </tt>
+<a name="L163"></a><tt class="py-lineno"> 163</tt> <tt class="py-line"><tt id="link-147" class="py-name" targets="Variable nbxmpp.protocol.NS_PUBKEY_ATTEST=nbxmpp.protocol-module.html#NS_PUBKEY_ATTEST"><a title="nbxmpp.protocol.NS_PUBKEY_ATTEST" class="py-name" href="#" onclick="return doclink('link-147', 'NS_PUBKEY_ATTEST', 'link-147');">NS_PUBKEY_ATTEST</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:attest:2'</tt> </tt>
+<a name="L164"></a><tt class="py-lineno"> 164</tt> <tt class="py-line"><tt id="link-148" class="py-name" targets="Variable nbxmpp.protocol.NS_STREAM_MGMT=nbxmpp.protocol-module.html#NS_STREAM_MGMT"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-148', 'NS_STREAM_MGMT', 'link-148');">NS_STREAM_MGMT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:sm:2'</tt> <tt class="py-comment"># XEP-198</tt> </tt>
+<a name="L165"></a><tt class="py-lineno"> 165</tt> <tt class="py-line"><tt id="link-149" class="py-name" targets="Variable nbxmpp.protocol.NS_HASHES=nbxmpp.protocol-module.html#NS_HASHES"><a title="nbxmpp.protocol.NS_HASHES" class="py-name" href="#" onclick="return doclink('link-149', 'NS_HASHES', 'link-149');">NS_HASHES</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:hashes:0'</tt> <tt class="py-comment"># XEP-300</tt> </tt>
+<a name="L166"></a><tt class="py-lineno"> 166</tt> <tt class="py-line"><tt id="link-150" class="py-name" targets="Variable nbxmpp.protocol.NS_HASHES_MD5=nbxmpp.protocol-module.html#NS_HASHES_MD5"><a title="nbxmpp.protocol.NS_HASHES_MD5" class="py-name" href="#" onclick="return doclink('link-150', 'NS_HASHES_MD5', 'link-150');">NS_HASHES_MD5</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:hash-function-textual-names:md5'</tt> </tt>
+<a name="L167"></a><tt class="py-lineno"> 167</tt> <tt class="py-line"><tt id="link-151" class="py-name" targets="Variable nbxmpp.protocol.NS_HASHES_SHA1=nbxmpp.protocol-module.html#NS_HASHES_SHA1"><a title="nbxmpp.protocol.NS_HASHES_SHA1" class="py-name" href="#" onclick="return doclink('link-151', 'NS_HASHES_SHA1', 'link-151');">NS_HASHES_SHA1</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:hash-function-textual-names:sha-1'</tt> </tt>
+<a name="L168"></a><tt class="py-lineno"> 168</tt> <tt class="py-line"><tt id="link-152" class="py-name" targets="Variable nbxmpp.protocol.NS_HASHES_SHA256=nbxmpp.protocol-module.html#NS_HASHES_SHA256"><a title="nbxmpp.protocol.NS_HASHES_SHA256" class="py-name" href="#" onclick="return doclink('link-152', 'NS_HASHES_SHA256', 'link-152');">NS_HASHES_SHA256</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:hash-function-textual-names:sha-256'</tt> </tt>
+<a name="L169"></a><tt class="py-lineno"> 169</tt> <tt class="py-line"><tt id="link-153" class="py-name" targets="Variable nbxmpp.protocol.NS_HASHES_SHA512=nbxmpp.protocol-module.html#NS_HASHES_SHA512"><a title="nbxmpp.protocol.NS_HASHES_SHA512" class="py-name" href="#" onclick="return doclink('link-153', 'NS_HASHES_SHA512', 'link-153');">NS_HASHES_SHA512</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:xmpp:hash-function-textual-names:sha-512'</tt> </tt>
+<a name="L170"></a><tt class="py-lineno"> 170</tt> <tt class="py-line"> </tt>
+<a name="L171"></a><tt class="py-lineno"> 171</tt> <tt class="py-line"><tt id="link-154" class="py-name" targets="Variable nbxmpp.protocol.xmpp_stream_error_conditions=nbxmpp.protocol-module.html#xmpp_stream_error_conditions"><a title="nbxmpp.protocol.xmpp_stream_error_conditions" class="py-name" href="#" onclick="return doclink('link-154', 'xmpp_stream_error_conditions', 'link-154');">xmpp_stream_error_conditions</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'''</tt> </tt>
+<a name="L172"></a><tt class="py-lineno"> 172</tt> <tt class="py-line"><tt class="py-string">bad-format -- -- -- The entity has sent XML that cannot be processed.</tt> </tt>
+<a name="L173"></a><tt class="py-lineno"> 173</tt> <tt class="py-line"><tt class="py-string">bad-namespace-prefix -- -- -- The entity has sent a namespace prefix that is unsupported, or has sent no namespace prefix on an element that requires such a prefix.</tt> </tt>
+<a name="L174"></a><tt class="py-lineno"> 174</tt> <tt class="py-line"><tt class="py-string">conflict -- -- -- The server is closing the active stream for this entity because a new stream has been initiated that conflicts with the existing stream.</tt> </tt>
+<a name="L175"></a><tt class="py-lineno"> 175</tt> <tt class="py-line"><tt class="py-string">connection-timeout -- -- -- The entity has not generated any traffic over the stream for some period of time.</tt> </tt>
+<a name="L176"></a><tt class="py-lineno"> 176</tt> <tt class="py-line"><tt class="py-string">host-gone -- -- -- The value of the 'to' attribute provided by the initiating entity in the stream header corresponds to a hostname that is no longer hosted by the server.</tt> </tt>
+<a name="L177"></a><tt class="py-lineno"> 177</tt> <tt class="py-line"><tt class="py-string">host-unknown -- -- -- The value of the 'to' attribute provided by the initiating entity in the stream header does not correspond to a hostname that is hosted by the server.</tt> </tt>
+<a name="L178"></a><tt class="py-lineno"> 178</tt> <tt class="py-line"><tt class="py-string">improper-addressing -- -- -- A stanza sent between two servers lacks a 'to' or 'from' attribute (or the attribute has no value).</tt> </tt>
+<a name="L179"></a><tt class="py-lineno"> 179</tt> <tt class="py-line"><tt class="py-string">internal-server-error -- -- -- The server has experienced a misconfiguration or an otherwise-undefined internal error that prevents it from servicing the stream.</tt> </tt>
+<a name="L180"></a><tt class="py-lineno"> 180</tt> <tt class="py-line"><tt class="py-string">invalid-from -- cancel -- -- The JID or hostname provided in a 'from' address does not match an authorized JID or validated domain negotiated between servers via SASL or dialback, or between a client and a server via authentication and resource authorization.</tt> </tt>
+<a name="L181"></a><tt class="py-lineno"> 181</tt> <tt class="py-line"><tt class="py-string">invalid-id -- -- -- The stream ID or dialback ID is invalid or does not match an ID previously provided.</tt> </tt>
+<a name="L182"></a><tt class="py-lineno"> 182</tt> <tt class="py-line"><tt class="py-string">invalid-namespace -- -- -- The streams namespace name is something other than "http://etherx.jabber.org/streams" or the dialback namespace name is something other than "jabber:server:dialback".</tt> </tt>
+<a name="L183"></a><tt class="py-lineno"> 183</tt> <tt class="py-line"><tt class="py-string">invalid-xml -- -- -- The entity has sent invalid XML over the stream to a server that performs validation.</tt> </tt>
+<a name="L184"></a><tt class="py-lineno"> 184</tt> <tt class="py-line"><tt class="py-string">not-authorized -- -- -- The entity has attempted to send data before the stream has been authenticated, or otherwise is not authorized to perform an action related to stream negotiation.</tt> </tt>
+<a name="L185"></a><tt class="py-lineno"> 185</tt> <tt class="py-line"><tt class="py-string">policy-violation -- -- -- The entity has violated some local service policy.</tt> </tt>
+<a name="L186"></a><tt class="py-lineno"> 186</tt> <tt class="py-line"><tt class="py-string">remote-connection-failed -- -- -- The server is unable to properly connect to a remote resource that is required for authentication or authorization.</tt> </tt>
+<a name="L187"></a><tt class="py-lineno"> 187</tt> <tt class="py-line"><tt class="py-string">resource-constraint -- -- -- The server lacks the system resources necessary to service the stream.</tt> </tt>
+<a name="L188"></a><tt class="py-lineno"> 188</tt> <tt class="py-line"><tt class="py-string">restricted-xml -- -- -- The entity has attempted to send restricted XML features such as a comment, processing instruction, DTD, entity reference, or unescaped character.</tt> </tt>
+<a name="L189"></a><tt class="py-lineno"> 189</tt> <tt class="py-line"><tt class="py-string">see-other-host -- -- -- The server will not provide service to the initiating entity but is redirecting traffic to another host.</tt> </tt>
+<a name="L190"></a><tt class="py-lineno"> 190</tt> <tt class="py-line"><tt class="py-string">system-shutdown -- -- -- The server is being shut down and all active streams are being closed.</tt> </tt>
+<a name="L191"></a><tt class="py-lineno"> 191</tt> <tt class="py-line"><tt class="py-string">undefined-condition -- -- -- The error condition is not one of those defined by the other conditions in this list.</tt> </tt>
+<a name="L192"></a><tt class="py-lineno"> 192</tt> <tt class="py-line"><tt class="py-string">unsupported-encoding -- -- -- The initiating entity has encoded the stream in an encoding that is not supported by the server.</tt> </tt>
+<a name="L193"></a><tt class="py-lineno"> 193</tt> <tt class="py-line"><tt class="py-string">unsupported-stanza-type -- -- -- The initiating entity has sent a first-level child of the stream that is not supported by the server.</tt> </tt>
+<a name="L194"></a><tt class="py-lineno"> 194</tt> <tt class="py-line"><tt class="py-string">unsupported-version -- -- -- The value of the 'version' attribute provided by the initiating entity in the stream header specifies a version of XMPP that is not supported by the server.</tt> </tt>
+<a name="L195"></a><tt class="py-lineno"> 195</tt> <tt class="py-line"><tt class="py-string">xml-not-well-formed -- -- -- The initiating entity has sent XML that is not well-formed.'''</tt> </tt>
+<a name="L196"></a><tt class="py-lineno"> 196</tt> <tt class="py-line"> </tt>
+<a name="L197"></a><tt class="py-lineno"> 197</tt> <tt class="py-line"><tt id="link-155" class="py-name" targets="Variable nbxmpp.protocol.xmpp_stanza_error_conditions=nbxmpp.protocol-module.html#xmpp_stanza_error_conditions"><a title="nbxmpp.protocol.xmpp_stanza_error_conditions" class="py-name" href="#" onclick="return doclink('link-155', 'xmpp_stanza_error_conditions', 'link-155');">xmpp_stanza_error_conditions</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'''</tt> </tt>
+<a name="L198"></a><tt class="py-lineno"> 198</tt> <tt class="py-line"><tt class="py-string">bad-request -- 400 -- modify -- The sender has sent XML that is malformed or that cannot be processed.</tt> </tt>
+<a name="L199"></a><tt class="py-lineno"> 199</tt> <tt class="py-line"><tt class="py-string">conflict -- 409 -- cancel -- Access cannot be granted because an existing resource or session exists with the same name or address.</tt> </tt>
+<a name="L200"></a><tt class="py-lineno"> 200</tt> <tt class="py-line"><tt class="py-string">feature-not-implemented -- 501 -- cancel -- The feature requested is not implemented by the recipient or server and therefore cannot be processed.</tt> </tt>
+<a name="L201"></a><tt class="py-lineno"> 201</tt> <tt class="py-line"><tt class="py-string">forbidden -- 403 -- auth -- The requesting entity does not possess the required permissions to perform the action.</tt> </tt>
+<a name="L202"></a><tt class="py-lineno"> 202</tt> <tt class="py-line"><tt class="py-string">gone -- 302 -- modify -- The recipient or server can no longer be contacted at this address.</tt> </tt>
+<a name="L203"></a><tt class="py-lineno"> 203</tt> <tt class="py-line"><tt class="py-string">internal-server-error -- 500 -- wait -- The server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error.</tt> </tt>
+<a name="L204"></a><tt class="py-lineno"> 204</tt> <tt class="py-line"><tt class="py-string">item-not-found -- 404 -- cancel -- The addressed JID or item requested cannot be found.</tt> </tt>
+<a name="L205"></a><tt class="py-lineno"> 205</tt> <tt class="py-line"><tt class="py-string">jid-malformed -- 400 -- modify -- The value of the 'to' attribute in the sender's stanza does not adhere to the syntax defined in Addressing Scheme.</tt> </tt>
+<a name="L206"></a><tt class="py-lineno"> 206</tt> <tt class="py-line"><tt class="py-string">not-acceptable -- 406 -- cancel -- The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server.</tt> </tt>
+<a name="L207"></a><tt class="py-lineno"> 207</tt> <tt class="py-line"><tt class="py-string">not-allowed -- 405 -- cancel -- The recipient or server does not allow any entity to perform the action.</tt> </tt>
+<a name="L208"></a><tt class="py-lineno"> 208</tt> <tt class="py-line"><tt class="py-string">not-authorized -- 401 -- auth -- The sender must provide proper credentials before being allowed to perform the action, or has provided improper credentials.</tt> </tt>
+<a name="L209"></a><tt class="py-lineno"> 209</tt> <tt class="py-line"><tt class="py-string">payment-required -- 402 -- auth -- The requesting entity is not authorized to access the requested service because payment is required.</tt> </tt>
+<a name="L210"></a><tt class="py-lineno"> 210</tt> <tt class="py-line"><tt class="py-string">recipient-unavailable -- 404 -- wait -- The intended recipient is temporarily unavailable.</tt> </tt>
+<a name="L211"></a><tt class="py-lineno"> 211</tt> <tt class="py-line"><tt class="py-string">redirect -- 302 -- modify -- The recipient or server is redirecting requests for this information to another entity.</tt> </tt>
+<a name="L212"></a><tt class="py-lineno"> 212</tt> <tt class="py-line"><tt class="py-string">registration-required -- 407 -- auth -- The requesting entity is not authorized to access the requested service because registration is required.</tt> </tt>
+<a name="L213"></a><tt class="py-lineno"> 213</tt> <tt class="py-line"><tt class="py-string">remote-server-not-found -- 404 -- cancel -- A remote server or service specified as part or all of the JID of the intended recipient does not exist.</tt> </tt>
+<a name="L214"></a><tt class="py-lineno"> 214</tt> <tt class="py-line"><tt class="py-string">remote-server-timeout -- 504 -- wait -- A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time.</tt> </tt>
+<a name="L215"></a><tt class="py-lineno"> 215</tt> <tt class="py-line"><tt class="py-string">resource-constraint -- 500 -- wait -- The server or recipient lacks the system resources necessary to service the request.</tt> </tt>
+<a name="L216"></a><tt class="py-lineno"> 216</tt> <tt class="py-line"><tt class="py-string">service-unavailable -- 503 -- cancel -- The server or recipient does not currently provide the requested service.</tt> </tt>
+<a name="L217"></a><tt class="py-lineno"> 217</tt> <tt class="py-line"><tt class="py-string">subscription-required -- 407 -- auth -- The requesting entity is not authorized to access the requested service because a subscription is required.</tt> </tt>
+<a name="L218"></a><tt class="py-lineno"> 218</tt> <tt class="py-line"><tt class="py-string">undefined-condition -- 500 -- -- Undefined Condition</tt> </tt>
+<a name="L219"></a><tt class="py-lineno"> 219</tt> <tt class="py-line"><tt class="py-string">unexpected-request -- 400 -- wait -- The recipient or server understood the request but was not expecting it at this time (e.g., the request was out of order).'''</tt> </tt>
+<a name="L220"></a><tt class="py-lineno"> 220</tt> <tt class="py-line"> </tt>
+<a name="L221"></a><tt class="py-lineno"> 221</tt> <tt class="py-line"><tt id="link-156" class="py-name" targets="Variable nbxmpp.protocol.sasl_error_conditions=nbxmpp.protocol-module.html#sasl_error_conditions"><a title="nbxmpp.protocol.sasl_error_conditions" class="py-name" href="#" onclick="return doclink('link-156', 'sasl_error_conditions', 'link-156');">sasl_error_conditions</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'''</tt> </tt>
+<a name="L222"></a><tt class="py-lineno"> 222</tt> <tt class="py-line"><tt class="py-string">aborted -- -- -- The receiving entity acknowledges an &lt;abort/&gt; element sent by the initiating entity; sent in reply to the &lt;abort/&gt; element.</tt> </tt>
+<a name="L223"></a><tt class="py-lineno"> 223</tt> <tt class="py-line"><tt class="py-string">incorrect-encoding -- -- -- The data provided by the initiating entity could not be processed because the [BASE64]Josefsson, S., The Base16, Base32, and Base64 Data Encodings, July 2003. encoding is incorrect (e.g., because the encoding does not adhere to the definition in Section 3 of [BASE64]Josefsson, S., The Base16, Base32, and Base64 Data Encodings, July 2003.); sent in reply to a &lt;response/&gt; element or an &lt;auth/&gt; element with initial response data.</tt> </tt>
+<a name="L224"></a><tt class="py-lineno"> 224</tt> <tt class="py-line"><tt class="py-string">invalid-authzid -- -- -- The authzid provided by the initiating entity is invalid, either because it is incorrectly formatted or because the initiating entity does not have permissions to authorize that ID; sent in reply to a &lt;response/&gt; element or an &lt;auth/&gt; element with initial response data.</tt> </tt>
+<a name="L225"></a><tt class="py-lineno"> 225</tt> <tt class="py-line"><tt class="py-string">invalid-mechanism -- -- -- The initiating entity did not provide a mechanism or requested a mechanism that is not supported by the receiving entity; sent in reply to an &lt;auth/&gt; element.</tt> </tt>
+<a name="L226"></a><tt class="py-lineno"> 226</tt> <tt class="py-line"><tt class="py-string">mechanism-too-weak -- -- -- The mechanism requested by the initiating entity is weaker than server policy permits for that initiating entity; sent in reply to a &lt;response/&gt; element or an &lt;auth/&gt; element with initial response data.</tt> </tt>
+<a name="L227"></a><tt class="py-lineno"> 227</tt> <tt class="py-line"><tt class="py-string">not-authorized -- -- -- The authentication failed because the initiating entity did not provide valid credentials (this includes but is not limited to the case of an unknown username); sent in reply to a &lt;response/&gt; element or an &lt;auth/&gt; element with initial response data.</tt> </tt>
+<a name="L228"></a><tt class="py-lineno"> 228</tt> <tt class="py-line"><tt class="py-string">temporary-auth-failure -- -- -- The authentication failed because of a temporary error condition within the receiving entity; sent in reply to an &lt;auth/&gt; element or &lt;response/&gt; element.'''</tt> </tt>
+<a name="L229"></a><tt class="py-lineno"> 229</tt> <tt class="py-line"> </tt>
+<a name="L230"></a><tt class="py-lineno"> 230</tt> <tt class="py-line"><tt id="link-157" class="py-name" targets="Variable nbxmpp.ERRORS=nbxmpp-module.html#ERRORS,Variable nbxmpp.protocol.ERRORS=nbxmpp.protocol-module.html#ERRORS"><a title="nbxmpp.ERRORS
+nbxmpp.protocol.ERRORS" class="py-name" href="#" onclick="return doclink('link-157', 'ERRORS', 'link-157');">ERRORS</a></tt><tt class="py-op">,</tt> <tt id="link-158" class="py-name" targets="Variable nbxmpp.protocol._errorcodes=nbxmpp.protocol-module.html#_errorcodes"><a title="nbxmpp.protocol._errorcodes" class="py-name" href="#" onclick="return doclink('link-158', '_errorcodes', 'link-158');">_errorcodes</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L231"></a><tt class="py-lineno"> 231</tt> <tt class="py-line"><tt class="py-keyword">for</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">errname</tt><tt class="py-op">,</tt> <tt class="py-name">errpool</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt id="link-159" class="py-name"><a title="nbxmpp.protocol.NS_XMPP_STREAMS" class="py-name" href="#" onclick="return doclink('link-159', 'NS_XMPP_STREAMS', 'link-143');">NS_XMPP_STREAMS</a></tt><tt class="py-op">,</tt> <tt class="py-string">'STREAM'</tt><tt class="py-op">,</tt> </tt>
+<a name="L232"></a><tt class="py-lineno"> 232</tt> <tt class="py-line"><tt id="link-160" class="py-name"><a title="nbxmpp.protocol.xmpp_stream_error_conditions" class="py-name" href="#" onclick="return doclink('link-160', 'xmpp_stream_error_conditions', 'link-154');">xmpp_stream_error_conditions</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt id="link-161" class="py-name"><a title="nbxmpp.protocol.NS_STANZAS" class="py-name" href="#" onclick="return doclink('link-161', 'NS_STANZAS', 'link-123');">NS_STANZAS</a></tt><tt class="py-op">,</tt> <tt class="py-string">'ERR'</tt><tt class="py-op">,</tt> <tt id="link-162" class="py-name"><a title="nbxmpp.protocol.xmpp_stanza_error_conditions" class="py-name" href="#" onclick="return doclink('link-162', 'xmpp_stanza_error_conditions', 'link-155');">xmpp_stanza_error_conditions</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L233"></a><tt class="py-lineno"> 233</tt> <tt class="py-line"><tt class="py-op">(</tt><tt id="link-163" class="py-name"><a title="nbxmpp.protocol.NS_SASL" class="py-name" href="#" onclick="return doclink('link-163', 'NS_SASL', 'link-112');">NS_SASL</a></tt><tt class="py-op">,</tt> <tt class="py-string">'SASL'</tt><tt class="py-op">,</tt> <tt id="link-164" class="py-name"><a title="nbxmpp.protocol.sasl_error_conditions" class="py-name" href="#" onclick="return doclink('link-164', 'sasl_error_conditions', 'link-156');">sasl_error_conditions</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L234"></a><tt class="py-lineno"> 234</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">err</tt> <tt class="py-keyword">in</tt> <tt class="py-name">errpool</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L235"></a><tt class="py-lineno"> 235</tt> <tt class="py-line"> <tt class="py-name">cond</tt><tt class="py-op">,</tt> <tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt> <tt class="py-op">=</tt> <tt class="py-name">err</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">' -- '</tt><tt class="py-op">)</tt> </tt>
+<a name="L236"></a><tt class="py-lineno"> 236</tt> <tt class="py-line"> <tt id="link-165" class="py-name" targets="Variable nbxmpp.name=nbxmpp-module.html#name,Variable nbxmpp.protocol.name=nbxmpp.protocol-module.html#name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-165', 'name', 'link-165');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-name">errname</tt> <tt class="py-op">+</tt> <tt class="py-string">'_'</tt> <tt class="py-op">+</tt> <tt id="link-166" class="py-name" targets="Function nbxmpp.protocol.ascii_upper()=nbxmpp.protocol-module.html#ascii_upper"><a title="nbxmpp.protocol.ascii_upper" class="py-name" href="#" onclick="return doclink('link-166', 'ascii_upper', 'link-166');">ascii_upper</a></tt><tt class="py-op">(</tt><tt class="py-name">cond</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-string">'_'</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno"> 237</tt> <tt class="py-line"> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt id="link-167" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-167', 'name', 'link-165');">name</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">ns</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">cond</tt> </tt>
+<a name="L238"></a><tt class="py-lineno"> 238</tt> <tt class="py-line"> <tt id="link-168" class="py-name"><a title="nbxmpp.ERRORS
+nbxmpp.protocol.ERRORS" class="py-name" href="#" onclick="return doclink('link-168', 'ERRORS', 'link-157');">ERRORS</a></tt><tt class="py-op">[</tt><tt class="py-name">ns</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">cond</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">]</tt> </tt>
+<a name="L239"></a><tt class="py-lineno"> 239</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">code</tt><tt class="py-op">:</tt> </tt>
+<a name="L240"></a><tt class="py-lineno"> 240</tt> <tt class="py-line"> <tt id="link-169" class="py-name"><a title="nbxmpp.protocol._errorcodes" class="py-name" href="#" onclick="return doclink('link-169', '_errorcodes', 'link-158');">_errorcodes</a></tt><tt class="py-op">[</tt><tt class="py-name">code</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cond</tt> </tt>
+<a name="L241"></a><tt class="py-lineno"> 241</tt> <tt class="py-line"><tt class="py-keyword">del</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">errname</tt><tt class="py-op">,</tt> <tt class="py-name">errpool</tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">,</tt> <tt class="py-name">cond</tt><tt class="py-op">,</tt> <tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt> </tt>
+<a name="L242"></a><tt class="py-lineno"> 242</tt> <tt class="py-line"> </tt>
+<a name="isResultNode"></a><div id="isResultNode-def"><a name="L243"></a><tt class="py-lineno"> 243</tt> <a class="py-toggle" href="#" id="isResultNode-toggle" onclick="return toggle('isResultNode');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol-module.html#isResultNode">isResultNode</a><tt class="py-op">(</tt><tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="isResultNode-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="isResultNode-expanded"><a name="L244"></a><tt class="py-lineno"> 244</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L245"></a><tt class="py-lineno"> 245</tt> <tt class="py-line"><tt class="py-docstring"> Return true if the node is a positive reply</tt> </tt>
+<a name="L246"></a><tt class="py-lineno"> 246</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L247"></a><tt class="py-lineno"> 247</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">node</tt> <tt class="py-keyword">and</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name" targets="Method nbxmpp.protocol.DataField.getType()=nbxmpp.protocol.DataField-class.html#getType,Method nbxmpp.protocol.DataForm.getType()=nbxmpp.protocol.DataForm-class.html#getType,Method nbxmpp.protocol.Protocol.getType()=nbxmpp.protocol.Protocol-class.html#getType"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-170', 'getType', 'link-170');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'result'</tt> </tt>
+</div><a name="L248"></a><tt class="py-lineno"> 248</tt> <tt class="py-line"> </tt>
+<a name="isErrorNode"></a><div id="isErrorNode-def"><a name="L249"></a><tt class="py-lineno"> 249</tt> <a class="py-toggle" href="#" id="isErrorNode-toggle" onclick="return toggle('isErrorNode');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol-module.html#isErrorNode">isErrorNode</a><tt class="py-op">(</tt><tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="isErrorNode-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="isErrorNode-expanded"><a name="L250"></a><tt class="py-lineno"> 250</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L251"></a><tt class="py-lineno"> 251</tt> <tt class="py-line"><tt class="py-docstring"> Return true if the node is a negative reply</tt> </tt>
+<a name="L252"></a><tt class="py-lineno"> 252</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L253"></a><tt class="py-lineno"> 253</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">node</tt> <tt class="py-keyword">and</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-171', 'getType', 'link-170');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'error'</tt> </tt>
+</div><a name="L254"></a><tt class="py-lineno"> 254</tt> <tt class="py-line"> </tt>
+<a name="NodeProcessed"></a><div id="NodeProcessed-def"><a name="L255"></a><tt class="py-lineno"> 255</tt> <a class="py-toggle" href="#" id="NodeProcessed-toggle" onclick="return toggle('NodeProcessed');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.NodeProcessed-class.html">NodeProcessed</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeProcessed-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NodeProcessed-expanded"><a name="L256"></a><tt class="py-lineno"> 256</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L257"></a><tt class="py-lineno"> 257</tt> <tt class="py-line"><tt class="py-docstring"> Exception that should be raised by handler when the handling should be</tt> </tt>
+<a name="L258"></a><tt class="py-lineno"> 258</tt> <tt class="py-line"><tt class="py-docstring"> stopped</tt> </tt>
+<a name="L259"></a><tt class="py-lineno"> 259</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L260"></a><tt class="py-lineno"> 260</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L261"></a><tt class="py-lineno"> 261</tt> <tt class="py-line"> </tt>
+<a name="StreamError"></a><div id="StreamError-def"><a name="L262"></a><tt class="py-lineno"> 262</tt> <a class="py-toggle" href="#" id="StreamError-toggle" onclick="return toggle('StreamError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.StreamError-class.html">StreamError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="StreamError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="StreamError-expanded"><a name="L263"></a><tt class="py-lineno"> 263</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L264"></a><tt class="py-lineno"> 264</tt> <tt class="py-line"><tt class="py-docstring"> Base exception class for stream errors</tt> </tt>
+<a name="L265"></a><tt class="py-lineno"> 265</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L266"></a><tt class="py-lineno"> 266</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L267"></a><tt class="py-lineno"> 267</tt> <tt class="py-line"> </tt>
+<a name="BadFormat"></a><div id="BadFormat-def"><a name="L268"></a><tt class="py-lineno"> 268</tt> <a class="py-toggle" href="#" id="BadFormat-toggle" onclick="return toggle('BadFormat');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.BadFormat-class.html">BadFormat</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BadFormat-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="BadFormat-expanded"><a name="L269"></a><tt class="py-lineno"> 269</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L270"></a><tt class="py-lineno"> 270</tt> <tt class="py-line"> </tt>
+<a name="BadNamespacePrefix"></a><div id="BadNamespacePrefix-def"><a name="L271"></a><tt class="py-lineno"> 271</tt> <a class="py-toggle" href="#" id="BadNamespacePrefix-toggle" onclick="return toggle('BadNamespacePrefix');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.BadNamespacePrefix-class.html">BadNamespacePrefix</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BadNamespacePrefix-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="BadNamespacePrefix-expanded"><a name="L272"></a><tt class="py-lineno"> 272</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L273"></a><tt class="py-lineno"> 273</tt> <tt class="py-line"> </tt>
+<a name="Conflict"></a><div id="Conflict-def"><a name="L274"></a><tt class="py-lineno"> 274</tt> <a class="py-toggle" href="#" id="Conflict-toggle" onclick="return toggle('Conflict');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Conflict-class.html">Conflict</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Conflict-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Conflict-expanded"><a name="L275"></a><tt class="py-lineno"> 275</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L276"></a><tt class="py-lineno"> 276</tt> <tt class="py-line"> </tt>
+<a name="ConnectionTimeout"></a><div id="ConnectionTimeout-def"><a name="L277"></a><tt class="py-lineno"> 277</tt> <a class="py-toggle" href="#" id="ConnectionTimeout-toggle" onclick="return toggle('ConnectionTimeout');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.ConnectionTimeout-class.html">ConnectionTimeout</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ConnectionTimeout-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ConnectionTimeout-expanded"><a name="L278"></a><tt class="py-lineno"> 278</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L279"></a><tt class="py-lineno"> 279</tt> <tt class="py-line"> </tt>
+<a name="HostGone"></a><div id="HostGone-def"><a name="L280"></a><tt class="py-lineno"> 280</tt> <a class="py-toggle" href="#" id="HostGone-toggle" onclick="return toggle('HostGone');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.HostGone-class.html">HostGone</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HostGone-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HostGone-expanded"><a name="L281"></a><tt class="py-lineno"> 281</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L282"></a><tt class="py-lineno"> 282</tt> <tt class="py-line"> </tt>
+<a name="HostUnknown"></a><div id="HostUnknown-def"><a name="L283"></a><tt class="py-lineno"> 283</tt> <a class="py-toggle" href="#" id="HostUnknown-toggle" onclick="return toggle('HostUnknown');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.HostUnknown-class.html">HostUnknown</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HostUnknown-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HostUnknown-expanded"><a name="L284"></a><tt class="py-lineno"> 284</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L285"></a><tt class="py-lineno"> 285</tt> <tt class="py-line"> </tt>
+<a name="ImproperAddressing"></a><div id="ImproperAddressing-def"><a name="L286"></a><tt class="py-lineno"> 286</tt> <a class="py-toggle" href="#" id="ImproperAddressing-toggle" onclick="return toggle('ImproperAddressing');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.ImproperAddressing-class.html">ImproperAddressing</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ImproperAddressing-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ImproperAddressing-expanded"><a name="L287"></a><tt class="py-lineno"> 287</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L288"></a><tt class="py-lineno"> 288</tt> <tt class="py-line"> </tt>
+<a name="InternalServerError"></a><div id="InternalServerError-def"><a name="L289"></a><tt class="py-lineno"> 289</tt> <a class="py-toggle" href="#" id="InternalServerError-toggle" onclick="return toggle('InternalServerError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.InternalServerError-class.html">InternalServerError</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InternalServerError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="InternalServerError-expanded"><a name="L290"></a><tt class="py-lineno"> 290</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L291"></a><tt class="py-lineno"> 291</tt> <tt class="py-line"> </tt>
+<a name="InvalidFrom"></a><div id="InvalidFrom-def"><a name="L292"></a><tt class="py-lineno"> 292</tt> <a class="py-toggle" href="#" id="InvalidFrom-toggle" onclick="return toggle('InvalidFrom');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.InvalidFrom-class.html">InvalidFrom</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidFrom-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="InvalidFrom-expanded"><a name="L293"></a><tt class="py-lineno"> 293</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L294"></a><tt class="py-lineno"> 294</tt> <tt class="py-line"> </tt>
+<a name="InvalidID"></a><div id="InvalidID-def"><a name="L295"></a><tt class="py-lineno"> 295</tt> <a class="py-toggle" href="#" id="InvalidID-toggle" onclick="return toggle('InvalidID');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.InvalidID-class.html">InvalidID</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidID-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="InvalidID-expanded"><a name="L296"></a><tt class="py-lineno"> 296</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L297"></a><tt class="py-lineno"> 297</tt> <tt class="py-line"> </tt>
+<a name="InvalidNamespace"></a><div id="InvalidNamespace-def"><a name="L298"></a><tt class="py-lineno"> 298</tt> <a class="py-toggle" href="#" id="InvalidNamespace-toggle" onclick="return toggle('InvalidNamespace');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.InvalidNamespace-class.html">InvalidNamespace</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidNamespace-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="InvalidNamespace-expanded"><a name="L299"></a><tt class="py-lineno"> 299</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L300"></a><tt class="py-lineno"> 300</tt> <tt class="py-line"> </tt>
+<a name="InvalidXML"></a><div id="InvalidXML-def"><a name="L301"></a><tt class="py-lineno"> 301</tt> <a class="py-toggle" href="#" id="InvalidXML-toggle" onclick="return toggle('InvalidXML');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.InvalidXML-class.html">InvalidXML</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidXML-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="InvalidXML-expanded"><a name="L302"></a><tt class="py-lineno"> 302</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L303"></a><tt class="py-lineno"> 303</tt> <tt class="py-line"> </tt>
+<a name="NotAuthorized"></a><div id="NotAuthorized-def"><a name="L304"></a><tt class="py-lineno"> 304</tt> <a class="py-toggle" href="#" id="NotAuthorized-toggle" onclick="return toggle('NotAuthorized');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.NotAuthorized-class.html">NotAuthorized</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NotAuthorized-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NotAuthorized-expanded"><a name="L305"></a><tt class="py-lineno"> 305</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L306"></a><tt class="py-lineno"> 306</tt> <tt class="py-line"> </tt>
+<a name="PolicyViolation"></a><div id="PolicyViolation-def"><a name="L307"></a><tt class="py-lineno"> 307</tt> <a class="py-toggle" href="#" id="PolicyViolation-toggle" onclick="return toggle('PolicyViolation');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.PolicyViolation-class.html">PolicyViolation</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PolicyViolation-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="PolicyViolation-expanded"><a name="L308"></a><tt class="py-lineno"> 308</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L309"></a><tt class="py-lineno"> 309</tt> <tt class="py-line"> </tt>
+<a name="RemoteConnectionFailed"></a><div id="RemoteConnectionFailed-def"><a name="L310"></a><tt class="py-lineno"> 310</tt> <a class="py-toggle" href="#" id="RemoteConnectionFailed-toggle" onclick="return toggle('RemoteConnectionFailed');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.RemoteConnectionFailed-class.html">RemoteConnectionFailed</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RemoteConnectionFailed-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RemoteConnectionFailed-expanded"><a name="L311"></a><tt class="py-lineno"> 311</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L312"></a><tt class="py-lineno"> 312</tt> <tt class="py-line"> </tt>
+<a name="ResourceConstraint"></a><div id="ResourceConstraint-def"><a name="L313"></a><tt class="py-lineno"> 313</tt> <a class="py-toggle" href="#" id="ResourceConstraint-toggle" onclick="return toggle('ResourceConstraint');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.ResourceConstraint-class.html">ResourceConstraint</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResourceConstraint-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ResourceConstraint-expanded"><a name="L314"></a><tt class="py-lineno"> 314</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L315"></a><tt class="py-lineno"> 315</tt> <tt class="py-line"> </tt>
+<a name="RestrictedXML"></a><div id="RestrictedXML-def"><a name="L316"></a><tt class="py-lineno"> 316</tt> <a class="py-toggle" href="#" id="RestrictedXML-toggle" onclick="return toggle('RestrictedXML');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.RestrictedXML-class.html">RestrictedXML</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RestrictedXML-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RestrictedXML-expanded"><a name="L317"></a><tt class="py-lineno"> 317</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L318"></a><tt class="py-lineno"> 318</tt> <tt class="py-line"> </tt>
+<a name="SeeOtherHost"></a><div id="SeeOtherHost-def"><a name="L319"></a><tt class="py-lineno"> 319</tt> <a class="py-toggle" href="#" id="SeeOtherHost-toggle" onclick="return toggle('SeeOtherHost');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.SeeOtherHost-class.html">SeeOtherHost</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SeeOtherHost-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="SeeOtherHost-expanded"><a name="L320"></a><tt class="py-lineno"> 320</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L321"></a><tt class="py-lineno"> 321</tt> <tt class="py-line"> </tt>
+<a name="SystemShutdown"></a><div id="SystemShutdown-def"><a name="L322"></a><tt class="py-lineno"> 322</tt> <a class="py-toggle" href="#" id="SystemShutdown-toggle" onclick="return toggle('SystemShutdown');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.SystemShutdown-class.html">SystemShutdown</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SystemShutdown-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="SystemShutdown-expanded"><a name="L323"></a><tt class="py-lineno"> 323</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L324"></a><tt class="py-lineno"> 324</tt> <tt class="py-line"> </tt>
+<a name="UndefinedCondition"></a><div id="UndefinedCondition-def"><a name="L325"></a><tt class="py-lineno"> 325</tt> <a class="py-toggle" href="#" id="UndefinedCondition-toggle" onclick="return toggle('UndefinedCondition');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.UndefinedCondition-class.html">UndefinedCondition</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UndefinedCondition-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UndefinedCondition-expanded"><a name="L326"></a><tt class="py-lineno"> 326</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L327"></a><tt class="py-lineno"> 327</tt> <tt class="py-line"> </tt>
+<a name="UnsupportedEncoding"></a><div id="UnsupportedEncoding-def"><a name="L328"></a><tt class="py-lineno"> 328</tt> <a class="py-toggle" href="#" id="UnsupportedEncoding-toggle" onclick="return toggle('UnsupportedEncoding');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.UnsupportedEncoding-class.html">UnsupportedEncoding</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnsupportedEncoding-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UnsupportedEncoding-expanded"><a name="L329"></a><tt class="py-lineno"> 329</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L330"></a><tt class="py-lineno"> 330</tt> <tt class="py-line"> </tt>
+<a name="UnsupportedStanzaType"></a><div id="UnsupportedStanzaType-def"><a name="L331"></a><tt class="py-lineno"> 331</tt> <a class="py-toggle" href="#" id="UnsupportedStanzaType-toggle" onclick="return toggle('UnsupportedStanzaType');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.UnsupportedStanzaType-class.html">UnsupportedStanzaType</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnsupportedStanzaType-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UnsupportedStanzaType-expanded"><a name="L332"></a><tt class="py-lineno"> 332</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L333"></a><tt class="py-lineno"> 333</tt> <tt class="py-line"> </tt>
+<a name="UnsupportedVersion"></a><div id="UnsupportedVersion-def"><a name="L334"></a><tt class="py-lineno"> 334</tt> <a class="py-toggle" href="#" id="UnsupportedVersion-toggle" onclick="return toggle('UnsupportedVersion');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.UnsupportedVersion-class.html">UnsupportedVersion</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnsupportedVersion-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UnsupportedVersion-expanded"><a name="L335"></a><tt class="py-lineno"> 335</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L336"></a><tt class="py-lineno"> 336</tt> <tt class="py-line"> </tt>
+<a name="XMLNotWellFormed"></a><div id="XMLNotWellFormed-def"><a name="L337"></a><tt class="py-lineno"> 337</tt> <a class="py-toggle" href="#" id="XMLNotWellFormed-toggle" onclick="return toggle('XMLNotWellFormed');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.XMLNotWellFormed-class.html">XMLNotWellFormed</a><tt class="py-op">(</tt><tt class="py-base-class">StreamError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMLNotWellFormed-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="XMLNotWellFormed-expanded"><a name="L338"></a><tt class="py-lineno"> 338</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L339"></a><tt class="py-lineno"> 339</tt> <tt class="py-line"> </tt>
+<a name="L340"></a><tt class="py-lineno"> 340</tt> <tt class="py-line"><tt id="link-172" class="py-name" targets="Variable nbxmpp.protocol.stream_exceptions=nbxmpp.protocol-module.html#stream_exceptions"><a title="nbxmpp.protocol.stream_exceptions" class="py-name" href="#" onclick="return doclink('link-172', 'stream_exceptions', 'link-172');">stream_exceptions</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'bad-format'</tt><tt class="py-op">:</tt> <tt id="link-173" class="py-name" targets="Class nbxmpp.protocol.BadFormat=nbxmpp.protocol.BadFormat-class.html"><a title="nbxmpp.protocol.BadFormat" class="py-name" href="#" onclick="return doclink('link-173', 'BadFormat', 'link-173');">BadFormat</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L341"></a><tt class="py-lineno"> 341</tt> <tt class="py-line"> <tt class="py-string">'bad-namespace-prefix'</tt><tt class="py-op">:</tt> <tt id="link-174" class="py-name" targets="Class nbxmpp.protocol.BadNamespacePrefix=nbxmpp.protocol.BadNamespacePrefix-class.html"><a title="nbxmpp.protocol.BadNamespacePrefix" class="py-name" href="#" onclick="return doclink('link-174', 'BadNamespacePrefix', 'link-174');">BadNamespacePrefix</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L342"></a><tt class="py-lineno"> 342</tt> <tt class="py-line"> <tt class="py-string">'conflict'</tt><tt class="py-op">:</tt> <tt id="link-175" class="py-name" targets="Class nbxmpp.protocol.Conflict=nbxmpp.protocol.Conflict-class.html"><a title="nbxmpp.protocol.Conflict" class="py-name" href="#" onclick="return doclink('link-175', 'Conflict', 'link-175');">Conflict</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L343"></a><tt class="py-lineno"> 343</tt> <tt class="py-line"> <tt class="py-string">'connection-timeout'</tt><tt class="py-op">:</tt> <tt id="link-176" class="py-name" targets="Class nbxmpp.protocol.ConnectionTimeout=nbxmpp.protocol.ConnectionTimeout-class.html"><a title="nbxmpp.protocol.ConnectionTimeout" class="py-name" href="#" onclick="return doclink('link-176', 'ConnectionTimeout', 'link-176');">ConnectionTimeout</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L344"></a><tt class="py-lineno"> 344</tt> <tt class="py-line"> <tt class="py-string">'host-gone'</tt><tt class="py-op">:</tt> <tt id="link-177" class="py-name" targets="Class nbxmpp.protocol.HostGone=nbxmpp.protocol.HostGone-class.html"><a title="nbxmpp.protocol.HostGone" class="py-name" href="#" onclick="return doclink('link-177', 'HostGone', 'link-177');">HostGone</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L345"></a><tt class="py-lineno"> 345</tt> <tt class="py-line"> <tt class="py-string">'host-unknown'</tt><tt class="py-op">:</tt> <tt id="link-178" class="py-name" targets="Class nbxmpp.protocol.HostUnknown=nbxmpp.protocol.HostUnknown-class.html"><a title="nbxmpp.protocol.HostUnknown" class="py-name" href="#" onclick="return doclink('link-178', 'HostUnknown', 'link-178');">HostUnknown</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L346"></a><tt class="py-lineno"> 346</tt> <tt class="py-line"> <tt class="py-string">'improper-addressing'</tt><tt class="py-op">:</tt> <tt id="link-179" class="py-name" targets="Class nbxmpp.protocol.ImproperAddressing=nbxmpp.protocol.ImproperAddressing-class.html"><a title="nbxmpp.protocol.ImproperAddressing" class="py-name" href="#" onclick="return doclink('link-179', 'ImproperAddressing', 'link-179');">ImproperAddressing</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L347"></a><tt class="py-lineno"> 347</tt> <tt class="py-line"> <tt class="py-string">'internal-server-error'</tt><tt class="py-op">:</tt> <tt id="link-180" class="py-name" targets="Class nbxmpp.protocol.InternalServerError=nbxmpp.protocol.InternalServerError-class.html"><a title="nbxmpp.protocol.InternalServerError" class="py-name" href="#" onclick="return doclink('link-180', 'InternalServerError', 'link-180');">InternalServerError</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L348"></a><tt class="py-lineno"> 348</tt> <tt class="py-line"> <tt class="py-string">'invalid-from'</tt><tt class="py-op">:</tt> <tt id="link-181" class="py-name" targets="Class nbxmpp.protocol.InvalidFrom=nbxmpp.protocol.InvalidFrom-class.html"><a title="nbxmpp.protocol.InvalidFrom" class="py-name" href="#" onclick="return doclink('link-181', 'InvalidFrom', 'link-181');">InvalidFrom</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L349"></a><tt class="py-lineno"> 349</tt> <tt class="py-line"> <tt class="py-string">'invalid-id'</tt><tt class="py-op">:</tt> <tt id="link-182" class="py-name" targets="Class nbxmpp.protocol.InvalidID=nbxmpp.protocol.InvalidID-class.html"><a title="nbxmpp.protocol.InvalidID" class="py-name" href="#" onclick="return doclink('link-182', 'InvalidID', 'link-182');">InvalidID</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L350"></a><tt class="py-lineno"> 350</tt> <tt class="py-line"> <tt class="py-string">'invalid-namespace'</tt><tt class="py-op">:</tt> <tt id="link-183" class="py-name" targets="Class nbxmpp.protocol.InvalidNamespace=nbxmpp.protocol.InvalidNamespace-class.html"><a title="nbxmpp.protocol.InvalidNamespace" class="py-name" href="#" onclick="return doclink('link-183', 'InvalidNamespace', 'link-183');">InvalidNamespace</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L351"></a><tt class="py-lineno"> 351</tt> <tt class="py-line"> <tt class="py-string">'invalid-xml'</tt><tt class="py-op">:</tt> <tt id="link-184" class="py-name" targets="Class nbxmpp.protocol.InvalidXML=nbxmpp.protocol.InvalidXML-class.html"><a title="nbxmpp.protocol.InvalidXML" class="py-name" href="#" onclick="return doclink('link-184', 'InvalidXML', 'link-184');">InvalidXML</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L352"></a><tt class="py-lineno"> 352</tt> <tt class="py-line"> <tt class="py-string">'not-authorized'</tt><tt class="py-op">:</tt> <tt id="link-185" class="py-name" targets="Class nbxmpp.protocol.NotAuthorized=nbxmpp.protocol.NotAuthorized-class.html"><a title="nbxmpp.protocol.NotAuthorized" class="py-name" href="#" onclick="return doclink('link-185', 'NotAuthorized', 'link-185');">NotAuthorized</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L353"></a><tt class="py-lineno"> 353</tt> <tt class="py-line"> <tt class="py-string">'policy-violation'</tt><tt class="py-op">:</tt> <tt id="link-186" class="py-name" targets="Class nbxmpp.protocol.PolicyViolation=nbxmpp.protocol.PolicyViolation-class.html"><a title="nbxmpp.protocol.PolicyViolation" class="py-name" href="#" onclick="return doclink('link-186', 'PolicyViolation', 'link-186');">PolicyViolation</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L354"></a><tt class="py-lineno"> 354</tt> <tt class="py-line"> <tt class="py-string">'remote-connection-failed'</tt><tt class="py-op">:</tt> <tt id="link-187" class="py-name" targets="Class nbxmpp.protocol.RemoteConnectionFailed=nbxmpp.protocol.RemoteConnectionFailed-class.html"><a title="nbxmpp.protocol.RemoteConnectionFailed" class="py-name" href="#" onclick="return doclink('link-187', 'RemoteConnectionFailed', 'link-187');">RemoteConnectionFailed</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L355"></a><tt class="py-lineno"> 355</tt> <tt class="py-line"> <tt class="py-string">'resource-constraint'</tt><tt class="py-op">:</tt> <tt id="link-188" class="py-name" targets="Class nbxmpp.protocol.ResourceConstraint=nbxmpp.protocol.ResourceConstraint-class.html"><a title="nbxmpp.protocol.ResourceConstraint" class="py-name" href="#" onclick="return doclink('link-188', 'ResourceConstraint', 'link-188');">ResourceConstraint</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L356"></a><tt class="py-lineno"> 356</tt> <tt class="py-line"> <tt class="py-string">'restricted-xml'</tt><tt class="py-op">:</tt> <tt id="link-189" class="py-name" targets="Class nbxmpp.protocol.RestrictedXML=nbxmpp.protocol.RestrictedXML-class.html"><a title="nbxmpp.protocol.RestrictedXML" class="py-name" href="#" onclick="return doclink('link-189', 'RestrictedXML', 'link-189');">RestrictedXML</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L357"></a><tt class="py-lineno"> 357</tt> <tt class="py-line"> <tt class="py-string">'see-other-host'</tt><tt class="py-op">:</tt> <tt id="link-190" class="py-name" targets="Class nbxmpp.protocol.SeeOtherHost=nbxmpp.protocol.SeeOtherHost-class.html"><a title="nbxmpp.protocol.SeeOtherHost" class="py-name" href="#" onclick="return doclink('link-190', 'SeeOtherHost', 'link-190');">SeeOtherHost</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L358"></a><tt class="py-lineno"> 358</tt> <tt class="py-line"> <tt class="py-string">'system-shutdown'</tt><tt class="py-op">:</tt> <tt id="link-191" class="py-name" targets="Class nbxmpp.protocol.SystemShutdown=nbxmpp.protocol.SystemShutdown-class.html"><a title="nbxmpp.protocol.SystemShutdown" class="py-name" href="#" onclick="return doclink('link-191', 'SystemShutdown', 'link-191');">SystemShutdown</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L359"></a><tt class="py-lineno"> 359</tt> <tt class="py-line"> <tt class="py-string">'undefined-condition'</tt><tt class="py-op">:</tt> <tt id="link-192" class="py-name" targets="Class nbxmpp.protocol.UndefinedCondition=nbxmpp.protocol.UndefinedCondition-class.html"><a title="nbxmpp.protocol.UndefinedCondition" class="py-name" href="#" onclick="return doclink('link-192', 'UndefinedCondition', 'link-192');">UndefinedCondition</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L360"></a><tt class="py-lineno"> 360</tt> <tt class="py-line"> <tt class="py-string">'unsupported-encoding'</tt><tt class="py-op">:</tt> <tt id="link-193" class="py-name" targets="Class nbxmpp.protocol.UnsupportedEncoding=nbxmpp.protocol.UnsupportedEncoding-class.html"><a title="nbxmpp.protocol.UnsupportedEncoding" class="py-name" href="#" onclick="return doclink('link-193', 'UnsupportedEncoding', 'link-193');">UnsupportedEncoding</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L361"></a><tt class="py-lineno"> 361</tt> <tt class="py-line"> <tt class="py-string">'unsupported-stanza-type'</tt><tt class="py-op">:</tt> <tt id="link-194" class="py-name" targets="Class nbxmpp.protocol.UnsupportedStanzaType=nbxmpp.protocol.UnsupportedStanzaType-class.html"><a title="nbxmpp.protocol.UnsupportedStanzaType" class="py-name" href="#" onclick="return doclink('link-194', 'UnsupportedStanzaType', 'link-194');">UnsupportedStanzaType</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L362"></a><tt class="py-lineno"> 362</tt> <tt class="py-line"> <tt class="py-string">'unsupported-version'</tt><tt class="py-op">:</tt> <tt id="link-195" class="py-name" targets="Class nbxmpp.protocol.UnsupportedVersion=nbxmpp.protocol.UnsupportedVersion-class.html"><a title="nbxmpp.protocol.UnsupportedVersion" class="py-name" href="#" onclick="return doclink('link-195', 'UnsupportedVersion', 'link-195');">UnsupportedVersion</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L363"></a><tt class="py-lineno"> 363</tt> <tt class="py-line"> <tt class="py-string">'xml-not-well-formed'</tt><tt class="py-op">:</tt> <tt id="link-196" class="py-name" targets="Class nbxmpp.protocol.XMLNotWellFormed=nbxmpp.protocol.XMLNotWellFormed-class.html"><a title="nbxmpp.protocol.XMLNotWellFormed" class="py-name" href="#" onclick="return doclink('link-196', 'XMLNotWellFormed', 'link-196');">XMLNotWellFormed</a></tt><tt class="py-op">}</tt> </tt>
+<a name="L364"></a><tt class="py-lineno"> 364</tt> <tt class="py-line"> </tt>
+<a name="JID"></a><div id="JID-def"><a name="L365"></a><tt class="py-lineno"> 365</tt> <a class="py-toggle" href="#" id="JID-toggle" onclick="return toggle('JID');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html">JID</a><tt class="py-op">:</tt> </tt>
+</div><div id="JID-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="JID-expanded"><a name="L366"></a><tt class="py-lineno"> 366</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L367"></a><tt class="py-lineno"> 367</tt> <tt class="py-line"><tt class="py-docstring"> JID can be built from string, modified, compared, serialised into string</tt> </tt>
+<a name="L368"></a><tt class="py-lineno"> 368</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L369"></a><tt class="py-lineno"> 369</tt> <tt class="py-line"> </tt>
+<a name="JID.__init__"></a><div id="JID.__init__-def"><a name="L370"></a><tt class="py-lineno"> 370</tt> <a class="py-toggle" href="#" id="JID.__init__-toggle" onclick="return toggle('JID.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">domain</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-param">resource</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.__init__-expanded"><a name="L371"></a><tt class="py-lineno"> 371</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L372"></a><tt class="py-lineno"> 372</tt> <tt class="py-line"><tt class="py-docstring"> JID can be specified as string (jid argument) or as separate parts</tt> </tt>
+<a name="L373"></a><tt class="py-lineno"> 373</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L374"></a><tt class="py-lineno"> 374</tt> <tt class="py-line"><tt class="py-docstring"> Examples:</tt> </tt>
+<a name="L375"></a><tt class="py-lineno"> 375</tt> <tt class="py-line"><tt class="py-docstring"> JID('node@domain/resource')</tt> </tt>
+<a name="L376"></a><tt class="py-lineno"> 376</tt> <tt class="py-line"><tt class="py-docstring"> JID(node='node',domain='domain.org')</tt> </tt>
+<a name="L377"></a><tt class="py-lineno"> 377</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L378"></a><tt class="py-lineno"> 378</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">jid</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">domain</tt><tt class="py-op">:</tt> </tt>
+<a name="L379"></a><tt class="py-lineno"> 379</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'JID must contain at least domain name'</tt><tt class="py-op">)</tt> </tt>
+<a name="L380"></a><tt class="py-lineno"> 380</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L381"></a><tt class="py-lineno"> 381</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt> </tt>
+<a name="L382"></a><tt class="py-lineno"> 382</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> </tt>
+<a name="L383"></a><tt class="py-lineno"> 383</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">domain</tt><tt class="py-op">:</tt> </tt>
+<a name="L384"></a><tt class="py-lineno"> 384</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">domain</tt><tt class="py-op">,</tt> <tt class="py-name">resource</tt> </tt>
+<a name="L385"></a><tt class="py-lineno"> 385</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L386"></a><tt class="py-lineno"> 386</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'@'</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L387"></a><tt class="py-lineno"> 387</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">jid</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'@'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L388"></a><tt class="py-lineno"> 388</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L389"></a><tt class="py-lineno"> 389</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L390"></a><tt class="py-lineno"> 390</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L391"></a><tt class="py-lineno"> 391</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L392"></a><tt class="py-lineno"> 392</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L393"></a><tt class="py-lineno"> 393</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt> </tt>
+</div><a name="L394"></a><tt class="py-lineno"> 394</tt> <tt class="py-line"> </tt>
+<a name="JID.getNode"></a><div id="JID.getNode-def"><a name="L395"></a><tt class="py-lineno"> 395</tt> <a class="py-toggle" href="#" id="JID.getNode-toggle" onclick="return toggle('JID.getNode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#getNode">getNode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.getNode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.getNode-expanded"><a name="L396"></a><tt class="py-lineno"> 396</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L397"></a><tt class="py-lineno"> 397</tt> <tt class="py-line"><tt class="py-docstring"> Return the node part of the JID</tt> </tt>
+<a name="L398"></a><tt class="py-lineno"> 398</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L399"></a><tt class="py-lineno"> 399</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt> </tt>
+</div><a name="L400"></a><tt class="py-lineno"> 400</tt> <tt class="py-line"> </tt>
+<a name="JID.setNode"></a><div id="JID.setNode-def"><a name="L401"></a><tt class="py-lineno"> 401</tt> <a class="py-toggle" href="#" id="JID.setNode-toggle" onclick="return toggle('JID.setNode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#setNode">setNode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.setNode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.setNode-expanded"><a name="L402"></a><tt class="py-lineno"> 402</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L403"></a><tt class="py-lineno"> 403</tt> <tt class="py-line"><tt class="py-docstring"> Set the node part of the JID to new value. Specify None to remove</tt> </tt>
+<a name="L404"></a><tt class="py-lineno"> 404</tt> <tt class="py-line"><tt class="py-docstring"> the node part</tt> </tt>
+<a name="L405"></a><tt class="py-lineno"> 405</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L406"></a><tt class="py-lineno"> 406</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L407"></a><tt class="py-lineno"> 407</tt> <tt class="py-line"> </tt>
+<a name="JID.getDomain"></a><div id="JID.getDomain-def"><a name="L408"></a><tt class="py-lineno"> 408</tt> <a class="py-toggle" href="#" id="JID.getDomain-toggle" onclick="return toggle('JID.getDomain');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#getDomain">getDomain</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.getDomain-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.getDomain-expanded"><a name="L409"></a><tt class="py-lineno"> 409</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L410"></a><tt class="py-lineno"> 410</tt> <tt class="py-line"><tt class="py-docstring"> Return the domain part of the JID</tt> </tt>
+<a name="L411"></a><tt class="py-lineno"> 411</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L412"></a><tt class="py-lineno"> 412</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt> </tt>
+</div><a name="L413"></a><tt class="py-lineno"> 413</tt> <tt class="py-line"> </tt>
+<a name="JID.setDomain"></a><div id="JID.setDomain-def"><a name="L414"></a><tt class="py-lineno"> 414</tt> <a class="py-toggle" href="#" id="JID.setDomain-toggle" onclick="return toggle('JID.setDomain');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#setDomain">setDomain</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">domain</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.setDomain-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.setDomain-expanded"><a name="L415"></a><tt class="py-lineno"> 415</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L416"></a><tt class="py-lineno"> 416</tt> <tt class="py-line"><tt class="py-docstring"> Set the domain part of the JID to new value</tt> </tt>
+<a name="L417"></a><tt class="py-lineno"> 417</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L418"></a><tt class="py-lineno"> 418</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt> <tt class="py-op">=</tt> <tt class="py-name">domain</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L419"></a><tt class="py-lineno"> 419</tt> <tt class="py-line"> </tt>
+<a name="JID.getResource"></a><div id="JID.getResource-def"><a name="L420"></a><tt class="py-lineno"> 420</tt> <a class="py-toggle" href="#" id="JID.getResource-toggle" onclick="return toggle('JID.getResource');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#getResource">getResource</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.getResource-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.getResource-expanded"><a name="L421"></a><tt class="py-lineno"> 421</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L422"></a><tt class="py-lineno"> 422</tt> <tt class="py-line"><tt class="py-docstring"> Return the resource part of the JID</tt> </tt>
+<a name="L423"></a><tt class="py-lineno"> 423</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L424"></a><tt class="py-lineno"> 424</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> </tt>
+</div><a name="L425"></a><tt class="py-lineno"> 425</tt> <tt class="py-line"> </tt>
+<a name="JID.setResource"></a><div id="JID.setResource-def"><a name="L426"></a><tt class="py-lineno"> 426</tt> <a class="py-toggle" href="#" id="JID.setResource-toggle" onclick="return toggle('JID.setResource');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#setResource">setResource</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resource</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.setResource-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.setResource-expanded"><a name="L427"></a><tt class="py-lineno"> 427</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L428"></a><tt class="py-lineno"> 428</tt> <tt class="py-line"><tt class="py-docstring"> Set the resource part of the JID to new value. Specify None to remove the</tt> </tt>
+<a name="L429"></a><tt class="py-lineno"> 429</tt> <tt class="py-line"><tt class="py-docstring"> resource part</tt> </tt>
+<a name="L430"></a><tt class="py-lineno"> 430</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L431"></a><tt class="py-lineno"> 431</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-op">=</tt> <tt class="py-name">resource</tt> </tt>
+</div><a name="L432"></a><tt class="py-lineno"> 432</tt> <tt class="py-line"> </tt>
+<a name="JID.getStripped"></a><div id="JID.getStripped-def"><a name="L433"></a><tt class="py-lineno"> 433</tt> <a class="py-toggle" href="#" id="JID.getStripped-toggle" onclick="return toggle('JID.getStripped');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#getStripped">getStripped</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.getStripped-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.getStripped-expanded"><a name="L434"></a><tt class="py-lineno"> 434</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L435"></a><tt class="py-lineno"> 435</tt> <tt class="py-line"><tt class="py-docstring"> Return the bare representation of JID. I.e. string value w/o resource</tt> </tt>
+<a name="L436"></a><tt class="py-lineno"> 436</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L437"></a><tt class="py-lineno"> 437</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name" targets="Method nbxmpp.protocol.JID.__str__()=nbxmpp.protocol.JID-class.html#__str__,Method nbxmpp.simplexml.Node.__str__()=nbxmpp.simplexml.Node-class.html#__str__,Method nbxmpp.tls_nb.SSLWrapper.Error.__str__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-197', '__str__', 'link-197');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L438"></a><tt class="py-lineno"> 438</tt> <tt class="py-line"> </tt>
+<a name="JID.__eq__"></a><div id="JID.__eq__-def"><a name="L439"></a><tt class="py-lineno"> 439</tt> <a class="py-toggle" href="#" id="JID.__eq__-toggle" onclick="return toggle('JID.__eq__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#__eq__">__eq__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.__eq__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.__eq__-expanded"><a name="L440"></a><tt class="py-lineno"> 440</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L441"></a><tt class="py-lineno"> 441</tt> <tt class="py-line"><tt class="py-docstring"> Compare the JID to another instance or to string for equality</tt> </tt>
+<a name="L442"></a><tt class="py-lineno"> 442</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L443"></a><tt class="py-lineno"> 443</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L444"></a><tt class="py-lineno"> 444</tt> <tt class="py-line"> <tt class="py-name">other</tt> <tt class="py-op">=</tt> <tt id="link-198" class="py-name" targets="Class nbxmpp.protocol.JID=nbxmpp.protocol.JID-class.html"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-198', 'JID', 'link-198');">JID</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
+<a name="L445"></a><tt class="py-lineno"> 445</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
+<a name="L446"></a><tt class="py-lineno"> 446</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+<a name="L447"></a><tt class="py-lineno"> 447</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-op">==</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> <tt class="py-keyword">and</tt> \ </tt>
+<a name="L448"></a><tt class="py-lineno"> 448</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-199', '__str__', 'link-197');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-200', '__str__', 'link-197');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L449"></a><tt class="py-lineno"> 449</tt> <tt class="py-line"> </tt>
+<a name="JID.__ne__"></a><div id="JID.__ne__-def"><a name="L450"></a><tt class="py-lineno"> 450</tt> <a class="py-toggle" href="#" id="JID.__ne__-toggle" onclick="return toggle('JID.__ne__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#__ne__">__ne__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.__ne__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.__ne__-expanded"><a name="L451"></a><tt class="py-lineno"> 451</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L452"></a><tt class="py-lineno"> 452</tt> <tt class="py-line"><tt class="py-docstring"> Compare the JID to another instance or to string for non-equality</tt> </tt>
+<a name="L453"></a><tt class="py-lineno"> 453</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L454"></a><tt class="py-lineno"> 454</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name" targets="Method nbxmpp.protocol.JID.__eq__()=nbxmpp.protocol.JID-class.html#__eq__"><a title="nbxmpp.protocol.JID.__eq__" class="py-name" href="#" onclick="return doclink('link-201', '__eq__', 'link-201');">__eq__</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L455"></a><tt class="py-lineno"> 455</tt> <tt class="py-line"> </tt>
+<a name="JID.bareMatch"></a><div id="JID.bareMatch-def"><a name="L456"></a><tt class="py-lineno"> 456</tt> <a class="py-toggle" href="#" id="JID.bareMatch-toggle" onclick="return toggle('JID.bareMatch');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#bareMatch">bareMatch</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.bareMatch-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.bareMatch-expanded"><a name="L457"></a><tt class="py-lineno"> 457</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L458"></a><tt class="py-lineno"> 458</tt> <tt class="py-line"><tt class="py-docstring"> Compare the node and domain parts of the JID's for equality</tt> </tt>
+<a name="L459"></a><tt class="py-lineno"> 459</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L460"></a><tt class="py-lineno"> 460</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-202" class="py-name"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-202', '__str__', 'link-197');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-203" class="py-name"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-203', 'JID', 'link-198');">JID</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-204" class="py-name"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-204', '__str__', 'link-197');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L461"></a><tt class="py-lineno"> 461</tt> <tt class="py-line"> </tt>
+<a name="JID.__str__"></a><div id="JID.__str__-def"><a name="L462"></a><tt class="py-lineno"> 462</tt> <a class="py-toggle" href="#" id="JID.__str__-toggle" onclick="return toggle('JID.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">wresource</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.__str__-expanded"><a name="L463"></a><tt class="py-lineno"> 463</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L464"></a><tt class="py-lineno"> 464</tt> <tt class="py-line"><tt class="py-docstring"> Serialise JID into string</tt> </tt>
+<a name="L465"></a><tt class="py-lineno"> 465</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L466"></a><tt class="py-lineno"> 466</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">:</tt> </tt>
+<a name="L467"></a><tt class="py-lineno"> 467</tt> <tt class="py-line"> <tt class="py-name">jid</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt> <tt class="py-op">+</tt> <tt class="py-string">'@'</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt> </tt>
+<a name="L468"></a><tt class="py-lineno"> 468</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L469"></a><tt class="py-lineno"> 469</tt> <tt class="py-line"> <tt class="py-name">jid</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">domain</tt> </tt>
+<a name="L470"></a><tt class="py-lineno"> 470</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">wresource</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt><tt class="py-op">:</tt> </tt>
+<a name="L471"></a><tt class="py-lineno"> 471</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">jid</tt> <tt class="py-op">+</tt> <tt class="py-string">'/'</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resource</tt> </tt>
+<a name="L472"></a><tt class="py-lineno"> 472</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">jid</tt> </tt>
+</div><a name="L473"></a><tt class="py-lineno"> 473</tt> <tt class="py-line"> </tt>
+<a name="JID.__hash__"></a><div id="JID.__hash__-def"><a name="L474"></a><tt class="py-lineno"> 474</tt> <a class="py-toggle" href="#" id="JID.__hash__-toggle" onclick="return toggle('JID.__hash__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.JID-class.html#__hash__">__hash__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JID.__hash__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="JID.__hash__-expanded"><a name="L475"></a><tt class="py-lineno"> 475</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L476"></a><tt class="py-lineno"> 476</tt> <tt class="py-line"><tt class="py-docstring"> Produce hash of the JID, Allows to use JID objects as keys of the</tt> </tt>
+<a name="L477"></a><tt class="py-lineno"> 477</tt> <tt class="py-line"><tt class="py-docstring"> dictionary</tt> </tt>
+<a name="L478"></a><tt class="py-lineno"> 478</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L479"></a><tt class="py-lineno"> 479</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hash</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L480"></a><tt class="py-lineno"> 480</tt> <tt class="py-line"> </tt>
+<a name="BOSHBody"></a><div id="BOSHBody-def"><a name="L481"></a><tt class="py-lineno"> 481</tt> <a class="py-toggle" href="#" id="BOSHBody-toggle" onclick="return toggle('BOSHBody');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.BOSHBody-class.html">BOSHBody</a><tt class="py-op">(</tt><tt class="py-base-class">Node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHBody-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="BOSHBody-expanded"><a name="L482"></a><tt class="py-lineno"> 482</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L483"></a><tt class="py-lineno"> 483</tt> <tt class="py-line"><tt class="py-docstring"> &lt;body&gt; tag that wraps usual XMPP stanzas in XMPP over BOSH</tt> </tt>
+<a name="L484"></a><tt class="py-lineno"> 484</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L485"></a><tt class="py-lineno"> 485</tt> <tt class="py-line"> </tt>
+<a name="BOSHBody.__init__"></a><div id="BOSHBody.__init__-def"><a name="L486"></a><tt class="py-lineno"> 486</tt> <a class="py-toggle" href="#" id="BOSHBody.__init__-toggle" onclick="return toggle('BOSHBody.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.BOSHBody-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BOSHBody.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="BOSHBody.__init__-expanded"><a name="L487"></a><tt class="py-lineno"> 487</tt> <tt class="py-line"> <tt id="link-205" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-205', 'Node', 'link-1');">Node</a></tt><tt class="py-op">.</tt><tt id="link-206" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-206', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">=</tt><tt class="py-string">'body'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-name">payload</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L488"></a><tt class="py-lineno"> 488</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-207" class="py-name" targets="Method nbxmpp.simplexml.Node.setNamespace()=nbxmpp.simplexml.Node-class.html#setNamespace"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-207', 'setNamespace', 'link-207');">setNamespace</a></tt><tt class="py-op">(</tt><tt id="link-208" class="py-name"><a title="nbxmpp.protocol.NS_HTTP_BIND" class="py-name" href="#" onclick="return doclink('link-208', 'NS_HTTP_BIND', 'link-62');">NS_HTTP_BIND</a></tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L489"></a><tt class="py-lineno"> 489</tt> <tt class="py-line"> </tt>
+<a name="L490"></a><tt class="py-lineno"> 490</tt> <tt class="py-line"> </tt>
+<a name="Protocol"></a><div id="Protocol-def"><a name="L491"></a><tt class="py-lineno"> 491</tt> <a class="py-toggle" href="#" id="Protocol-toggle" onclick="return toggle('Protocol');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html">Protocol</a><tt class="py-op">(</tt><tt class="py-base-class">Node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Protocol-expanded"><a name="L492"></a><tt class="py-lineno"> 492</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L493"></a><tt class="py-lineno"> 493</tt> <tt class="py-line"><tt class="py-docstring"> A "stanza" object class. Contains methods that are common for presences, iqs</tt> </tt>
+<a name="L494"></a><tt class="py-lineno"> 494</tt> <tt class="py-line"><tt class="py-docstring"> and messages</tt> </tt>
+<a name="L495"></a><tt class="py-lineno"> 495</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L496"></a><tt class="py-lineno"> 496</tt> <tt class="py-line"> </tt>
+<a name="Protocol.__init__"></a><div id="Protocol.__init__-def"><a name="L497"></a><tt class="py-lineno"> 497</tt> <a class="py-toggle" href="#" id="Protocol.__init__-toggle" onclick="return toggle('Protocol.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">to</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">frm</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L498"></a><tt class="py-lineno"> 498</tt> <tt class="py-line"> <tt class="py-param">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">timestamp</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.__init__-expanded"><a name="L499"></a><tt class="py-lineno"> 499</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L500"></a><tt class="py-lineno"> 500</tt> <tt class="py-line"><tt class="py-docstring"> Constructor, name is the name of the stanza</tt> </tt>
+<a name="L501"></a><tt class="py-lineno"> 501</tt> <tt class="py-line"><tt class="py-docstring"> i.e. 'message' or 'presence'or 'iq'</tt> </tt>
+<a name="L502"></a><tt class="py-lineno"> 502</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L503"></a><tt class="py-lineno"> 503</tt> <tt class="py-line"><tt class="py-docstring"> to is the value of 'to' attribure, 'typ' - 'type' attribute</tt> </tt>
+<a name="L504"></a><tt class="py-lineno"> 504</tt> <tt class="py-line"><tt class="py-docstring"> frn - from attribure, attrs - other attributes mapping,</tt> </tt>
+<a name="L505"></a><tt class="py-lineno"> 505</tt> <tt class="py-line"><tt class="py-docstring"> payload - same meaning as for simplexml payload definition</tt> </tt>
+<a name="L506"></a><tt class="py-lineno"> 506</tt> <tt class="py-line"><tt class="py-docstring"> timestamp - the time value that needs to be stamped over stanza</tt> </tt>
+<a name="L507"></a><tt class="py-lineno"> 507</tt> <tt class="py-line"><tt class="py-docstring"> xmlns - namespace of top stanza node</tt> </tt>
+<a name="L508"></a><tt class="py-lineno"> 508</tt> <tt class="py-line"><tt class="py-docstring"> node - parsed or unparsed stana to be taken as prototype.</tt> </tt>
+<a name="L509"></a><tt class="py-lineno"> 509</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L510"></a><tt class="py-lineno"> 510</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L511"></a><tt class="py-lineno"> 511</tt> <tt class="py-line"> <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L512"></a><tt class="py-lineno"> 512</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">to</tt><tt class="py-op">:</tt> </tt>
+<a name="L513"></a><tt class="py-lineno"> 513</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'to'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">to</tt> </tt>
+<a name="L514"></a><tt class="py-lineno"> 514</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">frm</tt><tt class="py-op">:</tt> </tt>
+<a name="L515"></a><tt class="py-lineno"> 515</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'from'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">frm</tt> </tt>
+<a name="L516"></a><tt class="py-lineno"> 516</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L517"></a><tt class="py-lineno"> 517</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">typ</tt> </tt>
+<a name="L518"></a><tt class="py-lineno"> 518</tt> <tt class="py-line"> <tt id="link-209" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-209', 'Node', 'link-1');">Node</a></tt><tt class="py-op">.</tt><tt id="link-210" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-210', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">=</tt><tt id="link-211" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-211', 'name', 'link-165');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-name">payload</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L519"></a><tt class="py-lineno"> 519</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">node</tt> <tt class="py-keyword">and</tt> <tt class="py-name">xmlns</tt><tt class="py-op">:</tt> </tt>
+<a name="L520"></a><tt class="py-lineno"> 520</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-212', 'setNamespace', 'link-207');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">xmlns</tt><tt class="py-op">)</tt> </tt>
+<a name="L521"></a><tt class="py-lineno"> 521</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-string">'to'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L522"></a><tt class="py-lineno"> 522</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-213" class="py-name" targets="Method nbxmpp.protocol.Protocol.setTo()=nbxmpp.protocol.Protocol-class.html#setTo"><a title="nbxmpp.protocol.Protocol.setTo" class="py-name" href="#" onclick="return doclink('link-213', 'setTo', 'link-213');">setTo</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-string">'to'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L523"></a><tt class="py-lineno"> 523</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-string">'from'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L524"></a><tt class="py-lineno"> 524</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-214" class="py-name" targets="Method nbxmpp.protocol.Protocol.setFrom()=nbxmpp.protocol.Protocol-class.html#setFrom"><a title="nbxmpp.protocol.Protocol.setFrom" class="py-name" href="#" onclick="return doclink('link-214', 'setFrom', 'link-214');">setFrom</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-string">'from'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L525"></a><tt class="py-lineno"> 525</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt> <tt class="py-keyword">and</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
+<a name="L526"></a><tt class="py-lineno"> 526</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt> <tt class="py-op">==</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'id'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L527"></a><tt class="py-lineno"> 527</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'id'</tt><tt class="py-op">]</tt> </tt>
+<a name="L528"></a><tt class="py-lineno"> 528</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L529"></a><tt class="py-lineno"> 529</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">d</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name" targets="Method nbxmpp.simplexml.Node.getTags()=nbxmpp.simplexml.Node-class.html#getTags"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-215', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'delay'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-216" class="py-name"><a title="nbxmpp.protocol.NS_DELAY2" class="py-name" href="#" onclick="return doclink('link-216', 'NS_DELAY2', 'link-43');">NS_DELAY2</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L530"></a><tt class="py-lineno"> 530</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L531"></a><tt class="py-lineno"> 531</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-217" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttr()=nbxmpp.simplexml.Node-class.html#getAttr"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-217', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'stamp'</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-218" class="py-name" targets="Method nbxmpp.protocol.Protocol.getTimestamp2()=nbxmpp.protocol.Protocol-class.html#getTimestamp2"><a title="nbxmpp.protocol.Protocol.getTimestamp2" class="py-name" href="#" onclick="return doclink('link-218', 'getTimestamp2', 'link-218');">getTimestamp2</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L532"></a><tt class="py-lineno"> 532</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-219" class="py-name" targets="Method nbxmpp.protocol.Protocol.setTimestamp()=nbxmpp.protocol.Protocol-class.html#setTimestamp"><a title="nbxmpp.protocol.Protocol.setTimestamp" class="py-name" href="#" onclick="return doclink('link-219', 'setTimestamp', 'link-219');">setTimestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-220" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-220', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'stamp'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L533"></a><tt class="py-lineno"> 533</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L534"></a><tt class="py-lineno"> 534</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L535"></a><tt class="py-lineno"> 535</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt><tt class="py-op">:</tt> </tt>
+<a name="L536"></a><tt class="py-lineno"> 536</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-221" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-221', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-222" class="py-name"><a title="nbxmpp.protocol.NS_DELAY" class="py-name" href="#" onclick="return doclink('link-222', 'NS_DELAY', 'link-42');">NS_DELAY</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L537"></a><tt class="py-lineno"> 537</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L538"></a><tt class="py-lineno"> 538</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">x</tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-223', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'stamp'</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name" targets="Method nbxmpp.protocol.Protocol.getTimestamp()=nbxmpp.protocol.Protocol-class.html#getTimestamp"><a title="nbxmpp.protocol.Protocol.getTimestamp" class="py-name" href="#" onclick="return doclink('link-224', 'getTimestamp', 'link-224');">getTimestamp</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L539"></a><tt class="py-lineno"> 539</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-225" class="py-name"><a title="nbxmpp.protocol.Protocol.setTimestamp" class="py-name" href="#" onclick="return doclink('link-225', 'setTimestamp', 'link-219');">setTimestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">.</tt><tt id="link-226" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-226', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'stamp'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L540"></a><tt class="py-lineno"> 540</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L541"></a><tt class="py-lineno"> 541</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L542"></a><tt class="py-lineno"> 542</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">timestamp</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L543"></a><tt class="py-lineno"> 543</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-227" class="py-name"><a title="nbxmpp.protocol.Protocol.setTimestamp" class="py-name" href="#" onclick="return doclink('link-227', 'setTimestamp', 'link-219');">setTimestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">timestamp</tt><tt class="py-op">)</tt> <tt class="py-comment"># To auto-timestamp stanza just pass timestamp=''</tt> </tt>
+</div><a name="L544"></a><tt class="py-lineno"> 544</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getTo"></a><div id="Protocol.getTo-def"><a name="L545"></a><tt class="py-lineno"> 545</tt> <a class="py-toggle" href="#" id="Protocol.getTo-toggle" onclick="return toggle('Protocol.getTo');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getTo">getTo</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getTo-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getTo-expanded"><a name="L546"></a><tt class="py-lineno"> 546</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L547"></a><tt class="py-lineno"> 547</tt> <tt class="py-line"><tt class="py-docstring"> Return value of the 'to' attribute</tt> </tt>
+<a name="L548"></a><tt class="py-lineno"> 548</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L549"></a><tt class="py-lineno"> 549</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L550"></a><tt class="py-lineno"> 550</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-string">'to'</tt><tt class="py-op">]</tt> </tt>
+<a name="L551"></a><tt class="py-lineno"> 551</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L552"></a><tt class="py-lineno"> 552</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L553"></a><tt class="py-lineno"> 553</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getFrom"></a><div id="Protocol.getFrom-def"><a name="L554"></a><tt class="py-lineno"> 554</tt> <a class="py-toggle" href="#" id="Protocol.getFrom-toggle" onclick="return toggle('Protocol.getFrom');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getFrom">getFrom</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getFrom-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getFrom-expanded"><a name="L555"></a><tt class="py-lineno"> 555</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L556"></a><tt class="py-lineno"> 556</tt> <tt class="py-line"><tt class="py-docstring"> Return value of the 'from' attribute</tt> </tt>
+<a name="L557"></a><tt class="py-lineno"> 557</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L558"></a><tt class="py-lineno"> 558</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L559"></a><tt class="py-lineno"> 559</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-string">'from'</tt><tt class="py-op">]</tt> </tt>
+<a name="L560"></a><tt class="py-lineno"> 560</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L561"></a><tt class="py-lineno"> 561</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L562"></a><tt class="py-lineno"> 562</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getTimestamp"></a><div id="Protocol.getTimestamp-def"><a name="L563"></a><tt class="py-lineno"> 563</tt> <a class="py-toggle" href="#" id="Protocol.getTimestamp-toggle" onclick="return toggle('Protocol.getTimestamp');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getTimestamp">getTimestamp</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getTimestamp-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getTimestamp-expanded"><a name="L564"></a><tt class="py-lineno"> 564</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L565"></a><tt class="py-lineno"> 565</tt> <tt class="py-line"><tt class="py-docstring"> Return the timestamp in the 'yyyymmddThhmmss' format</tt> </tt>
+<a name="L566"></a><tt class="py-lineno"> 566</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L567"></a><tt class="py-lineno"> 567</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt><tt class="py-op">:</tt> </tt>
+<a name="L568"></a><tt class="py-lineno"> 568</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt> </tt>
+<a name="L569"></a><tt class="py-lineno"> 569</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">strftime</tt><tt class="py-op">(</tt><tt class="py-string">'%Y%m%dT%H:%M:%S'</tt><tt class="py-op">,</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">gmtime</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L570"></a><tt class="py-lineno"> 570</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getTimestamp2"></a><div id="Protocol.getTimestamp2-def"><a name="L571"></a><tt class="py-lineno"> 571</tt> <a class="py-toggle" href="#" id="Protocol.getTimestamp2-toggle" onclick="return toggle('Protocol.getTimestamp2');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getTimestamp2">getTimestamp2</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getTimestamp2-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getTimestamp2-expanded"><a name="L572"></a><tt class="py-lineno"> 572</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L573"></a><tt class="py-lineno"> 573</tt> <tt class="py-line"><tt class="py-docstring"> Return the timestamp in the 'yyyymmddThhmmss' format</tt> </tt>
+<a name="L574"></a><tt class="py-lineno"> 574</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L575"></a><tt class="py-lineno"> 575</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt><tt class="py-op">:</tt> </tt>
+<a name="L576"></a><tt class="py-lineno"> 576</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt> </tt>
+<a name="L577"></a><tt class="py-lineno"> 577</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">strftime</tt><tt class="py-op">(</tt><tt class="py-string">'%Y-%m-%dT%H:%M:%SZ'</tt><tt class="py-op">,</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">gmtime</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L578"></a><tt class="py-lineno"> 578</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getID"></a><div id="Protocol.getID-def"><a name="L579"></a><tt class="py-lineno"> 579</tt> <a class="py-toggle" href="#" id="Protocol.getID-toggle" onclick="return toggle('Protocol.getID');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getID">getID</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getID-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getID-expanded"><a name="L580"></a><tt class="py-lineno"> 580</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L581"></a><tt class="py-lineno"> 581</tt> <tt class="py-line"><tt class="py-docstring"> Return the value of the 'id' attribute</tt> </tt>
+<a name="L582"></a><tt class="py-lineno"> 582</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L583"></a><tt class="py-lineno"> 583</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-228" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-228', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'id'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L584"></a><tt class="py-lineno"> 584</tt> <tt class="py-line"> </tt>
+<a name="Protocol.setTo"></a><div id="Protocol.setTo-def"><a name="L585"></a><tt class="py-lineno"> 585</tt> <a class="py-toggle" href="#" id="Protocol.setTo-toggle" onclick="return toggle('Protocol.setTo');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#setTo">setTo</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.setTo-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.setTo-expanded"><a name="L586"></a><tt class="py-lineno"> 586</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L587"></a><tt class="py-lineno"> 587</tt> <tt class="py-line"><tt class="py-docstring"> Set the value of the 'to' attribute</tt> </tt>
+<a name="L588"></a><tt class="py-lineno"> 588</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L589"></a><tt class="py-lineno"> 589</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-229" class="py-name" targets="Method nbxmpp.simplexml.Node.setAttr()=nbxmpp.simplexml.Node-class.html#setAttr"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-229', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'to'</tt><tt class="py-op">,</tt> <tt id="link-230" class="py-name"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-230', 'JID', 'link-198');">JID</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L590"></a><tt class="py-lineno"> 590</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getType"></a><div id="Protocol.getType-def"><a name="L591"></a><tt class="py-lineno"> 591</tt> <a class="py-toggle" href="#" id="Protocol.getType-toggle" onclick="return toggle('Protocol.getType');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getType">getType</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getType-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getType-expanded"><a name="L592"></a><tt class="py-lineno"> 592</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L593"></a><tt class="py-lineno"> 593</tt> <tt class="py-line"><tt class="py-docstring"> Return the value of the 'type' attribute</tt> </tt>
+<a name="L594"></a><tt class="py-lineno"> 594</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L595"></a><tt class="py-lineno"> 595</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-231" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-231', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L596"></a><tt class="py-lineno"> 596</tt> <tt class="py-line"> </tt>
+<a name="Protocol.setFrom"></a><div id="Protocol.setFrom-def"><a name="L597"></a><tt class="py-lineno"> 597</tt> <a class="py-toggle" href="#" id="Protocol.setFrom-toggle" onclick="return toggle('Protocol.setFrom');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#setFrom">setFrom</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.setFrom-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.setFrom-expanded"><a name="L598"></a><tt class="py-lineno"> 598</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L599"></a><tt class="py-lineno"> 599</tt> <tt class="py-line"><tt class="py-docstring"> Set the value of the 'from' attribute</tt> </tt>
+<a name="L600"></a><tt class="py-lineno"> 600</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L601"></a><tt class="py-lineno"> 601</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-232" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-232', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'from'</tt><tt class="py-op">,</tt> <tt id="link-233" class="py-name"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-233', 'JID', 'link-198');">JID</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L602"></a><tt class="py-lineno"> 602</tt> <tt class="py-line"> </tt>
+<a name="Protocol.setType"></a><div id="Protocol.setType-def"><a name="L603"></a><tt class="py-lineno"> 603</tt> <a class="py-toggle" href="#" id="Protocol.setType-toggle" onclick="return toggle('Protocol.setType');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#setType">setType</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.setType-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.setType-expanded"><a name="L604"></a><tt class="py-lineno"> 604</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L605"></a><tt class="py-lineno"> 605</tt> <tt class="py-line"><tt class="py-docstring"> Set the value of the 'type' attribute</tt> </tt>
+<a name="L606"></a><tt class="py-lineno"> 606</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L607"></a><tt class="py-lineno"> 607</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-234', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L608"></a><tt class="py-lineno"> 608</tt> <tt class="py-line"> </tt>
+<a name="Protocol.setID"></a><div id="Protocol.setID-def"><a name="L609"></a><tt class="py-lineno"> 609</tt> <a class="py-toggle" href="#" id="Protocol.setID-toggle" onclick="return toggle('Protocol.setID');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#setID">setID</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.setID-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.setID-expanded"><a name="L610"></a><tt class="py-lineno"> 610</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L611"></a><tt class="py-lineno"> 611</tt> <tt class="py-line"><tt class="py-docstring"> Set the value of the 'id' attribute</tt> </tt>
+<a name="L612"></a><tt class="py-lineno"> 612</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L613"></a><tt class="py-lineno"> 613</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-235', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'id'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L614"></a><tt class="py-lineno"> 614</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getError"></a><div id="Protocol.getError-def"><a name="L615"></a><tt class="py-lineno"> 615</tt> <a class="py-toggle" href="#" id="Protocol.getError-toggle" onclick="return toggle('Protocol.getError');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getError">getError</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getError-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getError-expanded"><a name="L616"></a><tt class="py-lineno"> 616</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L617"></a><tt class="py-lineno"> 617</tt> <tt class="py-line"><tt class="py-docstring"> Return the error-condition (if present) or the textual description</tt> </tt>
+<a name="L618"></a><tt class="py-lineno"> 618</tt> <tt class="py-line"><tt class="py-docstring"> of the error (otherwise)</tt> </tt>
+<a name="L619"></a><tt class="py-lineno"> 619</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L620"></a><tt class="py-lineno"> 620</tt> <tt class="py-line"> <tt class="py-name">errtag</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-236" class="py-name" targets="Method nbxmpp.simplexml.Node.getTag()=nbxmpp.simplexml.Node-class.html#getTag"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-236', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
+<a name="L621"></a><tt class="py-lineno"> 621</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">errtag</tt><tt class="py-op">:</tt> </tt>
+<a name="L622"></a><tt class="py-lineno"> 622</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">tag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">errtag</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name" targets="Method nbxmpp.simplexml.Node.getChildren()=nbxmpp.simplexml.Node-class.html#getChildren"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-237', 'getChildren', 'link-237');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L623"></a><tt class="py-lineno"> 623</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-238" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.getName()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getName,Method nbxmpp.simplexml.Node.getName()=nbxmpp.simplexml.Node-class.html#getName"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-238', 'getName', 'link-238');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'text'</tt><tt class="py-op">:</tt> </tt>
+<a name="L624"></a><tt class="py-lineno"> 624</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-239', 'getName', 'link-238');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L625"></a><tt class="py-lineno"> 625</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">errtag</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name" targets="Method nbxmpp.simplexml.Node.getData()=nbxmpp.simplexml.Node-class.html#getData"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-240', 'getData', 'link-240');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L626"></a><tt class="py-lineno"> 626</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getErrorMsg"></a><div id="Protocol.getErrorMsg-def"><a name="L627"></a><tt class="py-lineno"> 627</tt> <a class="py-toggle" href="#" id="Protocol.getErrorMsg-toggle" onclick="return toggle('Protocol.getErrorMsg');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getErrorMsg">getErrorMsg</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getErrorMsg-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getErrorMsg-expanded"><a name="L628"></a><tt class="py-lineno"> 628</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L629"></a><tt class="py-lineno"> 629</tt> <tt class="py-line"><tt class="py-docstring"> Return the textual description of the error (if present)</tt> </tt>
+<a name="L630"></a><tt class="py-lineno"> 630</tt> <tt class="py-line"><tt class="py-docstring"> or the error condition</tt> </tt>
+<a name="L631"></a><tt class="py-lineno"> 631</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L632"></a><tt class="py-lineno"> 632</tt> <tt class="py-line"> <tt class="py-name">errtag</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-241', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
+<a name="L633"></a><tt class="py-lineno"> 633</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">errtag</tt><tt class="py-op">:</tt> </tt>
+<a name="L634"></a><tt class="py-lineno"> 634</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">tag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">errtag</tt><tt class="py-op">.</tt><tt id="link-242" class="py-name"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-242', 'getChildren', 'link-237');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L635"></a><tt class="py-lineno"> 635</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-243" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-243', 'getName', 'link-238');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'text'</tt><tt class="py-op">:</tt> </tt>
+<a name="L636"></a><tt class="py-lineno"> 636</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-244" class="py-name"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-244', 'getData', 'link-240');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L637"></a><tt class="py-lineno"> 637</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-245" class="py-name" targets="Method nbxmpp.protocol.Protocol.getError()=nbxmpp.protocol.Protocol-class.html#getError"><a title="nbxmpp.protocol.Protocol.getError" class="py-name" href="#" onclick="return doclink('link-245', 'getError', 'link-245');">getError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L638"></a><tt class="py-lineno"> 638</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getErrorCode"></a><div id="Protocol.getErrorCode-def"><a name="L639"></a><tt class="py-lineno"> 639</tt> <a class="py-toggle" href="#" id="Protocol.getErrorCode-toggle" onclick="return toggle('Protocol.getErrorCode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getErrorCode">getErrorCode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getErrorCode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getErrorCode-expanded"><a name="L640"></a><tt class="py-lineno"> 640</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L641"></a><tt class="py-lineno"> 641</tt> <tt class="py-line"><tt class="py-docstring"> Return the error code. Obsolete.</tt> </tt>
+<a name="L642"></a><tt class="py-lineno"> 642</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L643"></a><tt class="py-lineno"> 643</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-246" class="py-name" targets="Method nbxmpp.simplexml.Node.getTagAttr()=nbxmpp.simplexml.Node-class.html#getTagAttr"><a title="nbxmpp.simplexml.Node.getTagAttr" class="py-name" href="#" onclick="return doclink('link-246', 'getTagAttr', 'link-246');">getTagAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">,</tt> <tt class="py-string">'code'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L644"></a><tt class="py-lineno"> 644</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getStatusConditions"></a><div id="Protocol.getStatusConditions-def"><a name="L645"></a><tt class="py-lineno"> 645</tt> <a class="py-toggle" href="#" id="Protocol.getStatusConditions-toggle" onclick="return toggle('Protocol.getStatusConditions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getStatusConditions">getStatusConditions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getStatusConditions-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getStatusConditions-expanded"><a name="L646"></a><tt class="py-lineno"> 646</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L647"></a><tt class="py-lineno"> 647</tt> <tt class="py-line"><tt class="py-docstring"> Return the status conditions list as defined in XEP-0306.</tt> </tt>
+<a name="L648"></a><tt class="py-lineno"> 648</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L649"></a><tt class="py-lineno"> 649</tt> <tt class="py-line"> <tt class="py-name">conds</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L650"></a><tt class="py-lineno"> 650</tt> <tt class="py-line"> <tt class="py-name">condtag</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-247" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-247', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'conditions'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-248" class="py-name"><a title="nbxmpp.protocol.NS_CONDITIONS" class="py-name" href="#" onclick="return doclink('link-248', 'NS_CONDITIONS', 'link-34');">NS_CONDITIONS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L651"></a><tt class="py-lineno"> 651</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">condtag</tt><tt class="py-op">:</tt> </tt>
+<a name="L652"></a><tt class="py-lineno"> 652</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">tag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">condtag</tt><tt class="py-op">.</tt><tt id="link-249" class="py-name"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-249', 'getChildren', 'link-237');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L653"></a><tt class="py-lineno"> 653</tt> <tt class="py-line"> <tt class="py-name">conds</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-250" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-250', 'getName', 'link-238');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L654"></a><tt class="py-lineno"> 654</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">conds</tt> </tt>
+</div><a name="L655"></a><tt class="py-lineno"> 655</tt> <tt class="py-line"> </tt>
+<a name="Protocol.setError"></a><div id="Protocol.setError-def"><a name="L656"></a><tt class="py-lineno"> 656</tt> <a class="py-toggle" href="#" id="Protocol.setError-toggle" onclick="return toggle('Protocol.setError');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#setError">setError</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">error</tt><tt class="py-op">,</tt> <tt class="py-param">code</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.setError-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.setError-expanded"><a name="L657"></a><tt class="py-lineno"> 657</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L658"></a><tt class="py-lineno"> 658</tt> <tt class="py-line"><tt class="py-docstring"> Set the error code. Obsolete. Use error-conditions instead</tt> </tt>
+<a name="L659"></a><tt class="py-lineno"> 659</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L660"></a><tt class="py-lineno"> 660</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">code</tt><tt class="py-op">:</tt> </tt>
+<a name="L661"></a><tt class="py-lineno"> 661</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt id="link-251" class="py-name"><a title="nbxmpp.protocol._errorcodes" class="py-name" href="#" onclick="return doclink('link-251', '_errorcodes', 'link-158');">_errorcodes</a></tt><tt class="py-op">.</tt><tt id="link-252" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.keys()=nbxmpp.roster_nb.NonBlockingRoster-class.html#keys"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-252', 'keys', 'link-252');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L662"></a><tt class="py-lineno"> 662</tt> <tt class="py-line"> <tt class="py-name">error</tt> <tt class="py-op">=</tt> <tt id="link-253" class="py-name" targets="Class nbxmpp.protocol.ErrorNode=nbxmpp.protocol.ErrorNode-class.html"><a title="nbxmpp.protocol.ErrorNode" class="py-name" href="#" onclick="return doclink('link-253', 'ErrorNode', 'link-253');">ErrorNode</a></tt><tt class="py-op">(</tt><tt id="link-254" class="py-name"><a title="nbxmpp.protocol._errorcodes" class="py-name" href="#" onclick="return doclink('link-254', '_errorcodes', 'link-158');">_errorcodes</a></tt><tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">=</tt><tt class="py-name">error</tt><tt class="py-op">)</tt> </tt>
+<a name="L663"></a><tt class="py-lineno"> 663</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L664"></a><tt class="py-lineno"> 664</tt> <tt class="py-line"> <tt class="py-name">error</tt> <tt class="py-op">=</tt> <tt id="link-255" class="py-name"><a title="nbxmpp.protocol.ErrorNode" class="py-name" href="#" onclick="return doclink('link-255', 'ErrorNode', 'link-253');">ErrorNode</a></tt><tt class="py-op">(</tt><tt id="link-256" class="py-name" targets="Variable nbxmpp.ERR_UNDEFINED_CONDITION=nbxmpp-module.html#ERR_UNDEFINED_CONDITION,Variable nbxmpp.protocol.ERR_UNDEFINED_CONDITION=nbxmpp.protocol-module.html#ERR_UNDEFINED_CONDITION"><a title="nbxmpp.ERR_UNDEFINED_CONDITION
+nbxmpp.protocol.ERR_UNDEFINED_CONDITION" class="py-name" href="#" onclick="return doclink('link-256', 'ERR_UNDEFINED_CONDITION', 'link-256');">ERR_UNDEFINED_CONDITION</a></tt><tt class="py-op">,</tt> <tt class="py-name">code</tt><tt class="py-op">=</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> </tt>
+<a name="L665"></a><tt class="py-lineno"> 665</tt> <tt class="py-line"> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-string">'cancel'</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">=</tt><tt class="py-name">error</tt><tt class="py-op">)</tt> </tt>
+<a name="L666"></a><tt class="py-lineno"> 666</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">error</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L667"></a><tt class="py-lineno"> 667</tt> <tt class="py-line"> <tt class="py-name">error</tt><tt class="py-op">=</tt><tt id="link-257" class="py-name"><a title="nbxmpp.protocol.ErrorNode" class="py-name" href="#" onclick="return doclink('link-257', 'ErrorNode', 'link-253');">ErrorNode</a></tt><tt class="py-op">(</tt><tt class="py-name">error</tt><tt class="py-op">)</tt> </tt>
+<a name="L668"></a><tt class="py-lineno"> 668</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-258" class="py-name" targets="Method nbxmpp.protocol.DataField.setType()=nbxmpp.protocol.DataField-class.html#setType,Method nbxmpp.protocol.DataForm.setType()=nbxmpp.protocol.DataForm-class.html#setType,Method nbxmpp.protocol.Protocol.setType()=nbxmpp.protocol.Protocol-class.html#setType"><a title="nbxmpp.protocol.DataField.setType
+nbxmpp.protocol.DataForm.setType
+nbxmpp.protocol.Protocol.setType" class="py-name" href="#" onclick="return doclink('link-258', 'setType', 'link-258');">setType</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
+<a name="L669"></a><tt class="py-lineno"> 669</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-259" class="py-name" targets="Method nbxmpp.simplexml.Node.addChild()=nbxmpp.simplexml.Node-class.html#addChild"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-259', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">error</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L670"></a><tt class="py-lineno"> 670</tt> <tt class="py-line"> </tt>
+<a name="Protocol.setTimestamp"></a><div id="Protocol.setTimestamp-def"><a name="L671"></a><tt class="py-lineno"> 671</tt> <a class="py-toggle" href="#" id="Protocol.setTimestamp-toggle" onclick="return toggle('Protocol.setTimestamp');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#setTimestamp">setTimestamp</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.setTimestamp-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.setTimestamp-expanded"><a name="L672"></a><tt class="py-lineno"> 672</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L673"></a><tt class="py-lineno"> 673</tt> <tt class="py-line"><tt class="py-docstring"> Set the timestamp. timestamp should be the yyyymmddThhmmss string</tt> </tt>
+<a name="L674"></a><tt class="py-lineno"> 674</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L675"></a><tt class="py-lineno"> 675</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">val</tt><tt class="py-op">:</tt> </tt>
+<a name="L676"></a><tt class="py-lineno"> 676</tt> <tt class="py-line"> <tt class="py-name">val</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">strftime</tt><tt class="py-op">(</tt><tt class="py-string">'%Y%m%dT%H:%M:%S'</tt><tt class="py-op">,</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">gmtime</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L677"></a><tt class="py-lineno"> 677</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt><tt class="py-op">=</tt><tt class="py-name">val</tt> </tt>
+<a name="L678"></a><tt class="py-lineno"> 678</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-260" class="py-name" targets="Method nbxmpp.simplexml.Node.setTag()=nbxmpp.simplexml.Node-class.html#setTag"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-260', 'setTag', 'link-260');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'stamp'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">timestamp</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-261" class="py-name"><a title="nbxmpp.protocol.NS_DELAY" class="py-name" href="#" onclick="return doclink('link-261', 'NS_DELAY', 'link-42');">NS_DELAY</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L679"></a><tt class="py-lineno"> 679</tt> <tt class="py-line"> </tt>
+<a name="Protocol.getProperties"></a><div id="Protocol.getProperties-def"><a name="L680"></a><tt class="py-lineno"> 680</tt> <a class="py-toggle" href="#" id="Protocol.getProperties-toggle" onclick="return toggle('Protocol.getProperties');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#getProperties">getProperties</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.getProperties-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.getProperties-expanded"><a name="L681"></a><tt class="py-lineno"> 681</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L682"></a><tt class="py-lineno"> 682</tt> <tt class="py-line"><tt class="py-docstring"> Return the list of namespaces to which belongs the direct childs of element</tt> </tt>
+<a name="L683"></a><tt class="py-lineno"> 683</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L684"></a><tt class="py-lineno"> 684</tt> <tt class="py-line"> <tt class="py-name">props</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L685"></a><tt class="py-lineno"> 685</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-262" class="py-name"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-262', 'getChildren', 'link-237');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L686"></a><tt class="py-lineno"> 686</tt> <tt class="py-line"> <tt class="py-name">prop</tt> <tt class="py-op">=</tt> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-263" class="py-name" targets="Method nbxmpp.simplexml.Node.getNamespace()=nbxmpp.simplexml.Node-class.html#getNamespace"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-263', 'getNamespace', 'link-263');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L687"></a><tt class="py-lineno"> 687</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prop</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">props</tt><tt class="py-op">:</tt> </tt>
+<a name="L688"></a><tt class="py-lineno"> 688</tt> <tt class="py-line"> <tt class="py-name">props</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">prop</tt><tt class="py-op">)</tt> </tt>
+<a name="L689"></a><tt class="py-lineno"> 689</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">props</tt> </tt>
+</div><a name="L690"></a><tt class="py-lineno"> 690</tt> <tt class="py-line"> </tt>
+<a name="Protocol.__setitem__"></a><div id="Protocol.__setitem__-def"><a name="L691"></a><tt class="py-lineno"> 691</tt> <a class="py-toggle" href="#" id="Protocol.__setitem__-toggle" onclick="return toggle('Protocol.__setitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Protocol-class.html#__setitem__">__setitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">item</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Protocol.__setitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Protocol.__setitem__-expanded"><a name="L692"></a><tt class="py-lineno"> 692</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L693"></a><tt class="py-lineno"> 693</tt> <tt class="py-line"><tt class="py-docstring"> Set the item 'item' to the value 'val'</tt> </tt>
+<a name="L694"></a><tt class="py-lineno"> 694</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L695"></a><tt class="py-lineno"> 695</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">item</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-string">'to'</tt><tt class="py-op">,</tt> <tt class="py-string">'from'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L696"></a><tt class="py-lineno"> 696</tt> <tt class="py-line"> <tt class="py-name">val</tt> <tt class="py-op">=</tt> <tt id="link-264" class="py-name"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-264', 'JID', 'link-198');">JID</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+<a name="L697"></a><tt class="py-lineno"> 697</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-265" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-265', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-name">item</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L698"></a><tt class="py-lineno"> 698</tt> <tt class="py-line"> </tt>
+<a name="L699"></a><tt class="py-lineno"> 699</tt> <tt class="py-line"> </tt>
+<a name="Message"></a><div id="Message-def"><a name="L700"></a><tt class="py-lineno"> 700</tt> <a class="py-toggle" href="#" id="Message-toggle" onclick="return toggle('Message');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html">Message</a><tt class="py-op">(</tt><tt class="py-base-class">Protocol</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Message-expanded"><a name="L701"></a><tt class="py-lineno"> 701</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L702"></a><tt class="py-lineno"> 702</tt> <tt class="py-line"><tt class="py-docstring"> XMPP Message stanza - "push" mechanism</tt> </tt>
+<a name="L703"></a><tt class="py-lineno"> 703</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L704"></a><tt class="py-lineno"> 704</tt> <tt class="py-line"> </tt>
+<a name="Message.__init__"></a><div id="Message.__init__-def"><a name="L705"></a><tt class="py-lineno"> 705</tt> <a class="py-toggle" href="#" id="Message.__init__-toggle" onclick="return toggle('Message.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">to</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">xhtml</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">subject</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L706"></a><tt class="py-lineno"> 706</tt> <tt class="py-line"> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">frm</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">timestamp</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt id="link-266" class="py-name"><a title="nbxmpp.protocol.NS_CLIENT" class="py-name" href="#" onclick="return doclink('link-266', 'NS_CLIENT', 'link-33');">NS_CLIENT</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L707"></a><tt class="py-lineno"> 707</tt> <tt class="py-line"> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.__init__-expanded"><a name="L708"></a><tt class="py-lineno"> 708</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L709"></a><tt class="py-lineno"> 709</tt> <tt class="py-line"><tt class="py-docstring"> You can specify recipient, text of message, type of message any</tt> </tt>
+<a name="L710"></a><tt class="py-lineno"> 710</tt> <tt class="py-line"><tt class="py-docstring"> additional attributes, sender of the message, any additional payload</tt> </tt>
+<a name="L711"></a><tt class="py-lineno"> 711</tt> <tt class="py-line"><tt class="py-docstring"> (f.e. jabber:x:delay element) and namespace in one go.</tt> </tt>
+<a name="L712"></a><tt class="py-lineno"> 712</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L713"></a><tt class="py-lineno"> 713</tt> <tt class="py-line"><tt class="py-docstring"> Alternatively you can pass in the other XML object as the 'node'</tt> </tt>
+<a name="L714"></a><tt class="py-lineno"> 714</tt> <tt class="py-line"><tt class="py-docstring"> parameted to replicate it as message</tt> </tt>
+<a name="L715"></a><tt class="py-lineno"> 715</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L716"></a><tt class="py-lineno"> 716</tt> <tt class="py-line"> <tt id="link-267" class="py-name" targets="Class nbxmpp.protocol.Protocol=nbxmpp.protocol.Protocol-class.html"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-267', 'Protocol', 'link-267');">Protocol</a></tt><tt class="py-op">.</tt><tt id="link-268" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-268', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'message'</tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">to</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">frm</tt><tt class="py-op">=</tt><tt class="py-name">frm</tt><tt class="py-op">,</tt> </tt>
+<a name="L717"></a><tt class="py-lineno"> 717</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-name">payload</tt><tt class="py-op">,</tt> <tt class="py-name">timestamp</tt><tt class="py-op">=</tt><tt class="py-name">timestamp</tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L718"></a><tt class="py-lineno"> 718</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">body</tt><tt class="py-op">:</tt> </tt>
+<a name="L719"></a><tt class="py-lineno"> 719</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-269" class="py-name" targets="Method nbxmpp.protocol.Message.setBody()=nbxmpp.protocol.Message-class.html#setBody"><a title="nbxmpp.protocol.Message.setBody" class="py-name" href="#" onclick="return doclink('link-269', 'setBody', 'link-269');">setBody</a></tt><tt class="py-op">(</tt><tt class="py-name">body</tt><tt class="py-op">)</tt> </tt>
+<a name="L720"></a><tt class="py-lineno"> 720</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xhtml</tt><tt class="py-op">:</tt> </tt>
+<a name="L721"></a><tt class="py-lineno"> 721</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-270" class="py-name" targets="Method nbxmpp.protocol.Message.setXHTML()=nbxmpp.protocol.Message-class.html#setXHTML"><a title="nbxmpp.protocol.Message.setXHTML" class="py-name" href="#" onclick="return doclink('link-270', 'setXHTML', 'link-270');">setXHTML</a></tt><tt class="py-op">(</tt><tt class="py-name">xhtml</tt><tt class="py-op">)</tt> </tt>
+<a name="L722"></a><tt class="py-lineno"> 722</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">subject</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L723"></a><tt class="py-lineno"> 723</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-271" class="py-name" targets="Method nbxmpp.protocol.Message.setSubject()=nbxmpp.protocol.Message-class.html#setSubject"><a title="nbxmpp.protocol.Message.setSubject" class="py-name" href="#" onclick="return doclink('link-271', 'setSubject', 'link-271');">setSubject</a></tt><tt class="py-op">(</tt><tt class="py-name">subject</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L724"></a><tt class="py-lineno"> 724</tt> <tt class="py-line"> </tt>
+<a name="Message.getBody"></a><div id="Message.getBody-def"><a name="L725"></a><tt class="py-lineno"> 725</tt> <a class="py-toggle" href="#" id="Message.getBody-toggle" onclick="return toggle('Message.getBody');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#getBody">getBody</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.getBody-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.getBody-expanded"><a name="L726"></a><tt class="py-lineno"> 726</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L727"></a><tt class="py-lineno"> 727</tt> <tt class="py-line"><tt class="py-docstring"> Return text of the message</tt> </tt>
+<a name="L728"></a><tt class="py-lineno"> 728</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L729"></a><tt class="py-lineno"> 729</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-272" class="py-name" targets="Method nbxmpp.simplexml.Node.getTagData()=nbxmpp.simplexml.Node-class.html#getTagData"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-272', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L730"></a><tt class="py-lineno"> 730</tt> <tt class="py-line"> </tt>
+<a name="Message.getXHTML"></a><div id="Message.getXHTML-def"><a name="L731"></a><tt class="py-lineno"> 731</tt> <a class="py-toggle" href="#" id="Message.getXHTML-toggle" onclick="return toggle('Message.getXHTML');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#getXHTML">getXHTML</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">xmllang</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.getXHTML-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.getXHTML-expanded"><a name="L732"></a><tt class="py-lineno"> 732</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L733"></a><tt class="py-lineno"> 733</tt> <tt class="py-line"><tt class="py-docstring"> Return serialized xhtml-im element text of the message</tt> </tt>
+<a name="L734"></a><tt class="py-lineno"> 734</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L735"></a><tt class="py-lineno"> 735</tt> <tt class="py-line"><tt class="py-docstring"> TODO: Returning a DOM could make rendering faster.</tt> </tt>
+<a name="L736"></a><tt class="py-lineno"> 736</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L737"></a><tt class="py-lineno"> 737</tt> <tt class="py-line"> <tt class="py-name">xhtml</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-273" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-273', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">)</tt> </tt>
+<a name="L738"></a><tt class="py-lineno"> 738</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xhtml</tt><tt class="py-op">:</tt> </tt>
+<a name="L739"></a><tt class="py-lineno"> 739</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xmllang</tt><tt class="py-op">:</tt> </tt>
+<a name="L740"></a><tt class="py-lineno"> 740</tt> <tt class="py-line"> <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">xhtml</tt><tt class="py-op">.</tt><tt id="link-274" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-274', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'xml:lang'</tt><tt class="py-op">:</tt> <tt class="py-name">xmllang</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L741"></a><tt class="py-lineno"> 741</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L742"></a><tt class="py-lineno"> 742</tt> <tt class="py-line"> <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">xhtml</tt><tt class="py-op">.</tt><tt id="link-275" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-275', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt> </tt>
+<a name="L743"></a><tt class="py-lineno"> 743</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">body</tt><tt class="py-op">)</tt> </tt>
+<a name="L744"></a><tt class="py-lineno"> 744</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L745"></a><tt class="py-lineno"> 745</tt> <tt class="py-line"> </tt>
+<a name="Message.getSubject"></a><div id="Message.getSubject-def"><a name="L746"></a><tt class="py-lineno"> 746</tt> <a class="py-toggle" href="#" id="Message.getSubject-toggle" onclick="return toggle('Message.getSubject');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#getSubject">getSubject</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.getSubject-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.getSubject-expanded"><a name="L747"></a><tt class="py-lineno"> 747</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L748"></a><tt class="py-lineno"> 748</tt> <tt class="py-line"><tt class="py-docstring"> Return subject of the message</tt> </tt>
+<a name="L749"></a><tt class="py-lineno"> 749</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L750"></a><tt class="py-lineno"> 750</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-276" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-276', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'subject'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L751"></a><tt class="py-lineno"> 751</tt> <tt class="py-line"> </tt>
+<a name="Message.getThread"></a><div id="Message.getThread-def"><a name="L752"></a><tt class="py-lineno"> 752</tt> <a class="py-toggle" href="#" id="Message.getThread-toggle" onclick="return toggle('Message.getThread');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#getThread">getThread</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.getThread-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.getThread-expanded"><a name="L753"></a><tt class="py-lineno"> 753</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L754"></a><tt class="py-lineno"> 754</tt> <tt class="py-line"><tt class="py-docstring"> Return thread of the message</tt> </tt>
+<a name="L755"></a><tt class="py-lineno"> 755</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L756"></a><tt class="py-lineno"> 756</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-277" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-277', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'thread'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L757"></a><tt class="py-lineno"> 757</tt> <tt class="py-line"> </tt>
+<a name="Message.setBody"></a><div id="Message.setBody-def"><a name="L758"></a><tt class="py-lineno"> 758</tt> <a class="py-toggle" href="#" id="Message.setBody-toggle" onclick="return toggle('Message.setBody');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#setBody">setBody</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.setBody-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.setBody-expanded"><a name="L759"></a><tt class="py-lineno"> 759</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L760"></a><tt class="py-lineno"> 760</tt> <tt class="py-line"><tt class="py-docstring"> Set the text of the message"""</tt> </tt>
+<a name="L761"></a><tt class="py-lineno"> 761</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-278" class="py-name" targets="Method nbxmpp.simplexml.Node.setTagData()=nbxmpp.simplexml.Node-class.html#setTagData"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-278', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L762"></a><tt class="py-lineno"> 762</tt> <tt class="py-line"> </tt>
+<a name="Message.setXHTML"></a><div id="Message.setXHTML-def"><a name="L763"></a><tt class="py-lineno"> 763</tt> <a class="py-toggle" href="#" id="Message.setXHTML-toggle" onclick="return toggle('Message.setXHTML');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#setXHTML">setXHTML</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">xmllang</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.setXHTML-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.setXHTML-expanded"><a name="L764"></a><tt class="py-lineno"> 764</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L765"></a><tt class="py-lineno"> 765</tt> <tt class="py-line"><tt class="py-docstring"> Sets the xhtml text of the message (XEP-0071). The parameter is the</tt> </tt>
+<a name="L766"></a><tt class="py-lineno"> 766</tt> <tt class="py-line"><tt class="py-docstring"> "inner html" to the body.</tt> </tt>
+<a name="L767"></a><tt class="py-lineno"> 767</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L768"></a><tt class="py-lineno"> 768</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L769"></a><tt class="py-lineno"> 769</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xmllang</tt><tt class="py-op">:</tt> </tt>
+<a name="L770"></a><tt class="py-lineno"> 770</tt> <tt class="py-line"> <tt class="py-name">dom</tt> <tt class="py-op">=</tt> <tt id="link-279" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-279', 'NodeBuilder', 'link-2');">NodeBuilder</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;body xmlns="%s" xml:lang="%s"&gt;%s&lt;/body&gt;'</tt> \ </tt>
+<a name="L771"></a><tt class="py-lineno"> 771</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-280" class="py-name"><a title="nbxmpp.protocol.NS_XHTML" class="py-name" href="#" onclick="return doclink('link-280', 'NS_XHTML', 'link-140');">NS_XHTML</a></tt><tt class="py-op">,</tt> <tt class="py-name">xmllang</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-281" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.getDom()=nbxmpp.simplexml.NodeBuilder-class.html#getDom"><a title="nbxmpp.simplexml.NodeBuilder.getDom" class="py-name" href="#" onclick="return doclink('link-281', 'getDom', 'link-281');">getDom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L772"></a><tt class="py-lineno"> 772</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L773"></a><tt class="py-lineno"> 773</tt> <tt class="py-line"> <tt class="py-name">dom</tt> <tt class="py-op">=</tt> <tt id="link-282" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-282', 'NodeBuilder', 'link-2');">NodeBuilder</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;body xmlns="%s"&gt;%s&lt;/body&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-283" class="py-name"><a title="nbxmpp.protocol.NS_XHTML" class="py-name" href="#" onclick="return doclink('link-283', 'NS_XHTML', 'link-140');">NS_XHTML</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L774"></a><tt class="py-lineno"> 774</tt> <tt class="py-line"> <tt class="py-name">val</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-284" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.getDom" class="py-name" href="#" onclick="return doclink('link-284', 'getDom', 'link-281');">getDom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L775"></a><tt class="py-lineno"> 775</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-285" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-285', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L776"></a><tt class="py-lineno"> 776</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-286" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-286', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-287" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-287', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">dom</tt><tt class="py-op">)</tt> </tt>
+<a name="L777"></a><tt class="py-lineno"> 777</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L778"></a><tt class="py-lineno"> 778</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-288', 'setTag', 'link-260');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-289" class="py-name"><a title="nbxmpp.protocol.NS_XHTML_IM" class="py-name" href="#" onclick="return doclink('link-289', 'NS_XHTML_IM', 'link-139');">NS_XHTML_IM</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-290" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-290', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">dom</tt><tt class="py-op">)</tt> </tt>
+<a name="L779"></a><tt class="py-lineno"> 779</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L780"></a><tt class="py-lineno"> 780</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">"Error"</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt> </tt>
+</div><a name="L781"></a><tt class="py-lineno"> 781</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: log. we could not set xhtml (parse error, whatever)</tt> </tt>
+<a name="L782"></a><tt class="py-lineno"> 782</tt> <tt class="py-line"> </tt>
+<a name="Message.setSubject"></a><div id="Message.setSubject-def"><a name="L783"></a><tt class="py-lineno"> 783</tt> <a class="py-toggle" href="#" id="Message.setSubject-toggle" onclick="return toggle('Message.setSubject');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#setSubject">setSubject</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.setSubject-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.setSubject-expanded"><a name="L784"></a><tt class="py-lineno"> 784</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L785"></a><tt class="py-lineno"> 785</tt> <tt class="py-line"><tt class="py-docstring"> Set the subject of the message</tt> </tt>
+<a name="L786"></a><tt class="py-lineno"> 786</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L787"></a><tt class="py-lineno"> 787</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-291" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-291', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'subject'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L788"></a><tt class="py-lineno"> 788</tt> <tt class="py-line"> </tt>
+<a name="Message.setThread"></a><div id="Message.setThread-def"><a name="L789"></a><tt class="py-lineno"> 789</tt> <a class="py-toggle" href="#" id="Message.setThread-toggle" onclick="return toggle('Message.setThread');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#setThread">setThread</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.setThread-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.setThread-expanded"><a name="L790"></a><tt class="py-lineno"> 790</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L791"></a><tt class="py-lineno"> 791</tt> <tt class="py-line"><tt class="py-docstring"> Set the thread of the message</tt> </tt>
+<a name="L792"></a><tt class="py-lineno"> 792</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L793"></a><tt class="py-lineno"> 793</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-292" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-292', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'thread'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L794"></a><tt class="py-lineno"> 794</tt> <tt class="py-line"> </tt>
+<a name="Message.buildReply"></a><div id="Message.buildReply-def"><a name="L795"></a><tt class="py-lineno"> 795</tt> <a class="py-toggle" href="#" id="Message.buildReply-toggle" onclick="return toggle('Message.buildReply');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#buildReply">buildReply</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.buildReply-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.buildReply-expanded"><a name="L796"></a><tt class="py-lineno"> 796</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L797"></a><tt class="py-lineno"> 797</tt> <tt class="py-line"><tt class="py-docstring"> Builds and returns another message object with specified text. The to,</tt> </tt>
+<a name="L798"></a><tt class="py-lineno"> 798</tt> <tt class="py-line"><tt class="py-docstring"> from, thread and type properties of new message are pre-set as reply to</tt> </tt>
+<a name="L799"></a><tt class="py-lineno"> 799</tt> <tt class="py-line"><tt class="py-docstring"> this message</tt> </tt>
+<a name="L800"></a><tt class="py-lineno"> 800</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L801"></a><tt class="py-lineno"> 801</tt> <tt class="py-line"> <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt id="link-293" class="py-name" targets="Class nbxmpp.protocol.Message=nbxmpp.protocol.Message-class.html"><a title="nbxmpp.protocol.Message" class="py-name" href="#" onclick="return doclink('link-293', 'Message', 'link-293');">Message</a></tt><tt class="py-op">(</tt><tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-294" class="py-name" targets="Method nbxmpp.protocol.Protocol.getFrom()=nbxmpp.protocol.Protocol-class.html#getFrom"><a title="nbxmpp.protocol.Protocol.getFrom" class="py-name" href="#" onclick="return doclink('link-294', 'getFrom', 'link-294');">getFrom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">frm</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-295" class="py-name" targets="Method nbxmpp.protocol.Protocol.getTo()=nbxmpp.protocol.Protocol-class.html#getTo"><a title="nbxmpp.protocol.Protocol.getTo" class="py-name" href="#" onclick="return doclink('link-295', 'getTo', 'link-295');">getTo</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">=</tt><tt class="py-name">text</tt><tt class="py-op">,</tt> </tt>
+<a name="L802"></a><tt class="py-lineno"> 802</tt> <tt class="py-line"> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-296" class="py-name"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-296', 'getType', 'link-170');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L803"></a><tt class="py-lineno"> 803</tt> <tt class="py-line"> <tt class="py-name">th</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-297" class="py-name" targets="Method nbxmpp.protocol.Message.getThread()=nbxmpp.protocol.Message-class.html#getThread"><a title="nbxmpp.protocol.Message.getThread" class="py-name" href="#" onclick="return doclink('link-297', 'getThread', 'link-297');">getThread</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L804"></a><tt class="py-lineno"> 804</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">th</tt><tt class="py-op">:</tt> </tt>
+<a name="L805"></a><tt class="py-lineno"> 805</tt> <tt class="py-line"> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt id="link-298" class="py-name" targets="Method nbxmpp.protocol.Message.setThread()=nbxmpp.protocol.Message-class.html#setThread"><a title="nbxmpp.protocol.Message.setThread" class="py-name" href="#" onclick="return doclink('link-298', 'setThread', 'link-298');">setThread</a></tt><tt class="py-op">(</tt><tt class="py-name">th</tt><tt class="py-op">)</tt> </tt>
+<a name="L806"></a><tt class="py-lineno"> 806</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">m</tt> </tt>
+</div><a name="L807"></a><tt class="py-lineno"> 807</tt> <tt class="py-line"> </tt>
+<a name="Message.getStatusCode"></a><div id="Message.getStatusCode-def"><a name="L808"></a><tt class="py-lineno"> 808</tt> <a class="py-toggle" href="#" id="Message.getStatusCode-toggle" onclick="return toggle('Message.getStatusCode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Message-class.html#getStatusCode">getStatusCode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Message.getStatusCode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Message.getStatusCode-expanded"><a name="L809"></a><tt class="py-lineno"> 809</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L810"></a><tt class="py-lineno"> 810</tt> <tt class="py-line"><tt class="py-docstring"> Return the status code of the message (for groupchat config change)</tt> </tt>
+<a name="L811"></a><tt class="py-lineno"> 811</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L812"></a><tt class="py-lineno"> 812</tt> <tt class="py-line"> <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L813"></a><tt class="py-lineno"> 813</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">xtag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-299" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-299', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L814"></a><tt class="py-lineno"> 814</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xtag</tt><tt class="py-op">.</tt><tt id="link-300" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-300', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'status'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L815"></a><tt class="py-lineno"> 815</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-301" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-301', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'code'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L816"></a><tt class="py-lineno"> 816</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">attrs</tt> </tt>
+</div></div><a name="L817"></a><tt class="py-lineno"> 817</tt> <tt class="py-line"> </tt>
+<a name="Presence"></a><div id="Presence-def"><a name="L818"></a><tt class="py-lineno"> 818</tt> <a class="py-toggle" href="#" id="Presence-toggle" onclick="return toggle('Presence');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html">Presence</a><tt class="py-op">(</tt><tt class="py-base-class">Protocol</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Presence-expanded"><a name="L819"></a><tt class="py-lineno"> 819</tt> <tt class="py-line"> </tt>
+<a name="Presence.__init__"></a><div id="Presence.__init__-def"><a name="L820"></a><tt class="py-lineno"> 820</tt> <a class="py-toggle" href="#" id="Presence.__init__-toggle" onclick="return toggle('Presence.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">to</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">priority</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">show</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">status</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L821"></a><tt class="py-lineno"> 821</tt> <tt class="py-line"> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">frm</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">timestamp</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt id="link-302" class="py-name"><a title="nbxmpp.protocol.NS_CLIENT" class="py-name" href="#" onclick="return doclink('link-302', 'NS_CLIENT', 'link-33');">NS_CLIENT</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L822"></a><tt class="py-lineno"> 822</tt> <tt class="py-line"> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.__init__-expanded"><a name="L823"></a><tt class="py-lineno"> 823</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L824"></a><tt class="py-lineno"> 824</tt> <tt class="py-line"><tt class="py-docstring"> You can specify recipient, type of message, priority, show and status</tt> </tt>
+<a name="L825"></a><tt class="py-lineno"> 825</tt> <tt class="py-line"><tt class="py-docstring"> values any additional attributes, sender of the presence, timestamp, any</tt> </tt>
+<a name="L826"></a><tt class="py-lineno"> 826</tt> <tt class="py-line"><tt class="py-docstring"> additional payload (f.e. jabber:x:delay element) and namespace in one go.</tt> </tt>
+<a name="L827"></a><tt class="py-lineno"> 827</tt> <tt class="py-line"><tt class="py-docstring"> Alternatively you can pass in the other XML object as the 'node'</tt> </tt>
+<a name="L828"></a><tt class="py-lineno"> 828</tt> <tt class="py-line"><tt class="py-docstring"> parameted to replicate it as presence</tt> </tt>
+<a name="L829"></a><tt class="py-lineno"> 829</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L830"></a><tt class="py-lineno"> 830</tt> <tt class="py-line"> <tt id="link-303" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-303', 'Protocol', 'link-267');">Protocol</a></tt><tt class="py-op">.</tt><tt id="link-304" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-304', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'presence'</tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">to</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">frm</tt><tt class="py-op">=</tt><tt class="py-name">frm</tt><tt class="py-op">,</tt> </tt>
+<a name="L831"></a><tt class="py-lineno"> 831</tt> <tt class="py-line"> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-name">payload</tt><tt class="py-op">,</tt> <tt class="py-name">timestamp</tt><tt class="py-op">=</tt><tt class="py-name">timestamp</tt><tt class="py-op">,</tt> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L832"></a><tt class="py-lineno"> 832</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">priority</tt><tt class="py-op">:</tt> </tt>
+<a name="L833"></a><tt class="py-lineno"> 833</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-305" class="py-name" targets="Method nbxmpp.protocol.Presence.setPriority()=nbxmpp.protocol.Presence-class.html#setPriority"><a title="nbxmpp.protocol.Presence.setPriority" class="py-name" href="#" onclick="return doclink('link-305', 'setPriority', 'link-305');">setPriority</a></tt><tt class="py-op">(</tt><tt class="py-name">priority</tt><tt class="py-op">)</tt> </tt>
+<a name="L834"></a><tt class="py-lineno"> 834</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">show</tt><tt class="py-op">:</tt> </tt>
+<a name="L835"></a><tt class="py-lineno"> 835</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-306" class="py-name" targets="Method nbxmpp.protocol.Presence.setShow()=nbxmpp.protocol.Presence-class.html#setShow"><a title="nbxmpp.protocol.Presence.setShow" class="py-name" href="#" onclick="return doclink('link-306', 'setShow', 'link-306');">setShow</a></tt><tt class="py-op">(</tt><tt class="py-name">show</tt><tt class="py-op">)</tt> </tt>
+<a name="L836"></a><tt class="py-lineno"> 836</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">status</tt><tt class="py-op">:</tt> </tt>
+<a name="L837"></a><tt class="py-lineno"> 837</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-307" class="py-name" targets="Method nbxmpp.protocol.Presence.setStatus()=nbxmpp.protocol.Presence-class.html#setStatus"><a title="nbxmpp.protocol.Presence.setStatus" class="py-name" href="#" onclick="return doclink('link-307', 'setStatus', 'link-307');">setStatus</a></tt><tt class="py-op">(</tt><tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L838"></a><tt class="py-lineno"> 838</tt> <tt class="py-line"> </tt>
+<a name="Presence.getPriority"></a><div id="Presence.getPriority-def"><a name="L839"></a><tt class="py-lineno"> 839</tt> <a class="py-toggle" href="#" id="Presence.getPriority-toggle" onclick="return toggle('Presence.getPriority');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getPriority">getPriority</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getPriority-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getPriority-expanded"><a name="L840"></a><tt class="py-lineno"> 840</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L841"></a><tt class="py-lineno"> 841</tt> <tt class="py-line"><tt class="py-docstring"> Return the priority of the message</tt> </tt>
+<a name="L842"></a><tt class="py-lineno"> 842</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L843"></a><tt class="py-lineno"> 843</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-308" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-308', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'priority'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L844"></a><tt class="py-lineno"> 844</tt> <tt class="py-line"> </tt>
+<a name="Presence.getShow"></a><div id="Presence.getShow-def"><a name="L845"></a><tt class="py-lineno"> 845</tt> <a class="py-toggle" href="#" id="Presence.getShow-toggle" onclick="return toggle('Presence.getShow');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getShow">getShow</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getShow-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getShow-expanded"><a name="L846"></a><tt class="py-lineno"> 846</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L847"></a><tt class="py-lineno"> 847</tt> <tt class="py-line"><tt class="py-docstring"> Return the show value of the message</tt> </tt>
+<a name="L848"></a><tt class="py-lineno"> 848</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L849"></a><tt class="py-lineno"> 849</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-309" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-309', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'show'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L850"></a><tt class="py-lineno"> 850</tt> <tt class="py-line"> </tt>
+<a name="Presence.getStatus"></a><div id="Presence.getStatus-def"><a name="L851"></a><tt class="py-lineno"> 851</tt> <a class="py-toggle" href="#" id="Presence.getStatus-toggle" onclick="return toggle('Presence.getStatus');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getStatus">getStatus</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getStatus-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getStatus-expanded"><a name="L852"></a><tt class="py-lineno"> 852</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L853"></a><tt class="py-lineno"> 853</tt> <tt class="py-line"><tt class="py-docstring"> Return the status string of the message</tt> </tt>
+<a name="L854"></a><tt class="py-lineno"> 854</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L855"></a><tt class="py-lineno"> 855</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-310" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-310', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'status'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L856"></a><tt class="py-lineno"> 856</tt> <tt class="py-line"> </tt>
+<a name="Presence.setPriority"></a><div id="Presence.setPriority-def"><a name="L857"></a><tt class="py-lineno"> 857</tt> <a class="py-toggle" href="#" id="Presence.setPriority-toggle" onclick="return toggle('Presence.setPriority');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#setPriority">setPriority</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.setPriority-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.setPriority-expanded"><a name="L858"></a><tt class="py-lineno"> 858</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L859"></a><tt class="py-lineno"> 859</tt> <tt class="py-line"><tt class="py-docstring"> Set the priority of the message</tt> </tt>
+<a name="L860"></a><tt class="py-lineno"> 860</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L861"></a><tt class="py-lineno"> 861</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-311" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-311', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'priority'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L862"></a><tt class="py-lineno"> 862</tt> <tt class="py-line"> </tt>
+<a name="Presence.setShow"></a><div id="Presence.setShow-def"><a name="L863"></a><tt class="py-lineno"> 863</tt> <a class="py-toggle" href="#" id="Presence.setShow-toggle" onclick="return toggle('Presence.setShow');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#setShow">setShow</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.setShow-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.setShow-expanded"><a name="L864"></a><tt class="py-lineno"> 864</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L865"></a><tt class="py-lineno"> 865</tt> <tt class="py-line"><tt class="py-docstring"> Set the show value of the message</tt> </tt>
+<a name="L866"></a><tt class="py-lineno"> 866</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L867"></a><tt class="py-lineno"> 867</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-312" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-312', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'show'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L868"></a><tt class="py-lineno"> 868</tt> <tt class="py-line"> </tt>
+<a name="Presence.setStatus"></a><div id="Presence.setStatus-def"><a name="L869"></a><tt class="py-lineno"> 869</tt> <a class="py-toggle" href="#" id="Presence.setStatus-toggle" onclick="return toggle('Presence.setStatus');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#setStatus">setStatus</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.setStatus-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.setStatus-expanded"><a name="L870"></a><tt class="py-lineno"> 870</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L871"></a><tt class="py-lineno"> 871</tt> <tt class="py-line"><tt class="py-docstring"> Set the status string of the message</tt> </tt>
+<a name="L872"></a><tt class="py-lineno"> 872</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L873"></a><tt class="py-lineno"> 873</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-313" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-313', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'status'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L874"></a><tt class="py-lineno"> 874</tt> <tt class="py-line"> </tt>
+<a name="Presence._muc_getItemAttr"></a><div id="Presence._muc_getItemAttr-def"><a name="L875"></a><tt class="py-lineno"> 875</tt> <a class="py-toggle" href="#" id="Presence._muc_getItemAttr-toggle" onclick="return toggle('Presence._muc_getItemAttr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#_muc_getItemAttr">_muc_getItemAttr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence._muc_getItemAttr-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence._muc_getItemAttr-expanded"><a name="L876"></a><tt class="py-lineno"> 876</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">xtag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-314" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-314', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L877"></a><tt class="py-lineno"> 877</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xtag</tt><tt class="py-op">.</tt><tt id="link-315" class="py-name"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-315', 'getNamespace', 'link-263');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-316" class="py-name"><a title="nbxmpp.protocol.NS_MUC_USER" class="py-name" href="#" onclick="return doclink('link-316', 'NS_MUC_USER', 'link-82');">NS_MUC_USER</a></tt><tt class="py-op">,</tt> <tt id="link-317" class="py-name"><a title="nbxmpp.protocol.NS_MUC_ADMIN" class="py-name" href="#" onclick="return doclink('link-317', 'NS_MUC_ADMIN', 'link-84');">NS_MUC_ADMIN</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L878"></a><tt class="py-lineno"> 878</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L879"></a><tt class="py-lineno"> 879</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xtag</tt><tt class="py-op">.</tt><tt id="link-318" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-318', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L880"></a><tt class="py-lineno"> 880</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-319" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-319', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L881"></a><tt class="py-lineno"> 881</tt> <tt class="py-line"> </tt>
+<a name="Presence._muc_getSubTagDataAttr"></a><div id="Presence._muc_getSubTagDataAttr-def"><a name="L882"></a><tt class="py-lineno"> 882</tt> <a class="py-toggle" href="#" id="Presence._muc_getSubTagDataAttr-toggle" onclick="return toggle('Presence._muc_getSubTagDataAttr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#_muc_getSubTagDataAttr">_muc_getSubTagDataAttr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence._muc_getSubTagDataAttr-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence._muc_getSubTagDataAttr-expanded"><a name="L883"></a><tt class="py-lineno"> 883</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">xtag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-320" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-320', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L884"></a><tt class="py-lineno"> 884</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">xtag</tt><tt class="py-op">.</tt><tt id="link-321" class="py-name"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-321', 'getNamespace', 'link-263');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-322" class="py-name"><a title="nbxmpp.protocol.NS_MUC_USER" class="py-name" href="#" onclick="return doclink('link-322', 'NS_MUC_USER', 'link-82');">NS_MUC_USER</a></tt><tt class="py-op">,</tt> <tt id="link-323" class="py-name"><a title="nbxmpp.protocol.NS_MUC_ADMIN" class="py-name" href="#" onclick="return doclink('link-323', 'NS_MUC_ADMIN', 'link-84');">NS_MUC_ADMIN</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L885"></a><tt class="py-lineno"> 885</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L886"></a><tt class="py-lineno"> 886</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xtag</tt><tt class="py-op">.</tt><tt id="link-324" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-324', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L887"></a><tt class="py-lineno"> 887</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">cchild</tt> <tt class="py-keyword">in</tt> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-325" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-325', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L888"></a><tt class="py-lineno"> 888</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cchild</tt><tt class="py-op">.</tt><tt id="link-326" class="py-name"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-326', 'getData', 'link-240');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">cchild</tt><tt class="py-op">.</tt><tt id="link-327" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-327', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+<a name="L889"></a><tt class="py-lineno"> 889</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L890"></a><tt class="py-lineno"> 890</tt> <tt class="py-line"> </tt>
+<a name="Presence.getRole"></a><div id="Presence.getRole-def"><a name="L891"></a><tt class="py-lineno"> 891</tt> <a class="py-toggle" href="#" id="Presence.getRole-toggle" onclick="return toggle('Presence.getRole');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getRole">getRole</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getRole-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getRole-expanded"><a name="L892"></a><tt class="py-lineno"> 892</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L893"></a><tt class="py-lineno"> 893</tt> <tt class="py-line"><tt class="py-docstring"> Return the presence role (for groupchat)</tt> </tt>
+<a name="L894"></a><tt class="py-lineno"> 894</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L895"></a><tt class="py-lineno"> 895</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-328" class="py-name" targets="Method nbxmpp.protocol.Presence._muc_getItemAttr()=nbxmpp.protocol.Presence-class.html#_muc_getItemAttr"><a title="nbxmpp.protocol.Presence._muc_getItemAttr" class="py-name" href="#" onclick="return doclink('link-328', '_muc_getItemAttr', 'link-328');">_muc_getItemAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-string">'role'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L896"></a><tt class="py-lineno"> 896</tt> <tt class="py-line"> </tt>
+<a name="Presence.getAffiliation"></a><div id="Presence.getAffiliation-def"><a name="L897"></a><tt class="py-lineno"> 897</tt> <a class="py-toggle" href="#" id="Presence.getAffiliation-toggle" onclick="return toggle('Presence.getAffiliation');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getAffiliation">getAffiliation</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getAffiliation-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getAffiliation-expanded"><a name="L898"></a><tt class="py-lineno"> 898</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L899"></a><tt class="py-lineno"> 899</tt> <tt class="py-line"><tt class="py-docstring"> Return the presence affiliation (for groupchat)</tt> </tt>
+<a name="L900"></a><tt class="py-lineno"> 900</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L901"></a><tt class="py-lineno"> 901</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-329" class="py-name"><a title="nbxmpp.protocol.Presence._muc_getItemAttr" class="py-name" href="#" onclick="return doclink('link-329', '_muc_getItemAttr', 'link-328');">_muc_getItemAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-string">'affiliation'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L902"></a><tt class="py-lineno"> 902</tt> <tt class="py-line"> </tt>
+<a name="Presence.getNewNick"></a><div id="Presence.getNewNick-def"><a name="L903"></a><tt class="py-lineno"> 903</tt> <a class="py-toggle" href="#" id="Presence.getNewNick-toggle" onclick="return toggle('Presence.getNewNick');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getNewNick">getNewNick</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getNewNick-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getNewNick-expanded"><a name="L904"></a><tt class="py-lineno"> 904</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L905"></a><tt class="py-lineno"> 905</tt> <tt class="py-line"><tt class="py-docstring"> Return the status code of the presence (for groupchat)</tt> </tt>
+<a name="L906"></a><tt class="py-lineno"> 906</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L907"></a><tt class="py-lineno"> 907</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-330" class="py-name"><a title="nbxmpp.protocol.Presence._muc_getItemAttr" class="py-name" href="#" onclick="return doclink('link-330', '_muc_getItemAttr', 'link-328');">_muc_getItemAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-string">'nick'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L908"></a><tt class="py-lineno"> 908</tt> <tt class="py-line"> </tt>
+<a name="Presence.getJid"></a><div id="Presence.getJid-def"><a name="L909"></a><tt class="py-lineno"> 909</tt> <a class="py-toggle" href="#" id="Presence.getJid-toggle" onclick="return toggle('Presence.getJid');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getJid">getJid</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getJid-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getJid-expanded"><a name="L910"></a><tt class="py-lineno"> 910</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L911"></a><tt class="py-lineno"> 911</tt> <tt class="py-line"><tt class="py-docstring"> Return the presence jid (for groupchat)</tt> </tt>
+<a name="L912"></a><tt class="py-lineno"> 912</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L913"></a><tt class="py-lineno"> 913</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-331" class="py-name"><a title="nbxmpp.protocol.Presence._muc_getItemAttr" class="py-name" href="#" onclick="return doclink('link-331', '_muc_getItemAttr', 'link-328');">_muc_getItemAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-string">'jid'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L914"></a><tt class="py-lineno"> 914</tt> <tt class="py-line"> </tt>
+<a name="Presence.getReason"></a><div id="Presence.getReason-def"><a name="L915"></a><tt class="py-lineno"> 915</tt> <a class="py-toggle" href="#" id="Presence.getReason-toggle" onclick="return toggle('Presence.getReason');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getReason">getReason</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getReason-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getReason-expanded"><a name="L916"></a><tt class="py-lineno"> 916</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L917"></a><tt class="py-lineno"> 917</tt> <tt class="py-line"><tt class="py-docstring"> Returns the reason of the presence (for groupchat)</tt> </tt>
+<a name="L918"></a><tt class="py-lineno"> 918</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L919"></a><tt class="py-lineno"> 919</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-332" class="py-name" targets="Method nbxmpp.protocol.Presence._muc_getSubTagDataAttr()=nbxmpp.protocol.Presence-class.html#_muc_getSubTagDataAttr"><a title="nbxmpp.protocol.Presence._muc_getSubTagDataAttr" class="py-name" href="#" onclick="return doclink('link-332', '_muc_getSubTagDataAttr', 'link-332');">_muc_getSubTagDataAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'reason'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L920"></a><tt class="py-lineno"> 920</tt> <tt class="py-line"> </tt>
+<a name="Presence.getActor"></a><div id="Presence.getActor-def"><a name="L921"></a><tt class="py-lineno"> 921</tt> <a class="py-toggle" href="#" id="Presence.getActor-toggle" onclick="return toggle('Presence.getActor');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getActor">getActor</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getActor-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getActor-expanded"><a name="L922"></a><tt class="py-lineno"> 922</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L923"></a><tt class="py-lineno"> 923</tt> <tt class="py-line"><tt class="py-docstring"> Return the reason of the presence (for groupchat)</tt> </tt>
+<a name="L924"></a><tt class="py-lineno"> 924</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L925"></a><tt class="py-lineno"> 925</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-333" class="py-name"><a title="nbxmpp.protocol.Presence._muc_getSubTagDataAttr" class="py-name" href="#" onclick="return doclink('link-333', '_muc_getSubTagDataAttr', 'link-332');">_muc_getSubTagDataAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'actor'</tt><tt class="py-op">,</tt> <tt class="py-string">'jid'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L926"></a><tt class="py-lineno"> 926</tt> <tt class="py-line"> </tt>
+<a name="Presence.getStatusCode"></a><div id="Presence.getStatusCode-def"><a name="L927"></a><tt class="py-lineno"> 927</tt> <a class="py-toggle" href="#" id="Presence.getStatusCode-toggle" onclick="return toggle('Presence.getStatusCode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Presence-class.html#getStatusCode">getStatusCode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Presence.getStatusCode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Presence.getStatusCode-expanded"><a name="L928"></a><tt class="py-lineno"> 928</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L929"></a><tt class="py-lineno"> 929</tt> <tt class="py-line"><tt class="py-docstring"> Return the status code of the presence (for groupchat)</tt> </tt>
+<a name="L930"></a><tt class="py-lineno"> 930</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L931"></a><tt class="py-lineno"> 931</tt> <tt class="py-line"> <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L932"></a><tt class="py-lineno"> 932</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">xtag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-334" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-334', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L933"></a><tt class="py-lineno"> 933</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xtag</tt><tt class="py-op">.</tt><tt id="link-335" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-335', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'status'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L934"></a><tt class="py-lineno"> 934</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-336" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-336', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'code'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L935"></a><tt class="py-lineno"> 935</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">attrs</tt> </tt>
+</div></div><a name="L936"></a><tt class="py-lineno"> 936</tt> <tt class="py-line"> </tt>
+<a name="Iq"></a><div id="Iq-def"><a name="L937"></a><tt class="py-lineno"> 937</tt> <a class="py-toggle" href="#" id="Iq-toggle" onclick="return toggle('Iq');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html">Iq</a><tt class="py-op">(</tt><tt class="py-base-class">Protocol</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Iq-expanded"><a name="L938"></a><tt class="py-lineno"> 938</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L939"></a><tt class="py-lineno"> 939</tt> <tt class="py-line"><tt class="py-docstring"> XMPP Iq object - get/set dialog mechanism</tt> </tt>
+<a name="L940"></a><tt class="py-lineno"> 940</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L941"></a><tt class="py-lineno"> 941</tt> <tt class="py-line"> </tt>
+<a name="Iq.__init__"></a><div id="Iq.__init__-def"><a name="L942"></a><tt class="py-lineno"> 942</tt> <a class="py-toggle" href="#" id="Iq.__init__-toggle" onclick="return toggle('Iq.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">queryNS</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">to</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">frm</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L943"></a><tt class="py-lineno"> 943</tt> <tt class="py-line"> <tt class="py-param">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">xmlns</tt><tt class="py-op">=</tt><tt id="link-337" class="py-name"><a title="nbxmpp.protocol.NS_CLIENT" class="py-name" href="#" onclick="return doclink('link-337', 'NS_CLIENT', 'link-33');">NS_CLIENT</a></tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.__init__-expanded"><a name="L944"></a><tt class="py-lineno"> 944</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L945"></a><tt class="py-lineno"> 945</tt> <tt class="py-line"><tt class="py-docstring"> You can specify type, query namespace any additional attributes,</tt> </tt>
+<a name="L946"></a><tt class="py-lineno"> 946</tt> <tt class="py-line"><tt class="py-docstring"> recipient of the iq, sender of the iq, any additional payload (f.e.</tt> </tt>
+<a name="L947"></a><tt class="py-lineno"> 947</tt> <tt class="py-line"><tt class="py-docstring"> jabber:x:data node) and namespace in one go.</tt> </tt>
+<a name="L948"></a><tt class="py-lineno"> 948</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L949"></a><tt class="py-lineno"> 949</tt> <tt class="py-line"><tt class="py-docstring"> Alternatively you can pass in the other XML object as the 'node'</tt> </tt>
+<a name="L950"></a><tt class="py-lineno"> 950</tt> <tt class="py-line"><tt class="py-docstring"> parameted to replicate it as an iq</tt> </tt>
+<a name="L951"></a><tt class="py-lineno"> 951</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L952"></a><tt class="py-lineno"> 952</tt> <tt class="py-line"> <tt id="link-338" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-338', 'Protocol', 'link-267');">Protocol</a></tt><tt class="py-op">.</tt><tt id="link-339" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-339', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'iq'</tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">to</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">frm</tt><tt class="py-op">=</tt><tt class="py-name">frm</tt><tt class="py-op">,</tt> </tt>
+<a name="L953"></a><tt class="py-lineno"> 953</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt class="py-name">xmlns</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L954"></a><tt class="py-lineno"> 954</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">payload</tt><tt class="py-op">:</tt> </tt>
+<a name="L955"></a><tt class="py-lineno"> 955</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-340" class="py-name" targets="Method nbxmpp.protocol.Iq.setQueryPayload()=nbxmpp.protocol.Iq-class.html#setQueryPayload"><a title="nbxmpp.protocol.Iq.setQueryPayload" class="py-name" href="#" onclick="return doclink('link-340', 'setQueryPayload', 'link-340');">setQueryPayload</a></tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+<a name="L956"></a><tt class="py-lineno"> 956</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">queryNS</tt><tt class="py-op">:</tt> </tt>
+<a name="L957"></a><tt class="py-lineno"> 957</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-341" class="py-name" targets="Method nbxmpp.protocol.Iq.setQueryNS()=nbxmpp.protocol.Iq-class.html#setQueryNS"><a title="nbxmpp.protocol.Iq.setQueryNS" class="py-name" href="#" onclick="return doclink('link-341', 'setQueryNS', 'link-341');">setQueryNS</a></tt><tt class="py-op">(</tt><tt class="py-name">queryNS</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L958"></a><tt class="py-lineno"> 958</tt> <tt class="py-line"> </tt>
+<a name="Iq.getQuery"></a><div id="Iq.getQuery-def"><a name="L959"></a><tt class="py-lineno"> 959</tt> <a class="py-toggle" href="#" id="Iq.getQuery-toggle" onclick="return toggle('Iq.getQuery');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#getQuery">getQuery</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.getQuery-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.getQuery-expanded"><a name="L960"></a><tt class="py-lineno"> 960</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L961"></a><tt class="py-lineno"> 961</tt> <tt class="py-line"><tt class="py-docstring"> Return the IQ's child element if it exists, None otherwise.</tt> </tt>
+<a name="L962"></a><tt class="py-lineno"> 962</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L963"></a><tt class="py-lineno"> 963</tt> <tt class="py-line"> <tt class="py-name">children</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-342" class="py-name"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-342', 'getChildren', 'link-237');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L964"></a><tt class="py-lineno"> 964</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">children</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-343" class="py-name"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-343', 'getType', 'link-170');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">and</tt> \ </tt>
+<a name="L965"></a><tt class="py-lineno"> 965</tt> <tt class="py-line"> <tt class="py-name">children</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-344" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-344', 'getName', 'link-238');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'error'</tt><tt class="py-op">:</tt> </tt>
+<a name="L966"></a><tt class="py-lineno"> 966</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">children</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L967"></a><tt class="py-lineno"> 967</tt> <tt class="py-line"> </tt>
+<a name="Iq.getQueryNS"></a><div id="Iq.getQueryNS-def"><a name="L968"></a><tt class="py-lineno"> 968</tt> <a class="py-toggle" href="#" id="Iq.getQueryNS-toggle" onclick="return toggle('Iq.getQueryNS');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#getQueryNS">getQueryNS</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.getQueryNS-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.getQueryNS-expanded"><a name="L969"></a><tt class="py-lineno"> 969</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L970"></a><tt class="py-lineno"> 970</tt> <tt class="py-line"><tt class="py-docstring"> Return the namespace of the 'query' child element</tt> </tt>
+<a name="L971"></a><tt class="py-lineno"> 971</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L972"></a><tt class="py-lineno"> 972</tt> <tt class="py-line"> <tt class="py-name">tag</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-345" class="py-name" targets="Method nbxmpp.protocol.Iq.getQuery()=nbxmpp.protocol.Iq-class.html#getQuery"><a title="nbxmpp.protocol.Iq.getQuery" class="py-name" href="#" onclick="return doclink('link-345', 'getQuery', 'link-345');">getQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L973"></a><tt class="py-lineno"> 973</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L974"></a><tt class="py-lineno"> 974</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-346" class="py-name"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-346', 'getNamespace', 'link-263');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L975"></a><tt class="py-lineno"> 975</tt> <tt class="py-line"> </tt>
+<a name="Iq.getQuerynode"></a><div id="Iq.getQuerynode-def"><a name="L976"></a><tt class="py-lineno"> 976</tt> <a class="py-toggle" href="#" id="Iq.getQuerynode-toggle" onclick="return toggle('Iq.getQuerynode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#getQuerynode">getQuerynode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.getQuerynode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.getQuerynode-expanded"><a name="L977"></a><tt class="py-lineno"> 977</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L978"></a><tt class="py-lineno"> 978</tt> <tt class="py-line"><tt class="py-docstring"> Return the 'node' attribute value of the 'query' child element</tt> </tt>
+<a name="L979"></a><tt class="py-lineno"> 979</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L980"></a><tt class="py-lineno"> 980</tt> <tt class="py-line"> <tt class="py-name">tag</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-347" class="py-name"><a title="nbxmpp.protocol.Iq.getQuery" class="py-name" href="#" onclick="return doclink('link-347', 'getQuery', 'link-345');">getQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L981"></a><tt class="py-lineno"> 981</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L982"></a><tt class="py-lineno"> 982</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-348" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-348', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'node'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L983"></a><tt class="py-lineno"> 983</tt> <tt class="py-line"> </tt>
+<a name="Iq.getQueryPayload"></a><div id="Iq.getQueryPayload-def"><a name="L984"></a><tt class="py-lineno"> 984</tt> <a class="py-toggle" href="#" id="Iq.getQueryPayload-toggle" onclick="return toggle('Iq.getQueryPayload');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#getQueryPayload">getQueryPayload</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.getQueryPayload-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.getQueryPayload-expanded"><a name="L985"></a><tt class="py-lineno"> 985</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L986"></a><tt class="py-lineno"> 986</tt> <tt class="py-line"><tt class="py-docstring"> Return the 'query' child element payload</tt> </tt>
+<a name="L987"></a><tt class="py-lineno"> 987</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L988"></a><tt class="py-lineno"> 988</tt> <tt class="py-line"> <tt class="py-name">tag</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-349" class="py-name"><a title="nbxmpp.protocol.Iq.getQuery" class="py-name" href="#" onclick="return doclink('link-349', 'getQuery', 'link-345');">getQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L989"></a><tt class="py-lineno"> 989</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L990"></a><tt class="py-lineno"> 990</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-350" class="py-name" targets="Method nbxmpp.simplexml.Node.getPayload()=nbxmpp.simplexml.Node-class.html#getPayload"><a title="nbxmpp.simplexml.Node.getPayload" class="py-name" href="#" onclick="return doclink('link-350', 'getPayload', 'link-350');">getPayload</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L991"></a><tt class="py-lineno"> 991</tt> <tt class="py-line"> </tt>
+<a name="Iq.getQueryChildren"></a><div id="Iq.getQueryChildren-def"><a name="L992"></a><tt class="py-lineno"> 992</tt> <a class="py-toggle" href="#" id="Iq.getQueryChildren-toggle" onclick="return toggle('Iq.getQueryChildren');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#getQueryChildren">getQueryChildren</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.getQueryChildren-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.getQueryChildren-expanded"><a name="L993"></a><tt class="py-lineno"> 993</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L994"></a><tt class="py-lineno"> 994</tt> <tt class="py-line"><tt class="py-docstring"> Return the 'query' child element child nodes</tt> </tt>
+<a name="L995"></a><tt class="py-lineno"> 995</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L996"></a><tt class="py-lineno"> 996</tt> <tt class="py-line"> <tt class="py-name">tag</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-351" class="py-name"><a title="nbxmpp.protocol.Iq.getQuery" class="py-name" href="#" onclick="return doclink('link-351', 'getQuery', 'link-345');">getQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L997"></a><tt class="py-lineno"> 997</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L998"></a><tt class="py-lineno"> 998</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-352" class="py-name"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-352', 'getChildren', 'link-237');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L999"></a><tt class="py-lineno"> 999</tt> <tt class="py-line"> </tt>
+<a name="Iq.setQuery"></a><div id="Iq.setQuery-def"><a name="L1000"></a><tt class="py-lineno">1000</tt> <a class="py-toggle" href="#" id="Iq.setQuery-toggle" onclick="return toggle('Iq.setQuery');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#setQuery">setQuery</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.setQuery-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.setQuery-expanded"><a name="L1001"></a><tt class="py-lineno">1001</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1002"></a><tt class="py-lineno">1002</tt> <tt class="py-line"><tt class="py-docstring"> Change the name of the query node, creating it if needed. Keep the</tt> </tt>
+<a name="L1003"></a><tt class="py-lineno">1003</tt> <tt class="py-line"><tt class="py-docstring"> existing name if none is given (use 'query' if it's a creation).</tt> </tt>
+<a name="L1004"></a><tt class="py-lineno">1004</tt> <tt class="py-line"><tt class="py-docstring"> Return the query node.</tt> </tt>
+<a name="L1005"></a><tt class="py-lineno">1005</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1006"></a><tt class="py-lineno">1006</tt> <tt class="py-line"> <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-353" class="py-name"><a title="nbxmpp.protocol.Iq.getQuery" class="py-name" href="#" onclick="return doclink('link-353', 'getQuery', 'link-345');">getQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1007"></a><tt class="py-lineno">1007</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">query</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1008"></a><tt class="py-lineno">1008</tt> <tt class="py-line"> <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-354" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-354', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1009"></a><tt class="py-lineno">1009</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-355" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-355', 'name', 'link-165');">name</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1010"></a><tt class="py-lineno">1010</tt> <tt class="py-line"> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-356" class="py-name" targets="Method nbxmpp.simplexml.Node.setName()=nbxmpp.simplexml.Node-class.html#setName"><a title="nbxmpp.simplexml.Node.setName" class="py-name" href="#" onclick="return doclink('link-356', 'setName', 'link-356');">setName</a></tt><tt class="py-op">(</tt><tt id="link-357" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-357', 'name', 'link-165');">name</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1011"></a><tt class="py-lineno">1011</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">query</tt> </tt>
+</div><a name="L1012"></a><tt class="py-lineno">1012</tt> <tt class="py-line"> </tt>
+<a name="Iq.setQueryNS"></a><div id="Iq.setQueryNS-def"><a name="L1013"></a><tt class="py-lineno">1013</tt> <a class="py-toggle" href="#" id="Iq.setQueryNS-toggle" onclick="return toggle('Iq.setQueryNS');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#setQueryNS">setQueryNS</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.setQueryNS-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.setQueryNS-expanded"><a name="L1014"></a><tt class="py-lineno">1014</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1015"></a><tt class="py-lineno">1015</tt> <tt class="py-line"><tt class="py-docstring"> Set the namespace of the 'query' child element</tt> </tt>
+<a name="L1016"></a><tt class="py-lineno">1016</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1017"></a><tt class="py-lineno">1017</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-358" class="py-name" targets="Method nbxmpp.protocol.Iq.setQuery()=nbxmpp.protocol.Iq-class.html#setQuery"><a title="nbxmpp.protocol.Iq.setQuery" class="py-name" href="#" onclick="return doclink('link-358', 'setQuery', 'link-358');">setQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-359" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-359', 'setNamespace', 'link-207');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1018"></a><tt class="py-lineno">1018</tt> <tt class="py-line"> </tt>
+<a name="Iq.setQueryPayload"></a><div id="Iq.setQueryPayload-def"><a name="L1019"></a><tt class="py-lineno">1019</tt> <a class="py-toggle" href="#" id="Iq.setQueryPayload-toggle" onclick="return toggle('Iq.setQueryPayload');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#setQueryPayload">setQueryPayload</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.setQueryPayload-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.setQueryPayload-expanded"><a name="L1020"></a><tt class="py-lineno">1020</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1021"></a><tt class="py-lineno">1021</tt> <tt class="py-line"><tt class="py-docstring"> Set the 'query' child element payload</tt> </tt>
+<a name="L1022"></a><tt class="py-lineno">1022</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1023"></a><tt class="py-lineno">1023</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-360" class="py-name"><a title="nbxmpp.protocol.Iq.setQuery" class="py-name" href="#" onclick="return doclink('link-360', 'setQuery', 'link-358');">setQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-361" class="py-name" targets="Method nbxmpp.simplexml.Node.setPayload()=nbxmpp.simplexml.Node-class.html#setPayload"><a title="nbxmpp.simplexml.Node.setPayload" class="py-name" href="#" onclick="return doclink('link-361', 'setPayload', 'link-361');">setPayload</a></tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1024"></a><tt class="py-lineno">1024</tt> <tt class="py-line"> </tt>
+<a name="Iq.setQuerynode"></a><div id="Iq.setQuerynode-def"><a name="L1025"></a><tt class="py-lineno">1025</tt> <a class="py-toggle" href="#" id="Iq.setQuerynode-toggle" onclick="return toggle('Iq.setQuerynode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#setQuerynode">setQuerynode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.setQuerynode-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.setQuerynode-expanded"><a name="L1026"></a><tt class="py-lineno">1026</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1027"></a><tt class="py-lineno">1027</tt> <tt class="py-line"><tt class="py-docstring"> Set the 'node' attribute value of the 'query' child element</tt> </tt>
+<a name="L1028"></a><tt class="py-lineno">1028</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1029"></a><tt class="py-lineno">1029</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-362" class="py-name"><a title="nbxmpp.protocol.Iq.setQuery" class="py-name" href="#" onclick="return doclink('link-362', 'setQuery', 'link-358');">setQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-363" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-363', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'node'</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1030"></a><tt class="py-lineno">1030</tt> <tt class="py-line"> </tt>
+<a name="Iq.buildReply"></a><div id="Iq.buildReply-def"><a name="L1031"></a><tt class="py-lineno">1031</tt> <a class="py-toggle" href="#" id="Iq.buildReply-toggle" onclick="return toggle('Iq.buildReply');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Iq-class.html#buildReply">buildReply</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Iq.buildReply-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Iq.buildReply-expanded"><a name="L1032"></a><tt class="py-lineno">1032</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1033"></a><tt class="py-lineno">1033</tt> <tt class="py-line"><tt class="py-docstring"> Build and return another Iq object of specified type. The to, from and</tt> </tt>
+<a name="L1034"></a><tt class="py-lineno">1034</tt> <tt class="py-line"><tt class="py-docstring"> query child node of new Iq are pre-set as reply to this Iq.</tt> </tt>
+<a name="L1035"></a><tt class="py-lineno">1035</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1036"></a><tt class="py-lineno">1036</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-364" class="py-name" targets="Class nbxmpp.protocol.Iq=nbxmpp.protocol.Iq-class.html"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-364', 'Iq', 'link-364');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-365" class="py-name"><a title="nbxmpp.protocol.Protocol.getFrom" class="py-name" href="#" onclick="return doclink('link-365', 'getFrom', 'link-294');">getFrom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">frm</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-366" class="py-name"><a title="nbxmpp.protocol.Protocol.getTo" class="py-name" href="#" onclick="return doclink('link-366', 'getTo', 'link-295');">getTo</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1037"></a><tt class="py-lineno">1037</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'id'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-367" class="py-name" targets="Method nbxmpp.protocol.Protocol.getID()=nbxmpp.protocol.Protocol-class.html#getID"><a title="nbxmpp.protocol.Protocol.getID" class="py-name" href="#" onclick="return doclink('link-367', 'getID', 'link-367');">getID</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L1038"></a><tt class="py-lineno">1038</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-368" class="py-name"><a title="nbxmpp.protocol.Iq.setQuery" class="py-name" href="#" onclick="return doclink('link-368', 'setQuery', 'link-358');">setQuery</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-369" class="py-name"><a title="nbxmpp.protocol.Iq.getQuery" class="py-name" href="#" onclick="return doclink('link-369', 'getQuery', 'link-345');">getQuery</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-370" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-370', 'getName', 'link-238');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-371" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-371', 'setNamespace', 'link-207');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-372" class="py-name" targets="Method nbxmpp.protocol.Iq.getQueryNS()=nbxmpp.protocol.Iq-class.html#getQueryNS"><a title="nbxmpp.protocol.Iq.getQueryNS" class="py-name" href="#" onclick="return doclink('link-372', 'getQueryNS', 'link-372');">getQueryNS</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1039"></a><tt class="py-lineno">1039</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">iq</tt> </tt>
+</div></div><a name="L1040"></a><tt class="py-lineno">1040</tt> <tt class="py-line"> </tt>
+<a name="Hashes"></a><div id="Hashes-def"><a name="L1041"></a><tt class="py-lineno">1041</tt> <a class="py-toggle" href="#" id="Hashes-toggle" onclick="return toggle('Hashes');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Hashes-class.html">Hashes</a><tt class="py-op">(</tt><tt class="py-base-class">Node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><a name="L1042"></a><tt class="py-lineno">1042</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1043"></a><tt class="py-lineno">1043</tt> <tt class="py-line"><tt class="py-docstring"> Hash elements for various XEPs as defined in XEP-300</tt> </tt>
+<a name="L1044"></a><tt class="py-lineno">1044</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1045"></a><tt class="py-lineno">1045</tt> <tt class="py-line"> </tt>
+<a name="L1046"></a><tt class="py-lineno">1046</tt> <tt class="py-line"> <tt class="py-string">"""</tt> </tt>
+<a name="L1047"></a><tt class="py-lineno">1047</tt> <tt class="py-line"><tt class="py-string"> RECOMENDED HASH USE:</tt> </tt>
+<a name="L1048"></a><tt class="py-lineno">1048</tt> <tt class="py-line"><tt class="py-string"> Algorithm Support</tt> </tt>
+<a name="L1049"></a><tt class="py-lineno">1049</tt> <tt class="py-line"><tt class="py-string"> MD2 MUST NOT</tt> </tt>
+<a name="L1050"></a><tt class="py-lineno">1050</tt> <tt class="py-line"><tt class="py-string"> MD4 MUST NOT</tt> </tt>
+<a name="L1051"></a><tt class="py-lineno">1051</tt> <tt class="py-line"><tt class="py-string"> MD5 MAY</tt> </tt>
+<a name="L1052"></a><tt class="py-lineno">1052</tt> <tt class="py-line"><tt class="py-string"> SHA-1 MUST</tt> </tt>
+<a name="L1053"></a><tt class="py-lineno">1053</tt> <tt class="py-line"><tt class="py-string"> SHA-256 MUST</tt> </tt>
+<a name="L1054"></a><tt class="py-lineno">1054</tt> <tt class="py-line"><tt class="py-string"> SHA-512 SHOULD</tt> </tt>
+<a name="L1055"></a><tt class="py-lineno">1055</tt> <tt class="py-line"><tt class="py-string"> """</tt> </tt>
+<a name="L1056"></a><tt class="py-lineno">1056</tt> <tt class="py-line"> </tt>
+<a name="L1057"></a><tt class="py-lineno">1057</tt> <tt class="py-line"> <tt id="link-373" class="py-name" targets="Variable nbxmpp.protocol.Hashes.supported=nbxmpp.protocol.Hashes-class.html#supported"><a title="nbxmpp.protocol.Hashes.supported" class="py-name" href="#" onclick="return doclink('link-373', 'supported', 'link-373');">supported</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'md5'</tt><tt class="py-op">,</tt> <tt class="py-string">'sha-1'</tt><tt class="py-op">,</tt> <tt class="py-string">'sha-256'</tt><tt class="py-op">,</tt> <tt class="py-string">'sha-512'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1058"></a><tt class="py-lineno">1058</tt> <tt class="py-line"> </tt>
+<a name="Hashes.__init__"></a><div id="Hashes.__init__-def"><a name="L1059"></a><tt class="py-lineno">1059</tt> <a class="py-toggle" href="#" id="Hashes.__init__-toggle" onclick="return toggle('Hashes.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Hashes-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nsp</tt><tt class="py-op">=</tt><tt id="link-374" class="py-name"><a title="nbxmpp.protocol.NS_HASHES" class="py-name" href="#" onclick="return doclink('link-374', 'NS_HASHES', 'link-149');">NS_HASHES</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Hashes.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Hashes.__init__-expanded"><a name="L1060"></a><tt class="py-lineno">1060</tt> <tt class="py-line"> <tt id="link-375" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-375', 'Node', 'link-1');">Node</a></tt><tt class="py-op">.</tt><tt id="link-376" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-376', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L1061"></a><tt class="py-lineno">1061</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-377" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-377', 'setNamespace', 'link-207');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">nsp</tt><tt class="py-op">)</tt> </tt>
+<a name="L1062"></a><tt class="py-lineno">1062</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-378" class="py-name"><a title="nbxmpp.simplexml.Node.setName" class="py-name" href="#" onclick="return doclink('link-378', 'setName', 'link-356');">setName</a></tt><tt class="py-op">(</tt><tt class="py-string">'hashes'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1063"></a><tt class="py-lineno">1063</tt> <tt class="py-line"> </tt>
+<a name="Hashes.calculateHash"></a><div id="Hashes.calculateHash-def"><a name="L1064"></a><tt class="py-lineno">1064</tt> <a class="py-toggle" href="#" id="Hashes.calculateHash-toggle" onclick="return toggle('Hashes.calculateHash');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Hashes-class.html#calculateHash">calculateHash</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">algo</tt><tt class="py-op">,</tt> <tt class="py-param">file_string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Hashes.calculateHash-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Hashes.calculateHash-expanded"><a name="L1065"></a><tt class="py-lineno">1065</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1066"></a><tt class="py-lineno">1066</tt> <tt class="py-line"><tt class="py-docstring"> Calculate the hash and add it. It is preferable doing it here</tt> </tt>
+<a name="L1067"></a><tt class="py-lineno">1067</tt> <tt class="py-line"><tt class="py-docstring"> instead of doing it all over the place in Gajim.</tt> </tt>
+<a name="L1068"></a><tt class="py-lineno">1068</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1069"></a><tt class="py-lineno">1069</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1070"></a><tt class="py-lineno">1070</tt> <tt class="py-line"> <tt class="py-name">hash_</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1071"></a><tt class="py-lineno">1071</tt> <tt class="py-line"> <tt class="py-comment"># file_string can be a string or a file</tt> </tt>
+<a name="L1072"></a><tt class="py-lineno">1072</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">file_string</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> <tt class="py-comment"># if it is a string</tt> </tt>
+<a name="L1073"></a><tt class="py-lineno">1073</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'md5'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1074"></a><tt class="py-lineno">1074</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">md5</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1075"></a><tt class="py-lineno">1075</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'sha-1'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1076"></a><tt class="py-lineno">1076</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha1</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1077"></a><tt class="py-lineno">1077</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'sha-256'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1078"></a><tt class="py-lineno">1078</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha256</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1079"></a><tt class="py-lineno">1079</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'sha-512'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1080"></a><tt class="py-lineno">1080</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha512</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1081"></a><tt class="py-lineno">1081</tt> <tt class="py-line"> </tt>
+<a name="L1082"></a><tt class="py-lineno">1082</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hl</tt><tt class="py-op">:</tt> </tt>
+<a name="L1083"></a><tt class="py-lineno">1083</tt> <tt class="py-line"> <tt class="py-name">hl</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">file_string</tt><tt class="py-op">)</tt> </tt>
+<a name="L1084"></a><tt class="py-lineno">1084</tt> <tt class="py-line"> <tt class="py-name">hash_</tt> <tt class="py-op">=</tt> <tt class="py-name">hl</tt><tt class="py-op">.</tt><tt class="py-name">hexdigest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1085"></a><tt class="py-lineno">1085</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-comment"># if it is a file</tt> </tt>
+<a name="L1086"></a><tt class="py-lineno">1086</tt> <tt class="py-line"> </tt>
+<a name="L1087"></a><tt class="py-lineno">1087</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'md5'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1088"></a><tt class="py-lineno">1088</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">md5</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1089"></a><tt class="py-lineno">1089</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'sha-1'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1090"></a><tt class="py-lineno">1090</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha1</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1091"></a><tt class="py-lineno">1091</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'sha-256'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1092"></a><tt class="py-lineno">1092</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha256</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1093"></a><tt class="py-lineno">1093</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">algo</tt> <tt class="py-op">==</tt> <tt class="py-string">'sha-512'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1094"></a><tt class="py-lineno">1094</tt> <tt class="py-line"> <tt class="py-name">hl</tt> <tt class="py-op">=</tt> <tt class="py-name">hashlib</tt><tt class="py-op">.</tt><tt class="py-name">sha512</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1095"></a><tt class="py-lineno">1095</tt> <tt class="py-line"> </tt>
+<a name="L1096"></a><tt class="py-lineno">1096</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hl</tt><tt class="py-op">:</tt> </tt>
+<a name="L1097"></a><tt class="py-lineno">1097</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">file_string</tt><tt class="py-op">:</tt> </tt>
+<a name="L1098"></a><tt class="py-lineno">1098</tt> <tt class="py-line"> <tt class="py-name">hl</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
+<a name="L1099"></a><tt class="py-lineno">1099</tt> <tt class="py-line"> <tt class="py-name">hash_</tt> <tt class="py-op">=</tt> <tt class="py-name">hl</tt><tt class="py-op">.</tt><tt class="py-name">hexdigest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1100"></a><tt class="py-lineno">1100</tt> <tt class="py-line"> </tt>
+<a name="L1101"></a><tt class="py-lineno">1101</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hash_</tt> </tt>
+</div><a name="L1102"></a><tt class="py-lineno">1102</tt> <tt class="py-line"> </tt>
+<a name="Hashes.addHash"></a><div id="Hashes.addHash-def"><a name="L1103"></a><tt class="py-lineno">1103</tt> <a class="py-toggle" href="#" id="Hashes.addHash-toggle" onclick="return toggle('Hashes.addHash');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Hashes-class.html#addHash">addHash</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">hash_</tt><tt class="py-op">,</tt> <tt class="py-param">algo</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Hashes.addHash-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Hashes.addHash-expanded"><a name="L1104"></a><tt class="py-lineno">1104</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1105"></a><tt class="py-lineno">1105</tt> <tt class="py-line"><tt class="py-docstring"> More than one hash can be added. Although it is permitted, it should</tt> </tt>
+<a name="L1106"></a><tt class="py-lineno">1106</tt> <tt class="py-line"><tt class="py-docstring"> not be done for big files because it could slow down Gajim.</tt> </tt>
+<a name="L1107"></a><tt class="py-lineno">1107</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1108"></a><tt class="py-lineno">1108</tt> <tt class="py-line"> <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1109"></a><tt class="py-lineno">1109</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'algo'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">algo</tt> </tt>
+<a name="L1110"></a><tt class="py-lineno">1110</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-379" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-379', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'hash'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-name">hash_</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1111"></a><tt class="py-lineno">1111</tt> <tt class="py-line"> </tt>
+<a name="Acks"></a><div id="Acks-def"><a name="L1112"></a><tt class="py-lineno">1112</tt> <a class="py-toggle" href="#" id="Acks-toggle" onclick="return toggle('Acks');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Acks-class.html">Acks</a><tt class="py-op">(</tt><tt class="py-base-class">Node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Acks-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Acks-expanded"><a name="L1113"></a><tt class="py-lineno">1113</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1114"></a><tt class="py-lineno">1114</tt> <tt class="py-line"><tt class="py-docstring"> Acknowledgement elements for Stream Management</tt> </tt>
+<a name="L1115"></a><tt class="py-lineno">1115</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="Acks.__init__"></a><div id="Acks.__init__-def"><a name="L1116"></a><tt class="py-lineno">1116</tt> <a class="py-toggle" href="#" id="Acks.__init__-toggle" onclick="return toggle('Acks.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Acks-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">nsp</tt><tt class="py-op">=</tt><tt id="link-380" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-380', 'NS_STREAM_MGMT', 'link-148');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Acks.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Acks.__init__-expanded"><a name="L1117"></a><tt class="py-lineno">1117</tt> <tt class="py-line"> <tt id="link-381" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-381', 'Node', 'link-1');">Node</a></tt><tt class="py-op">.</tt><tt id="link-382" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-382', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L1118"></a><tt class="py-lineno">1118</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-383" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-383', 'setNamespace', 'link-207');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">nsp</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1119"></a><tt class="py-lineno">1119</tt> <tt class="py-line"> </tt>
+<a name="Acks.buildAnswer"></a><div id="Acks.buildAnswer-def"><a name="L1120"></a><tt class="py-lineno">1120</tt> <a class="py-toggle" href="#" id="Acks.buildAnswer-toggle" onclick="return toggle('Acks.buildAnswer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Acks-class.html#buildAnswer">buildAnswer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handled</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Acks.buildAnswer-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Acks.buildAnswer-expanded"><a name="L1121"></a><tt class="py-lineno">1121</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1122"></a><tt class="py-lineno">1122</tt> <tt class="py-line"><tt class="py-docstring"> handled is the number of stanzas handled</tt> </tt>
+<a name="L1123"></a><tt class="py-lineno">1123</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1124"></a><tt class="py-lineno">1124</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-384" class="py-name"><a title="nbxmpp.simplexml.Node.setName" class="py-name" href="#" onclick="return doclink('link-384', 'setName', 'link-356');">setName</a></tt><tt class="py-op">(</tt><tt class="py-string">'a'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1125"></a><tt class="py-lineno">1125</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-385" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-385', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'h'</tt><tt class="py-op">,</tt> <tt class="py-name">handled</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1126"></a><tt class="py-lineno">1126</tt> <tt class="py-line"> </tt>
+<a name="Acks.buildRequest"></a><div id="Acks.buildRequest-def"><a name="L1127"></a><tt class="py-lineno">1127</tt> <a class="py-toggle" href="#" id="Acks.buildRequest-toggle" onclick="return toggle('Acks.buildRequest');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Acks-class.html#buildRequest">buildRequest</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Acks.buildRequest-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Acks.buildRequest-expanded"><a name="L1128"></a><tt class="py-lineno">1128</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-386" class="py-name"><a title="nbxmpp.simplexml.Node.setName" class="py-name" href="#" onclick="return doclink('link-386', 'setName', 'link-356');">setName</a></tt><tt class="py-op">(</tt><tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1129"></a><tt class="py-lineno">1129</tt> <tt class="py-line"> </tt>
+<a name="Acks.buildEnable"></a><div id="Acks.buildEnable-def"><a name="L1130"></a><tt class="py-lineno">1130</tt> <a class="py-toggle" href="#" id="Acks.buildEnable-toggle" onclick="return toggle('Acks.buildEnable');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Acks-class.html#buildEnable">buildEnable</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resume</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Acks.buildEnable-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Acks.buildEnable-expanded"><a name="L1131"></a><tt class="py-lineno">1131</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-387" class="py-name"><a title="nbxmpp.simplexml.Node.setName" class="py-name" href="#" onclick="return doclink('link-387', 'setName', 'link-356');">setName</a></tt><tt class="py-op">(</tt><tt class="py-string">'enable'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1132"></a><tt class="py-lineno">1132</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">resume</tt><tt class="py-op">:</tt> </tt>
+<a name="L1133"></a><tt class="py-lineno">1133</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-388" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-388', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'resume'</tt><tt class="py-op">,</tt> <tt class="py-string">'true'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1134"></a><tt class="py-lineno">1134</tt> <tt class="py-line"> </tt>
+<a name="Acks.buildResume"></a><div id="Acks.buildResume-def"><a name="L1135"></a><tt class="py-lineno">1135</tt> <a class="py-toggle" href="#" id="Acks.buildResume-toggle" onclick="return toggle('Acks.buildResume');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Acks-class.html#buildResume">buildResume</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">handled</tt><tt class="py-op">,</tt> <tt class="py-param">previd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Acks.buildResume-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Acks.buildResume-expanded"><a name="L1136"></a><tt class="py-lineno">1136</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-389" class="py-name"><a title="nbxmpp.simplexml.Node.setName" class="py-name" href="#" onclick="return doclink('link-389', 'setName', 'link-356');">setName</a></tt><tt class="py-op">(</tt><tt class="py-string">'resume'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1137"></a><tt class="py-lineno">1137</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-390" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-390', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'h'</tt><tt class="py-op">,</tt> <tt class="py-name">handled</tt><tt class="py-op">)</tt> </tt>
+<a name="L1138"></a><tt class="py-lineno">1138</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-391" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-391', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'previd'</tt><tt class="py-op">,</tt> <tt class="py-name">previd</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1139"></a><tt class="py-lineno">1139</tt> <tt class="py-line"> </tt>
+<a name="ErrorNode"></a><div id="ErrorNode-def"><a name="L1140"></a><tt class="py-lineno">1140</tt> <a class="py-toggle" href="#" id="ErrorNode-toggle" onclick="return toggle('ErrorNode');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.ErrorNode-class.html">ErrorNode</a><tt class="py-op">(</tt><tt class="py-base-class">Node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ErrorNode-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ErrorNode-expanded"><a name="L1141"></a><tt class="py-lineno">1141</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1142"></a><tt class="py-lineno">1142</tt> <tt class="py-line"><tt class="py-docstring"> XMPP-style error element</tt> </tt>
+<a name="L1143"></a><tt class="py-lineno">1143</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1144"></a><tt class="py-lineno">1144</tt> <tt class="py-line"><tt class="py-docstring"> In the case of stanza error should be attached to XMPP stanza.</tt> </tt>
+<a name="L1145"></a><tt class="py-lineno">1145</tt> <tt class="py-line"><tt class="py-docstring"> In the case of stream-level errors should be used separately.</tt> </tt>
+<a name="L1146"></a><tt class="py-lineno">1146</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1147"></a><tt class="py-lineno">1147</tt> <tt class="py-line"> </tt>
+<a name="ErrorNode.__init__"></a><div id="ErrorNode.__init__-def"><a name="L1148"></a><tt class="py-lineno">1148</tt> <a class="py-toggle" href="#" id="ErrorNode.__init__-toggle" onclick="return toggle('ErrorNode.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.ErrorNode-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">code</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ErrorNode.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ErrorNode.__init__-expanded"><a name="L1149"></a><tt class="py-lineno">1149</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1150"></a><tt class="py-lineno">1150</tt> <tt class="py-line"><tt class="py-docstring"> Mandatory parameter: name - name of error condition.</tt> </tt>
+<a name="L1151"></a><tt class="py-lineno">1151</tt> <tt class="py-line"><tt class="py-docstring"> Optional parameters: code, typ, text.</tt> </tt>
+<a name="L1152"></a><tt class="py-lineno">1152</tt> <tt class="py-line"><tt class="py-docstring"> Used for backwards compartibility with older jabber protocol.</tt> </tt>
+<a name="L1153"></a><tt class="py-lineno">1153</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1154"></a><tt class="py-lineno">1154</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-392" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-392', 'name', 'link-165');">name</a></tt> <tt class="py-keyword">in</tt> <tt id="link-393" class="py-name"><a title="nbxmpp.ERRORS
+nbxmpp.protocol.ERRORS" class="py-name" href="#" onclick="return doclink('link-393', 'ERRORS', 'link-157');">ERRORS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1155"></a><tt class="py-lineno">1155</tt> <tt class="py-line"> <tt class="py-name">cod</tt><tt class="py-op">,</tt> <tt class="py-name">type_</tt><tt class="py-op">,</tt> <tt class="py-name">txt</tt> <tt class="py-op">=</tt> <tt id="link-394" class="py-name"><a title="nbxmpp.ERRORS
+nbxmpp.protocol.ERRORS" class="py-name" href="#" onclick="return doclink('link-394', 'ERRORS', 'link-157');">ERRORS</a></tt><tt class="py-op">[</tt><tt id="link-395" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-395', 'name', 'link-165');">name</a></tt><tt class="py-op">]</tt> </tt>
+<a name="L1156"></a><tt class="py-lineno">1156</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt id="link-396" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-396', 'name', 'link-165');">name</a></tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L1157"></a><tt class="py-lineno">1157</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1158"></a><tt class="py-lineno">1158</tt> <tt class="py-line"> <tt class="py-name">cod</tt><tt class="py-op">,</tt> <tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt class="py-name">type_</tt><tt class="py-op">,</tt> <tt class="py-name">txt</tt> <tt class="py-op">=</tt> <tt class="py-string">'500'</tt><tt class="py-op">,</tt> <tt id="link-397" class="py-name"><a title="nbxmpp.protocol.NS_STANZAS" class="py-name" href="#" onclick="return doclink('link-397', 'NS_STANZAS', 'link-123');">NS_STANZAS</a></tt><tt class="py-op">,</tt> <tt class="py-string">'cancel'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt> </tt>
+<a name="L1159"></a><tt class="py-lineno">1159</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L1160"></a><tt class="py-lineno">1160</tt> <tt class="py-line"> <tt class="py-name">type_</tt> <tt class="py-op">=</tt> <tt class="py-name">typ</tt> </tt>
+<a name="L1161"></a><tt class="py-lineno">1161</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">code</tt><tt class="py-op">:</tt> </tt>
+<a name="L1162"></a><tt class="py-lineno">1162</tt> <tt class="py-line"> <tt class="py-name">cod</tt> <tt class="py-op">=</tt> <tt class="py-name">code</tt> </tt>
+<a name="L1163"></a><tt class="py-lineno">1163</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">text</tt><tt class="py-op">:</tt> </tt>
+<a name="L1164"></a><tt class="py-lineno">1164</tt> <tt class="py-line"> <tt class="py-name">txt</tt> <tt class="py-op">=</tt> <tt class="py-name">text</tt> </tt>
+<a name="L1165"></a><tt class="py-lineno">1165</tt> <tt class="py-line"> <tt id="link-398" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-398', 'Node', 'link-1');">Node</a></tt><tt class="py-op">.</tt><tt id="link-399" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-399', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'error'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt id="link-400" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-400', 'Node', 'link-1');">Node</a></tt><tt class="py-op">(</tt><tt id="link-401" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-401', 'name', 'link-165');">name</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1166"></a><tt class="py-lineno">1166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">type_</tt><tt class="py-op">:</tt> </tt>
+<a name="L1167"></a><tt class="py-lineno">1167</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-402" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-402', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-name">type_</tt><tt class="py-op">)</tt> </tt>
+<a name="L1168"></a><tt class="py-lineno">1168</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">cod</tt><tt class="py-op">:</tt> </tt>
+<a name="L1169"></a><tt class="py-lineno">1169</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-403" class="py-name"><a title="nbxmpp.simplexml.Node.setName" class="py-name" href="#" onclick="return doclink('link-403', 'setName', 'link-356');">setName</a></tt><tt class="py-op">(</tt><tt class="py-string">'stream:error'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1170"></a><tt class="py-lineno">1170</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">txt</tt><tt class="py-op">:</tt> </tt>
+<a name="L1171"></a><tt class="py-lineno">1171</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-404" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-404', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt id="link-405" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-405', 'Node', 'link-1');">Node</a></tt><tt class="py-op">(</tt><tt class="py-name">ns</tt> <tt class="py-op">+</tt> <tt class="py-string">' text'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-name">txt</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1172"></a><tt class="py-lineno">1172</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cod</tt><tt class="py-op">:</tt> </tt>
+<a name="L1173"></a><tt class="py-lineno">1173</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-406" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-406', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'code'</tt><tt class="py-op">,</tt> <tt class="py-name">cod</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1174"></a><tt class="py-lineno">1174</tt> <tt class="py-line"> </tt>
+<a name="Error"></a><div id="Error-def"><a name="L1175"></a><tt class="py-lineno">1175</tt> <a class="py-toggle" href="#" id="Error-toggle" onclick="return toggle('Error');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.Error-class.html">Error</a><tt class="py-op">(</tt><tt class="py-base-class">Protocol</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Error-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Error-expanded"><a name="L1176"></a><tt class="py-lineno">1176</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1177"></a><tt class="py-lineno">1177</tt> <tt class="py-line"><tt class="py-docstring"> Used to quickly transform received stanza into error reply</tt> </tt>
+<a name="L1178"></a><tt class="py-lineno">1178</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1179"></a><tt class="py-lineno">1179</tt> <tt class="py-line"> </tt>
+<a name="Error.__init__"></a><div id="Error.__init__-def"><a name="L1180"></a><tt class="py-lineno">1180</tt> <a class="py-toggle" href="#" id="Error.__init__-toggle" onclick="return toggle('Error.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Error-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">error</tt><tt class="py-op">,</tt> <tt class="py-param">reply</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Error.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Error.__init__-expanded"><a name="L1181"></a><tt class="py-lineno">1181</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1182"></a><tt class="py-lineno">1182</tt> <tt class="py-line"><tt class="py-docstring"> Create error reply basing on the received 'node' stanza and the 'error'</tt> </tt>
+<a name="L1183"></a><tt class="py-lineno">1183</tt> <tt class="py-line"><tt class="py-docstring"> error condition</tt> </tt>
+<a name="L1184"></a><tt class="py-lineno">1184</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1185"></a><tt class="py-lineno">1185</tt> <tt class="py-line"><tt class="py-docstring"> If the 'node' is not the received stanza but locally created ('to' and</tt> </tt>
+<a name="L1186"></a><tt class="py-lineno">1186</tt> <tt class="py-line"><tt class="py-docstring"> 'from' fields needs not swapping) specify the 'reply' argument as false.</tt> </tt>
+<a name="L1187"></a><tt class="py-lineno">1187</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1188"></a><tt class="py-lineno">1188</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">:</tt> </tt>
+<a name="L1189"></a><tt class="py-lineno">1189</tt> <tt class="py-line"> <tt id="link-407" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-407', 'Protocol', 'link-267');">Protocol</a></tt><tt class="py-op">.</tt><tt id="link-408" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-408', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">to</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-409" class="py-name"><a title="nbxmpp.protocol.Protocol.getFrom" class="py-name" href="#" onclick="return doclink('link-409', 'getFrom', 'link-294');">getFrom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">frm</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-410" class="py-name"><a title="nbxmpp.protocol.Protocol.getTo" class="py-name" href="#" onclick="return doclink('link-410', 'getTo', 'link-295');">getTo</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L1190"></a><tt class="py-lineno">1190</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1191"></a><tt class="py-lineno">1191</tt> <tt class="py-line"> <tt id="link-411" class="py-name"><a title="nbxmpp.protocol.Protocol" class="py-name" href="#" onclick="return doclink('link-411', 'Protocol', 'link-267');">Protocol</a></tt><tt class="py-op">.</tt><tt id="link-412" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-412', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L1192"></a><tt class="py-lineno">1192</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-413" class="py-name" targets="Method nbxmpp.protocol.Protocol.setError()=nbxmpp.protocol.Protocol-class.html#setError"><a title="nbxmpp.protocol.Protocol.setError" class="py-name" href="#" onclick="return doclink('link-413', 'setError', 'link-413');">setError</a></tt><tt class="py-op">(</tt><tt class="py-name">error</tt><tt class="py-op">)</tt> </tt>
+<a name="L1193"></a><tt class="py-lineno">1193</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-414" class="py-name"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-414', 'getType', 'link-170');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'error'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1194"></a><tt class="py-lineno">1194</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-415" class="py-name"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-415', '__str__', 'link-197');">__str__</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-416" class="py-name" targets="Method nbxmpp.protocol.Error.__dupstr__()=nbxmpp.protocol.Error-class.html#__dupstr__"><a title="nbxmpp.protocol.Error.__dupstr__" class="py-name" href="#" onclick="return doclink('link-416', '__dupstr__', 'link-416');">__dupstr__</a></tt> </tt>
+</div><a name="L1195"></a><tt class="py-lineno">1195</tt> <tt class="py-line"> </tt>
+<a name="Error.__dupstr__"></a><div id="Error.__dupstr__-def"><a name="L1196"></a><tt class="py-lineno">1196</tt> <a class="py-toggle" href="#" id="Error.__dupstr__-toggle" onclick="return toggle('Error.__dupstr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.Error-class.html#__dupstr__">__dupstr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">dup1</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">dup2</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Error.__dupstr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Error.__dupstr__-expanded"><a name="L1197"></a><tt class="py-lineno">1197</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1198"></a><tt class="py-lineno">1198</tt> <tt class="py-line"><tt class="py-docstring"> Dummy function used as preventor of creating error node in reply to error</tt> </tt>
+<a name="L1199"></a><tt class="py-lineno">1199</tt> <tt class="py-line"><tt class="py-docstring"> node. I.e. you will not be able to serialise "double" error into string.</tt> </tt>
+<a name="L1200"></a><tt class="py-lineno">1200</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1201"></a><tt class="py-lineno">1201</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
+</div></div><a name="L1202"></a><tt class="py-lineno">1202</tt> <tt class="py-line"> </tt>
+<a name="DataField"></a><div id="DataField-def"><a name="L1203"></a><tt class="py-lineno">1203</tt> <a class="py-toggle" href="#" id="DataField-toggle" onclick="return toggle('DataField');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html">DataField</a><tt class="py-op">(</tt><tt class="py-base-class">Node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="DataField-expanded"><a name="L1204"></a><tt class="py-lineno">1204</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1205"></a><tt class="py-lineno">1205</tt> <tt class="py-line"><tt class="py-docstring"> This class is used in the DataForm class to describe the single data item</tt> </tt>
+<a name="L1206"></a><tt class="py-lineno">1206</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1207"></a><tt class="py-lineno">1207</tt> <tt class="py-line"><tt class="py-docstring"> If you are working with jabber:x:data (XEP-0004, XEP-0068, XEP-0122) then</tt> </tt>
+<a name="L1208"></a><tt class="py-lineno">1208</tt> <tt class="py-line"><tt class="py-docstring"> you will need to work with instances of this class.</tt> </tt>
+<a name="L1209"></a><tt class="py-lineno">1209</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1210"></a><tt class="py-lineno">1210</tt> <tt class="py-line"> </tt>
+<a name="DataField.__init__"></a><div id="DataField.__init__-def"><a name="L1211"></a><tt class="py-lineno">1211</tt> <a class="py-toggle" href="#" id="DataField.__init__-toggle" onclick="return toggle('DataField.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">required</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-param">desc</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1212"></a><tt class="py-lineno">1212</tt> <tt class="py-line"> <tt class="py-param">options</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.__init__-expanded"><a name="L1213"></a><tt class="py-lineno">1213</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1214"></a><tt class="py-lineno">1214</tt> <tt class="py-line"><tt class="py-docstring"> Create new data field of specified name,value and type</tt> </tt>
+<a name="L1215"></a><tt class="py-lineno">1215</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1216"></a><tt class="py-lineno">1216</tt> <tt class="py-line"><tt class="py-docstring"> Also 'required','desc' and 'options' fields can be set. Alternatively</tt> </tt>
+<a name="L1217"></a><tt class="py-lineno">1217</tt> <tt class="py-line"><tt class="py-docstring"> other XML object can be passed in as the 'node' parameted</tt> </tt>
+<a name="L1218"></a><tt class="py-lineno">1218</tt> <tt class="py-line"><tt class="py-docstring"> to replicate it as a new datafiled.</tt> </tt>
+<a name="L1219"></a><tt class="py-lineno">1219</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1220"></a><tt class="py-lineno">1220</tt> <tt class="py-line"> <tt id="link-417" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-417', 'Node', 'link-1');">Node</a></tt><tt class="py-op">.</tt><tt id="link-418" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-418', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'field'</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L1221"></a><tt class="py-lineno">1221</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-419" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-419', 'name', 'link-165');">name</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1222"></a><tt class="py-lineno">1222</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-420" class="py-name" targets="Method nbxmpp.protocol.DataField.setVar()=nbxmpp.protocol.DataField-class.html#setVar"><a title="nbxmpp.protocol.DataField.setVar" class="py-name" href="#" onclick="return doclink('link-420', 'setVar', 'link-420');">setVar</a></tt><tt class="py-op">(</tt><tt id="link-421" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-421', 'name', 'link-165');">name</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1223"></a><tt class="py-lineno">1223</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">list</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1224"></a><tt class="py-lineno">1224</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-422" class="py-name" targets="Method nbxmpp.protocol.DataField.setValues()=nbxmpp.protocol.DataField-class.html#setValues"><a title="nbxmpp.protocol.DataField.setValues" class="py-name" href="#" onclick="return doclink('link-422', 'setValues', 'link-422');">setValues</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L1225"></a><tt class="py-lineno">1225</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
+<a name="L1226"></a><tt class="py-lineno">1226</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-423" class="py-name" targets="Method nbxmpp.protocol.DataField.setValue()=nbxmpp.protocol.DataField-class.html#setValue"><a title="nbxmpp.protocol.DataField.setValue" class="py-name" href="#" onclick="return doclink('link-423', 'setValue', 'link-423');">setValue</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L1227"></a><tt class="py-lineno">1227</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L1228"></a><tt class="py-lineno">1228</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-424" class="py-name"><a title="nbxmpp.protocol.DataField.setType
+nbxmpp.protocol.DataForm.setType
+nbxmpp.protocol.Protocol.setType" class="py-name" href="#" onclick="return doclink('link-424', 'setType', 'link-258');">setType</a></tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">)</tt> </tt>
+<a name="L1229"></a><tt class="py-lineno">1229</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-keyword">not</tt> <tt class="py-name">typ</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">node</tt><tt class="py-op">:</tt> </tt>
+<a name="L1230"></a><tt class="py-lineno">1230</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-425" class="py-name"><a title="nbxmpp.protocol.DataField.setType
+nbxmpp.protocol.DataForm.setType
+nbxmpp.protocol.Protocol.setType" class="py-name" href="#" onclick="return doclink('link-425', 'setType', 'link-258');">setType</a></tt><tt class="py-op">(</tt><tt class="py-string">'text-single'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1231"></a><tt class="py-lineno">1231</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">required</tt><tt class="py-op">:</tt> </tt>
+<a name="L1232"></a><tt class="py-lineno">1232</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-426" class="py-name" targets="Method nbxmpp.protocol.DataField.setRequired()=nbxmpp.protocol.DataField-class.html#setRequired"><a title="nbxmpp.protocol.DataField.setRequired" class="py-name" href="#" onclick="return doclink('link-426', 'setRequired', 'link-426');">setRequired</a></tt><tt class="py-op">(</tt><tt class="py-name">required</tt><tt class="py-op">)</tt> </tt>
+<a name="L1233"></a><tt class="py-lineno">1233</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">:</tt> </tt>
+<a name="L1234"></a><tt class="py-lineno">1234</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-427" class="py-name" targets="Method nbxmpp.protocol.DataField.setDesc()=nbxmpp.protocol.DataField-class.html#setDesc"><a title="nbxmpp.protocol.DataField.setDesc" class="py-name" href="#" onclick="return doclink('link-427', 'setDesc', 'link-427');">setDesc</a></tt><tt class="py-op">(</tt><tt class="py-name">desc</tt><tt class="py-op">)</tt> </tt>
+<a name="L1235"></a><tt class="py-lineno">1235</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">options</tt><tt class="py-op">:</tt> </tt>
+<a name="L1236"></a><tt class="py-lineno">1236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-428" class="py-name" targets="Method nbxmpp.protocol.DataField.setOptions()=nbxmpp.protocol.DataField-class.html#setOptions"><a title="nbxmpp.protocol.DataField.setOptions" class="py-name" href="#" onclick="return doclink('link-428', 'setOptions', 'link-428');">setOptions</a></tt><tt class="py-op">(</tt><tt class="py-name">options</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1237"></a><tt class="py-lineno">1237</tt> <tt class="py-line"> </tt>
+<a name="DataField.setRequired"></a><div id="DataField.setRequired-def"><a name="L1238"></a><tt class="py-lineno">1238</tt> <a class="py-toggle" href="#" id="DataField.setRequired-toggle" onclick="return toggle('DataField.setRequired');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#setRequired">setRequired</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">req</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.setRequired-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.setRequired-expanded"><a name="L1239"></a><tt class="py-lineno">1239</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1240"></a><tt class="py-lineno">1240</tt> <tt class="py-line"><tt class="py-docstring"> Change the state of the 'required' flag</tt> </tt>
+<a name="L1241"></a><tt class="py-lineno">1241</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1242"></a><tt class="py-lineno">1242</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">req</tt><tt class="py-op">:</tt> </tt>
+<a name="L1243"></a><tt class="py-lineno">1243</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-429" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-429', 'setTag', 'link-260');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'required'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1244"></a><tt class="py-lineno">1244</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1245"></a><tt class="py-lineno">1245</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1246"></a><tt class="py-lineno">1246</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-430" class="py-name" targets="Method nbxmpp.simplexml.Node.delChild()=nbxmpp.simplexml.Node-class.html#delChild"><a title="nbxmpp.simplexml.Node.delChild" class="py-name" href="#" onclick="return doclink('link-430', 'delChild', 'link-430');">delChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'required'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1247"></a><tt class="py-lineno">1247</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
+<a name="L1248"></a><tt class="py-lineno">1248</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+</div><a name="L1249"></a><tt class="py-lineno">1249</tt> <tt class="py-line"> </tt>
+<a name="DataField.isRequired"></a><div id="DataField.isRequired-def"><a name="L1250"></a><tt class="py-lineno">1250</tt> <a class="py-toggle" href="#" id="DataField.isRequired-toggle" onclick="return toggle('DataField.isRequired');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#isRequired">isRequired</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.isRequired-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.isRequired-expanded"><a name="L1251"></a><tt class="py-lineno">1251</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1252"></a><tt class="py-lineno">1252</tt> <tt class="py-line"><tt class="py-docstring"> Return in this field a required one</tt> </tt>
+<a name="L1253"></a><tt class="py-lineno">1253</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1254"></a><tt class="py-lineno">1254</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-431" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-431', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'required'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1255"></a><tt class="py-lineno">1255</tt> <tt class="py-line"> </tt>
+<a name="DataField.setDesc"></a><div id="DataField.setDesc-def"><a name="L1256"></a><tt class="py-lineno">1256</tt> <a class="py-toggle" href="#" id="DataField.setDesc-toggle" onclick="return toggle('DataField.setDesc');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#setDesc">setDesc</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.setDesc-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.setDesc-expanded"><a name="L1257"></a><tt class="py-lineno">1257</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1258"></a><tt class="py-lineno">1258</tt> <tt class="py-line"><tt class="py-docstring"> Set the description of this field</tt> </tt>
+<a name="L1259"></a><tt class="py-lineno">1259</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1260"></a><tt class="py-lineno">1260</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-432" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-432', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'desc'</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1261"></a><tt class="py-lineno">1261</tt> <tt class="py-line"> </tt>
+<a name="DataField.getDesc"></a><div id="DataField.getDesc-def"><a name="L1262"></a><tt class="py-lineno">1262</tt> <a class="py-toggle" href="#" id="DataField.getDesc-toggle" onclick="return toggle('DataField.getDesc');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#getDesc">getDesc</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.getDesc-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.getDesc-expanded"><a name="L1263"></a><tt class="py-lineno">1263</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1264"></a><tt class="py-lineno">1264</tt> <tt class="py-line"><tt class="py-docstring"> Return the description of this field</tt> </tt>
+<a name="L1265"></a><tt class="py-lineno">1265</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1266"></a><tt class="py-lineno">1266</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-433" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-433', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'desc'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1267"></a><tt class="py-lineno">1267</tt> <tt class="py-line"> </tt>
+<a name="DataField.setValue"></a><div id="DataField.setValue-def"><a name="L1268"></a><tt class="py-lineno">1268</tt> <a class="py-toggle" href="#" id="DataField.setValue-toggle" onclick="return toggle('DataField.setValue');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#setValue">setValue</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.setValue-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.setValue-expanded"><a name="L1269"></a><tt class="py-lineno">1269</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1270"></a><tt class="py-lineno">1270</tt> <tt class="py-line"><tt class="py-docstring"> Set the value of this field</tt> </tt>
+<a name="L1271"></a><tt class="py-lineno">1271</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1272"></a><tt class="py-lineno">1272</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-434" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-434', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1273"></a><tt class="py-lineno">1273</tt> <tt class="py-line"> </tt>
+<a name="DataField.getValue"></a><div id="DataField.getValue-def"><a name="L1274"></a><tt class="py-lineno">1274</tt> <a class="py-toggle" href="#" id="DataField.getValue-toggle" onclick="return toggle('DataField.getValue');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#getValue">getValue</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.getValue-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.getValue-expanded"><a name="L1275"></a><tt class="py-lineno">1275</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-435" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-435', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1276"></a><tt class="py-lineno">1276</tt> <tt class="py-line"> </tt>
+<a name="DataField.setValues"></a><div id="DataField.setValues-def"><a name="L1277"></a><tt class="py-lineno">1277</tt> <a class="py-toggle" href="#" id="DataField.setValues-toggle" onclick="return toggle('DataField.setValues');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#setValues">setValues</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">lst</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.setValues-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.setValues-expanded"><a name="L1278"></a><tt class="py-lineno">1278</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1279"></a><tt class="py-lineno">1279</tt> <tt class="py-line"><tt class="py-docstring"> Set the values of this field as values-list. Replaces all previous filed</tt> </tt>
+<a name="L1280"></a><tt class="py-lineno">1280</tt> <tt class="py-line"><tt class="py-docstring"> values! If you need to just add a value - use addValue method</tt> </tt>
+<a name="L1281"></a><tt class="py-lineno">1281</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1282"></a><tt class="py-lineno">1282</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-436" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-436', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1283"></a><tt class="py-lineno">1283</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-437" class="py-name"><a title="nbxmpp.simplexml.Node.delChild" class="py-name" href="#" onclick="return doclink('link-437', 'delChild', 'link-430');">delChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1284"></a><tt class="py-lineno">1284</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">val</tt> <tt class="py-keyword">in</tt> <tt class="py-name">lst</tt><tt class="py-op">:</tt> </tt>
+<a name="L1285"></a><tt class="py-lineno">1285</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-438" class="py-name" targets="Method nbxmpp.protocol.DataField.addValue()=nbxmpp.protocol.DataField-class.html#addValue"><a title="nbxmpp.protocol.DataField.addValue" class="py-name" href="#" onclick="return doclink('link-438', 'addValue', 'link-438');">addValue</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1286"></a><tt class="py-lineno">1286</tt> <tt class="py-line"> </tt>
+<a name="DataField.addValue"></a><div id="DataField.addValue-def"><a name="L1287"></a><tt class="py-lineno">1287</tt> <a class="py-toggle" href="#" id="DataField.addValue-toggle" onclick="return toggle('DataField.addValue');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#addValue">addValue</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.addValue-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.addValue-expanded"><a name="L1288"></a><tt class="py-lineno">1288</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1289"></a><tt class="py-lineno">1289</tt> <tt class="py-line"><tt class="py-docstring"> Add one more value to this field. Used in 'get' iq's or such</tt> </tt>
+<a name="L1290"></a><tt class="py-lineno">1290</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1291"></a><tt class="py-lineno">1291</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-439" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-439', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-name">val</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1292"></a><tt class="py-lineno">1292</tt> <tt class="py-line"> </tt>
+<a name="DataField.getValues"></a><div id="DataField.getValues-def"><a name="L1293"></a><tt class="py-lineno">1293</tt> <a class="py-toggle" href="#" id="DataField.getValues-toggle" onclick="return toggle('DataField.getValues');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#getValues">getValues</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.getValues-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.getValues-expanded"><a name="L1294"></a><tt class="py-lineno">1294</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1295"></a><tt class="py-lineno">1295</tt> <tt class="py-line"><tt class="py-docstring"> Return the list of values associated with this field</tt> </tt>
+<a name="L1296"></a><tt class="py-lineno">1296</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1297"></a><tt class="py-lineno">1297</tt> <tt class="py-line"> <tt class="py-name">ret</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1298"></a><tt class="py-lineno">1298</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">tag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-440" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-440', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1299"></a><tt class="py-lineno">1299</tt> <tt class="py-line"> <tt class="py-name">ret</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-441" class="py-name"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-441', 'getData', 'link-240');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1300"></a><tt class="py-lineno">1300</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ret</tt> </tt>
+</div><a name="L1301"></a><tt class="py-lineno">1301</tt> <tt class="py-line"> </tt>
+<a name="DataField.getOptions"></a><div id="DataField.getOptions-def"><a name="L1302"></a><tt class="py-lineno">1302</tt> <a class="py-toggle" href="#" id="DataField.getOptions-toggle" onclick="return toggle('DataField.getOptions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#getOptions">getOptions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.getOptions-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.getOptions-expanded"><a name="L1303"></a><tt class="py-lineno">1303</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1304"></a><tt class="py-lineno">1304</tt> <tt class="py-line"><tt class="py-docstring"> Return label-option pairs list associated with this field</tt> </tt>
+<a name="L1305"></a><tt class="py-lineno">1305</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1306"></a><tt class="py-lineno">1306</tt> <tt class="py-line"> <tt class="py-name">ret</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1307"></a><tt class="py-lineno">1307</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">tag</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-442" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-442', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'option'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1308"></a><tt class="py-lineno">1308</tt> <tt class="py-line"> <tt class="py-name">ret</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-443" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-443', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'label'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt id="link-444" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-444', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1309"></a><tt class="py-lineno">1309</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ret</tt> </tt>
+</div><a name="L1310"></a><tt class="py-lineno">1310</tt> <tt class="py-line"> </tt>
+<a name="DataField.setOptions"></a><div id="DataField.setOptions-def"><a name="L1311"></a><tt class="py-lineno">1311</tt> <a class="py-toggle" href="#" id="DataField.setOptions-toggle" onclick="return toggle('DataField.setOptions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#setOptions">setOptions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">lst</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.setOptions-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.setOptions-expanded"><a name="L1312"></a><tt class="py-lineno">1312</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1313"></a><tt class="py-lineno">1313</tt> <tt class="py-line"><tt class="py-docstring"> Set label-option pairs list associated with this field</tt> </tt>
+<a name="L1314"></a><tt class="py-lineno">1314</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1315"></a><tt class="py-lineno">1315</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-445" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-445', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'option'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1316"></a><tt class="py-lineno">1316</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-446" class="py-name"><a title="nbxmpp.simplexml.Node.delChild" class="py-name" href="#" onclick="return doclink('link-446', 'delChild', 'link-430');">delChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'option'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1317"></a><tt class="py-lineno">1317</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">opt</tt> <tt class="py-keyword">in</tt> <tt class="py-name">lst</tt><tt class="py-op">:</tt> </tt>
+<a name="L1318"></a><tt class="py-lineno">1318</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-447" class="py-name" targets="Method nbxmpp.protocol.DataField.addOption()=nbxmpp.protocol.DataField-class.html#addOption"><a title="nbxmpp.protocol.DataField.addOption" class="py-name" href="#" onclick="return doclink('link-447', 'addOption', 'link-447');">addOption</a></tt><tt class="py-op">(</tt><tt class="py-name">opt</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1319"></a><tt class="py-lineno">1319</tt> <tt class="py-line"> </tt>
+<a name="DataField.addOption"></a><div id="DataField.addOption-def"><a name="L1320"></a><tt class="py-lineno">1320</tt> <a class="py-toggle" href="#" id="DataField.addOption-toggle" onclick="return toggle('DataField.addOption');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#addOption">addOption</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">opt</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.addOption-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.addOption-expanded"><a name="L1321"></a><tt class="py-lineno">1321</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1322"></a><tt class="py-lineno">1322</tt> <tt class="py-line"><tt class="py-docstring"> Add one more label-option pair to this field</tt> </tt>
+<a name="L1323"></a><tt class="py-lineno">1323</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1324"></a><tt class="py-lineno">1324</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">opt</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1325"></a><tt class="py-lineno">1325</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-448" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-448', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'option'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-449" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-449', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">,</tt> <tt class="py-name">opt</tt><tt class="py-op">)</tt> </tt>
+<a name="L1326"></a><tt class="py-lineno">1326</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1327"></a><tt class="py-lineno">1327</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-450" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-450', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'option'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'label'</tt><tt class="py-op">:</tt> <tt class="py-name">opt</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-451" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-451', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1328"></a><tt class="py-lineno">1328</tt> <tt class="py-line"> <tt class="py-name">opt</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1329"></a><tt class="py-lineno">1329</tt> <tt class="py-line"> </tt>
+<a name="DataField.getType"></a><div id="DataField.getType-def"><a name="L1330"></a><tt class="py-lineno">1330</tt> <a class="py-toggle" href="#" id="DataField.getType-toggle" onclick="return toggle('DataField.getType');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#getType">getType</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.getType-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.getType-expanded"><a name="L1331"></a><tt class="py-lineno">1331</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1332"></a><tt class="py-lineno">1332</tt> <tt class="py-line"><tt class="py-docstring"> Get type of this field</tt> </tt>
+<a name="L1333"></a><tt class="py-lineno">1333</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1334"></a><tt class="py-lineno">1334</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-452" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-452', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1335"></a><tt class="py-lineno">1335</tt> <tt class="py-line"> </tt>
+<a name="DataField.setType"></a><div id="DataField.setType-def"><a name="L1336"></a><tt class="py-lineno">1336</tt> <a class="py-toggle" href="#" id="DataField.setType-toggle" onclick="return toggle('DataField.setType');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#setType">setType</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.setType-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.setType-expanded"><a name="L1337"></a><tt class="py-lineno">1337</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1338"></a><tt class="py-lineno">1338</tt> <tt class="py-line"><tt class="py-docstring"> Set type of this field</tt> </tt>
+<a name="L1339"></a><tt class="py-lineno">1339</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1340"></a><tt class="py-lineno">1340</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-453" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-453', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1341"></a><tt class="py-lineno">1341</tt> <tt class="py-line"> </tt>
+<a name="DataField.getVar"></a><div id="DataField.getVar-def"><a name="L1342"></a><tt class="py-lineno">1342</tt> <a class="py-toggle" href="#" id="DataField.getVar-toggle" onclick="return toggle('DataField.getVar');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#getVar">getVar</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.getVar-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.getVar-expanded"><a name="L1343"></a><tt class="py-lineno">1343</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1344"></a><tt class="py-lineno">1344</tt> <tt class="py-line"><tt class="py-docstring"> Get 'var' attribute value of this field</tt> </tt>
+<a name="L1345"></a><tt class="py-lineno">1345</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1346"></a><tt class="py-lineno">1346</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-454" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-454', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'var'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1347"></a><tt class="py-lineno">1347</tt> <tt class="py-line"> </tt>
+<a name="DataField.setVar"></a><div id="DataField.setVar-def"><a name="L1348"></a><tt class="py-lineno">1348</tt> <a class="py-toggle" href="#" id="DataField.setVar-toggle" onclick="return toggle('DataField.setVar');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataField-class.html#setVar">setVar</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataField.setVar-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataField.setVar-expanded"><a name="L1349"></a><tt class="py-lineno">1349</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1350"></a><tt class="py-lineno">1350</tt> <tt class="py-line"><tt class="py-docstring"> Set 'var' attribute value of this field</tt> </tt>
+<a name="L1351"></a><tt class="py-lineno">1351</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1352"></a><tt class="py-lineno">1352</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-455" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-455', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'var'</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1353"></a><tt class="py-lineno">1353</tt> <tt class="py-line"> </tt>
+<a name="DataForm"></a><div id="DataForm-def"><a name="L1354"></a><tt class="py-lineno">1354</tt> <a class="py-toggle" href="#" id="DataForm-toggle" onclick="return toggle('DataForm');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html">DataForm</a><tt class="py-op">(</tt><tt class="py-base-class">Node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="DataForm-expanded"><a name="L1355"></a><tt class="py-lineno">1355</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1356"></a><tt class="py-lineno">1356</tt> <tt class="py-line"><tt class="py-docstring"> Used for manipulating dataforms in XMPP</tt> </tt>
+<a name="L1357"></a><tt class="py-lineno">1357</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1358"></a><tt class="py-lineno">1358</tt> <tt class="py-line"><tt class="py-docstring"> Relevant XEPs: 0004, 0068, 0122. Can be used in disco, pub-sub and many</tt> </tt>
+<a name="L1359"></a><tt class="py-lineno">1359</tt> <tt class="py-line"><tt class="py-docstring"> other applications.</tt> </tt>
+<a name="L1360"></a><tt class="py-lineno">1360</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="DataForm.__init__"></a><div id="DataForm.__init__-def"><a name="L1361"></a><tt class="py-lineno">1361</tt> <a class="py-toggle" href="#" id="DataForm.__init__-toggle" onclick="return toggle('DataForm.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">title</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.__init__-expanded"><a name="L1362"></a><tt class="py-lineno">1362</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1363"></a><tt class="py-lineno">1363</tt> <tt class="py-line"><tt class="py-docstring"> Create new dataform of type 'typ'. 'data' is the list of DataField</tt> </tt>
+<a name="L1364"></a><tt class="py-lineno">1364</tt> <tt class="py-line"><tt class="py-docstring"> instances that this dataform contains, 'title' - the title string. You</tt> </tt>
+<a name="L1365"></a><tt class="py-lineno">1365</tt> <tt class="py-line"><tt class="py-docstring"> can specify the 'node' argument as the other node to be used as base for</tt> </tt>
+<a name="L1366"></a><tt class="py-lineno">1366</tt> <tt class="py-line"><tt class="py-docstring"> constructing this dataform</tt> </tt>
+<a name="L1367"></a><tt class="py-lineno">1367</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1368"></a><tt class="py-lineno">1368</tt> <tt class="py-line"><tt class="py-docstring"> title and instructions is optional and SHOULD NOT contain newlines.</tt> </tt>
+<a name="L1369"></a><tt class="py-lineno">1369</tt> <tt class="py-line"><tt class="py-docstring"> Several instructions MAY be present.</tt> </tt>
+<a name="L1370"></a><tt class="py-lineno">1370</tt> <tt class="py-line"><tt class="py-docstring"> 'typ' can be one of ('form' | 'submit' | 'cancel' | 'result' )</tt> </tt>
+<a name="L1371"></a><tt class="py-lineno">1371</tt> <tt class="py-line"><tt class="py-docstring"> 'typ' of reply iq can be ( 'result' | 'set' | 'set' | 'result' ) respectively.</tt> </tt>
+<a name="L1372"></a><tt class="py-lineno">1372</tt> <tt class="py-line"><tt class="py-docstring"> 'cancel' form can not contain any fields. All other forms contains AT LEAST one field.</tt> </tt>
+<a name="L1373"></a><tt class="py-lineno">1373</tt> <tt class="py-line"><tt class="py-docstring"> 'title' MAY be included in forms of type "form" and "result"</tt> </tt>
+<a name="L1374"></a><tt class="py-lineno">1374</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1375"></a><tt class="py-lineno">1375</tt> <tt class="py-line"> <tt id="link-456" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-456', 'Node', 'link-1');">Node</a></tt><tt class="py-op">.</tt><tt id="link-457" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-457', '__init__', 'link-206');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'x'</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L1376"></a><tt class="py-lineno">1376</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">:</tt> </tt>
+<a name="L1377"></a><tt class="py-lineno">1377</tt> <tt class="py-line"> <tt class="py-name">newkids</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1378"></a><tt class="py-lineno">1378</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-458" class="py-name" targets="Variable nbxmpp.stringprepare.NamePrep.n=nbxmpp.stringprepare.NamePrep-class.html#n"><a title="nbxmpp.stringprepare.NamePrep.n" class="py-name" href="#" onclick="return doclink('link-458', 'n', 'link-458');">n</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-459" class="py-name"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-459', 'getChildren', 'link-237');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1379"></a><tt class="py-lineno">1379</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-460" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.n" class="py-name" href="#" onclick="return doclink('link-460', 'n', 'link-458');">n</a></tt><tt class="py-op">.</tt><tt id="link-461" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-461', 'getName', 'link-238');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'field'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1380"></a><tt class="py-lineno">1380</tt> <tt class="py-line"> <tt class="py-name">newkids</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-462" class="py-name" targets="Class nbxmpp.protocol.DataField=nbxmpp.protocol.DataField-class.html"><a title="nbxmpp.protocol.DataField" class="py-name" href="#" onclick="return doclink('link-462', 'DataField', 'link-462');">DataField</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt id="link-463" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.n" class="py-name" href="#" onclick="return doclink('link-463', 'n', 'link-458');">n</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1381"></a><tt class="py-lineno">1381</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1382"></a><tt class="py-lineno">1382</tt> <tt class="py-line"> <tt class="py-name">newkids</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-464" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.n" class="py-name" href="#" onclick="return doclink('link-464', 'n', 'link-458');">n</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1383"></a><tt class="py-lineno">1383</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt> <tt class="py-op">=</tt> <tt class="py-name">newkids</tt> </tt>
+<a name="L1384"></a><tt class="py-lineno">1384</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L1385"></a><tt class="py-lineno">1385</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-465" class="py-name"><a title="nbxmpp.protocol.DataField.setType
+nbxmpp.protocol.DataForm.setType
+nbxmpp.protocol.Protocol.setType" class="py-name" href="#" onclick="return doclink('link-465', 'setType', 'link-258');">setType</a></tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">)</tt> </tt>
+<a name="L1386"></a><tt class="py-lineno">1386</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-466" class="py-name"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-466', 'setNamespace', 'link-207');">setNamespace</a></tt><tt class="py-op">(</tt><tt id="link-467" class="py-name"><a title="nbxmpp.protocol.NS_DATA" class="py-name" href="#" onclick="return doclink('link-467', 'NS_DATA', 'link-40');">NS_DATA</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1387"></a><tt class="py-lineno">1387</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">title</tt><tt class="py-op">:</tt> </tt>
+<a name="L1388"></a><tt class="py-lineno">1388</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-468" class="py-name" targets="Method nbxmpp.protocol.DataForm.setTitle()=nbxmpp.protocol.DataForm-class.html#setTitle"><a title="nbxmpp.protocol.DataForm.setTitle" class="py-name" href="#" onclick="return doclink('link-468', 'setTitle', 'link-468');">setTitle</a></tt><tt class="py-op">(</tt><tt class="py-name">title</tt><tt class="py-op">)</tt> </tt>
+<a name="L1389"></a><tt class="py-lineno">1389</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">dict</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1390"></a><tt class="py-lineno">1390</tt> <tt class="py-line"> <tt class="py-name">newdata</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1391"></a><tt class="py-lineno">1391</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-469" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-469', 'name', 'link-165');">name</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt id="link-470" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-470', 'keys', 'link-252');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1392"></a><tt class="py-lineno">1392</tt> <tt class="py-line"> <tt class="py-name">newdata</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-471" class="py-name"><a title="nbxmpp.protocol.DataField" class="py-name" href="#" onclick="return doclink('link-471', 'DataField', 'link-462');">DataField</a></tt><tt class="py-op">(</tt><tt id="link-472" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-472', 'name', 'link-165');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt id="link-473" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-473', 'name', 'link-165');">name</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1393"></a><tt class="py-lineno">1393</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">newdata</tt> </tt>
+<a name="L1394"></a><tt class="py-lineno">1394</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">child</tt> <tt class="py-keyword">in</tt> <tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L1395"></a><tt class="py-lineno">1395</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1396"></a><tt class="py-lineno">1396</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-474" class="py-name" targets="Method nbxmpp.protocol.DataForm.addInstructions()=nbxmpp.protocol.DataForm-class.html#addInstructions"><a title="nbxmpp.protocol.DataForm.addInstructions" class="py-name" href="#" onclick="return doclink('link-474', 'addInstructions', 'link-474');">addInstructions</a></tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1397"></a><tt class="py-lineno">1397</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">child</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'DataField'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1398"></a><tt class="py-lineno">1398</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">child</tt><tt class="py-op">)</tt> </tt>
+<a name="L1399"></a><tt class="py-lineno">1399</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1400"></a><tt class="py-lineno">1400</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-475" class="py-name"><a title="nbxmpp.protocol.DataField" class="py-name" href="#" onclick="return doclink('link-475', 'DataField', 'link-462');">DataField</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">child</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1401"></a><tt class="py-lineno">1401</tt> <tt class="py-line"> </tt>
+<a name="DataForm.getType"></a><div id="DataForm.getType-def"><a name="L1402"></a><tt class="py-lineno">1402</tt> <a class="py-toggle" href="#" id="DataForm.getType-toggle" onclick="return toggle('DataForm.getType');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#getType">getType</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.getType-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.getType-expanded"><a name="L1403"></a><tt class="py-lineno">1403</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1404"></a><tt class="py-lineno">1404</tt> <tt class="py-line"><tt class="py-docstring"> Return the type of dataform</tt> </tt>
+<a name="L1405"></a><tt class="py-lineno">1405</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1406"></a><tt class="py-lineno">1406</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-476" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-476', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1407"></a><tt class="py-lineno">1407</tt> <tt class="py-line"> </tt>
+<a name="DataForm.setType"></a><div id="DataForm.setType-def"><a name="L1408"></a><tt class="py-lineno">1408</tt> <a class="py-toggle" href="#" id="DataForm.setType-toggle" onclick="return toggle('DataForm.setType');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#setType">setType</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">typ</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.setType-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.setType-expanded"><a name="L1409"></a><tt class="py-lineno">1409</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1410"></a><tt class="py-lineno">1410</tt> <tt class="py-line"><tt class="py-docstring"> Set the type of dataform</tt> </tt>
+<a name="L1411"></a><tt class="py-lineno">1411</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1412"></a><tt class="py-lineno">1412</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-477" class="py-name"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-477', 'setAttr', 'link-229');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-name">typ</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1413"></a><tt class="py-lineno">1413</tt> <tt class="py-line"> </tt>
+<a name="DataForm.getTitle"></a><div id="DataForm.getTitle-def"><a name="L1414"></a><tt class="py-lineno">1414</tt> <a class="py-toggle" href="#" id="DataForm.getTitle-toggle" onclick="return toggle('DataForm.getTitle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#getTitle">getTitle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.getTitle-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.getTitle-expanded"><a name="L1415"></a><tt class="py-lineno">1415</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1416"></a><tt class="py-lineno">1416</tt> <tt class="py-line"><tt class="py-docstring"> Return the title of dataform</tt> </tt>
+<a name="L1417"></a><tt class="py-lineno">1417</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1418"></a><tt class="py-lineno">1418</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-478" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-478', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'title'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1419"></a><tt class="py-lineno">1419</tt> <tt class="py-line"> </tt>
+<a name="DataForm.setTitle"></a><div id="DataForm.setTitle-def"><a name="L1420"></a><tt class="py-lineno">1420</tt> <a class="py-toggle" href="#" id="DataForm.setTitle-toggle" onclick="return toggle('DataForm.setTitle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#setTitle">setTitle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.setTitle-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.setTitle-expanded"><a name="L1421"></a><tt class="py-lineno">1421</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1422"></a><tt class="py-lineno">1422</tt> <tt class="py-line"><tt class="py-docstring"> Set the title of dataform</tt> </tt>
+<a name="L1423"></a><tt class="py-lineno">1423</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1424"></a><tt class="py-lineno">1424</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-479" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-479', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'title'</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1425"></a><tt class="py-lineno">1425</tt> <tt class="py-line"> </tt>
+<a name="DataForm.getInstructions"></a><div id="DataForm.getInstructions-def"><a name="L1426"></a><tt class="py-lineno">1426</tt> <a class="py-toggle" href="#" id="DataForm.getInstructions-toggle" onclick="return toggle('DataForm.getInstructions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#getInstructions">getInstructions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.getInstructions-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.getInstructions-expanded"><a name="L1427"></a><tt class="py-lineno">1427</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1428"></a><tt class="py-lineno">1428</tt> <tt class="py-line"><tt class="py-docstring"> Return the instructions of dataform</tt> </tt>
+<a name="L1429"></a><tt class="py-lineno">1429</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1430"></a><tt class="py-lineno">1430</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-480" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-480', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'instructions'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1431"></a><tt class="py-lineno">1431</tt> <tt class="py-line"> </tt>
+<a name="DataForm.setInstructions"></a><div id="DataForm.setInstructions-def"><a name="L1432"></a><tt class="py-lineno">1432</tt> <a class="py-toggle" href="#" id="DataForm.setInstructions-toggle" onclick="return toggle('DataForm.setInstructions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#setInstructions">setInstructions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.setInstructions-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.setInstructions-expanded"><a name="L1433"></a><tt class="py-lineno">1433</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1434"></a><tt class="py-lineno">1434</tt> <tt class="py-line"><tt class="py-docstring"> Set the instructions of dataform</tt> </tt>
+<a name="L1435"></a><tt class="py-lineno">1435</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1436"></a><tt class="py-lineno">1436</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-481" class="py-name"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-481', 'setTagData', 'link-278');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'instructions'</tt><tt class="py-op">,</tt> <tt class="py-name">text</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1437"></a><tt class="py-lineno">1437</tt> <tt class="py-line"> </tt>
+<a name="DataForm.addInstructions"></a><div id="DataForm.addInstructions-def"><a name="L1438"></a><tt class="py-lineno">1438</tt> <a class="py-toggle" href="#" id="DataForm.addInstructions-toggle" onclick="return toggle('DataForm.addInstructions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#addInstructions">addInstructions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">text</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.addInstructions-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.addInstructions-expanded"><a name="L1439"></a><tt class="py-lineno">1439</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1440"></a><tt class="py-lineno">1440</tt> <tt class="py-line"><tt class="py-docstring"> Add one more instruction to the dataform</tt> </tt>
+<a name="L1441"></a><tt class="py-lineno">1441</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1442"></a><tt class="py-lineno">1442</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-482" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-482', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-string">'instructions'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-name">text</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1443"></a><tt class="py-lineno">1443</tt> <tt class="py-line"> </tt>
+<a name="DataForm.getField"></a><div id="DataForm.getField-def"><a name="L1444"></a><tt class="py-lineno">1444</tt> <a class="py-toggle" href="#" id="DataForm.getField-toggle" onclick="return toggle('DataForm.getField');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#getField">getField</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.getField-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.getField-expanded"><a name="L1445"></a><tt class="py-lineno">1445</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1446"></a><tt class="py-lineno">1446</tt> <tt class="py-line"><tt class="py-docstring"> Return the datafield object with name 'name' (if exists)</tt> </tt>
+<a name="L1447"></a><tt class="py-lineno">1447</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1448"></a><tt class="py-lineno">1448</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-483" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-483', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'field'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'var'</tt><tt class="py-op">:</tt> <tt id="link-484" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-484', 'name', 'link-165');">name</a></tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1449"></a><tt class="py-lineno">1449</tt> <tt class="py-line"> </tt>
+<a name="DataForm.setField"></a><div id="DataForm.setField-def"><a name="L1450"></a><tt class="py-lineno">1450</tt> <a class="py-toggle" href="#" id="DataForm.setField-toggle" onclick="return toggle('DataForm.setField');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#setField">setField</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.setField-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.setField-expanded"><a name="L1451"></a><tt class="py-lineno">1451</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1452"></a><tt class="py-lineno">1452</tt> <tt class="py-line"><tt class="py-docstring"> Create if nessessary or get the existing datafield object with name</tt> </tt>
+<a name="L1453"></a><tt class="py-lineno">1453</tt> <tt class="py-line"><tt class="py-docstring"> 'name' and return it</tt> </tt>
+<a name="L1454"></a><tt class="py-lineno">1454</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1455"></a><tt class="py-lineno">1455</tt> <tt class="py-line"> <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-485" class="py-name" targets="Method nbxmpp.protocol.DataForm.getField()=nbxmpp.protocol.DataForm-class.html#getField"><a title="nbxmpp.protocol.DataForm.getField" class="py-name" href="#" onclick="return doclink('link-485', 'getField', 'link-485');">getField</a></tt><tt class="py-op">(</tt><tt id="link-486" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-486', 'name', 'link-165');">name</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1456"></a><tt class="py-lineno">1456</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">f</tt><tt class="py-op">:</tt> </tt>
+<a name="L1457"></a><tt class="py-lineno">1457</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">f</tt> </tt>
+<a name="L1458"></a><tt class="py-lineno">1458</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-487" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-487', 'addChild', 'link-259');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt id="link-488" class="py-name"><a title="nbxmpp.protocol.DataField" class="py-name" href="#" onclick="return doclink('link-488', 'DataField', 'link-462');">DataField</a></tt><tt class="py-op">(</tt><tt id="link-489" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-489', 'name', 'link-165');">name</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1459"></a><tt class="py-lineno">1459</tt> <tt class="py-line"> </tt>
+<a name="DataForm.asDict"></a><div id="DataForm.asDict-def"><a name="L1460"></a><tt class="py-lineno">1460</tt> <a class="py-toggle" href="#" id="DataForm.asDict-toggle" onclick="return toggle('DataForm.asDict');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#asDict">asDict</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.asDict-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.asDict-expanded"><a name="L1461"></a><tt class="py-lineno">1461</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1462"></a><tt class="py-lineno">1462</tt> <tt class="py-line"><tt class="py-docstring"> Represent dataform as simple dictionary mapping of datafield names to</tt> </tt>
+<a name="L1463"></a><tt class="py-lineno">1463</tt> <tt class="py-line"><tt class="py-docstring"> their values</tt> </tt>
+<a name="L1464"></a><tt class="py-lineno">1464</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1465"></a><tt class="py-lineno">1465</tt> <tt class="py-line"> <tt class="py-name">ret</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1466"></a><tt class="py-lineno">1466</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">field</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-490" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-490', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'field'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1467"></a><tt class="py-lineno">1467</tt> <tt class="py-line"> <tt id="link-491" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-491', 'name', 'link-165');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-name">field</tt><tt class="py-op">.</tt><tt id="link-492" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-492', 'getAttr', 'link-217');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'var'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1468"></a><tt class="py-lineno">1468</tt> <tt class="py-line"> <tt class="py-name">typ</tt> <tt class="py-op">=</tt> <tt class="py-name">field</tt><tt class="py-op">.</tt><tt id="link-493" class="py-name"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-493', 'getType', 'link-170');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1469"></a><tt class="py-lineno">1469</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">typ</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">typ</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'-multi'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1470"></a><tt class="py-lineno">1470</tt> <tt class="py-line"> <tt class="py-name">val</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1471"></a><tt class="py-lineno">1471</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">field</tt><tt class="py-op">.</tt><tt id="link-494" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-494', 'getTags', 'link-215');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1472"></a><tt class="py-lineno">1472</tt> <tt class="py-line"> <tt class="py-name">val</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">.</tt><tt id="link-495" class="py-name"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-495', 'getData', 'link-240');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1473"></a><tt class="py-lineno">1473</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1474"></a><tt class="py-lineno">1474</tt> <tt class="py-line"> <tt class="py-name">val</tt> <tt class="py-op">=</tt> <tt class="py-name">field</tt><tt class="py-op">.</tt><tt id="link-496" class="py-name"><a title="nbxmpp.simplexml.Node.getTagData" class="py-name" href="#" onclick="return doclink('link-496', 'getTagData', 'link-272');">getTagData</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1475"></a><tt class="py-lineno">1475</tt> <tt class="py-line"> <tt class="py-name">ret</tt><tt class="py-op">[</tt><tt id="link-497" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-497', 'name', 'link-165');">name</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+<a name="L1476"></a><tt class="py-lineno">1476</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-498" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-498', 'getTag', 'link-236');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'instructions'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1477"></a><tt class="py-lineno">1477</tt> <tt class="py-line"> <tt class="py-name">ret</tt><tt class="py-op">[</tt><tt class="py-string">'instructions'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-499" class="py-name" targets="Method nbxmpp.protocol.DataForm.getInstructions()=nbxmpp.protocol.DataForm-class.html#getInstructions"><a title="nbxmpp.protocol.DataForm.getInstructions" class="py-name" href="#" onclick="return doclink('link-499', 'getInstructions', 'link-499');">getInstructions</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1478"></a><tt class="py-lineno">1478</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ret</tt> </tt>
+</div><a name="L1479"></a><tt class="py-lineno">1479</tt> <tt class="py-line"> </tt>
+<a name="DataForm.__getitem__"></a><div id="DataForm.__getitem__-def"><a name="L1480"></a><tt class="py-lineno">1480</tt> <a class="py-toggle" href="#" id="DataForm.__getitem__-toggle" onclick="return toggle('DataForm.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.__getitem__-expanded"><a name="L1481"></a><tt class="py-lineno">1481</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1482"></a><tt class="py-lineno">1482</tt> <tt class="py-line"><tt class="py-docstring"> Simple dictionary interface for getting datafields values by their names</tt> </tt>
+<a name="L1483"></a><tt class="py-lineno">1483</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1484"></a><tt class="py-lineno">1484</tt> <tt class="py-line"> <tt class="py-name">item</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-500" class="py-name"><a title="nbxmpp.protocol.DataForm.getField" class="py-name" href="#" onclick="return doclink('link-500', 'getField', 'link-485');">getField</a></tt><tt class="py-op">(</tt><tt id="link-501" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-501', 'name', 'link-165');">name</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1485"></a><tt class="py-lineno">1485</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">item</tt><tt class="py-op">:</tt> </tt>
+<a name="L1486"></a><tt class="py-lineno">1486</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-502" class="py-name" targets="Method nbxmpp.protocol.DataField.getValue()=nbxmpp.protocol.DataField-class.html#getValue"><a title="nbxmpp.protocol.DataField.getValue" class="py-name" href="#" onclick="return doclink('link-502', 'getValue', 'link-502');">getValue</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1487"></a><tt class="py-lineno">1487</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'No such field'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1488"></a><tt class="py-lineno">1488</tt> <tt class="py-line"> </tt>
+<a name="DataForm.__setitem__"></a><div id="DataForm.__setitem__-def"><a name="L1489"></a><tt class="py-lineno">1489</tt> <a class="py-toggle" href="#" id="DataForm.__setitem__-toggle" onclick="return toggle('DataForm.__setitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.protocol.DataForm-class.html#__setitem__">__setitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="DataForm.__setitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="DataForm.__setitem__-expanded"><a name="L1490"></a><tt class="py-lineno">1490</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L1491"></a><tt class="py-lineno">1491</tt> <tt class="py-line"><tt class="py-docstring"> Simple dictionary interface for setting datafields values by their names</tt> </tt>
+<a name="L1492"></a><tt class="py-lineno">1492</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L1493"></a><tt class="py-lineno">1493</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-503" class="py-name" targets="Method nbxmpp.protocol.DataForm.setField()=nbxmpp.protocol.DataForm-class.html#setField"><a title="nbxmpp.protocol.DataForm.setField" class="py-name" href="#" onclick="return doclink('link-503', 'setField', 'link-503');">setField</a></tt><tt class="py-op">(</tt><tt id="link-504" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-504', 'name', 'link-165');">name</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-505" class="py-name"><a title="nbxmpp.protocol.DataField.setValue" class="py-name" href="#" onclick="return doclink('link-505', 'setValue', 'link-423');">setValue</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1494"></a><tt class="py-lineno">1494</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Acks-class.html b/doc/apidocs/nbxmpp.protocol.Acks-class.html
new file mode 100644
index 0000000..558fb8c
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Acks-class.html
@@ -0,0 +1,497 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Acks</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Acks
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Acks-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Acks</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_2" name="uml_class_diagram_for_nbxmpp_p_2">
+<area shape="rect" id="node42" href="nbxmpp.protocol.Acks-class.html#__init__" title="Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if needed and separated from it by a space), attrs dictionary as the set of arguments, payload list as the set of textual strings and child nodes that this node carries within itself and &quot;parent&quot; argument that is another node that this one will be the child of. Also the __init__ can be provided with &quot;node&quot; argument that is either a text string containing exactly one node or another Node instance to begin with. If both &quot;node&quot; and other arguments is provided then the node initially created as replica of &quot;node&quot; provided and then modified to be compliant with other arguments." alt="" coords="172,391,404,409"/>
+<area shape="rect" id="node42" href="nbxmpp.protocol.Acks-class.html#buildAnswer" title="handled is the number of stanzas handled" alt="" coords="172,409,404,428"/>
+<area shape="rect" id="node42" href="nbxmpp.protocol.Acks-class.html#buildRequest" title="nbxmpp.protocol.Acks.buildRequest" alt="" coords="172,428,404,447"/>
+<area shape="rect" id="node42" href="nbxmpp.protocol.Acks-class.html#buildEnable" title="nbxmpp.protocol.Acks.buildEnable" alt="" coords="172,447,404,465"/>
+<area shape="rect" id="node42" href="nbxmpp.protocol.Acks-class.html#buildResume" title="nbxmpp.protocol.Acks.buildResume" alt="" coords="172,465,404,484"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.Acks-class.html" title="Acknowledgement elements for Stream Management" alt="" coords="160,358,416,490"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="17,31,559,49"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="17,52,559,71"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="17,71,559,89"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="17,89,559,108"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="17,108,559,127"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="17,127,559,145"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="17,145,559,164"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="17,164,559,183"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="17,183,559,201"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="17,201,559,220"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="17,220,559,239"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="17,239,559,257"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="17,257,559,276"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="17,276,559,295"/>
+<area shape="rect" id="node43" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="17,313,559,332"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="5,6,571,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_2.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Acknowledgement elements for Stream Management
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Acks-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">nsp</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sm:2</code><code class="variable-quote">'</code></span>)</span><br />
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Acks-class.html#buildAnswer" class="summary-sig-name">buildAnswer</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handled</span>)</span><br />
+ handled is the number of stanzas handled</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildAnswer">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Acks-class.html#buildRequest" class="summary-sig-name">buildRequest</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildRequest">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Acks-class.html#buildEnable" class="summary-sig-name">buildEnable</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resume</span>=<span class="summary-sig-default">False</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildEnable">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Acks-class.html#buildResume" class="summary-sig-name">buildResume</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">handled</span>,
+ <span class="summary-sig-arg">previd</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildResume">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">nsp</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:sm:2</code><code class="variable-quote">'</code></span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="buildAnswer"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">buildAnswer</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handled</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildAnswer">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ handled is the number of stanzas handled
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="buildRequest"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">buildRequest</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildRequest">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="buildEnable"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">buildEnable</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resume</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildEnable">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="buildResume"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">buildResume</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">handled</span>,
+ <span class="sig-arg">previd</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Acks.buildResume">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.BOSHBody-class.html b/doc/apidocs/nbxmpp.protocol.BOSHBody-class.html
new file mode 100644
index 0000000..d83dea1
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.BOSHBody-class.html
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.BOSHBody</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;BOSHBody
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.BOSHBody-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class BOSHBody</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#BOSHBody">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_3" name="uml_class_diagram_for_nbxmpp_p_3">
+<area shape="rect" id="node44" href="nbxmpp.protocol.BOSHBody-class.html#__init__" title="Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if needed and separated from it by a space), attrs dictionary as the set of arguments, payload list as the set of textual strings and child nodes that this node carries within itself and &quot;parent&quot; argument that is another node that this one will be the child of. Also the __init__ can be provided with &quot;node&quot; argument that is either a text string containing exactly one node or another Node instance to begin with. If both &quot;node&quot; and other arguments is provided then the node initially created as replica of &quot;node&quot; provided and then modified to be compliant with other arguments." alt="" coords="129,391,445,409"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.BOSHBody-class.html" title="&lt;body&gt; tag that wraps usual XMPP stanzas in XMPP over BOSH" alt="" coords="117,358,456,415"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="17,31,559,49"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="17,52,559,71"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="17,71,559,89"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="17,89,559,108"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="17,108,559,127"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="17,127,559,145"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="17,145,559,164"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="17,164,559,183"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="17,183,559,201"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="17,201,559,220"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="17,220,559,239"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="17,239,559,257"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="17,257,559,276"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="17,276,559,295"/>
+<area shape="rect" id="node45" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="17,313,559,332"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="5,6,571,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_3.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_3" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+&lt;body&gt; tag that wraps usual XMPP stanzas in XMPP over BOSH
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.BOSHBody-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">payload</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#BOSHBody.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">payload</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#BOSHBody.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.BadFormat-class.html b/doc/apidocs/nbxmpp.protocol.BadFormat-class.html
new file mode 100644
index 0000000..e241710
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.BadFormat-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.BadFormat</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;BadFormat
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.BadFormat-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class BadFormat</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#BadFormat">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_4" name="uml_class_diagram_for_nbxmpp_p_4">
+<area shape="rect" id="node1" href="nbxmpp.protocol.BadFormat-class.html" title="nbxmpp.protocol.BadFormat" alt="" coords="53,443,149,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node49" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node48" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node48" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_4.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_4" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.BadNamespacePrefix-class.html b/doc/apidocs/nbxmpp.protocol.BadNamespacePrefix-class.html
new file mode 100644
index 0000000..daeb00f
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.BadNamespacePrefix-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.BadNamespacePrefix</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;BadNamespacePrefix
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.BadNamespacePrefix-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class BadNamespacePrefix</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#BadNamespacePrefix">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_5" name="uml_class_diagram_for_nbxmpp_p_5">
+<area shape="rect" id="node1" href="nbxmpp.protocol.BadNamespacePrefix-class.html" title="nbxmpp.protocol.BadNamespacePrefix" alt="" coords="21,443,184,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node53" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node52" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node52" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_5.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_5" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Conflict-class.html b/doc/apidocs/nbxmpp.protocol.Conflict-class.html
new file mode 100644
index 0000000..8737cf8
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Conflict-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Conflict</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Conflict
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Conflict-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Conflict</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Conflict">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_6" name="uml_class_diagram_for_nbxmpp_p_6">
+<area shape="rect" id="node1" href="nbxmpp.protocol.Conflict-class.html" title="nbxmpp.protocol.Conflict" alt="" coords="65,443,137,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node57" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node56" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node56" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_6.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_6" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.ConnectionTimeout-class.html b/doc/apidocs/nbxmpp.protocol.ConnectionTimeout-class.html
new file mode 100644
index 0000000..0b10f04
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.ConnectionTimeout-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.ConnectionTimeout</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;ConnectionTimeout
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.ConnectionTimeout-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ConnectionTimeout</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ConnectionTimeout">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_7" name="uml_class_diagram_for_nbxmpp_p_7">
+<area shape="rect" id="node1" href="nbxmpp.protocol.ConnectionTimeout-class.html" title="nbxmpp.protocol.ConnectionTimeout" alt="" coords="27,443,176,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node61" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node60" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node60" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_7.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_7" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.DataField-class.html b/doc/apidocs/nbxmpp.protocol.DataField-class.html
new file mode 100644
index 0000000..ee1aac1
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.DataField-class.html
@@ -0,0 +1,950 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.DataField</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;DataField
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.DataField-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class DataField</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_8" name="uml_class_diagram_for_nbxmpp_p_8">
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#__init__" title="Create new data field of specified name,value and type" alt="" coords="17,391,677,409"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#setRequired" title="Change the state of the &#39;required&#39; flag" alt="" coords="17,409,677,428"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#isRequired" title="Return in this field a required one" alt="" coords="17,428,677,447"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#setDesc" title="Set the description of this field" alt="" coords="17,447,677,465"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#getDesc" title="Return the description of this field" alt="" coords="17,465,677,484"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#setValue" title="Set the value of this field" alt="" coords="17,484,677,503"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#getValue" title="nbxmpp.protocol.DataField.getValue" alt="" coords="17,503,677,521"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#setValues" title="Set the values of this field as values&#45;list. Replaces all previous filed values! If you need to just add a value &#45; use addValue method" alt="" coords="17,521,677,540"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#addValue" title="Add one more value to this field. Used in &#39;get&#39; iq&#39;s or such" alt="" coords="17,540,677,559"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#getValues" title="Return the list of values associated with this field" alt="" coords="17,559,677,577"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#getOptions" title="Return label&#45;option pairs list associated with this field" alt="" coords="17,577,677,596"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#setOptions" title="Set label&#45;option pairs list associated with this field" alt="" coords="17,596,677,615"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#addOption" title="Add one more label&#45;option pair to this field" alt="" coords="17,615,677,633"/>
+<area shape="rect" id="node62" href="nbxmpp.protocol.DataField-class.html#setVar" title="Set &#39;var&#39; attribute value of this field" alt="" coords="17,652,677,671"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.DataField-class.html" title="This class is used in the DataForm class to describe the single data item" alt="" coords="5,358,688,677"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="77,31,619,49"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="77,52,619,71"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="77,71,619,89"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="77,89,619,108"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="77,108,619,127"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="77,127,619,145"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="77,145,619,164"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="77,164,619,183"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="77,183,619,201"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="77,201,619,220"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="77,220,619,239"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="77,239,619,257"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="77,257,619,276"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="77,276,619,295"/>
+<area shape="rect" id="node63" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="77,313,619,332"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="65,6,631,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_8.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_8" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>This class is used in the DataForm class to describe the single data item</p>
+<p>If you are working with jabber:x:data (XEP-0004, XEP-0068, XEP-0122) then
+you will need to work with instances of this class.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">value</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">required</span>=<span class="summary-sig-default">0</span>,
+ <span class="summary-sig-arg">desc</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">options</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Create new data field of specified name,value and type</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#setRequired" class="summary-sig-name">setRequired</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">req</span>=<span class="summary-sig-default">1</span>)</span><br />
+ Change the state of the 'required' flag</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setRequired">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#isRequired" class="summary-sig-name">isRequired</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return in this field a required one</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.isRequired">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#setDesc" class="summary-sig-name">setDesc</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">desc</span>)</span><br />
+ Set the description of this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setDesc">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#getDesc" class="summary-sig-name">getDesc</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the description of this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getDesc">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#setValue" class="summary-sig-name">setValue</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the value of this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setValue">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#getValue" class="summary-sig-name">getValue</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getValue">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#setValues" class="summary-sig-name">setValues</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">lst</span>)</span><br />
+ Set the values of this field as values-list. Replaces all previous filed
+values! If you need to just add a value - use addValue method</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setValues">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#addValue" class="summary-sig-name">addValue</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Add one more value to this field. Used in 'get' iq's or such</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.addValue">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#getValues" class="summary-sig-name">getValues</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the list of values associated with this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getValues">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#getOptions" class="summary-sig-name">getOptions</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return label-option pairs list associated with this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getOptions">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#setOptions" class="summary-sig-name">setOptions</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">lst</span>)</span><br />
+ Set label-option pairs list associated with this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setOptions">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#addOption" class="summary-sig-name">addOption</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">opt</span>)</span><br />
+ Add one more label-option pair to this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.addOption">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#getType" class="summary-sig-name">getType</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Get type of this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getType">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#setType" class="summary-sig-name">setType</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set type of this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setType">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#getVar" class="summary-sig-name">getVar</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Get 'var' attribute value of this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getVar">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataField-class.html#setVar" class="summary-sig-name">setVar</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set 'var' attribute value of this field</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setVar">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">value</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">required</span>=<span class="sig-default">0</span>,
+ <span class="sig-arg">desc</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">options</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Create new data field of specified name,value and type</p>
+<p>Also 'required','desc' and 'options' fields can be set. Alternatively
+other XML object can be passed in as the 'node' parameted
+to replicate it as a new datafiled.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="setRequired"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setRequired</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">req</span>=<span class="sig-default">1</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setRequired">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Change the state of the 'required' flag
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="isRequired"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">isRequired</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.isRequired">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return in this field a required one
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setDesc"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setDesc</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">desc</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setDesc">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the description of this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getDesc"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getDesc</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getDesc">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the description of this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setValue"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setValue</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setValue">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the value of this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getValue"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getValue</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getValue">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setValues"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setValues</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">lst</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setValues">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the values of this field as values-list. Replaces all previous filed
+values! If you need to just add a value - use addValue method
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="addValue"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">addValue</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.addValue">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Add one more value to this field. Used in 'get' iq's or such
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getValues"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getValues</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getValues">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the list of values associated with this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getOptions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getOptions</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getOptions">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return label-option pairs list associated with this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setOptions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setOptions</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">lst</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setOptions">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set label-option pairs list associated with this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="addOption"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">addOption</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">opt</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.addOption">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Add one more label-option pair to this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getType"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getType</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getType">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get type of this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setType"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setType</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setType">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set type of this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getVar"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getVar</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.getVar">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get 'var' attribute value of this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setVar"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setVar</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataField.setVar">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set 'var' attribute value of this field
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.DataForm-class.html b/doc/apidocs/nbxmpp.protocol.DataForm-class.html
new file mode 100644
index 0000000..eda1034
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.DataForm-class.html
@@ -0,0 +1,817 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.DataForm</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;DataForm
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.DataForm-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class DataForm</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_9" name="uml_class_diagram_for_nbxmpp_p_9">
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#__init__" title="Create new dataform of type &#39;typ&#39;. &#39;data&#39; is the list of DataField instances that this dataform contains, &#39;title&#39; &#45; the title string. &#160;You can specify the &#39;node&#39; argument as the other node to be used as base for constructing this dataform" alt="" coords="97,391,477,409"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#getType" title="Return the type of dataform" alt="" coords="97,409,477,428"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#setType" title="Set the type of dataform" alt="" coords="97,428,477,447"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#getTitle" title="Return the title of dataform" alt="" coords="97,447,477,465"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#setTitle" title="Set the title of dataform" alt="" coords="97,465,477,484"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#getInstructions" title="Return the instructions of dataform" alt="" coords="97,484,477,503"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#setInstructions" title="Set the instructions of dataform" alt="" coords="97,503,477,521"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#addInstructions" title="Add one more instruction to the dataform" alt="" coords="97,521,477,540"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#getField" title="Return the datafield object with name &#39;name&#39; (if exists)" alt="" coords="97,540,477,559"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#setField" title="Create if nessessary or get the existing datafield object with name &#39;name&#39; and return it" alt="" coords="97,559,477,577"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#asDict" title="Represent dataform as simple dictionary mapping of datafield names to their values" alt="" coords="97,577,477,596"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#__getitem__" title="Simple dictionary interface for getting datafields values by their names" alt="" coords="97,596,477,615"/>
+<area shape="rect" id="node64" href="nbxmpp.protocol.DataForm-class.html#__setitem__" title="Simple dictionary interface for setting datafields values by their names" alt="" coords="97,615,477,633"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.DataForm-class.html" title="Used for manipulating dataforms in XMPP" alt="" coords="85,358,488,639"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="17,31,559,49"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="17,52,559,71"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="17,71,559,89"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="17,89,559,108"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="17,108,559,127"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="17,127,559,145"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="17,145,559,164"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="17,164,559,183"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="17,183,559,201"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="17,201,559,220"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="17,220,559,239"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="17,239,559,257"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="17,257,559,276"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="17,276,559,295"/>
+<area shape="rect" id="node65" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="17,313,559,332"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="5,6,571,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_9.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_9" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>Used for manipulating dataforms in XMPP</p>
+<p>Relevant XEPs: 0004, 0068, 0122. Can be used in disco, pub-sub and many
+other applications.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">data</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">title</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Create new dataform of type 'typ'. 'data' is the list of DataField
+instances that this dataform contains, 'title' - the title string. You
+can specify the 'node' argument as the other node to be used as base for
+constructing this dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#getType" class="summary-sig-name">getType</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the type of dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getType">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#setType" class="summary-sig-name">setType</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">typ</span>)</span><br />
+ Set the type of dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setType">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#getTitle" class="summary-sig-name">getTitle</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the title of dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getTitle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#setTitle" class="summary-sig-name">setTitle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">text</span>)</span><br />
+ Set the title of dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setTitle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#getInstructions" class="summary-sig-name">getInstructions</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the instructions of dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getInstructions">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#setInstructions" class="summary-sig-name">setInstructions</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">text</span>)</span><br />
+ Set the instructions of dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setInstructions">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#addInstructions" class="summary-sig-name">addInstructions</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">text</span>)</span><br />
+ Add one more instruction to the dataform</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.addInstructions">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#getField" class="summary-sig-name">getField</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>)</span><br />
+ Return the datafield object with name 'name' (if exists)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getField">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#setField" class="summary-sig-name">setField</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>)</span><br />
+ Create if nessessary or get the existing datafield object with name
+'name' and return it</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setField">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#asDict" class="summary-sig-name">asDict</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Represent dataform as simple dictionary mapping of datafield names to
+their values</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.asDict">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#__getitem__" class="summary-sig-name">__getitem__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>)</span><br />
+ Simple dictionary interface for getting datafields values by their names</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.__getitem__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.DataForm-class.html#__setitem__" class="summary-sig-name">__setitem__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Simple dictionary interface for setting datafields values by their names</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.__setitem__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">data</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">title</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Create new dataform of type 'typ'. 'data' is the list of DataField
+instances that this dataform contains, 'title' - the title string. You
+can specify the 'node' argument as the other node to be used as base for
+constructing this dataform</p>
+<p>title and instructions is optional and SHOULD NOT contain newlines.
+Several instructions MAY be present.
+'typ' can be one of ('form' | 'submit' | 'cancel' | 'result' )
+'typ' of reply iq can be ( 'result' | 'set' | 'set' | 'result' ) respectively.
+'cancel' form can not contain any fields. All other forms contains AT LEAST one field.
+'title' MAY be included in forms of type &quot;form&quot; and &quot;result&quot;</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="getType"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getType</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getType">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the type of dataform
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setType"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setType</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">typ</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setType">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the type of dataform
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTitle"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTitle</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getTitle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the title of dataform
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setTitle"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setTitle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">text</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setTitle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the title of dataform
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getInstructions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getInstructions</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getInstructions">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the instructions of dataform
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setInstructions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setInstructions</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">text</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setInstructions">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the instructions of dataform
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="addInstructions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">addInstructions</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">text</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.addInstructions">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Add one more instruction to the dataform
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getField"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getField</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.getField">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the datafield object with name 'name' (if exists)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setField"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setField</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.setField">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Create if nessessary or get the existing datafield object with name
+'name' and return it
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="asDict"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">asDict</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.asDict">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Represent dataform as simple dictionary mapping of datafield names to
+their values
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__getitem__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>)</span>
+ <br /><em class="fname">(Indexing operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.__getitem__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Simple dictionary interface for getting datafields values by their names
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.simplexml.Node-class.html#__getitem__">simplexml.Node.__getitem__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__setitem__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__setitem__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">val</span>)</span>
+ <br /><em class="fname">(Index assignment operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#DataForm.__setitem__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Simple dictionary interface for setting datafields values by their names
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.simplexml.Node-class.html#__setitem__">simplexml.Node.__setitem__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Error-class.html b/doc/apidocs/nbxmpp.protocol.Error-class.html
new file mode 100644
index 0000000..1d67408
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Error-class.html
@@ -0,0 +1,410 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Error</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Error
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Error-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Error</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Error">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_10" name="uml_class_diagram_for_nbxmpp_p_10">
+<area shape="rect" id="node66" href="nbxmpp.protocol.Error-class.html#__init__" title="Create error reply basing on the received &#39;node&#39; stanza and the &#39;error&#39; error condition" alt="" coords="148,729,427,748"/>
+<area shape="rect" id="node66" href="nbxmpp.protocol.Error-class.html#__dupstr__" title="Dummy function used as preventor of creating error node in reply to error node. I.e. you will not be able to serialise &quot;double&quot; error into string." alt="" coords="148,748,427,767"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.Error-class.html" title="Used to quickly transform received stanza into error reply" alt="" coords="136,697,437,773"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getTo" title="Return value of the &#39;to&#39; attribute" alt="" coords="197,391,377,409"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getFrom" title="Return value of the &#39;from&#39; attribute" alt="" coords="197,409,377,428"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getTimestamp" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="197,428,377,447"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getTimestamp2" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="197,447,377,465"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getID" title="Return the value of the &#39;id&#39; attribute" alt="" coords="197,465,377,484"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#setTo" title="Set the value of the &#39;to&#39; attribute" alt="" coords="197,484,377,503"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getType" title="Return the value of the &#39;type&#39; attribute" alt="" coords="197,503,377,521"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#setFrom" title="Set the value of the &#39;from&#39; attribute" alt="" coords="197,521,377,540"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#setType" title="Set the value of the &#39;type&#39; attribute" alt="" coords="197,540,377,559"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#setID" title="Set the value of the &#39;id&#39; attribute" alt="" coords="197,559,377,577"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getError" title="Return the error&#45;condition (if present) or the textual description of the error (otherwise)" alt="" coords="197,577,377,596"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getErrorMsg" title="Return the textual description of the error (if present) or the error condition" alt="" coords="197,596,377,615"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#getErrorCode" title="Return the error code. Obsolete." alt="" coords="197,615,377,633"/>
+<area shape="rect" id="node67" href="nbxmpp.protocol.Protocol-class.html#__setitem__" title="Set the item &#39;item&#39; to the value &#39;val&#39;" alt="" coords="197,652,377,671"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.Protocol-class.html" title="A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs and messages" alt="" coords="185,358,388,677"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="17,31,559,49"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="17,52,559,71"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="17,71,559,89"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="17,89,559,108"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="17,108,559,127"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="17,127,559,145"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="17,145,559,164"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="17,164,559,183"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="17,183,559,201"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="17,201,559,220"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="17,220,559,239"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="17,239,559,257"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="17,257,559,276"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="17,276,559,295"/>
+<area shape="rect" id="node68" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="17,313,559,332"/>
+<area shape="rect" id="node3" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="5,6,571,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_10.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_10" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Used to quickly transform received stanza into error reply
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Error-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">node</span>,
+ <span class="summary-sig-arg">error</span>,
+ <span class="summary-sig-arg">reply</span>=<span class="summary-sig-default">1</span>)</span><br />
+ Create error reply basing on the received 'node' stanza and the 'error'
+error condition</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Error.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Error-class.html#__dupstr__" class="summary-sig-name">__dupstr__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">dup1</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">dup2</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Dummy function used as preventor of creating error node in reply to error
+node. I.e. you will not be able to serialise &quot;double&quot; error into string.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Error.__dupstr__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.protocol.Protocol-class.html">Protocol</a></code></b>:
+ <code><a href="nbxmpp.protocol.Protocol-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getError">getError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorCode">getErrorCode</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorMsg">getErrorMsg</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getFrom">getFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getID">getID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getProperties">getProperties</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getStatusConditions">getStatusConditions</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp">getTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp2">getTimestamp2</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTo">getTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getType">getType</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setError">setError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setFrom">setFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setID">setID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTimestamp">setTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTo">setTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setType">setType</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">node</span>,
+ <span class="sig-arg">error</span>,
+ <span class="sig-arg">reply</span>=<span class="sig-default">1</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Error.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Create error reply basing on the received 'node' stanza and the 'error'
+error condition</p>
+<p>If the 'node' is not the received stanza but locally created ('to' and
+'from' fields needs not swapping) specify the 'reply' argument as false.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__dupstr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__dupstr__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">dup1</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">dup2</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Error.__dupstr__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Dummy function used as preventor of creating error node in reply to error
+node. I.e. you will not be able to serialise &quot;double&quot; error into string.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.ErrorNode-class.html b/doc/apidocs/nbxmpp.protocol.ErrorNode-class.html
new file mode 100644
index 0000000..e890758
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.ErrorNode-class.html
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.ErrorNode</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;ErrorNode
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.ErrorNode-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ErrorNode</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ErrorNode">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_11" name="uml_class_diagram_for_nbxmpp_p_11">
+<area shape="rect" id="node69" href="nbxmpp.protocol.ErrorNode-class.html#__init__" title="Mandatory parameter: name &#45; name of error condition. Optional parameters: code, typ, text. Used for backwards compartibility with older jabber protocol." alt="" coords="104,391,471,409"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.ErrorNode-class.html" title="XMPP&#45;style error element" alt="" coords="92,358,481,415"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="17,31,559,49"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="17,52,559,71"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="17,71,559,89"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="17,89,559,108"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="17,108,559,127"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="17,127,559,145"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="17,145,559,164"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="17,164,559,183"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="17,183,559,201"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="17,201,559,220"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="17,220,559,239"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="17,239,559,257"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="17,257,559,276"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="17,276,559,295"/>
+<area shape="rect" id="node70" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="17,313,559,332"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="5,6,571,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_11.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_11" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>XMPP-style error element</p>
+<p>In the case of stanza error should be attached to XMPP stanza.
+In the case of stream-level errors should be used separately.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.ErrorNode-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">code</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">text</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Mandatory parameter: name - name of error condition.
+Optional parameters: code, typ, text.
+Used for backwards compartibility with older jabber protocol.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ErrorNode.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">code</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">text</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ErrorNode.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Mandatory parameter: name - name of error condition.
+Optional parameters: code, typ, text.
+Used for backwards compartibility with older jabber protocol.
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Hashes-class.html b/doc/apidocs/nbxmpp.protocol.Hashes-class.html
new file mode 100644
index 0000000..297d5d6
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Hashes-class.html
@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Hashes</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Hashes
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Hashes-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Hashes</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Hashes">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_12" name="uml_class_diagram_for_nbxmpp_p_12">
+<area shape="rect" id="node71" href="nbxmpp.protocol.Hashes-class.html#supported" title="nbxmpp.protocol.Hashes.supported" alt="" coords="159,383,416,401"/>
+<area shape="rect" id="node71" href="nbxmpp.protocol.Hashes-class.html#__init__" title="Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if needed and separated from it by a space), attrs dictionary as the set of arguments, payload list as the set of textual strings and child nodes that this node carries within itself and &quot;parent&quot; argument that is another node that this one will be the child of. Also the __init__ can be provided with &quot;node&quot; argument that is either a text string containing exactly one node or another Node instance to begin with. If both &quot;node&quot; and other arguments is provided then the node initially created as replica of &quot;node&quot; provided and then modified to be compliant with other arguments." alt="" coords="159,404,416,423"/>
+<area shape="rect" id="node71" href="nbxmpp.protocol.Hashes-class.html#calculateHash" title="Calculate the hash and add it. It is preferable doing it here instead of doing it all over the place in Gajim." alt="" coords="159,423,416,441"/>
+<area shape="rect" id="node71" href="nbxmpp.protocol.Hashes-class.html#addHash" title="More than one hash can be added. Although it is permitted, it should not be done for big files because it could slow down Gajim." alt="" coords="159,441,416,460"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.Hashes-class.html" title="Hash elements for various XEPs as defined in XEP&#45;300" alt="" coords="147,358,427,466"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="17,31,559,49"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="17,52,559,71"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="17,71,559,89"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="17,89,559,108"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="17,108,559,127"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="17,127,559,145"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="17,145,559,164"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="17,164,559,183"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="17,183,559,201"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="17,201,559,220"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="17,220,559,239"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="17,239,559,257"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="17,257,559,276"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="17,276,559,295"/>
+<area shape="rect" id="node72" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="17,313,559,332"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="5,6,571,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_12.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_12" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Hash elements for various XEPs as defined in XEP-300
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Hashes-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">nsp</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hashes:0</code><code class="variable-quote">'</code></span>)</span><br />
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Hashes.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Hashes-class.html#calculateHash" class="summary-sig-name">calculateHash</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">algo</span>,
+ <span class="summary-sig-arg">file_string</span>)</span><br />
+ Calculate the hash and add it. It is preferable doing it here
+instead of doing it all over the place in Gajim.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Hashes.calculateHash">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Hashes-class.html#addHash" class="summary-sig-name">addHash</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">hash_</span>,
+ <span class="summary-sig-arg">algo</span>)</span><br />
+ More than one hash can be added. Although it is permitted, it should
+not be done for big files because it could slow down Gajim.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Hashes.addHash">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.protocol.Hashes-class.html#supported" class="summary-name">supported</a> = <code title="('md5', 'sha-1', 'sha-256', 'sha-512')"><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">md5</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">sha-1</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">sha-256</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">sha-512</code><code class="variable-quote">'</code><code class="variable-group">)</code></code>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">nsp</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">urn:xmpp:hashes:0</code><code class="variable-quote">'</code></span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Hashes.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="calculateHash"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">calculateHash</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">algo</span>,
+ <span class="sig-arg">file_string</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Hashes.calculateHash">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Calculate the hash and add it. It is preferable doing it here
+instead of doing it all over the place in Gajim.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="addHash"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">addHash</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">hash_</span>,
+ <span class="sig-arg">algo</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Hashes.addHash">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ More than one hash can be added. Although it is permitted, it should
+not be done for big files because it could slow down Gajim.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
+<a name="section-ClassVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variable Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariableDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="supported"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">supported</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">md5</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">sha-1</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">sha-256</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">sha-512</code><code class="variable-quote">'</code><code class="variable-group">)</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:05 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.HostGone-class.html b/doc/apidocs/nbxmpp.protocol.HostGone-class.html
new file mode 100644
index 0000000..6df630b
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.HostGone-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.HostGone</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;HostGone
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.HostGone-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class HostGone</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#HostGone">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_13" name="uml_class_diagram_for_nbxmpp_p_13">
+<area shape="rect" id="node1" href="nbxmpp.protocol.HostGone-class.html" title="nbxmpp.protocol.HostGone" alt="" coords="57,443,148,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node76" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node75" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node75" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_13.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_13" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.HostUnknown-class.html b/doc/apidocs/nbxmpp.protocol.HostUnknown-class.html
new file mode 100644
index 0000000..761c6b0
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.HostUnknown-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.HostUnknown</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;HostUnknown
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.HostUnknown-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class HostUnknown</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#HostUnknown">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_14" name="uml_class_diagram_for_nbxmpp_p_14">
+<area shape="rect" id="node1" href="nbxmpp.protocol.HostUnknown-class.html" title="nbxmpp.protocol.HostUnknown" alt="" coords="45,443,160,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node80" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node79" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node79" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_14.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_14" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.ImproperAddressing-class.html b/doc/apidocs/nbxmpp.protocol.ImproperAddressing-class.html
new file mode 100644
index 0000000..158a1ed
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.ImproperAddressing-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.ImproperAddressing</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;ImproperAddressing
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.ImproperAddressing-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ImproperAddressing</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ImproperAddressing">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_15" name="uml_class_diagram_for_nbxmpp_p_15">
+<area shape="rect" id="node1" href="nbxmpp.protocol.ImproperAddressing-class.html" title="nbxmpp.protocol.ImproperAddressing" alt="" coords="25,443,180,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node84" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node83" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node83" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_15.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_15" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.InternalServerError-class.html b/doc/apidocs/nbxmpp.protocol.InternalServerError-class.html
new file mode 100644
index 0000000..d833183
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.InternalServerError-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.InternalServerError</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;InternalServerError
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.InternalServerError-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class InternalServerError</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#InternalServerError">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_16" name="uml_class_diagram_for_nbxmpp_p_16">
+<area shape="rect" id="node1" href="nbxmpp.protocol.InternalServerError-class.html" title="nbxmpp.protocol.InternalServerError" alt="" coords="29,443,176,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node88" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node87" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node87" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_16.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_16" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.InvalidFrom-class.html b/doc/apidocs/nbxmpp.protocol.InvalidFrom-class.html
new file mode 100644
index 0000000..2dfe00f
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.InvalidFrom-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.InvalidFrom</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;InvalidFrom
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.InvalidFrom-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class InvalidFrom</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#InvalidFrom">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_17" name="uml_class_diagram_for_nbxmpp_p_17">
+<area shape="rect" id="node1" href="nbxmpp.protocol.InvalidFrom-class.html" title="nbxmpp.protocol.InvalidFrom" alt="" coords="53,443,152,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node92" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node91" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node91" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_17.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_17" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.InvalidID-class.html b/doc/apidocs/nbxmpp.protocol.InvalidID-class.html
new file mode 100644
index 0000000..0d2047a
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.InvalidID-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.InvalidID</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;InvalidID
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.InvalidID-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class InvalidID</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#InvalidID">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_18" name="uml_class_diagram_for_nbxmpp_p_18">
+<area shape="rect" id="node1" href="nbxmpp.protocol.InvalidID-class.html" title="nbxmpp.protocol.InvalidID" alt="" coords="63,443,140,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node96" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node95" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node95" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_18.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_18" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.InvalidNamespace-class.html b/doc/apidocs/nbxmpp.protocol.InvalidNamespace-class.html
new file mode 100644
index 0000000..969f616
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.InvalidNamespace-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.InvalidNamespace</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;InvalidNamespace
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.InvalidNamespace-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class InvalidNamespace</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#InvalidNamespace">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_19" name="uml_class_diagram_for_nbxmpp_p_19">
+<area shape="rect" id="node1" href="nbxmpp.protocol.InvalidNamespace-class.html" title="nbxmpp.protocol.InvalidNamespace" alt="" coords="31,443,172,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node100" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node99" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node99" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_19.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_19" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.InvalidXML-class.html b/doc/apidocs/nbxmpp.protocol.InvalidXML-class.html
new file mode 100644
index 0000000..5a3e55c
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.InvalidXML-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.InvalidXML</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;InvalidXML
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.InvalidXML-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class InvalidXML</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#InvalidXML">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_20" name="uml_class_diagram_for_nbxmpp_p_20">
+<area shape="rect" id="node1" href="nbxmpp.protocol.InvalidXML-class.html" title="nbxmpp.protocol.InvalidXML" alt="" coords="56,443,147,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node104" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node103" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node103" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_20.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_20" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Iq-class.html b/doc/apidocs/nbxmpp.protocol.Iq-class.html
new file mode 100644
index 0000000..2bc652f
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Iq-class.html
@@ -0,0 +1,765 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Iq</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Iq
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Iq-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Iq</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_21" name="uml_class_diagram_for_nbxmpp_p_21">
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#__init__" title="You can specify type, query namespace any additional attributes, recipient of the iq, sender of the iq, any additional payload (f.e. jabber:x:data node) and namespace in one go." alt="" coords="17,729,796,748"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#getQuery" title="Return the IQ&#39;s child element if it exists, None otherwise." alt="" coords="17,748,796,767"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#getQueryNS" title="Return the namespace of the &#39;query&#39; child element" alt="" coords="17,767,796,785"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#getQuerynode" title="Return the &#39;node&#39; attribute value of the &#39;query&#39; child element" alt="" coords="17,785,796,804"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#getQueryPayload" title="Return the &#39;query&#39; child element payload" alt="" coords="17,804,796,823"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#getQueryChildren" title="Return the &#39;query&#39; child element child nodes" alt="" coords="17,823,796,841"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#setQuery" title="Change the name of the query node, creating it if needed. Keep the existing name if none is given (use &#39;query&#39; if it&#39;s a creation). Return the query node." alt="" coords="17,841,796,860"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#setQueryNS" title="Set the namespace of the &#39;query&#39; child element" alt="" coords="17,860,796,879"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#setQueryPayload" title="Set the &#39;query&#39; child element payload" alt="" coords="17,879,796,897"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#setQuerynode" title="Set the &#39;node&#39; attribute value of the &#39;query&#39; child element" alt="" coords="17,897,796,916"/>
+<area shape="rect" id="node105" href="nbxmpp.protocol.Iq-class.html#buildReply" title="Build and return another Iq object of specified type. The to, from and query child node of new Iq are pre&#45;set as reply to this Iq." alt="" coords="17,916,796,935"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.Iq-class.html" title="XMPP Iq object &#45; get/set dialog mechanism" alt="" coords="5,697,808,941"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getTo" title="Return value of the &#39;to&#39; attribute" alt="" coords="316,391,496,409"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getFrom" title="Return value of the &#39;from&#39; attribute" alt="" coords="316,409,496,428"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getTimestamp" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="316,428,496,447"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getTimestamp2" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="316,447,496,465"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getID" title="Return the value of the &#39;id&#39; attribute" alt="" coords="316,465,496,484"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#setTo" title="Set the value of the &#39;to&#39; attribute" alt="" coords="316,484,496,503"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getType" title="Return the value of the &#39;type&#39; attribute" alt="" coords="316,503,496,521"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#setFrom" title="Set the value of the &#39;from&#39; attribute" alt="" coords="316,521,496,540"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#setType" title="Set the value of the &#39;type&#39; attribute" alt="" coords="316,540,496,559"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#setID" title="Set the value of the &#39;id&#39; attribute" alt="" coords="316,559,496,577"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getError" title="Return the error&#45;condition (if present) or the textual description of the error (otherwise)" alt="" coords="316,577,496,596"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getErrorMsg" title="Return the textual description of the error (if present) or the error condition" alt="" coords="316,596,496,615"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#getErrorCode" title="Return the error code. Obsolete." alt="" coords="316,615,496,633"/>
+<area shape="rect" id="node106" href="nbxmpp.protocol.Protocol-class.html#__setitem__" title="Set the item &#39;item&#39; to the value &#39;val&#39;" alt="" coords="316,652,496,671"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.Protocol-class.html" title="A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs and messages" alt="" coords="304,358,507,677"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="136,31,677,49"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="136,52,677,71"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="136,71,677,89"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="136,89,677,108"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="136,108,677,127"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="136,127,677,145"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="136,145,677,164"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="136,164,677,183"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="136,183,677,201"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="136,201,677,220"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="136,220,677,239"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="136,239,677,257"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="136,257,677,276"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="136,276,677,295"/>
+<area shape="rect" id="node107" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="136,313,677,332"/>
+<area shape="rect" id="node3" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="124,6,689,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_21.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_21" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+XMPP Iq object - get/set dialog mechanism
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">queryNS</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">to</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">frm</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">payload</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ You can specify type, query namespace any additional attributes,
+recipient of the iq, sender of the iq, any additional payload (f.e.
+jabber:x:data node) and namespace in one go.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#getQuery" class="summary-sig-name">getQuery</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the IQ's child element if it exists, None otherwise.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQuery">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#getQueryNS" class="summary-sig-name">getQueryNS</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the namespace of the 'query' child element</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQueryNS">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#getQuerynode" class="summary-sig-name">getQuerynode</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the 'node' attribute value of the 'query' child element</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQuerynode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#getQueryPayload" class="summary-sig-name">getQueryPayload</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the 'query' child element payload</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQueryPayload">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#getQueryChildren" class="summary-sig-name">getQueryChildren</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the 'query' child element child nodes</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQueryChildren">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#setQuery" class="summary-sig-name">setQuery</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Change the name of the query node, creating it if needed. Keep the
+existing name if none is given (use 'query' if it's a creation).
+Return the query node.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQuery">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#setQueryNS" class="summary-sig-name">setQueryNS</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">namespace</span>)</span><br />
+ Set the namespace of the 'query' child element</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQueryNS">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#setQueryPayload" class="summary-sig-name">setQueryPayload</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">payload</span>)</span><br />
+ Set the 'query' child element payload</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQueryPayload">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#setQuerynode" class="summary-sig-name">setQuerynode</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">node</span>)</span><br />
+ Set the 'node' attribute value of the 'query' child element</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQuerynode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Iq-class.html#buildReply" class="summary-sig-name">buildReply</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">typ</span>)</span><br />
+ Build and return another Iq object of specified type. The to, from and
+query child node of new Iq are pre-set as reply to this Iq.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.buildReply">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.protocol.Protocol-class.html">Protocol</a></code></b>:
+ <code><a href="nbxmpp.protocol.Protocol-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getError">getError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorCode">getErrorCode</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorMsg">getErrorMsg</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getFrom">getFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getID">getID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getProperties">getProperties</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getStatusConditions">getStatusConditions</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp">getTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp2">getTimestamp2</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTo">getTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getType">getType</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setError">setError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setFrom">setFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setID">setID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTimestamp">setTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTo">setTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setType">setType</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">queryNS</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">to</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">frm</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">payload</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>You can specify type, query namespace any additional attributes,
+recipient of the iq, sender of the iq, any additional payload (f.e.
+jabber:x:data node) and namespace in one go.</p>
+<p>Alternatively you can pass in the other XML object as the 'node'
+parameted to replicate it as an iq</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="getQuery"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getQuery</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQuery">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the IQ's child element if it exists, None otherwise.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getQueryNS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getQueryNS</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQueryNS">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the namespace of the 'query' child element
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getQuerynode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getQuerynode</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQuerynode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the 'node' attribute value of the 'query' child element
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getQueryPayload"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getQueryPayload</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQueryPayload">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the 'query' child element payload
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getQueryChildren"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getQueryChildren</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.getQueryChildren">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the 'query' child element child nodes
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setQuery"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setQuery</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQuery">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Change the name of the query node, creating it if needed. Keep the
+existing name if none is given (use 'query' if it's a creation).
+Return the query node.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setQueryNS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setQueryNS</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">namespace</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQueryNS">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the namespace of the 'query' child element
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setQueryPayload"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setQueryPayload</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">payload</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQueryPayload">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the 'query' child element payload
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setQuerynode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setQuerynode</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">node</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.setQuerynode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the 'node' attribute value of the 'query' child element
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="buildReply"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">buildReply</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">typ</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Iq.buildReply">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Build and return another Iq object of specified type. The to, from and
+query child node of new Iq are pre-set as reply to this Iq.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.JID-class.html b/doc/apidocs/nbxmpp.protocol.JID-class.html
new file mode 100644
index 0000000..accfd79
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.JID-class.html
@@ -0,0 +1,657 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.JID</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;JID
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.JID-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class JID</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID">source&nbsp;code</a></span></p>
+JID can be built from string, modified, compared, serialised into string
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">domain</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">resource</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span><br />
+ JID can be specified as string (jid argument) or as separate parts</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#getNode" class="summary-sig-name">getNode</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the node part of the JID</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getNode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#setNode" class="summary-sig-name">setNode</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">node</span>)</span><br />
+ Set the node part of the JID to new value. Specify None to remove
+the node part</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.setNode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#getDomain" class="summary-sig-name">getDomain</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the domain part of the JID</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getDomain">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#setDomain" class="summary-sig-name">setDomain</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">domain</span>)</span><br />
+ Set the domain part of the JID to new value</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.setDomain">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#getResource" class="summary-sig-name">getResource</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the resource part of the JID</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getResource">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#setResource" class="summary-sig-name">setResource</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resource</span>)</span><br />
+ Set the resource part of the JID to new value. Specify None to remove the
+resource part</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.setResource">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#getStripped" class="summary-sig-name">getStripped</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the bare representation of JID. I.e. string value w/o resource</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getStripped">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#__eq__" class="summary-sig-name">__eq__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">other</span>)</span><br />
+ Compare the JID to another instance or to string for equality</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__eq__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#__ne__" class="summary-sig-name">__ne__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">other</span>)</span><br />
+ Compare the JID to another instance or to string for non-equality</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__ne__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#bareMatch" class="summary-sig-name">bareMatch</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">other</span>)</span><br />
+ Compare the node and domain parts of the JID's for equality</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.bareMatch">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">wresource</span>=<span class="summary-sig-default">1</span>)</span><br />
+ Serialise JID into string</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__str__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.JID-class.html#__hash__" class="summary-sig-name">__hash__</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Produce hash of the JID, Allows to use JID objects as keys of the
+dictionary</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__hash__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">node</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">domain</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">resource</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>JID can be specified as string (jid argument) or as separate parts</p>
+<p>Examples:
+JID(<a class="rst-reference external" href="mailto:'node&#64;domain/resource" target="_top">'node&#64;domain/resource</a>')
+JID(node='node',domain='domain.org')</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getNode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getNode</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getNode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the node part of the JID
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setNode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setNode</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">node</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.setNode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the node part of the JID to new value. Specify None to remove
+the node part
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getDomain"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getDomain</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getDomain">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the domain part of the JID
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setDomain"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setDomain</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">domain</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.setDomain">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the domain part of the JID to new value
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getResource"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getResource</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getResource">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the resource part of the JID
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setResource"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setResource</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resource</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.setResource">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the resource part of the JID to new value. Specify None to remove the
+resource part
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getStripped"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getStripped</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.getStripped">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the bare representation of JID. I.e. string value w/o resource
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__eq__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__eq__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">other</span>)</span>
+ <br /><em class="fname">(Equality operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__eq__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Compare the JID to another instance or to string for equality
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__ne__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__ne__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">other</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__ne__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Compare the JID to another instance or to string for non-equality
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="bareMatch"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">bareMatch</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">other</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.bareMatch">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Compare the node and domain parts of the JID's for equality
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__str__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">wresource</span>=<span class="sig-default">1</span>)</span>
+ <br /><em class="fname">(Informal representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__str__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Serialise JID into string
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__hash__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Hashing function)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#JID.__hash__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Produce hash of the JID, Allows to use JID objects as keys of the
+dictionary
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Message-class.html b/doc/apidocs/nbxmpp.protocol.Message-class.html
new file mode 100644
index 0000000..3464774
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Message-class.html
@@ -0,0 +1,776 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Message</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Message
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Message-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Message</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_22" name="uml_class_diagram_for_nbxmpp_p_22">
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#__init__" title="You can specify recipient, text of message, type of message any additional attributes, sender of the message, any additional payload (f.e. jabber:x:delay element) and namespace in one go." alt="" coords="17,729,1083,748"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#getBody" title="Return text of the message" alt="" coords="17,748,1083,767"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#getXHTML" title="Return serialized xhtml&#45;im element text of the message" alt="" coords="17,767,1083,785"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#getSubject" title="Return subject of the message" alt="" coords="17,785,1083,804"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#getThread" title="Return thread of the message" alt="" coords="17,804,1083,823"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#setBody" title="Set the text of the message" alt="" coords="17,823,1083,841"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#setXHTML" title="Sets the xhtml text of the message (XEP&#45;0071). The parameter is the &quot;inner html&quot; to the body." alt="" coords="17,841,1083,860"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#setSubject" title="Set the subject of the message" alt="" coords="17,860,1083,879"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#setThread" title="Set the thread of the message" alt="" coords="17,879,1083,897"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#buildReply" title="Builds and returns another message object with specified text. The to, from, thread and type properties of new message are pre&#45;set as reply to this message" alt="" coords="17,897,1083,916"/>
+<area shape="rect" id="node108" href="nbxmpp.protocol.Message-class.html#getStatusCode" title="Return the status code of the message (for groupchat config change)" alt="" coords="17,916,1083,935"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.Message-class.html" title="XMPP Message stanza &#45; &quot;push&quot; mechanism" alt="" coords="5,697,1093,941"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getTo" title="Return value of the &#39;to&#39; attribute" alt="" coords="460,391,640,409"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getFrom" title="Return value of the &#39;from&#39; attribute" alt="" coords="460,409,640,428"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getTimestamp" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="460,428,640,447"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getTimestamp2" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="460,447,640,465"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getID" title="Return the value of the &#39;id&#39; attribute" alt="" coords="460,465,640,484"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#setTo" title="Set the value of the &#39;to&#39; attribute" alt="" coords="460,484,640,503"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getType" title="Return the value of the &#39;type&#39; attribute" alt="" coords="460,503,640,521"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#setFrom" title="Set the value of the &#39;from&#39; attribute" alt="" coords="460,521,640,540"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#setType" title="Set the value of the &#39;type&#39; attribute" alt="" coords="460,540,640,559"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#setID" title="Set the value of the &#39;id&#39; attribute" alt="" coords="460,559,640,577"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getError" title="Return the error&#45;condition (if present) or the textual description of the error (otherwise)" alt="" coords="460,577,640,596"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getErrorMsg" title="Return the textual description of the error (if present) or the error condition" alt="" coords="460,596,640,615"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#getErrorCode" title="Return the error code. Obsolete." alt="" coords="460,615,640,633"/>
+<area shape="rect" id="node109" href="nbxmpp.protocol.Protocol-class.html#__setitem__" title="Set the item &#39;item&#39; to the value &#39;val&#39;" alt="" coords="460,652,640,671"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.Protocol-class.html" title="A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs and messages" alt="" coords="448,358,651,677"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="280,31,821,49"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="280,52,821,71"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="280,71,821,89"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="280,89,821,108"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="280,108,821,127"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="280,127,821,145"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="280,145,821,164"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="280,164,821,183"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="280,183,821,201"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="280,201,821,220"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="280,220,821,239"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="280,239,821,257"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="280,257,821,276"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="280,276,821,295"/>
+<area shape="rect" id="node110" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="280,313,821,332"/>
+<area shape="rect" id="node3" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="268,6,833,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_22.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_22" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+XMPP Message stanza - &quot;push&quot; mechanism
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">to</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">body</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">xhtml</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">subject</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">frm</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">payload</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">timestamp</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ You can specify recipient, text of message, type of message any
+additional attributes, sender of the message, any additional payload
+(f.e. jabber:x:delay element) and namespace in one go.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#getBody" class="summary-sig-name">getBody</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return text of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getBody">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#getXHTML" class="summary-sig-name">getXHTML</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">xmllang</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Return serialized xhtml-im element text of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getXHTML">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#getSubject" class="summary-sig-name">getSubject</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return subject of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getSubject">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#getThread" class="summary-sig-name">getThread</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return thread of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getThread">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#setBody" class="summary-sig-name">setBody</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the text of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setBody">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#setXHTML" class="summary-sig-name">setXHTML</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>,
+ <span class="summary-sig-arg">xmllang</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Sets the xhtml text of the message (XEP-0071). The parameter is the
+&quot;inner html&quot; to the body.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setXHTML">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#setSubject" class="summary-sig-name">setSubject</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the subject of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setSubject">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#setThread" class="summary-sig-name">setThread</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the thread of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setThread">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#buildReply" class="summary-sig-name">buildReply</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">text</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Builds and returns another message object with specified text. The to,
+from, thread and type properties of new message are pre-set as reply to
+this message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.buildReply">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Message-class.html#getStatusCode" class="summary-sig-name">getStatusCode</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the status code of the message (for groupchat config change)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getStatusCode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.protocol.Protocol-class.html">Protocol</a></code></b>:
+ <code><a href="nbxmpp.protocol.Protocol-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getError">getError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorCode">getErrorCode</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorMsg">getErrorMsg</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getFrom">getFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getID">getID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getProperties">getProperties</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getStatusConditions">getStatusConditions</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp">getTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp2">getTimestamp2</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTo">getTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getType">getType</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setError">setError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setFrom">setFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setID">setID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTimestamp">setTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTo">setTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setType">setType</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">to</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">body</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">xhtml</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">subject</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">frm</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">payload</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">timestamp</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>You can specify recipient, text of message, type of message any
+additional attributes, sender of the message, any additional payload
+(f.e. jabber:x:delay element) and namespace in one go.</p>
+<p>Alternatively you can pass in the other XML object as the 'node'
+parameted to replicate it as message</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="getBody"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getBody</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getBody">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return text of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getXHTML"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getXHTML</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">xmllang</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getXHTML">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Return serialized xhtml-im element text of the message</p>
+<p>TODO: Returning a DOM could make rendering faster.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getSubject"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getSubject</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getSubject">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return subject of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getThread"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getThread</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getThread">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return thread of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setBody"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setBody</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setBody">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the text of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setXHTML"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setXHTML</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>,
+ <span class="sig-arg">xmllang</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setXHTML">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Sets the xhtml text of the message (XEP-0071). The parameter is the
+&quot;inner html&quot; to the body.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setSubject"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setSubject</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setSubject">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the subject of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setThread"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setThread</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.setThread">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the thread of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="buildReply"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">buildReply</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">text</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.buildReply">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Builds and returns another message object with specified text. The to,
+from, thread and type properties of new message are pre-set as reply to
+this message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getStatusCode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getStatusCode</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Message.getStatusCode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the status code of the message (for groupchat config change)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.NodeProcessed-class.html b/doc/apidocs/nbxmpp.protocol.NodeProcessed-class.html
new file mode 100644
index 0000000..08bd2f5
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.NodeProcessed-class.html
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.NodeProcessed</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;NodeProcessed
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.NodeProcessed-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NodeProcessed</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#NodeProcessed">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_23" name="uml_class_diagram_for_nbxmpp_p_23">
+<area shape="rect" id="node1" href="nbxmpp.protocol.NodeProcessed-class.html" title="Exception that should be raised by handler when the handling should be stopped" alt="" coords="39,379,164,423"/>
+<area shape="rect" id="node112" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node112" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node113" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_23.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_23" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Exception that should be raised by handler when the handling should be
+stopped
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.NotAuthorized-class.html b/doc/apidocs/nbxmpp.protocol.NotAuthorized-class.html
new file mode 100644
index 0000000..6a13a00
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.NotAuthorized-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.NotAuthorized</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;NotAuthorized
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.NotAuthorized-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NotAuthorized</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#NotAuthorized">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_24" name="uml_class_diagram_for_nbxmpp_p_24">
+<area shape="rect" id="node1" href="nbxmpp.protocol.NotAuthorized-class.html" title="nbxmpp.protocol.NotAuthorized" alt="" coords="43,443,160,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node117" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node116" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node116" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_24.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_24" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.PolicyViolation-class.html b/doc/apidocs/nbxmpp.protocol.PolicyViolation-class.html
new file mode 100644
index 0000000..ec4199d
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.PolicyViolation-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.PolicyViolation</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;PolicyViolation
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.PolicyViolation-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class PolicyViolation</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#PolicyViolation">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_25" name="uml_class_diagram_for_nbxmpp_p_25">
+<area shape="rect" id="node1" href="nbxmpp.protocol.PolicyViolation-class.html" title="nbxmpp.protocol.PolicyViolation" alt="" coords="44,443,161,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node121" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node120" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node120" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_25.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_25" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Presence-class.html b/doc/apidocs/nbxmpp.protocol.Presence-class.html
new file mode 100644
index 0000000..49047e8
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Presence-class.html
@@ -0,0 +1,950 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Presence</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Presence
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Presence-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Presence</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_26" name="uml_class_diagram_for_nbxmpp_p_26">
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#__init__" title="You can specify recipient, type of message, priority, show and status values any additional attributes, sender of the presence, timestamp, any additional payload (f.e. jabber:x:delay element) and namespace in one go. Alternatively you can pass in the other XML object as the &#39;node&#39; parameted to replicate it as presence" alt="" coords="17,729,1085,748"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getPriority" title="Return the priority of the message" alt="" coords="17,748,1085,767"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getShow" title="Return the show value of the message" alt="" coords="17,767,1085,785"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getStatus" title="Return the status string of the message" alt="" coords="17,785,1085,804"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#setPriority" title="Set the priority of the message" alt="" coords="17,804,1085,823"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#setShow" title="Set the show value of the message" alt="" coords="17,823,1085,841"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#setStatus" title="Set the status string of the message" alt="" coords="17,841,1085,860"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getRole" title="Return the presence role (for groupchat)" alt="" coords="17,860,1085,879"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getAffiliation" title="Return the presence affiliation (for groupchat)" alt="" coords="17,879,1085,897"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getNewNick" title="Return the status code of the presence (for groupchat)" alt="" coords="17,897,1085,916"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getJid" title="Return the presence jid (for groupchat)" alt="" coords="17,916,1085,935"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getReason" title="Returns the reason of the presence (for groupchat)" alt="" coords="17,935,1085,953"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getActor" title="Return the reason of the presence (for groupchat)" alt="" coords="17,953,1085,972"/>
+<area shape="rect" id="node122" href="nbxmpp.protocol.Presence-class.html#getStatusCode" title="Return the status code of the presence (for groupchat)" alt="" coords="17,972,1085,991"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.Presence-class.html" title="nbxmpp.protocol.Presence" alt="" coords="5,697,1096,997"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getTo" title="Return value of the &#39;to&#39; attribute" alt="" coords="461,391,641,409"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getFrom" title="Return value of the &#39;from&#39; attribute" alt="" coords="461,409,641,428"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getTimestamp" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="461,428,641,447"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getTimestamp2" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="461,447,641,465"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getID" title="Return the value of the &#39;id&#39; attribute" alt="" coords="461,465,641,484"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#setTo" title="Set the value of the &#39;to&#39; attribute" alt="" coords="461,484,641,503"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getType" title="Return the value of the &#39;type&#39; attribute" alt="" coords="461,503,641,521"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#setFrom" title="Set the value of the &#39;from&#39; attribute" alt="" coords="461,521,641,540"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#setType" title="Set the value of the &#39;type&#39; attribute" alt="" coords="461,540,641,559"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#setID" title="Set the value of the &#39;id&#39; attribute" alt="" coords="461,559,641,577"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getError" title="Return the error&#45;condition (if present) or the textual description of the error (otherwise)" alt="" coords="461,577,641,596"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getErrorMsg" title="Return the textual description of the error (if present) or the error condition" alt="" coords="461,596,641,615"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#getErrorCode" title="Return the error code. Obsolete." alt="" coords="461,615,641,633"/>
+<area shape="rect" id="node123" href="nbxmpp.protocol.Protocol-class.html#__setitem__" title="Set the item &#39;item&#39; to the value &#39;val&#39;" alt="" coords="461,652,641,671"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.Protocol-class.html" title="A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs and messages" alt="" coords="449,358,652,677"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="281,31,823,49"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="281,52,823,71"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="281,71,823,89"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="281,89,823,108"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="281,108,823,127"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="281,127,823,145"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="281,145,823,164"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="281,164,823,183"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="281,183,823,201"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="281,201,823,220"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="281,220,823,239"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="281,239,823,257"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="281,257,823,276"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="281,276,823,295"/>
+<area shape="rect" id="node124" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="281,313,823,332"/>
+<area shape="rect" id="node3" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="269,6,835,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_26.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_26" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">to</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">priority</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">show</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">status</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">frm</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">timestamp</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">payload</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ You can specify recipient, type of message, priority, show and status
+values any additional attributes, sender of the presence, timestamp, any
+additional payload (f.e. jabber:x:delay element) and namespace in one go.
+Alternatively you can pass in the other XML object as the 'node'
+parameted to replicate it as presence</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getPriority" class="summary-sig-name">getPriority</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the priority of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getPriority">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getShow" class="summary-sig-name">getShow</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the show value of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getShow">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getStatus" class="summary-sig-name">getStatus</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the status string of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getStatus">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#setPriority" class="summary-sig-name">setPriority</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the priority of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.setPriority">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#setShow" class="summary-sig-name">setShow</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the show value of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.setShow">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#setStatus" class="summary-sig-name">setStatus</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the status string of the message</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.setStatus">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#_muc_getItemAttr" class="summary-sig-name" onclick="show_private();">_muc_getItemAttr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">attr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence._muc_getItemAttr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#_muc_getSubTagDataAttr" class="summary-sig-name" onclick="show_private();">_muc_getSubTagDataAttr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">attr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence._muc_getSubTagDataAttr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getRole" class="summary-sig-name">getRole</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the presence role (for groupchat)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getRole">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getAffiliation" class="summary-sig-name">getAffiliation</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the presence affiliation (for groupchat)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getAffiliation">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getNewNick" class="summary-sig-name">getNewNick</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the status code of the presence (for groupchat)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getNewNick">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getJid" class="summary-sig-name">getJid</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the presence jid (for groupchat)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getJid">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getReason" class="summary-sig-name">getReason</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Returns the reason of the presence (for groupchat)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getReason">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getActor" class="summary-sig-name">getActor</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the reason of the presence (for groupchat)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getActor">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Presence-class.html#getStatusCode" class="summary-sig-name">getStatusCode</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the status code of the presence (for groupchat)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getStatusCode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.protocol.Protocol-class.html">Protocol</a></code></b>:
+ <code><a href="nbxmpp.protocol.Protocol-class.html#__setitem__">__setitem__</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getError">getError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorCode">getErrorCode</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getErrorMsg">getErrorMsg</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getFrom">getFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getID">getID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getProperties">getProperties</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getStatusConditions">getStatusConditions</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp">getTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp2">getTimestamp2</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getTo">getTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#getType">getType</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setError">setError</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setFrom">setFrom</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setID">setID</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTimestamp">setTimestamp</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setTo">setTo</a></code>,
+ <code><a href="nbxmpp.protocol.Protocol-class.html#setType">setType</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">to</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">priority</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">show</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">status</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">frm</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">timestamp</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">payload</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">jabber:client</code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ You can specify recipient, type of message, priority, show and status
+values any additional attributes, sender of the presence, timestamp, any
+additional payload (f.e. jabber:x:delay element) and namespace in one go.
+Alternatively you can pass in the other XML object as the 'node'
+parameted to replicate it as presence
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="getPriority"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getPriority</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getPriority">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the priority of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getShow"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getShow</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getShow">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the show value of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getStatus"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getStatus</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getStatus">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the status string of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setPriority"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setPriority</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.setPriority">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the priority of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setShow"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setShow</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.setShow">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the show value of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setStatus"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setStatus</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.setStatus">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the status string of the message
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_muc_getItemAttr"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_muc_getItemAttr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">attr</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence._muc_getItemAttr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_muc_getSubTagDataAttr"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_muc_getSubTagDataAttr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">attr</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence._muc_getSubTagDataAttr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getRole"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getRole</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getRole">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the presence role (for groupchat)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getAffiliation"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getAffiliation</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getAffiliation">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the presence affiliation (for groupchat)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getNewNick"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getNewNick</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getNewNick">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the status code of the presence (for groupchat)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getJid"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getJid</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getJid">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the presence jid (for groupchat)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getReason"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getReason</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getReason">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Returns the reason of the presence (for groupchat)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getActor"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getActor</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getActor">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the reason of the presence (for groupchat)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getStatusCode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getStatusCode</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Presence.getStatusCode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the status code of the presence (for groupchat)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.Protocol-class.html b/doc/apidocs/nbxmpp.protocol.Protocol-class.html
new file mode 100644
index 0000000..1c1998b
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.Protocol-class.html
@@ -0,0 +1,1040 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.Protocol</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;Protocol
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.Protocol-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Protocol</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_27" name="uml_class_diagram_for_nbxmpp_p_27">
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#__init__" title="Constructor, name is the name of the stanza i.e. &#39;message&#39; or &#39;presence&#39;or &#39;iq&#39;" alt="" coords="17,391,851,409"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getTo" title="Return value of the &#39;to&#39; attribute" alt="" coords="17,409,851,428"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getFrom" title="Return value of the &#39;from&#39; attribute" alt="" coords="17,428,851,447"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getTimestamp" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="17,447,851,465"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getTimestamp2" title="Return the timestamp in the &#39;yyyymmddThhmmss&#39; format" alt="" coords="17,465,851,484"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getID" title="Return the value of the &#39;id&#39; attribute" alt="" coords="17,484,851,503"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#setTo" title="Set the value of the &#39;to&#39; attribute" alt="" coords="17,503,851,521"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getType" title="Return the value of the &#39;type&#39; attribute" alt="" coords="17,521,851,540"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#setFrom" title="Set the value of the &#39;from&#39; attribute" alt="" coords="17,540,851,559"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#setType" title="Set the value of the &#39;type&#39; attribute" alt="" coords="17,559,851,577"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#setID" title="Set the value of the &#39;id&#39; attribute" alt="" coords="17,577,851,596"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getError" title="Return the error&#45;condition (if present) or the textual description of the error (otherwise)" alt="" coords="17,596,851,615"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#getErrorMsg" title="Return the textual description of the error (if present) or the error condition" alt="" coords="17,615,851,633"/>
+<area shape="rect" id="node125" href="nbxmpp.protocol.Protocol-class.html#__setitem__" title="Set the item &#39;item&#39; to the value &#39;val&#39;" alt="" coords="17,652,851,671"/>
+<area shape="rect" id="node1" href="nbxmpp.protocol.Protocol-class.html" title="A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs and messages" alt="" coords="5,358,861,677"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.Presence-class.html" title="nbxmpp.protocol.Presence" alt="" coords="236,697,332,735"/>
+<area shape="rect" id="node3" href="nbxmpp.protocol.Iq-class.html" title="XMPP Iq object &#45; get/set dialog mechanism" alt="" coords="361,697,409,735"/>
+<area shape="rect" id="node4" href="nbxmpp.protocol.Message-class.html" title="XMPP Message stanza &#45; &quot;push&quot; mechanism" alt="" coords="439,697,532,735"/>
+<area shape="rect" id="node6" href="nbxmpp.protocol.Error-class.html" title="Used to quickly transform received stanza into error reply" alt="" coords="561,697,628,735"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="164,31,705,49"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="164,52,705,71"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="164,71,705,89"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="164,89,705,108"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="164,108,705,127"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="164,127,705,145"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="164,145,705,164"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="164,164,705,183"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="164,183,705,201"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="164,201,705,220"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="164,220,705,239"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="164,239,705,257"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="164,257,705,276"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#getNamespace" title="Return the namespace of node" alt="" coords="164,276,705,295"/>
+<area shape="rect" id="node126" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="164,313,705,332"/>
+<area shape="rect" id="node5" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="152,6,717,338"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_27.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_27" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs
+and messages
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">to</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">typ</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">frm</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">payload</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">timestamp</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">xmlns</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Constructor, name is the name of the stanza
+i.e. 'message' or 'presence'or 'iq'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getTo" class="summary-sig-name">getTo</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return value of the 'to' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getTo">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getFrom" class="summary-sig-name">getFrom</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return value of the 'from' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getFrom">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp" class="summary-sig-name">getTimestamp</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the timestamp in the 'yyyymmddThhmmss' format</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getTimestamp">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getTimestamp2" class="summary-sig-name">getTimestamp2</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the timestamp in the 'yyyymmddThhmmss' format</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getTimestamp2">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getID" class="summary-sig-name">getID</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the value of the 'id' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getID">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#setTo" class="summary-sig-name">setTo</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the value of the 'to' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setTo">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getType" class="summary-sig-name">getType</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the value of the 'type' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getType">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#setFrom" class="summary-sig-name">setFrom</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the value of the 'from' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setFrom">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#setType" class="summary-sig-name">setType</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the value of the 'type' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setType">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#setID" class="summary-sig-name">setID</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the value of the 'id' attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setID">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getError" class="summary-sig-name">getError</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the error-condition (if present) or the textual description
+of the error (otherwise)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getError">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getErrorMsg" class="summary-sig-name">getErrorMsg</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the textual description of the error (if present)
+or the error condition</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getErrorMsg">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getErrorCode" class="summary-sig-name">getErrorCode</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the error code. Obsolete.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getErrorCode">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getStatusConditions" class="summary-sig-name">getStatusConditions</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the status conditions list as defined in XEP-0306.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getStatusConditions">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#setError" class="summary-sig-name">setError</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">error</span>,
+ <span class="summary-sig-arg">code</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Set the error code. Obsolete. Use error-conditions instead</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setError">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#setTimestamp" class="summary-sig-name">setTimestamp</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Set the timestamp. timestamp should be the yyyymmddThhmmss string</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setTimestamp">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#getProperties" class="summary-sig-name">getProperties</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the list of namespaces to which belongs the direct childs of element</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getProperties">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.protocol.Protocol-class.html#__setitem__" class="summary-sig-name">__setitem__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">item</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set the item 'item' to the value 'val'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.__setitem__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#addData">addData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getData">getData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getName">getName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setData">setData</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setName">setName</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a></code>,
+ <code><a href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a></code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.Node-class.html">simplexml.Node</a></code></b>:
+ <code><a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION">FORCE_NODE_RECREATION</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">to</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">typ</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">frm</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">payload</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">timestamp</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">xmlns</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Constructor, name is the name of the stanza
+i.e. 'message' or 'presence'or 'iq'</p>
+<p>to is the value of 'to' attribure, 'typ' - 'type' attribute
+frn - from attribure, attrs - other attributes mapping,
+payload - same meaning as for simplexml payload definition
+timestamp - the time value that needs to be stamped over stanza
+xmlns - namespace of top stanza node
+node - parsed or unparsed stana to be taken as prototype.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTo"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTo</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getTo">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return value of the 'to' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getFrom"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getFrom</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getFrom">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return value of the 'from' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTimestamp"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTimestamp</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getTimestamp">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the timestamp in the 'yyyymmddThhmmss' format
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTimestamp2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTimestamp2</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getTimestamp2">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the timestamp in the 'yyyymmddThhmmss' format
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getID</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getID">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the value of the 'id' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setTo"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setTo</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setTo">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the value of the 'to' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getType"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getType</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getType">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the value of the 'type' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setFrom"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setFrom</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setFrom">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the value of the 'from' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setType"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setType</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setType">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the value of the 'type' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setID"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setID</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setID">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the value of the 'id' attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getError"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getError</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getError">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the error-condition (if present) or the textual description
+of the error (otherwise)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getErrorMsg"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getErrorMsg</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getErrorMsg">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the textual description of the error (if present)
+or the error condition
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getErrorCode"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getErrorCode</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getErrorCode">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the error code. Obsolete.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getStatusConditions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getStatusConditions</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getStatusConditions">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the status conditions list as defined in XEP-0306.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setError"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setError</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">error</span>,
+ <span class="sig-arg">code</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setError">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the error code. Obsolete. Use error-conditions instead
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setTimestamp"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setTimestamp</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.setTimestamp">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the timestamp. timestamp should be the yyyymmddThhmmss string
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getProperties"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getProperties</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.getProperties">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the list of namespaces to which belongs the direct childs of element
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__setitem__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__setitem__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">item</span>,
+ <span class="sig-arg">val</span>)</span>
+ <br /><em class="fname">(Index assignment operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#Protocol.__setitem__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set the item 'item' to the value 'val'
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.simplexml.Node-class.html#__setitem__">simplexml.Node.__setitem__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.RemoteConnectionFailed-class.html b/doc/apidocs/nbxmpp.protocol.RemoteConnectionFailed-class.html
new file mode 100644
index 0000000..8a71ee6
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.RemoteConnectionFailed-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.RemoteConnectionFailed</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;RemoteConnectionFailed
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.RemoteConnectionFailed-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class RemoteConnectionFailed</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#RemoteConnectionFailed">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_28" name="uml_class_diagram_for_nbxmpp_p_28">
+<area shape="rect" id="node1" href="nbxmpp.protocol.RemoteConnectionFailed-class.html" title="nbxmpp.protocol.RemoteConnectionFailed" alt="" coords="11,443,192,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node134" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node133" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node133" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_28.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_28" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:06 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.ResourceConstraint-class.html b/doc/apidocs/nbxmpp.protocol.ResourceConstraint-class.html
new file mode 100644
index 0000000..27e575a
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.ResourceConstraint-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.ResourceConstraint</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;ResourceConstraint
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.ResourceConstraint-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ResourceConstraint</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#ResourceConstraint">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_29" name="uml_class_diagram_for_nbxmpp_p_29">
+<area shape="rect" id="node1" href="nbxmpp.protocol.ResourceConstraint-class.html" title="nbxmpp.protocol.ResourceConstraint" alt="" coords="27,443,176,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node138" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node137" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node137" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_29.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_29" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.RestrictedXML-class.html b/doc/apidocs/nbxmpp.protocol.RestrictedXML-class.html
new file mode 100644
index 0000000..a88e18d
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.RestrictedXML-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.RestrictedXML</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;RestrictedXML
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.RestrictedXML-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class RestrictedXML</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#RestrictedXML">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_30" name="uml_class_diagram_for_nbxmpp_p_30">
+<area shape="rect" id="node1" href="nbxmpp.protocol.RestrictedXML-class.html" title="nbxmpp.protocol.RestrictedXML" alt="" coords="45,443,160,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node142" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node141" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node141" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_30.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_30" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.SeeOtherHost-class.html b/doc/apidocs/nbxmpp.protocol.SeeOtherHost-class.html
new file mode 100644
index 0000000..282de79
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.SeeOtherHost-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.SeeOtherHost</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;SeeOtherHost
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.SeeOtherHost-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class SeeOtherHost</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#SeeOtherHost">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_31" name="uml_class_diagram_for_nbxmpp_p_31">
+<area shape="rect" id="node1" href="nbxmpp.protocol.SeeOtherHost-class.html" title="nbxmpp.protocol.SeeOtherHost" alt="" coords="44,443,161,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node146" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node145" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node145" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_31.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_31" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.StreamError-class.html b/doc/apidocs/nbxmpp.protocol.StreamError-class.html
new file mode 100644
index 0000000..888cfda
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.StreamError-class.html
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.StreamError</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;StreamError
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.StreamError-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class StreamError</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#StreamError">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_32" name="uml_class_diagram_for_nbxmpp_p_32">
+<area shape="rect" id="node1" href="nbxmpp.protocol.HostGone-class.html" title="nbxmpp.protocol.HostGone" alt="" coords="5,443,107,482"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.BadNamespacePrefix-class.html" title="nbxmpp.protocol.BadNamespacePrefix" alt="" coords="136,443,309,482"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="2039,31,2208,49"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="2039,49,2208,68"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="2039,71,2208,89"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="2039,89,2208,108"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="x[y]" alt="" coords="2039,108,2208,127"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="x[i:j]" alt="" coords="2039,127,2208,145"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="helper for pickle" alt="" coords="2039,145,2208,164"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="repr(x)" alt="" coords="2039,164,2208,183"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="2039,183,2208,201"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="2039,201,2208,220"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="str(x)" alt="" coords="2039,220,2208,239"/>
+<area shape="rect" id="node149" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="2039,239,2208,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="2027,6,2219,263"/>
+<area shape="rect" id="node148" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="2055,316,2192,335"/>
+<area shape="rect" id="node148" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="2055,335,2192,353"/>
+<area shape="rect" id="node8" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="2043,283,2203,359"/>
+<area shape="rect" id="node4" href="nbxmpp.protocol.UnsupportedEncoding-class.html" title="nbxmpp.protocol.UnsupportedEncoding" alt="" coords="339,443,515,482"/>
+<area shape="rect" id="node5" href="nbxmpp.protocol.RemoteConnectionFailed-class.html" title="nbxmpp.protocol.RemoteConnectionFailed" alt="" coords="544,443,736,482"/>
+<area shape="rect" id="node6" href="nbxmpp.protocol.InvalidNamespace-class.html" title="nbxmpp.protocol.InvalidNamespace" alt="" coords="765,443,917,482"/>
+<area shape="rect" id="node7" href="nbxmpp.protocol.PolicyViolation-class.html" title="nbxmpp.protocol.PolicyViolation" alt="" coords="947,443,1075,482"/>
+<area shape="rect" id="node13" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="2071,379,2175,423"/>
+<area shape="rect" id="node9" href="nbxmpp.protocol.UnsupportedStanzaType-class.html" title="nbxmpp.protocol.UnsupportedStanzaType" alt="" coords="1104,443,1296,482"/>
+<area shape="rect" id="node10" href="nbxmpp.protocol.SystemShutdown-class.html" title="nbxmpp.protocol.SystemShutdown" alt="" coords="1325,443,1475,482"/>
+<area shape="rect" id="node11" href="nbxmpp.protocol.BadFormat-class.html" title="nbxmpp.protocol.BadFormat" alt="" coords="1504,443,1611,482"/>
+<area shape="rect" id="node12" href="nbxmpp.protocol.ImproperAddressing-class.html" title="nbxmpp.protocol.ImproperAddressing" alt="" coords="1640,443,1805,482"/>
+<area shape="rect" id="node14" href="nbxmpp.protocol.InvalidID-class.html" title="nbxmpp.protocol.InvalidID" alt="" coords="1835,443,1923,482"/>
+<area shape="rect" id="node15" href="nbxmpp.protocol.XMLNotWellFormed-class.html" title="nbxmpp.protocol.XMLNotWellFormed" alt="" coords="1952,443,2109,482"/>
+<area shape="rect" id="node16" href="nbxmpp.protocol.ConnectionTimeout-class.html" title="nbxmpp.protocol.ConnectionTimeout" alt="" coords="2139,443,2299,482"/>
+<area shape="rect" id="node17" href="nbxmpp.protocol.RestrictedXML-class.html" title="nbxmpp.protocol.RestrictedXML" alt="" coords="2328,443,2453,482"/>
+<area shape="rect" id="node18" href="nbxmpp.protocol.Conflict-class.html" title="nbxmpp.protocol.Conflict" alt="" coords="2483,443,2565,482"/>
+<area shape="rect" id="node19" href="nbxmpp.protocol.InvalidFrom-class.html" title="nbxmpp.protocol.InvalidFrom" alt="" coords="2595,443,2704,482"/>
+<area shape="rect" id="node20" href="nbxmpp.protocol.HostUnknown-class.html" title="nbxmpp.protocol.HostUnknown" alt="" coords="2733,443,2859,482"/>
+<area shape="rect" id="node21" href="nbxmpp.protocol.InvalidXML-class.html" title="nbxmpp.protocol.InvalidXML" alt="" coords="2888,443,2989,482"/>
+<area shape="rect" id="node22" href="nbxmpp.protocol.InternalServerError-class.html" title="nbxmpp.protocol.InternalServerError" alt="" coords="3019,443,3176,482"/>
+<area shape="rect" id="node23" href="nbxmpp.protocol.ResourceConstraint-class.html" title="nbxmpp.protocol.ResourceConstraint" alt="" coords="3205,443,3365,482"/>
+<area shape="rect" id="node24" href="nbxmpp.protocol.SeeOtherHost-class.html" title="nbxmpp.protocol.SeeOtherHost" alt="" coords="3395,443,3523,482"/>
+<area shape="rect" id="node25" href="nbxmpp.protocol.UnsupportedVersion-class.html" title="nbxmpp.protocol.UnsupportedVersion" alt="" coords="3552,443,3717,482"/>
+<area shape="rect" id="node26" href="nbxmpp.protocol.NotAuthorized-class.html" title="nbxmpp.protocol.NotAuthorized" alt="" coords="3747,443,3875,482"/>
+<area shape="rect" id="node27" href="nbxmpp.protocol.UndefinedCondition-class.html" title="nbxmpp.protocol.UndefinedCondition" alt="" coords="3904,443,4064,482"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_32.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_32" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Base exception class for stream errors
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.SystemShutdown-class.html b/doc/apidocs/nbxmpp.protocol.SystemShutdown-class.html
new file mode 100644
index 0000000..363bb29
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.SystemShutdown-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.SystemShutdown</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;SystemShutdown
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.SystemShutdown-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class SystemShutdown</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#SystemShutdown">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_33" name="uml_class_diagram_for_nbxmpp_p_33">
+<area shape="rect" id="node1" href="nbxmpp.protocol.SystemShutdown-class.html" title="nbxmpp.protocol.SystemShutdown" alt="" coords="33,443,172,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node177" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node176" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node176" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_33.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_33" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.UndefinedCondition-class.html b/doc/apidocs/nbxmpp.protocol.UndefinedCondition-class.html
new file mode 100644
index 0000000..e1c2834
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.UndefinedCondition-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.UndefinedCondition</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;UndefinedCondition
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.UndefinedCondition-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class UndefinedCondition</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#UndefinedCondition">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_34" name="uml_class_diagram_for_nbxmpp_p_34">
+<area shape="rect" id="node1" href="nbxmpp.protocol.UndefinedCondition-class.html" title="nbxmpp.protocol.UndefinedCondition" alt="" coords="27,443,176,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node181" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node180" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node180" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_34.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_34" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.UnsupportedEncoding-class.html b/doc/apidocs/nbxmpp.protocol.UnsupportedEncoding-class.html
new file mode 100644
index 0000000..832cf8e
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.UnsupportedEncoding-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.UnsupportedEncoding</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;UnsupportedEncoding
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.UnsupportedEncoding-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class UnsupportedEncoding</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#UnsupportedEncoding">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_35" name="uml_class_diagram_for_nbxmpp_p_35">
+<area shape="rect" id="node1" href="nbxmpp.protocol.UnsupportedEncoding-class.html" title="nbxmpp.protocol.UnsupportedEncoding" alt="" coords="19,443,184,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node185" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node184" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node184" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_35.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_35" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.UnsupportedStanzaType-class.html b/doc/apidocs/nbxmpp.protocol.UnsupportedStanzaType-class.html
new file mode 100644
index 0000000..74a9374
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.UnsupportedStanzaType-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.UnsupportedStanzaType</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;UnsupportedStanzaType
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.UnsupportedStanzaType-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class UnsupportedStanzaType</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#UnsupportedStanzaType">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_36" name="uml_class_diagram_for_nbxmpp_p_36">
+<area shape="rect" id="node1" href="nbxmpp.protocol.UnsupportedStanzaType-class.html" title="nbxmpp.protocol.UnsupportedStanzaType" alt="" coords="11,443,192,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node189" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node188" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node188" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_36.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_36" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.UnsupportedVersion-class.html b/doc/apidocs/nbxmpp.protocol.UnsupportedVersion-class.html
new file mode 100644
index 0000000..6fcc9b2
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.UnsupportedVersion-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.UnsupportedVersion</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;UnsupportedVersion
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.UnsupportedVersion-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class UnsupportedVersion</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#UnsupportedVersion">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_37" name="uml_class_diagram_for_nbxmpp_p_37">
+<area shape="rect" id="node1" href="nbxmpp.protocol.UnsupportedVersion-class.html" title="nbxmpp.protocol.UnsupportedVersion" alt="" coords="24,443,179,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node193" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node192" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node192" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_37.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_37" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.protocol.XMLNotWellFormed-class.html b/doc/apidocs/nbxmpp.protocol.XMLNotWellFormed-class.html
new file mode 100644
index 0000000..9f61265
--- /dev/null
+++ b/doc/apidocs/nbxmpp.protocol.XMLNotWellFormed-class.html
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.protocol.XMLNotWellFormed</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.protocol-module.html">Module&nbsp;protocol</a> ::
+ Class&nbsp;XMLNotWellFormed
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.protocol.XMLNotWellFormed-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class XMLNotWellFormed</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.protocol-pysrc.html#XMLNotWellFormed">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_38" name="uml_class_diagram_for_nbxmpp_p_38">
+<area shape="rect" id="node1" href="nbxmpp.protocol.XMLNotWellFormed-class.html" title="nbxmpp.protocol.XMLNotWellFormed" alt="" coords="28,443,175,487"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.StreamError-class.html" title="Base exception class for stream errors" alt="" coords="49,379,153,423"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="17,31,187,49"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="17,49,187,68"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="17,71,187,89"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="17,89,187,108"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="x[y]" alt="" coords="17,108,187,127"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="x[i:j]" alt="" coords="17,127,187,145"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="helper for pickle" alt="" coords="17,145,187,164"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="repr(x)" alt="" coords="17,164,187,183"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="17,183,187,201"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="17,201,187,220"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="str(x)" alt="" coords="17,220,187,239"/>
+<area shape="rect" id="node197" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="17,239,187,257"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,6,197,263"/>
+<area shape="rect" id="node196" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="33,316,171,335"/>
+<area shape="rect" id="node196" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="33,335,171,353"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="21,283,181,359"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_38.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_38" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
+ <code>__init__</code>,
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__reduce__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__str__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.proxy_connectors-module.html b/doc/apidocs/nbxmpp.proxy_connectors-module.html
new file mode 100644
index 0000000..c45f4f7
--- /dev/null
+++ b/doc/apidocs/nbxmpp.proxy_connectors-module.html
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.proxy_connectors</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;proxy_connectors
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.proxy_connectors-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module proxy_connectors</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html">source&nbsp;code</a></span></p>
+<p>Module containing classes for proxy connecting. So far its HTTP CONNECT and
+SOCKS5 proxy</p>
+<p>Authentication to NTLM (Microsoft implementation) proxies can be next.</p>
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.proxy_connectors.ProxyConnector-class.html" class="summary-name">ProxyConnector</a><br />
+ Interface for proxy-connecting object - when tunnneling XMPP over proxies,
+some connecting process usually has to be done before opening stream. Proxy
+connectors are used right after TCP connection is estabilished
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html" class="summary-name">HTTPCONNECTConnector</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html" class="summary-name">SOCKS5Connector</a><br />
+ SOCKS5 proxy connection class. Allows to use SOCKS5 proxies with
+(optionally) simple authentication (only USERNAME/PASSWORD auth)
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.proxy_connectors-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.proxy_connectors')">logging.getLogger('nbxmpp.proxy_connectors')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.proxy_connectors-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="struct">struct</span>,
+ <span title="socket">socket</span>,
+ <span title="base64">base64</span>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.proxy_connectors')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.proxy_connectors-pysrc.html b/doc/apidocs/nbxmpp.proxy_connectors-pysrc.html
new file mode 100644
index 0000000..2b4ecdc
--- /dev/null
+++ b/doc/apidocs/nbxmpp.proxy_connectors-pysrc.html
@@ -0,0 +1,574 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.proxy_connectors</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;proxy_connectors
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.proxy_connectors-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.proxy_connectors-module.html">Module nbxmpp.proxy_connectors</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## proxy_connectors.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## based on transports_nb.py</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## modified by Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## modified by Tomas Karasek &lt;tom.to.the.k@gmail.com&gt;</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">Module containing classes for proxy connecting. So far its HTTP CONNECT and</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">SOCKS5 proxy</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-docstring">Authentication to NTLM (Microsoft implementation) proxies can be next.</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">struct</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">,</tt> <tt class="py-name">base64</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-0', 'log', 'link-0');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.proxy_connectors'</tt><tt class="py-op">)</tt> </tt>
+<a name="ProxyConnector"></a><div id="ProxyConnector-def"><a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <a class="py-toggle" href="#" id="ProxyConnector-toggle" onclick="return toggle('ProxyConnector');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a><tt class="py-op">:</tt> </tt>
+</div><div id="ProxyConnector-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ProxyConnector-expanded"><a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-docstring"> Interface for proxy-connecting object - when tunnneling XMPP over proxies,</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-docstring"> some connecting process usually has to be done before opening stream. Proxy</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-docstring"> connectors are used right after TCP connection is estabilished</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> </tt>
+<a name="ProxyConnector.__init__"></a><div id="ProxyConnector.__init__-def"><a name="L36"></a><tt class="py-lineno"> 36</tt> <a class="py-toggle" href="#" id="ProxyConnector.__init__-toggle" onclick="return toggle('ProxyConnector.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">send_method</tt><tt class="py-op">,</tt> <tt class="py-param">onreceive</tt><tt class="py-op">,</tt> <tt class="py-param">old_on_receive</tt><tt class="py-op">,</tt> <tt class="py-param">on_success</tt><tt class="py-op">,</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-param">on_failure</tt><tt class="py-op">,</tt> <tt class="py-param">xmpp_server</tt><tt class="py-op">,</tt> <tt class="py-param">proxy_creds</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProxyConnector.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ProxyConnector.__init__-expanded"><a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"> Creates proxy connector, starts connecting immediately and gives control</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring"> back to transport afterwards</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> :param send_method: transport send method</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> :param onreceive: method to set on_receive callbacks</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> :param old_on_receive: on_receive callback that should be set when</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> proxy connection was successful</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> :param on_success: called after proxy connection was successfully opened</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> :param on_failure: called when errors occured while connecting</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring"> :param xmpp_server: tuple of (hostname, port)</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> :param proxy_creds: tuple of (proxy_user, proxy_credentials)</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-1', 'send', 'link-1');">send</a></tt> <tt class="py-op">=</tt> <tt class="py-name">send_method</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.onreceive()=nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive,Method nbxmpp.transports_nb.NonBlockingTransport.onreceive()=nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-2', 'onreceive', 'link-2');">onreceive</a></tt> <tt class="py-op">=</tt> <tt id="link-3" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-3', 'onreceive', 'link-2');">onreceive</a></tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">old_on_receive</tt> <tt class="py-op">=</tt> <tt class="py-name">old_on_receive</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_success</tt> <tt class="py-op">=</tt> <tt class="py-name">on_success</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">on_failure</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_server</tt> <tt class="py-op">=</tt> <tt class="py-name">xmpp_server</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy_creds</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">old_on_receive</tt> <tt class="py-op">=</tt> <tt class="py-name">old_on_receive</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Method nbxmpp.proxy_connectors.HTTPCONNECTConnector.start_connecting()=nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#start_connecting,Method nbxmpp.proxy_connectors.ProxyConnector.start_connecting()=nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting,Method nbxmpp.proxy_connectors.SOCKS5Connector.start_connecting()=nbxmpp.proxy_connectors.SOCKS5Connector-class.html#start_connecting"><a title="nbxmpp.proxy_connectors.HTTPCONNECTConnector.start_connecting
+nbxmpp.proxy_connectors.ProxyConnector.start_connecting
+nbxmpp.proxy_connectors.SOCKS5Connector.start_connecting" class="py-name" href="#" onclick="return doclink('link-4', 'start_connecting', 'link-4');">start_connecting</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="ProxyConnector.get_instance"></a><div id="ProxyConnector.get_instance-def"><a name="L63"></a><tt class="py-lineno"> 63</tt> <a class="py-toggle" href="#" id="ProxyConnector.get_instance-toggle" onclick="return toggle('ProxyConnector.get_instance');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance">get_instance</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProxyConnector.get_instance-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ProxyConnector.get_instance-expanded"><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> Factory Method for object creation</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> Use this instead of directly initializing the class in order to make unit</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> testing much easier.</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> </tt>
+<a name="ProxyConnector.start_connecting"></a><div id="ProxyConnector.start_connecting-def"><a name="L72"></a><tt class="py-lineno"> 72</tt> <a class="py-toggle" href="#" id="ProxyConnector.start_connecting-toggle" onclick="return toggle('ProxyConnector.start_connecting');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting">start_connecting</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProxyConnector.start_connecting-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ProxyConnector.start_connecting-expanded"><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt> </tt>
+</div><a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
+<a name="ProxyConnector.connecting_over"></a><div id="ProxyConnector.connecting_over-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="ProxyConnector.connecting_over-toggle" onclick="return toggle('ProxyConnector.connecting_over');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over">connecting_over</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProxyConnector.connecting_over-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ProxyConnector.connecting_over-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-5', 'onreceive', 'link-2');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">old_on_receive</tt><tt class="py-op">)</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_success</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> </tt>
+<a name="HTTPCONNECTConnector"></a><div id="HTTPCONNECTConnector-def"><a name="L79"></a><tt class="py-lineno"> 79</tt> <a class="py-toggle" href="#" id="HTTPCONNECTConnector-toggle" onclick="return toggle('HTTPCONNECTConnector');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html">HTTPCONNECTConnector</a><tt class="py-op">(</tt><tt class="py-base-class">ProxyConnector</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HTTPCONNECTConnector-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="HTTPCONNECTConnector-expanded"><a name="HTTPCONNECTConnector.start_connecting"></a><div id="HTTPCONNECTConnector.start_connecting-def"><a name="L80"></a><tt class="py-lineno"> 80</tt> <a class="py-toggle" href="#" id="HTTPCONNECTConnector.start_connecting-toggle" onclick="return toggle('HTTPCONNECTConnector.start_connecting');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#start_connecting">start_connecting</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HTTPCONNECTConnector.start_connecting-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HTTPCONNECTConnector.start_connecting-expanded"><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> Connect to a proxy, supply login and password to it (if were specified</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring"> while creating instance). Instruct proxy to make connection to the target</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt class="py-docstring"> server.</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt id="link-6" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-6', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Proxy server contacted, performing authentification'</tt><tt class="py-op">)</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">connector</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'CONNECT %s:%s HTTP/1.1'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_server</tt><tt class="py-op">,</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-string">'Proxy-Connection: Keep-Alive'</tt><tt class="py-op">,</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-string">'Pragma: no-cache'</tt><tt class="py-op">,</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-string">'Host: %s:%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_server</tt><tt class="py-op">,</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-string">'User-Agent: Gajim'</tt><tt class="py-op">]</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt><tt class="py-op">:</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s:%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt><tt class="py-op">)</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">encodestring</tt><tt class="py-op">(</tt><tt class="py-name">credentials</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">connector</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Proxy-Authorization: Basic '</tt><tt class="py-op">+</tt><tt class="py-name">credentials</tt><tt class="py-op">)</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">connector</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-7', 'onreceive', 'link-2');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Method nbxmpp.proxy_connectors.HTTPCONNECTConnector._on_headers_sent()=nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#_on_headers_sent"><a title="nbxmpp.proxy_connectors.HTTPCONNECTConnector._on_headers_sent" class="py-name" href="#" onclick="return doclink('link-8', '_on_headers_sent', 'link-8');">_on_headers_sent</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-9', 'send', 'link-1');">send</a></tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">connector</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> </tt>
+<a name="HTTPCONNECTConnector._on_headers_sent"></a><div id="HTTPCONNECTConnector._on_headers_sent-def"><a name="L100"></a><tt class="py-lineno">100</tt> <a class="py-toggle" href="#" id="HTTPCONNECTConnector._on_headers_sent-toggle" onclick="return toggle('HTTPCONNECTConnector._on_headers_sent');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#_on_headers_sent">_on_headers_sent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">reply</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HTTPCONNECTConnector._on_headers_sent-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HTTPCONNECTConnector._on_headers_sent-expanded"><a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reply</tt> <tt class="py-op">=</tt> <tt class="py-name">reply</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\r'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-name">proto</tt><tt class="py-op">,</tt> <tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt> <tt class="py-op">=</tt> <tt class="py-name">reply</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt id="link-10" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-10', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"_on_headers_sent:"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-comment">#traceback.print_exc()</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">code</tt> <tt class="py-op">&lt;&gt;</tt> <tt class="py-string">'200'</tt><tt class="py-op">:</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt id="link-11" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-11', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply: %s %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">proto</tt><tt class="py-op">,</tt> <tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">reply</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method nbxmpp.proxy_connectors.ProxyConnector.connecting_over()=nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over"><a title="nbxmpp.proxy_connectors.ProxyConnector.connecting_over" class="py-name" href="#" onclick="return doclink('link-12', 'connecting_over', 'link-12');">connecting_over</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> </tt>
+<a name="SOCKS5Connector"></a><div id="SOCKS5Connector-def"><a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <a class="py-toggle" href="#" id="SOCKS5Connector-toggle" onclick="return toggle('SOCKS5Connector');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html">SOCKS5Connector</a><tt class="py-op">(</tt><tt class="py-base-class">ProxyConnector</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SOCKS5Connector-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SOCKS5Connector-expanded"><a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"><tt class="py-docstring"> SOCKS5 proxy connection class. Allows to use SOCKS5 proxies with</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"><tt class="py-docstring"> (optionally) simple authentication (only USERNAME/PASSWORD auth)</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> </tt>
+<a name="SOCKS5Connector.start_connecting"></a><div id="SOCKS5Connector.start_connecting-def"><a name="L126"></a><tt class="py-lineno">126</tt> <a class="py-toggle" href="#" id="SOCKS5Connector.start_connecting-toggle" onclick="return toggle('SOCKS5Connector.start_connecting');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#start_connecting">start_connecting</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SOCKS5Connector.start_connecting-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SOCKS5Connector.start_connecting-expanded"><a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt id="link-13" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-13', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Proxy server contacted, performing authentification'</tt><tt class="py-op">)</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt><tt class="py-op">:</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">to_send</tt> <tt class="py-op">=</tt> <tt class="py-string">'\x05\x02\x00\x02'</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">to_send</tt> <tt class="py-op">=</tt> <tt class="py-string">'\x05\x01\x00'</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-14', 'onreceive', 'link-2');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Method nbxmpp.proxy_connectors.SOCKS5Connector._on_greeting_sent()=nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_greeting_sent"><a title="nbxmpp.proxy_connectors.SOCKS5Connector._on_greeting_sent" class="py-name" href="#" onclick="return doclink('link-15', '_on_greeting_sent', 'link-15');">_on_greeting_sent</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-16', 'send', 'link-1');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">to_send</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> </tt>
+<a name="SOCKS5Connector._on_greeting_sent"></a><div id="SOCKS5Connector._on_greeting_sent-def"><a name="L135"></a><tt class="py-lineno">135</tt> <a class="py-toggle" href="#" id="SOCKS5Connector._on_greeting_sent-toggle" onclick="return toggle('SOCKS5Connector._on_greeting_sent');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_greeting_sent">_on_greeting_sent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">reply</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SOCKS5Connector._on_greeting_sent-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SOCKS5Connector._on_greeting_sent-expanded"><a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">reply</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'\x05'</tt><tt class="py-op">:</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt id="link-17" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-17', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'\x00'</tt><tt class="py-op">:</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method nbxmpp.proxy_connectors.SOCKS5Connector._on_proxy_auth()=nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_proxy_auth"><a title="nbxmpp.proxy_connectors.SOCKS5Connector._on_proxy_auth" class="py-name" href="#" onclick="return doclink('link-18', '_on_proxy_auth', 'link-18');">_on_proxy_auth</a></tt><tt class="py-op">(</tt><tt class="py-string">'\x01\x00'</tt><tt class="py-op">)</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'\x02'</tt><tt class="py-op">:</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">to_send</tt> <tt class="py-op">=</tt> <tt class="py-string">'\x01'</tt> <tt class="py-op">+</tt> <tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt> <tt class="py-op">+</tt>\ </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-19', 'onreceive', 'link-2');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="nbxmpp.proxy_connectors.SOCKS5Connector._on_proxy_auth" class="py-name" href="#" onclick="return doclink('link-20', '_on_proxy_auth', 'link-18');">_on_proxy_auth</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-21', 'send', 'link-1');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">to_send</tt><tt class="py-op">)</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'\xff'</tt><tt class="py-op">:</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt id="link-22" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-22', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Authentification to proxy impossible: no acceptable '</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-string">'auth method'</tt><tt class="py-op">)</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Authentification to proxy impossible: no '</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-string">'acceptable authentification method'</tt><tt class="py-op">)</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-23', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+</div><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> </tt>
+<a name="SOCKS5Connector._on_proxy_auth"></a><div id="SOCKS5Connector._on_proxy_auth-def"><a name="L163"></a><tt class="py-lineno">163</tt> <a class="py-toggle" href="#" id="SOCKS5Connector._on_proxy_auth-toggle" onclick="return toggle('SOCKS5Connector._on_proxy_auth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_proxy_auth">_on_proxy_auth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">reply</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SOCKS5Connector._on_proxy_auth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SOCKS5Connector._on_proxy_auth-expanded"><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">reply</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt id="link-24" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-24', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'\x01'</tt><tt class="py-op">:</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt id="link-25" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-25', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'\x00'</tt><tt class="py-op">:</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt id="link-26" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-26', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Authentification to proxy failed'</tt><tt class="py-op">)</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Authentification to proxy failed'</tt><tt class="py-op">)</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt id="link-27" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-27', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Authentification successfull. Jabber server contacted.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-comment"># Request connection</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-name">req</tt> <tt class="py-op">=</tt> <tt class="py-string">"\x05\x01\x00"</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-comment"># If the given destination address is an IP address, we'll</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-comment"># use the IPv4 address request even if remote resolving was specified.</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ipaddr</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">inet_aton</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_server</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">req</tt> <tt class="py-op">=</tt> <tt class="py-name">req</tt> <tt class="py-op">+</tt> <tt class="py-string">"\x01"</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ipaddr</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">:</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-comment"># Well it's not an IP number, so it's probably a DNS name.</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"><tt class="py-comment"># if self.__proxy[3]==True:</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-comment"># Resolve remotely</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ipaddr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-name">req</tt> <tt class="py-op">=</tt> <tt class="py-name">req</tt> <tt class="py-op">+</tt> <tt class="py-string">"\x03"</tt> <tt class="py-op">+</tt> <tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_server</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_server</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-comment"># else:</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"><tt class="py-comment"># # Resolve locally</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"><tt class="py-comment"># self.ipaddr = socket.inet_aton(socket.gethostbyname(self.xmpp_server[0]))</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"><tt class="py-comment"># req = req + "\x01" + ipaddr</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">req</tt> <tt class="py-op">=</tt> <tt class="py-name">req</tt> <tt class="py-op">+</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-string">"&gt;H"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">xmpp_server</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-28', 'onreceive', 'link-2');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method nbxmpp.proxy_connectors.SOCKS5Connector._on_req_sent()=nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_req_sent"><a title="nbxmpp.proxy_connectors.SOCKS5Connector._on_req_sent" class="py-name" href="#" onclick="return doclink('link-29', '_on_req_sent', 'link-29');">_on_req_sent</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-30', 'send', 'link-1');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">req</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> </tt>
+<a name="SOCKS5Connector._on_req_sent"></a><div id="SOCKS5Connector._on_req_sent-def"><a name="L200"></a><tt class="py-lineno">200</tt> <a class="py-toggle" href="#" id="SOCKS5Connector._on_req_sent-toggle" onclick="return toggle('SOCKS5Connector._on_req_sent');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_req_sent">_on_req_sent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">reply</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SOCKS5Connector._on_req_sent-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SOCKS5Connector._on_req_sent-expanded"><a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">reply</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">10</tt><tt class="py-op">:</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt id="link-31" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-31', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'\x05'</tt><tt class="py-op">:</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt id="link-32" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-32', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">"\x00"</tt><tt class="py-op">:</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-comment"># Connection failed</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">&lt;</tt><tt class="py-number">9</tt><tt class="py-op">:</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-name">errors</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'general SOCKS server failure'</tt><tt class="py-op">,</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-string">'connection not allowed by ruleset'</tt><tt class="py-op">,</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-string">'Network unreachable'</tt><tt class="py-op">,</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-string">'Host unreachable'</tt><tt class="py-op">,</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-string">'Connection refused'</tt><tt class="py-op">,</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-string">'TTL expired'</tt><tt class="py-op">,</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-string">'Command not supported'</tt><tt class="py-op">,</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-string">'Address type not supported'</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-op">]</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-name">txt</tt> <tt class="py-op">=</tt> <tt class="py-name">errors</tt><tt class="py-op">[</tt><tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-name">txt</tt> <tt class="py-op">=</tt> <tt class="py-string">'Invalid proxy reply'</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-33', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-name">txt</tt><tt class="py-op">)</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-name">txt</tt><tt class="py-op">)</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-comment"># Get the bound address/port</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">"\x01"</tt><tt class="py-op">:</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-name">begin</tt><tt class="py-op">,</tt> <tt id="link-34" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.end()=nbxmpp.idlequeue.IdleCommand-class.html#end"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-34', 'end', 'link-34');">end</a></tt> <tt class="py-op">=</tt> <tt class="py-number">3</tt><tt class="py-op">,</tt> <tt class="py-number">7</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">"\x03"</tt><tt class="py-op">:</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-name">begin</tt><tt class="py-op">,</tt> <tt id="link-35" class="py-name"><a title="nbxmpp.idlequeue.IdleCommand.end" class="py-name" href="#" onclick="return doclink('link-35', 'end', 'link-34');">end</a></tt> <tt class="py-op">=</tt> <tt class="py-number">4</tt><tt class="py-op">,</tt> <tt class="py-number">4</tt> <tt class="py-op">+</tt> <tt class="py-name">reply</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt id="link-36" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-36', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_failure</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid proxy reply'</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="nbxmpp.proxy_connectors.ProxyConnector.connecting_over" class="py-name" href="#" onclick="return doclink('link-37', 'connecting_over', 'link-12');">connecting_over</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html b/doc/apidocs/nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html
new file mode 100644
index 0000000..d829ada
--- /dev/null
+++ b/doc/apidocs/nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.proxy_connectors.HTTPCONNECTConnector</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.proxy_connectors-module.html">Module&nbsp;proxy_connectors</a> ::
+ Class&nbsp;HTTPCONNECTConnector
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class HTTPCONNECTConnector</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#HTTPCONNECTConnector">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_39" name="uml_class_diagram_for_nbxmpp_p_39">
+<area shape="rect" id="node198" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#start_connecting" title="Connect to a proxy, supply login and password to it (if were specified while creating instance). Instruct proxy to make connection to the target server." alt="" coords="327,153,489,172"/>
+<area shape="rect" id="node1" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html" title="nbxmpp.proxy_connectors.HTTPCONNECTConnector" alt="" coords="315,121,501,178"/>
+<area shape="rect" id="node199" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__" title="Creates proxy connector, starts connecting immediately and gives control back to transport afterwards" alt="" coords="17,39,797,57"/>
+<area shape="rect" id="node199" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance" title="Factory Method for object creation" alt="" coords="17,57,797,76"/>
+<area shape="rect" id="node199" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over" title="nbxmpp.proxy_connectors.ProxyConnector.connecting_over" alt="" coords="17,76,797,95"/>
+<area shape="rect" id="node2" href="nbxmpp.proxy_connectors.ProxyConnector-class.html" title="Interface for proxy&#45;connecting object &#45; when tunnneling XMPP over proxies, some connecting process usually has to be done before opening stream. Proxy connectors are used right after TCP connection is estabilished" alt="" coords="5,6,808,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_39.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_39" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#start_connecting" class="summary-sig-name">start_connecting</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Connect to a proxy, supply login and password to it (if were specified
+while creating instance). Instruct proxy to make connection to the target
+server.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#HTTPCONNECTConnector.start_connecting">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html#_on_headers_sent" class="summary-sig-name" onclick="show_private();">_on_headers_sent</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">reply</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#HTTPCONNECTConnector._on_headers_sent">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a></code></b>:
+ <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__">__init__</a></code>,
+ <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over">connecting_over</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a></code></b>:
+ <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="start_connecting"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">start_connecting</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#HTTPCONNECTConnector.start_connecting">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Connect to a proxy, supply login and password to it (if were specified
+while creating instance). Instruct proxy to make connection to the target
+server.
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting">ProxyConnector.start_connecting</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_headers_sent"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_headers_sent</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">reply</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#HTTPCONNECTConnector._on_headers_sent">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.proxy_connectors.ProxyConnector-class.html b/doc/apidocs/nbxmpp.proxy_connectors.ProxyConnector-class.html
new file mode 100644
index 0000000..039526a
--- /dev/null
+++ b/doc/apidocs/nbxmpp.proxy_connectors.ProxyConnector-class.html
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.proxy_connectors.ProxyConnector</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.proxy_connectors-module.html">Module&nbsp;proxy_connectors</a> ::
+ Class&nbsp;ProxyConnector
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.proxy_connectors.ProxyConnector-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ProxyConnector</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_40" name="uml_class_diagram_for_nbxmpp_p_40">
+<area shape="rect" id="node200" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__" title="Creates proxy connector, starts connecting immediately and gives control back to transport afterwards" alt="" coords="17,39,797,57"/>
+<area shape="rect" id="node200" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance" title="Factory Method for object creation" alt="" coords="17,57,797,76"/>
+<area shape="rect" id="node200" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting" title="nbxmpp.proxy_connectors.ProxyConnector.start_connecting" alt="" coords="17,76,797,95"/>
+<area shape="rect" id="node200" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over" title="nbxmpp.proxy_connectors.ProxyConnector.connecting_over" alt="" coords="17,95,797,113"/>
+<area shape="rect" id="node1" href="nbxmpp.proxy_connectors.ProxyConnector-class.html" title="Interface for proxy&#45;connecting object &#45; when tunnneling XMPP over proxies, some connecting process usually has to be done before opening stream. Proxy connectors are used right after TCP connection is estabilished" alt="" coords="5,6,808,119"/>
+<area shape="rect" id="node2" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html" title="nbxmpp.proxy_connectors.HTTPCONNECTConnector" alt="" coords="207,139,404,178"/>
+<area shape="rect" id="node3" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html" title="SOCKS5 proxy connection class. Allows to use SOCKS5 proxies with (optionally) simple authentication (only USERNAME/PASSWORD auth)" alt="" coords="433,139,588,178"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_40.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_40" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Interface for proxy-connecting object - when tunnneling XMPP over proxies,
+some connecting process usually has to be done before opening stream. Proxy
+connectors are used right after TCP connection is estabilished
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">send_method</span>,
+ <span class="summary-sig-arg">onreceive</span>,
+ <span class="summary-sig-arg">old_on_receive</span>,
+ <span class="summary-sig-arg">on_success</span>,
+ <span class="summary-sig-arg">on_failure</span>,
+ <span class="summary-sig-arg">xmpp_server</span>,
+ <span class="summary-sig-arg">proxy_creds</span>=<span class="summary-sig-default"><code class="variable-group">(</code>None<code class="variable-op">, </code>None<code class="variable-group">)</code></span>)</span><br />
+ Creates proxy connector, starts connecting immediately and gives control
+back to transport afterwards</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting" class="summary-sig-name">start_connecting</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.start_connecting">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over" class="summary-sig-name">connecting_over</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.connecting_over">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance" class="summary-sig-name">get_instance</a>(<span class="summary-sig-arg">cls</span>,
+ <span class="summary-sig-arg">*args</span>,
+ <span class="summary-sig-arg">**kwargs</span>)</span><br />
+ Factory Method for object creation</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.get_instance">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">send_method</span>,
+ <span class="sig-arg">onreceive</span>,
+ <span class="sig-arg">old_on_receive</span>,
+ <span class="sig-arg">on_success</span>,
+ <span class="sig-arg">on_failure</span>,
+ <span class="sig-arg">xmpp_server</span>,
+ <span class="sig-arg">proxy_creds</span>=<span class="sig-default"><code class="variable-group">(</code>None<code class="variable-op">, </code>None<code class="variable-group">)</code></span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Creates proxy connector, starts connecting immediately and gives control
+back to transport afterwards
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>send_method</code></strong> - transport send method</li>
+ <li><strong class="pname"><code>onreceive</code></strong> - method to set on_receive callbacks</li>
+ <li><strong class="pname"><code>old_on_receive</code></strong> - on_receive callback that should be set when
+proxy connection was successful</li>
+ <li><strong class="pname"><code>on_success</code></strong> - called after proxy connection was successfully opened</li>
+ <li><strong class="pname"><code>on_failure</code></strong> - called when errors occured while connecting</li>
+ <li><strong class="pname"><code>xmpp_server</code></strong> - tuple of (hostname, port)</li>
+ <li><strong class="pname"><code>proxy_creds</code></strong> - tuple of (proxy_user, proxy_credentials)</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_instance"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_instance</span>(<span class="sig-arg">cls</span>,
+ <span class="sig-arg">*args</span>,
+ <span class="sig-arg">**kwargs</span>)</span>
+ <br /><em class="fname">Class Method</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.get_instance">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Factory Method for object creation</p>
+<p>Use this instead of directly initializing the class in order to make unit
+testing much easier.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="start_connecting"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">start_connecting</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.start_connecting">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="connecting_over"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">connecting_over</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#ProxyConnector.connecting_over">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.proxy_connectors.SOCKS5Connector-class.html b/doc/apidocs/nbxmpp.proxy_connectors.SOCKS5Connector-class.html
new file mode 100644
index 0000000..0144654
--- /dev/null
+++ b/doc/apidocs/nbxmpp.proxy_connectors.SOCKS5Connector-class.html
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.proxy_connectors.SOCKS5Connector</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.proxy_connectors-module.html">Module&nbsp;proxy_connectors</a> ::
+ Class&nbsp;SOCKS5Connector
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class SOCKS5Connector</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_p_41" name="uml_class_diagram_for_nbxmpp_p_41">
+<area shape="rect" id="node203" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#start_connecting" title="nbxmpp.proxy_connectors.SOCKS5Connector.start_connecting" alt="" coords="335,153,481,172"/>
+<area shape="rect" id="node1" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html" title="SOCKS5 proxy connection class. Allows to use SOCKS5 proxies with (optionally) simple authentication (only USERNAME/PASSWORD auth)" alt="" coords="323,121,493,178"/>
+<area shape="rect" id="node204" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__" title="Creates proxy connector, starts connecting immediately and gives control back to transport afterwards" alt="" coords="17,39,797,57"/>
+<area shape="rect" id="node204" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance" title="Factory Method for object creation" alt="" coords="17,57,797,76"/>
+<area shape="rect" id="node204" href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over" title="nbxmpp.proxy_connectors.ProxyConnector.connecting_over" alt="" coords="17,76,797,95"/>
+<area shape="rect" id="node2" href="nbxmpp.proxy_connectors.ProxyConnector-class.html" title="Interface for proxy&#45;connecting object &#45; when tunnneling XMPP over proxies, some connecting process usually has to be done before opening stream. Proxy connectors are used right after TCP connection is estabilished" alt="" coords="5,6,808,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_p_41.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_p_41" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+SOCKS5 proxy connection class. Allows to use SOCKS5 proxies with
+(optionally) simple authentication (only USERNAME/PASSWORD auth)
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#start_connecting" class="summary-sig-name">start_connecting</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector.start_connecting">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_greeting_sent" class="summary-sig-name" onclick="show_private();">_on_greeting_sent</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">reply</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector._on_greeting_sent">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_proxy_auth" class="summary-sig-name" onclick="show_private();">_on_proxy_auth</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">reply</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector._on_proxy_auth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html#_on_req_sent" class="summary-sig-name" onclick="show_private();">_on_req_sent</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">reply</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector._on_req_sent">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a></code></b>:
+ <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__">__init__</a></code>,
+ <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#connecting_over">connecting_over</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html">ProxyConnector</a></code></b>:
+ <code><a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="start_connecting"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">start_connecting</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector.start_connecting">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.proxy_connectors.ProxyConnector-class.html#start_connecting">ProxyConnector.start_connecting</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_greeting_sent"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_greeting_sent</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">reply</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector._on_greeting_sent">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_proxy_auth"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_proxy_auth</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">reply</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector._on_proxy_auth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_req_sent"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_req_sent</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">reply</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.proxy_connectors-pysrc.html#SOCKS5Connector._on_req_sent">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.roster_nb-module.html b/doc/apidocs/nbxmpp.roster_nb-module.html
new file mode 100644
index 0000000..9d17b96
--- /dev/null
+++ b/doc/apidocs/nbxmpp.roster_nb-module.html
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.roster_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;roster_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.roster_nb-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module roster_nb</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html">source&nbsp;code</a></span></p>
+Simple roster implementation. Can be used though for different tasks like
+mass-renaming of contacts.
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.roster_nb.NonBlockingRoster-class.html" class="summary-name">NonBlockingRoster</a><br />
+ Defines a plenty of methods that will allow you to manage roster. Also
+automatically track presences from remote JIDs taking into account that
+every JID can have multiple resources connected. Does not currently support
+'error' presences. You can also use mapping interface for access to the
+internal representation of contacts in roster
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.roster_nb-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.roster_nb')">logging.getLogger('nbxmpp.roster_nb')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.roster_nb-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <a href="nbxmpp.protocol.JID-class.html" title="nbxmpp.protocol.JID">JID</a>,
+ <a href="nbxmpp.protocol.Iq-class.html" title="nbxmpp.protocol.Iq">Iq</a>,
+ <a href="nbxmpp.protocol.Presence-class.html" title="nbxmpp.protocol.Presence">Presence</a>,
+ <a href="nbxmpp.simplexml.Node-class.html" title="nbxmpp.protocol.Node">Node</a>,
+ <a href="nbxmpp.protocol.NodeProcessed-class.html" title="nbxmpp.protocol.NodeProcessed">NodeProcessed</a>,
+ <span title="nbxmpp.protocol.NS_MUC_USER">NS_MUC_USER</span>,
+ <span title="nbxmpp.protocol.NS_ROSTER">NS_ROSTER</span>,
+ <a href="nbxmpp.plugin.PlugIn-class.html" title="nbxmpp.plugin.PlugIn">PlugIn</a>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.roster_nb')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.roster_nb-pysrc.html b/doc/apidocs/nbxmpp.roster_nb-pysrc.html
new file mode 100644
index 0000000..bf2f268
--- /dev/null
+++ b/doc/apidocs/nbxmpp.roster_nb-pysrc.html
@@ -0,0 +1,647 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.roster_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;roster_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.roster_nb-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.roster_nb-module.html">Module nbxmpp.roster_nb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## roster_nb.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## based on roster.py</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## modified by Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment"># $Id: roster.py,v 1.17 2005/05/02 08:38:49 snakeru Exp $</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">Simple roster implementation. Can be used though for different tasks like</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-docstring">mass-renaming of contacts.</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-0', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Class nbxmpp.protocol.JID=nbxmpp.protocol.JID-class.html"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-1', 'JID', 'link-1');">JID</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Class nbxmpp.protocol.Iq=nbxmpp.protocol.Iq-class.html"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-2', 'Iq', 'link-2');">Iq</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Class nbxmpp.protocol.Presence=nbxmpp.protocol.Presence-class.html"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-3', 'Presence', 'link-3');">Presence</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Class nbxmpp.simplexml.Node=nbxmpp.simplexml.Node-class.html"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-4', 'Node', 'link-4');">Node</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Class nbxmpp.protocol.NodeProcessed=nbxmpp.protocol.NodeProcessed-class.html"><a title="nbxmpp.protocol.NodeProcessed" class="py-name" href="#" onclick="return doclink('link-5', 'NodeProcessed', 'link-5');">NodeProcessed</a></tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Variable nbxmpp.protocol.NS_MUC_USER=nbxmpp.protocol-module.html#NS_MUC_USER"><a title="nbxmpp.protocol.NS_MUC_USER" class="py-name" href="#" onclick="return doclink('link-6', 'NS_MUC_USER', 'link-6');">NS_MUC_USER</a></tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name" targets="Variable nbxmpp.protocol.NS_ROSTER=nbxmpp.protocol-module.html#NS_ROSTER"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-7', 'NS_ROSTER', 'link-7');">NS_ROSTER</a></tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugin()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugin,Method nbxmpp.auth_nb.NonBlockingNonSASL.plugin()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin,Method nbxmpp.auth_nb.SASL.plugin()=nbxmpp.auth_nb.SASL-class.html#plugin,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugin()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin,Module nbxmpp.plugin=nbxmpp.plugin-module.html,Method nbxmpp.roster_nb.NonBlockingRoster.plugin()=nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin,Method nbxmpp.tls_nb.NonBlockingTLS.plugin()=nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin,Method nbxmpp.transports_nb.NonBlockingTransport.plugin()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin"><a title="nbxmpp.auth_nb.NonBlockingBind.plugin
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin
+nbxmpp.auth_nb.SASL.plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin
+nbxmpp.plugin
+nbxmpp.roster_nb.NonBlockingRoster.plugin
+nbxmpp.tls_nb.NonBlockingTLS.plugin
+nbxmpp.transports_nb.NonBlockingTransport.plugin" class="py-name" href="#" onclick="return doclink('link-8', 'plugin', 'link-8');">plugin</a></tt> <tt class="py-keyword">import</tt> <tt id="link-9" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn,Method nbxmpp.dispatcher_nb.Dispatcher.PlugIn()=nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn,Class nbxmpp.plugin.PlugIn=nbxmpp.plugin.PlugIn-class.html,Method nbxmpp.plugin.PlugIn.PlugIn()=nbxmpp.plugin.PlugIn-class.html#PlugIn"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-9', 'PlugIn', 'link-9');">PlugIn</a></tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-10', 'log', 'link-10');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.roster_nb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster"></a><div id="NonBlockingRoster-def"><a name="L32"></a><tt class="py-lineno"> 32</tt> <a class="py-toggle" href="#" id="NonBlockingRoster-toggle" onclick="return toggle('NonBlockingRoster');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html">NonBlockingRoster</a><tt class="py-op">(</tt><tt class="py-base-class">PlugIn</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingRoster-expanded"><a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-docstring"> Defines a plenty of methods that will allow you to manage roster. Also</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring"> automatically track presences from remote JIDs taking into account that</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring"> every JID can have multiple resources connected. Does not currently support</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-docstring"> 'error' presences. You can also use mapping interface for access to the</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring"> internal representation of contacts in roster</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.__init__"></a><div id="NonBlockingRoster.__init__-def"><a name="L41"></a><tt class="py-lineno"> 41</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.__init__-toggle" onclick="return toggle('NonBlockingRoster.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">version</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.__init__-expanded"><a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> Init internal variables</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt id="link-11" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-11', 'PlugIn', 'link-9');">PlugIn</a></tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-12', '__init__', 'link-12');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">version</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_set</tt><tt class="py-op">=</tt><tt class="py-name">None</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exported_methods</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient.getRoster()=nbxmpp.client_nb.NonBlockingClient-class.html#getRoster,Method nbxmpp.roster_nb.NonBlockingRoster.getRoster()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getRoster"><a title="nbxmpp.client_nb.NonBlockingClient.getRoster
+nbxmpp.roster_nb.NonBlockingRoster.getRoster" class="py-name" href="#" onclick="return doclink('link-13', 'getRoster', 'link-13');">getRoster</a></tt><tt class="py-op">]</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received_from_server</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.Request"></a><div id="NonBlockingRoster.Request-def"><a name="L52"></a><tt class="py-lineno"> 52</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.Request-toggle" onclick="return toggle('NonBlockingRoster.Request');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Request">Request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.Request-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.Request-expanded"><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring"> Request roster from server if it were not yet requested (or if the</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> 'force' argument is set)</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_set</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_set</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-keyword">not</tt> <tt class="py-name">force</tt><tt class="py-op">:</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-14" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-14', 'Iq', 'link-2');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'get'</tt><tt class="py-op">,</tt> <tt id="link-15" class="py-name"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-15', 'NS_ROSTER', 'link-7');">NS_ROSTER</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Method nbxmpp.simplexml.Node.setTagAttr()=nbxmpp.simplexml.Node-class.html#setTagAttr"><a title="nbxmpp.simplexml.Node.setTagAttr" class="py-name" href="#" onclick="return doclink('link-16', 'setTagAttr', 'link-16');">setTagAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">,</tt> <tt class="py-string">'ver'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt><tt class="py-op">)</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">id_</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#getAnID"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.getAnID" class="py-name" href="#" onclick="return doclink('link-17', 'getAnID', 'link-17');">getAnID</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method nbxmpp.protocol.Protocol.setID()=nbxmpp.protocol.Protocol-class.html#setID"><a title="nbxmpp.protocol.Protocol.setID" class="py-name" href="#" onclick="return doclink('link-18', 'setID', 'link-18');">setID</a></tt><tt class="py-op">(</tt><tt class="py-name">id_</tt><tt class="py-op">)</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-19', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">)</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt id="link-20" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-20', 'log', 'link-10');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Roster requested from server'</tt><tt class="py-op">)</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">id_</tt> </tt>
+</div><a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.RosterIqHandler"></a><div id="NonBlockingRoster.RosterIqHandler-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.RosterIqHandler-toggle" onclick="return toggle('NonBlockingRoster.RosterIqHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#RosterIqHandler">RosterIqHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">dis</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.RosterIqHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.RosterIqHandler-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-docstring"> Subscription tracker. Used internally for setting items state in internal</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"> roster representation</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">sender</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttr()=nbxmpp.simplexml.Node-class.html#getAttr"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-21', 'getAttr', 'link-21');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'from'</tt><tt class="py-op">)</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">sender</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">sender</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method nbxmpp.protocol.JID.bareMatch()=nbxmpp.protocol.JID-class.html#bareMatch"><a title="nbxmpp.protocol.JID.bareMatch" class="py-name" href="#" onclick="return doclink('link-22', 'bareMatch', 'link-22');">bareMatch</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">User</tt> <tt class="py-op">+</tt> <tt class="py-string">'@'</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Method nbxmpp.simplexml.Node.getTag()=nbxmpp.simplexml.Node-class.html#getTag"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-23', 'getTag', 'link-23');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">query</tt><tt class="py-op">:</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">received_from_server</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method nbxmpp.simplexml.Node.getTagAttr()=nbxmpp.simplexml.Node-class.html#getTagAttr"><a title="nbxmpp.simplexml.Node.getTagAttr" class="py-name" href="#" onclick="return doclink('link-24', 'getTagAttr', 'link-24');">getTagAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">,</tt> <tt class="py-string">'ver'</tt><tt class="py-op">)</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">item</tt> <tt class="py-keyword">in</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Method nbxmpp.simplexml.Node.getTags()=nbxmpp.simplexml.Node-class.html#getTags"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-25', 'getTags', 'link-25');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">jid</tt><tt class="py-op">=</tt><tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-26', 'getAttr', 'link-21');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'jid'</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-27', 'getAttr', 'link-21');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'subscription'</tt><tt class="py-op">)</tt><tt class="py-op">==</tt><tt class="py-string">'remove'</tt><tt class="py-op">:</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-comment"># Looks like we have a workaround</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-comment"># raise NodeProcessed # a MUST</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt id="link-28" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-28', 'log', 'link-10');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Setting roster item %s...'</tt> <tt class="py-op">%</tt> <tt class="py-name">jid</tt><tt class="py-op">)</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'name'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-29', 'getAttr', 'link-21');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'name'</tt><tt class="py-op">)</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'ask'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-30', 'getAttr', 'link-21');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'ask'</tt><tt class="py-op">)</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'subscription'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-31', 'getAttr', 'link-21');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'subscription'</tt><tt class="py-op">)</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'groups'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'resources'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">group</tt> <tt class="py-keyword">in</tt> <tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-32', 'getTags', 'link-25');">getTags</a></tt><tt class="py-op">(</tt><tt class="py-string">'group'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">group</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method nbxmpp.simplexml.Node.getData()=nbxmpp.simplexml.Node-class.html#getData"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-33', 'getData', 'link-33');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'groups'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'groups'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">group</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-34', 'getData', 'link-33');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">User</tt><tt class="py-op">+</tt><tt class="py-string">'@'</tt><tt class="py-op">+</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'resources'</tt><tt class="py-op">:</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-string">'name'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-string">'ask'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-string">'subscription'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-string">'groups'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt><tt class="py-op">}</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_set</tt><tt class="py-op">=</tt><tt class="py-number">1</tt> </tt>
+</div><a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-comment"># Looks like we have a workaround</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-comment"># raise NodeProcessed # a MUST. Otherwise you'll get back an &lt;iq type='error'/&gt;</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.PresenceHandler"></a><div id="NonBlockingRoster.PresenceHandler-def"><a name="L107"></a><tt class="py-lineno">107</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.PresenceHandler-toggle" onclick="return toggle('NonBlockingRoster.PresenceHandler');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#PresenceHandler">PresenceHandler</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">dis</tt><tt class="py-op">,</tt> <tt class="py-param">pres</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.PresenceHandler-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.PresenceHandler-expanded"><a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"><tt class="py-docstring"> Presence tracker. Used internally for setting items' resources state in</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"><tt class="py-docstring"> internal roster representation</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-35', 'getTag', 'link-23');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-36" class="py-name"><a title="nbxmpp.protocol.NS_MUC_USER" class="py-name" href="#" onclick="return doclink('link-36', 'NS_MUC_USER', 'link-6');">NS_MUC_USER</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">jid</tt><tt class="py-op">=</tt><tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method nbxmpp.protocol.Protocol.getFrom()=nbxmpp.protocol.Protocol-class.html#getFrom"><a title="nbxmpp.protocol.Protocol.getFrom" class="py-name" href="#" onclick="return doclink('link-37', 'getFrom', 'link-37');">getFrom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">jid</tt><tt class="py-op">:</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-comment"># If no from attribue, it's from server</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">jid</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-name">jid</tt><tt class="py-op">=</tt><tt id="link-38" class="py-name"><a title="nbxmpp.protocol.JID" class="py-name" href="#" onclick="return doclink('link-38', 'JID', 'link-1');">JID</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">)</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method nbxmpp.protocol.JID.getStripped()=nbxmpp.protocol.JID-class.html#getStripped"><a title="nbxmpp.protocol.JID.getStripped" class="py-name" href="#" onclick="return doclink('link-39', 'getStripped', 'link-39');">getStripped</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="nbxmpp.protocol.JID.getStripped" class="py-name" href="#" onclick="return doclink('link-40', 'getStripped', 'link-39');">getStripped</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'name'</tt><tt class="py-op">:</tt><tt class="py-name">None</tt><tt class="py-op">,</tt><tt class="py-string">'ask'</tt><tt class="py-op">:</tt><tt class="py-name">None</tt><tt class="py-op">,</tt><tt class="py-string">'subscription'</tt><tt class="py-op">:</tt><tt class="py-string">'none'</tt><tt class="py-op">,</tt><tt class="py-string">'groups'</tt><tt class="py-op">:</tt><tt class="py-op">[</tt><tt class="py-string">'Not in roster'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt><tt class="py-string">'resources'</tt><tt class="py-op">:</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">}</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="nbxmpp.protocol.JID.getStripped" class="py-name" href="#" onclick="return doclink('link-41', 'getStripped', 'link-39');">getStripped</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">!=</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="nbxmpp.protocol.JID.getStripped" class="py-name" href="#" onclick="return doclink('link-42', 'getStripped', 'link-39');">getStripped</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">item</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="nbxmpp.protocol.JID.getStripped" class="py-name" href="#" onclick="return doclink('link-43', 'getStripped', 'link-39');">getStripped</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-name">typ</tt><tt class="py-op">=</tt><tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name" targets="Method nbxmpp.protocol.DataField.getType()=nbxmpp.protocol.DataField-class.html#getType,Method nbxmpp.protocol.DataForm.getType()=nbxmpp.protocol.DataForm-class.html#getType,Method nbxmpp.protocol.Protocol.getType()=nbxmpp.protocol.Protocol-class.html#getType"><a title="nbxmpp.protocol.DataField.getType
+nbxmpp.protocol.DataForm.getType
+nbxmpp.protocol.Protocol.getType" class="py-name" href="#" onclick="return doclink('link-44', 'getType', 'link-44');">getType</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">typ</tt><tt class="py-op">:</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt id="link-45" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-45', 'log', 'link-10');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Setting roster item %s for resource %s...'</tt><tt class="py-op">%</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="nbxmpp.protocol.JID.getStripped" class="py-name" href="#" onclick="return doclink('link-46', 'getStripped', 'link-39');">getStripped</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method nbxmpp.protocol.JID.getResource()=nbxmpp.protocol.JID-class.html#getResource"><a title="nbxmpp.protocol.JID.getResource" class="py-name" href="#" onclick="return doclink('link-47', 'getResource', 'link-47');">getResource</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="nbxmpp.protocol.JID.getResource" class="py-name" href="#" onclick="return doclink('link-48', 'getResource', 'link-47');">getResource</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">res</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'show'</tt><tt class="py-op">:</tt><tt class="py-name">None</tt><tt class="py-op">,</tt><tt class="py-string">'status'</tt><tt class="py-op">:</tt><tt class="py-name">None</tt><tt class="py-op">,</tt><tt class="py-string">'priority'</tt><tt class="py-op">:</tt><tt class="py-string">'0'</tt><tt class="py-op">,</tt><tt class="py-string">'timestamp'</tt><tt class="py-op">:</tt><tt class="py-name">None</tt><tt class="py-op">}</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-49', 'getTag', 'link-23');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'show'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">res</tt><tt class="py-op">[</tt><tt class="py-string">'show'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name" targets="Method nbxmpp.protocol.Presence.getShow()=nbxmpp.protocol.Presence-class.html#getShow,Method nbxmpp.roster_nb.NonBlockingRoster.getShow()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getShow"><a title="nbxmpp.protocol.Presence.getShow
+nbxmpp.roster_nb.NonBlockingRoster.getShow" class="py-name" href="#" onclick="return doclink('link-50', 'getShow', 'link-50');">getShow</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-51', 'getTag', 'link-23');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'status'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">res</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name" targets="Method nbxmpp.protocol.Presence.getStatus()=nbxmpp.protocol.Presence-class.html#getStatus,Method nbxmpp.roster_nb.NonBlockingRoster.getStatus()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getStatus"><a title="nbxmpp.protocol.Presence.getStatus
+nbxmpp.roster_nb.NonBlockingRoster.getStatus" class="py-name" href="#" onclick="return doclink('link-52', 'getStatus', 'link-52');">getStatus</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-53', 'getTag', 'link-23');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'priority'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">res</tt><tt class="py-op">[</tt><tt class="py-string">'priority'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method nbxmpp.protocol.Presence.getPriority()=nbxmpp.protocol.Presence-class.html#getPriority,Method nbxmpp.roster_nb.NonBlockingRoster.getPriority()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getPriority"><a title="nbxmpp.protocol.Presence.getPriority
+nbxmpp.roster_nb.NonBlockingRoster.getPriority" class="py-name" href="#" onclick="return doclink('link-54', 'getPriority', 'link-54');">getPriority</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name" targets="Method nbxmpp.protocol.Protocol.getTimestamp()=nbxmpp.protocol.Protocol-class.html#getTimestamp"><a title="nbxmpp.protocol.Protocol.getTimestamp" class="py-name" href="#" onclick="return doclink('link-55', 'getTimestamp', 'link-55');">getTimestamp</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Method nbxmpp.protocol.Protocol.setTimestamp()=nbxmpp.protocol.Protocol-class.html#setTimestamp"><a title="nbxmpp.protocol.Protocol.setTimestamp" class="py-name" href="#" onclick="return doclink('link-56', 'setTimestamp', 'link-56');">setTimestamp</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">res</tt><tt class="py-op">[</tt><tt class="py-string">'timestamp'</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">pres</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="nbxmpp.protocol.Protocol.getTimestamp" class="py-name" href="#" onclick="return doclink('link-57', 'getTimestamp', 'link-55');">getTimestamp</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">typ</tt><tt class="py-op">==</tt><tt class="py-string">'unavailable'</tt> <tt class="py-keyword">and</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="nbxmpp.protocol.JID.getResource" class="py-name" href="#" onclick="return doclink('link-58', 'getResource', 'link-47');">getResource</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-keyword">del</tt> <tt class="py-name">item</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="nbxmpp.protocol.JID.getResource" class="py-name" href="#" onclick="return doclink('link-59', 'getResource', 'link-47');">getResource</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-comment"># Need to handle type='error' also</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster._getItemData"></a><div id="NonBlockingRoster._getItemData-def"><a name="L136"></a><tt class="py-lineno">136</tt> <a class="py-toggle" href="#" id="NonBlockingRoster._getItemData-toggle" onclick="return toggle('NonBlockingRoster._getItemData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_getItemData">_getItemData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">,</tt> <tt class="py-param">dataname</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster._getItemData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster._getItemData-expanded"><a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"><tt class="py-docstring"> Return specific jid's representation in internal format. Used internally</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">jid</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">+</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">dataname</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster._getResourceData"></a><div id="NonBlockingRoster._getResourceData-def"><a name="L143"></a><tt class="py-lineno">143</tt> <a class="py-toggle" href="#" id="NonBlockingRoster._getResourceData-toggle" onclick="return toggle('NonBlockingRoster._getResourceData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_getResourceData">_getResourceData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">,</tt> <tt class="py-param">dataname</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster._getResourceData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster._getResourceData-expanded"><a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-docstring"> Return specific jid's resource representation in internal format. Used</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"><tt class="py-docstring"> internally</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-name">resource</tt> <tt class="py-op">=</tt> <tt class="py-name">jid</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">resource</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">resource</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">dataname</tt><tt class="py-op">]</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.keys()=nbxmpp.roster_nb.NonBlockingRoster-class.html#keys"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-60', 'keys', 'link-60');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">lastpri</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">129</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">r</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-61', 'keys', 'link-60');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">r</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'priority'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">lastpri</tt><tt class="py-op">:</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">resource</tt><tt class="py-op">,</tt> <tt class="py-name">lastpri</tt><tt class="py-op">=</tt><tt class="py-name">r</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">r</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'priority'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">resource</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">dataname</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.delItem"></a><div id="NonBlockingRoster.delItem-def"><a name="L159"></a><tt class="py-lineno">159</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.delItem-toggle" onclick="return toggle('NonBlockingRoster.delItem');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#delItem">delItem</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.delItem-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.delItem-expanded"><a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"><tt class="py-docstring"> Delete contact 'jid' from roster</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-62', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt id="link-63" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-63', 'Iq', 'link-2');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-64" class="py-name"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-64', 'NS_ROSTER', 'link-7');">NS_ROSTER</a></tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-65" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-65', 'Node', 'link-4');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'jid'</tt><tt class="py-op">:</tt> <tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'subscription'</tt><tt class="py-op">:</tt> <tt class="py-string">'remove'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getAsk"></a><div id="NonBlockingRoster.getAsk-def"><a name="L165"></a><tt class="py-lineno">165</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getAsk-toggle" onclick="return toggle('NonBlockingRoster.getAsk');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getAsk">getAsk</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getAsk-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getAsk-expanded"><a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"><tt class="py-docstring"> Return 'ask' value of contact 'jid'</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster._getItemData()=nbxmpp.roster_nb.NonBlockingRoster-class.html#_getItemData"><a title="nbxmpp.roster_nb.NonBlockingRoster._getItemData" class="py-name" href="#" onclick="return doclink('link-66', '_getItemData', 'link-66');">_getItemData</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'ask'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getGroups"></a><div id="NonBlockingRoster.getGroups-def"><a name="L171"></a><tt class="py-lineno">171</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getGroups-toggle" onclick="return toggle('NonBlockingRoster.getGroups');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getGroups">getGroups</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getGroups-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getGroups-expanded"><a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"><tt class="py-docstring"> Return groups list that contact 'jid' belongs to</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster._getItemData" class="py-name" href="#" onclick="return doclink('link-67', '_getItemData', 'link-66');">_getItemData</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'groups'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getName"></a><div id="NonBlockingRoster.getName-def"><a name="L177"></a><tt class="py-lineno">177</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getName-toggle" onclick="return toggle('NonBlockingRoster.getName');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getName">getName</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getName-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getName-expanded"><a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"><tt class="py-docstring"> Return name of contact 'jid'</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster._getItemData" class="py-name" href="#" onclick="return doclink('link-68', '_getItemData', 'link-66');">_getItemData</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'name'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getPriority"></a><div id="NonBlockingRoster.getPriority-def"><a name="L183"></a><tt class="py-lineno">183</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getPriority-toggle" onclick="return toggle('NonBlockingRoster.getPriority');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getPriority">getPriority</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getPriority-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getPriority-expanded"><a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"><tt class="py-docstring"> Return priority of contact 'jid'. 'jid' should be a full (not bare) JID</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster._getResourceData()=nbxmpp.roster_nb.NonBlockingRoster-class.html#_getResourceData"><a title="nbxmpp.roster_nb.NonBlockingRoster._getResourceData" class="py-name" href="#" onclick="return doclink('link-69', '_getResourceData', 'link-69');">_getResourceData</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'priority'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getRawRoster"></a><div id="NonBlockingRoster.getRawRoster-def"><a name="L189"></a><tt class="py-lineno">189</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getRawRoster-toggle" onclick="return toggle('NonBlockingRoster.getRawRoster');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawRoster">getRawRoster</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getRawRoster-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getRawRoster-expanded"><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"><tt class="py-docstring"> Return roster representation in internal format</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt> </tt>
+</div><a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getRawItem"></a><div id="NonBlockingRoster.getRawItem-def"><a name="L195"></a><tt class="py-lineno">195</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getRawItem-toggle" onclick="return toggle('NonBlockingRoster.getRawItem');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawItem">getRawItem</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getRawItem-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getRawItem-expanded"><a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"><tt class="py-docstring"> Return roster item 'jid' representation in internal format</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">+</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getShow"></a><div id="NonBlockingRoster.getShow-def"><a name="L201"></a><tt class="py-lineno">201</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getShow-toggle" onclick="return toggle('NonBlockingRoster.getShow');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getShow">getShow</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getShow-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getShow-expanded"><a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"><tt class="py-docstring"> Return 'show' value of contact 'jid'. 'jid' should be a full (not bare)</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"><tt class="py-docstring"> JID</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster._getResourceData" class="py-name" href="#" onclick="return doclink('link-70', '_getResourceData', 'link-69');">_getResourceData</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'show'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getStatus"></a><div id="NonBlockingRoster.getStatus-def"><a name="L208"></a><tt class="py-lineno">208</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getStatus-toggle" onclick="return toggle('NonBlockingRoster.getStatus');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getStatus">getStatus</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getStatus-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getStatus-expanded"><a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"><tt class="py-docstring"> Return 'status' value of contact 'jid'. 'jid' should be a full (not bare)</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"><tt class="py-docstring"> JID</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster._getResourceData" class="py-name" href="#" onclick="return doclink('link-71', '_getResourceData', 'link-69');">_getResourceData</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'status'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getSubscription"></a><div id="NonBlockingRoster.getSubscription-def"><a name="L215"></a><tt class="py-lineno">215</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getSubscription-toggle" onclick="return toggle('NonBlockingRoster.getSubscription');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getSubscription">getSubscription</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getSubscription-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getSubscription-expanded"><a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"><tt class="py-docstring"> Return 'subscription' value of contact 'jid'</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster._getItemData" class="py-name" href="#" onclick="return doclink('link-72', '_getItemData', 'link-66');">_getItemData</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'subscription'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getResources"></a><div id="NonBlockingRoster.getResources-def"><a name="L221"></a><tt class="py-lineno">221</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getResources-toggle" onclick="return toggle('NonBlockingRoster.getResources');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getResources">getResources</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getResources-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getResources-expanded"><a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt class="py-docstring"> Return list of connected resources of contact 'jid'</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">jid</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">+</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-73', 'keys', 'link-60');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.setItem"></a><div id="NonBlockingRoster.setItem-def"><a name="L227"></a><tt class="py-lineno">227</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.setItem-toggle" onclick="return toggle('NonBlockingRoster.setItem');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setItem">setItem</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">groups</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.setItem-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.setItem-expanded"><a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"><tt class="py-docstring"> Rename contact 'jid' and sets the groups list that it now belongs to</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-74', 'Iq', 'link-2');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-75" class="py-name"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-75', 'NS_ROSTER', 'link-7');">NS_ROSTER</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-76', 'getTag', 'link-23');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'jid'</tt><tt class="py-op">:</tt> <tt class="py-name">jid</tt><tt class="py-op">}</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-77" class="py-name" targets="Variable nbxmpp.name=nbxmpp-module.html#name,Variable nbxmpp.protocol.name=nbxmpp.protocol-module.html#name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-77', 'name', 'link-77');">name</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'name'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-78', 'name', 'link-77');">name</a></tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">item</tt> <tt class="py-op">=</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name" targets="Method nbxmpp.simplexml.Node.setTag()=nbxmpp.simplexml.Node-class.html#setTag"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-79', 'setTag', 'link-79');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">group</tt> <tt class="py-keyword">in</tt> <tt class="py-name">groups</tt><tt class="py-op">:</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method nbxmpp.simplexml.Node.addChild()=nbxmpp.simplexml.Node-class.html#addChild"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-80', 'addChild', 'link-80');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt id="link-81" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-81', 'Node', 'link-4');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'group'</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">group</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-82', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.setItemMulti"></a><div id="NonBlockingRoster.setItemMulti-def"><a name="L241"></a><tt class="py-lineno">241</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.setItemMulti-toggle" onclick="return toggle('NonBlockingRoster.setItemMulti');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setItemMulti">setItemMulti</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">items</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.setItemMulti-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.setItemMulti-expanded"><a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"><tt class="py-docstring"> Rename multiple contacts and sets their group lists</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-name">iq</tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name"><a title="nbxmpp.protocol.Iq" class="py-name" href="#" onclick="return doclink('link-83', 'Iq', 'link-2');">Iq</a></tt><tt class="py-op">(</tt><tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-84" class="py-name"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-84', 'NS_ROSTER', 'link-7');">NS_ROSTER</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">iq</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-85', 'getTag', 'link-23');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'query'</tt><tt class="py-op">)</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">items</tt><tt class="py-op">:</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-name">attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'jid'</tt><tt class="py-op">:</tt> <tt class="py-name">i</tt><tt class="py-op">[</tt><tt class="py-string">'jid'</tt><tt class="py-op">]</tt><tt class="py-op">}</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">i</tt><tt class="py-op">[</tt><tt class="py-string">'name'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-string">'name'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt><tt class="py-op">[</tt><tt class="py-string">'name'</tt><tt class="py-op">]</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">item</tt> <tt class="py-op">=</tt> <tt class="py-name">query</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-86', 'setTag', 'link-79');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'item'</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">)</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">group</tt> <tt class="py-keyword">in</tt> <tt class="py-name">i</tt><tt class="py-op">[</tt><tt class="py-string">'groups'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-name">item</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-87', 'addChild', 'link-80');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt id="link-88" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-88', 'Node', 'link-4');">Node</a></tt><tt class="py-op">(</tt><tt class="py-string">'group'</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">group</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-89', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">iq</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getItems"></a><div id="NonBlockingRoster.getItems-def"><a name="L256"></a><tt class="py-lineno">256</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getItems-toggle" onclick="return toggle('NonBlockingRoster.getItems');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getItems">getItems</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getItems-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getItems-expanded"><a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"><tt class="py-docstring"> Return list of all [bare] JIDs that the roster is currently tracks</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-90', 'keys', 'link-60');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.keys"></a><div id="NonBlockingRoster.keys-def"><a name="L262"></a><tt class="py-lineno">262</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.keys-toggle" onclick="return toggle('NonBlockingRoster.keys');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#keys">keys</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.keys-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.keys-expanded"><a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"><tt class="py-docstring"> Same as getItems. Provided for the sake of dictionary interface</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-91', 'keys', 'link-60');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.__getitem__"></a><div id="NonBlockingRoster.__getitem__-def"><a name="L268"></a><tt class="py-lineno">268</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.__getitem__-toggle" onclick="return toggle('NonBlockingRoster.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">item</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.__getitem__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.__getitem__-expanded"><a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"><tt class="py-docstring"> Get the contact in the internal format. Raises KeyError if JID 'item' is</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"><tt class="py-docstring"> not in roster</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">item</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getItem"></a><div id="NonBlockingRoster.getItem-def"><a name="L275"></a><tt class="py-lineno">275</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getItem-toggle" onclick="return toggle('NonBlockingRoster.getItem');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getItem">getItem</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">item</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getItem-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getItem-expanded"><a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"><tt class="py-docstring"> Get the contact in the internal format (or None if JID 'item' is not in</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"><tt class="py-docstring"> roster)</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">item</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">item</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.Subscribe"></a><div id="NonBlockingRoster.Subscribe-def"><a name="L283"></a><tt class="py-lineno">283</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.Subscribe-toggle" onclick="return toggle('NonBlockingRoster.Subscribe');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Subscribe">Subscribe</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.Subscribe-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.Subscribe-expanded"><a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"><tt class="py-docstring"> Send subscription request to JID 'jid'</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-92', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt id="link-93" class="py-name"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-93', 'Presence', 'link-3');">Presence</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'subscribe'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.Unsubscribe"></a><div id="NonBlockingRoster.Unsubscribe-def"><a name="L289"></a><tt class="py-lineno">289</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.Unsubscribe-toggle" onclick="return toggle('NonBlockingRoster.Unsubscribe');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Unsubscribe">Unsubscribe</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.Unsubscribe-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.Unsubscribe-expanded"><a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"><tt class="py-docstring"> Ask for removing our subscription for JID 'jid'</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-94', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt id="link-95" class="py-name"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-95', 'Presence', 'link-3');">Presence</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'unsubscribe'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.Authorize"></a><div id="NonBlockingRoster.Authorize-def"><a name="L295"></a><tt class="py-lineno">295</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.Authorize-toggle" onclick="return toggle('NonBlockingRoster.Authorize');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Authorize">Authorize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.Authorize-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.Authorize-expanded"><a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"><tt class="py-docstring"> Authorize JID 'jid'. Works only if these JID requested auth previously</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-96', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt id="link-97" class="py-name"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-97', 'Presence', 'link-3');">Presence</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'subscribed'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.Unauthorize"></a><div id="NonBlockingRoster.Unauthorize-def"><a name="L301"></a><tt class="py-lineno">301</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.Unauthorize-toggle" onclick="return toggle('NonBlockingRoster.Unauthorize');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Unauthorize">Unauthorize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">jid</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.Unauthorize-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.Unauthorize-expanded"><a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"><tt class="py-docstring"> Unauthorise JID 'jid'. Use for declining authorisation request or for</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"><tt class="py-docstring"> removing existing authorization</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-98', 'send', 'link-19');">send</a></tt><tt class="py-op">(</tt><tt id="link-99" class="py-name"><a title="nbxmpp.protocol.Presence" class="py-name" href="#" onclick="return doclink('link-99', 'Presence', 'link-3');">Presence</a></tt><tt class="py-op">(</tt><tt class="py-name">jid</tt><tt class="py-op">,</tt> <tt class="py-string">'unsubscribed'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getRaw"></a><div id="NonBlockingRoster.getRaw-def"><a name="L308"></a><tt class="py-lineno">308</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getRaw-toggle" onclick="return toggle('NonBlockingRoster.getRaw');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRaw">getRaw</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getRaw-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getRaw-expanded"><a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"><tt class="py-docstring"> Return the internal data representation of the roster</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt> </tt>
+</div><a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.setRaw"></a><div id="NonBlockingRoster.setRaw-def"><a name="L314"></a><tt class="py-lineno">314</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.setRaw-toggle" onclick="return toggle('NonBlockingRoster.setRaw');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setRaw">setRaw</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.setRaw-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.setRaw-expanded"><a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"><tt class="py-docstring"> Return the internal data representation of the roster</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">User</tt> <tt class="py-op">+</tt> <tt class="py-string">'@'</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Server</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-string">'resources'</tt><tt class="py-op">:</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-string">'name'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-string">'ask'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-string">'subscription'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-string">'groups'</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-op">}</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_set</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+</div><a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.plugin"></a><div id="NonBlockingRoster.plugin-def"><a name="L328"></a><tt class="py-lineno">328</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.plugin-toggle" onclick="return toggle('NonBlockingRoster.plugin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin">plugin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.plugin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.plugin-expanded"><a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"><tt class="py-docstring"> Register presence and subscription trackers in the owner's dispatcher.</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"><tt class="py-docstring"> Also request roster from server if the 'request' argument is set. Used</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"><tt class="py-docstring"> internally</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-100', 'RegisterHandler', 'link-100');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'iq'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.RosterIqHandler()=nbxmpp.roster_nb.NonBlockingRoster-class.html#RosterIqHandler"><a title="nbxmpp.roster_nb.NonBlockingRoster.RosterIqHandler" class="py-name" href="#" onclick="return doclink('link-101', 'RosterIqHandler', 'link-101');">RosterIqHandler</a></tt><tt class="py-op">,</tt> <tt class="py-string">'result'</tt><tt class="py-op">,</tt> <tt id="link-102" class="py-name"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-102', 'NS_ROSTER', 'link-7');">NS_ROSTER</a></tt><tt class="py-op">,</tt> <tt class="py-name">makefirst</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-103', 'RegisterHandler', 'link-100');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'iq'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.RosterIqHandler" class="py-name" href="#" onclick="return doclink('link-104', 'RosterIqHandler', 'link-101');">RosterIqHandler</a></tt><tt class="py-op">,</tt> <tt class="py-string">'set'</tt><tt class="py-op">,</tt> <tt id="link-105" class="py-name"><a title="nbxmpp.protocol.NS_ROSTER" class="py-name" href="#" onclick="return doclink('link-105', 'NS_ROSTER', 'link-7');">NS_ROSTER</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-106', 'RegisterHandler', 'link-100');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'presence'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.PresenceHandler()=nbxmpp.roster_nb.NonBlockingRoster-class.html#PresenceHandler"><a title="nbxmpp.roster_nb.NonBlockingRoster.PresenceHandler" class="py-name" href="#" onclick="return doclink('link-107', 'PresenceHandler', 'link-107');">PresenceHandler</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">request</tt><tt class="py-op">:</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.Request()=nbxmpp.roster_nb.NonBlockingRoster-class.html#Request"><a title="nbxmpp.roster_nb.NonBlockingRoster.Request" class="py-name" href="#" onclick="return doclink('link-108', 'Request', 'link-108');">Request</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster._on_roster_set"></a><div id="NonBlockingRoster._on_roster_set-def"><a name="L340"></a><tt class="py-lineno">340</tt> <a class="py-toggle" href="#" id="NonBlockingRoster._on_roster_set-toggle" onclick="return toggle('NonBlockingRoster._on_roster_set');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_on_roster_set">_on_roster_set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster._on_roster_set-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster._on_roster_set-expanded"><a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name" targets="Class nbxmpp.dispatcher_nb.Dispatcher=nbxmpp.dispatcher_nb.Dispatcher-class.html"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-109', 'Dispatcher', 'link-109');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-110" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking,Method nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-110', 'ProcessNonBlocking', 'link-110');">ProcessNonBlocking</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_set</tt><tt class="py-op">:</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'_owner'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">:</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-comment"># Connection has been closed by receiving a &lt;stream:error&gt; for ex,</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.onreceive()=nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive,Method nbxmpp.transports_nb.NonBlockingTransport.onreceive()=nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-111', 'onreceive', 'link-111');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_ready</tt><tt class="py-op">:</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_ready</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_ready</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingRoster.getRoster"></a><div id="NonBlockingRoster.getRoster-def"><a name="L354"></a><tt class="py-lineno">354</tt> <a class="py-toggle" href="#" id="NonBlockingRoster.getRoster-toggle" onclick="return toggle('NonBlockingRoster.getRoster');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRoster">getRoster</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">on_ready</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">force</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingRoster.getRoster-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingRoster.getRoster-expanded"><a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"><tt class="py-docstring"> Request roster from server if neccessary and returns self</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-name">return_self</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_set</tt><tt class="py-op">:</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_ready</tt> <tt class="py-op">=</tt> <tt class="py-name">on_ready</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-112', 'onreceive', 'link-111');">onreceive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster._on_roster_set()=nbxmpp.roster_nb.NonBlockingRoster-class.html#_on_roster_set"><a title="nbxmpp.roster_nb.NonBlockingRoster._on_roster_set" class="py-name" href="#" onclick="return doclink('link-113', '_on_roster_set', 'link-113');">_on_roster_set</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> <tt class="py-name">return_self</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">on_ready</tt><tt class="py-op">:</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-name">on_ready</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-name">return_self</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">return_self</tt> <tt class="py-keyword">or</tt> <tt class="py-name">force</tt><tt class="py-op">:</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div></div><a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.roster_nb.NonBlockingRoster-class.html b/doc/apidocs/nbxmpp.roster_nb.NonBlockingRoster-class.html
new file mode 100644
index 0000000..20c0d60
--- /dev/null
+++ b/doc/apidocs/nbxmpp.roster_nb.NonBlockingRoster-class.html
@@ -0,0 +1,1467 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.roster_nb.NonBlockingRoster</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.roster_nb-module.html">Module&nbsp;roster_nb</a> ::
+ Class&nbsp;NonBlockingRoster
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.roster_nb.NonBlockingRoster-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingRoster</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_r" name="uml_class_diagram_for_nbxmpp_r">
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__" title="Init internal variables" alt="" coords="17,153,313,172"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Request" title="Request roster from server if it were not yet requested (or if the &#39;force&#39; argument is set)" alt="" coords="17,172,313,191"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#RosterIqHandler" title="Subscription tracker. Used internally for setting items state in internal roster representation" alt="" coords="17,191,313,209"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#PresenceHandler" title="Presence tracker. Used internally for setting items&#39; resources state in internal roster representation" alt="" coords="17,209,313,228"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#delItem" title="Delete contact &#39;jid&#39; from roster" alt="" coords="17,228,313,247"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getAsk" title="Return &#39;ask&#39; value of contact &#39;jid&#39;" alt="" coords="17,247,313,265"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getGroups" title="Return groups list that contact &#39;jid&#39; belongs to" alt="" coords="17,265,313,284"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getName" title="Return name of contact &#39;jid&#39;" alt="" coords="17,284,313,303"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getPriority" title="Return priority of contact &#39;jid&#39;. &#39;jid&#39; should be a full (not bare) JID" alt="" coords="17,303,313,321"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawRoster" title="Return roster representation in internal format" alt="" coords="17,321,313,340"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawItem" title="Return roster item &#39;jid&#39; representation in internal format" alt="" coords="17,340,313,359"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getShow" title="Return &#39;show&#39; value of contact &#39;jid&#39;. &#39;jid&#39; should be a full (not bare) JID" alt="" coords="17,359,313,377"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getStatus" title="Return &#39;status&#39; value of contact &#39;jid&#39;. &#39;jid&#39; should be a full (not bare) JID" alt="" coords="17,377,313,396"/>
+<area shape="rect" id="node205" href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRoster" title="Request roster from server if neccessary and returns self" alt="" coords="17,415,313,433"/>
+<area shape="rect" id="node1" href="nbxmpp.roster_nb.NonBlockingRoster-class.html" title="Defines a plenty of methods that will allow you to manage roster. Also automatically track presences from remote JIDs taking into account that every JID can have multiple resources connected. Does not currently support &#39;error&#39; presences. You can also use mapping interface for access to the internal representation of contacts in roster" alt="" coords="5,121,325,439"/>
+<area shape="rect" id="node206" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="52,39,277,57"/>
+<area shape="rect" id="node206" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="52,57,277,76"/>
+<area shape="rect" id="node206" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="52,76,277,95"/>
+<area shape="rect" id="node2" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="40,6,288,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_r.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_r" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Defines a plenty of methods that will allow you to manage roster. Also
+automatically track presences from remote JIDs taking into account that
+every JID can have multiple resources connected. Does not currently support
+'error' presences. You can also use mapping interface for access to the
+internal representation of contacts in roster
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">version</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Init internal variables</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Request" class="summary-sig-name">Request</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">force</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Request roster from server if it were not yet requested (or if the
+'force' argument is set)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Request">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#RosterIqHandler" class="summary-sig-name">RosterIqHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">dis</span>,
+ <span class="summary-sig-arg">stanza</span>)</span><br />
+ Subscription tracker. Used internally for setting items state in internal
+roster representation</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.RosterIqHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#PresenceHandler" class="summary-sig-name">PresenceHandler</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">dis</span>,
+ <span class="summary-sig-arg">pres</span>)</span><br />
+ Presence tracker. Used internally for setting items' resources state in
+internal roster representation</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.PresenceHandler">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_getItemData" class="summary-sig-name" onclick="show_private();">_getItemData</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>,
+ <span class="summary-sig-arg">dataname</span>)</span><br />
+ Return specific jid's representation in internal format. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster._getItemData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_getResourceData" class="summary-sig-name" onclick="show_private();">_getResourceData</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>,
+ <span class="summary-sig-arg">dataname</span>)</span><br />
+ Return specific jid's resource representation in internal format. Used
+internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster._getResourceData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#delItem" class="summary-sig-name">delItem</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Delete contact 'jid' from roster</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.delItem">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getAsk" class="summary-sig-name">getAsk</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return 'ask' value of contact 'jid'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getAsk">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getGroups" class="summary-sig-name">getGroups</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return groups list that contact 'jid' belongs to</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getGroups">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getName" class="summary-sig-name">getName</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return name of contact 'jid'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getName">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getPriority" class="summary-sig-name">getPriority</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return priority of contact 'jid'. 'jid' should be a full (not bare) JID</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getPriority">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawRoster" class="summary-sig-name">getRawRoster</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return roster representation in internal format</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRawRoster">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRawItem" class="summary-sig-name">getRawItem</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return roster item 'jid' representation in internal format</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRawItem">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getShow" class="summary-sig-name">getShow</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return 'show' value of contact 'jid'. 'jid' should be a full (not bare)
+JID</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getShow">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getStatus" class="summary-sig-name">getStatus</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return 'status' value of contact 'jid'. 'jid' should be a full (not bare)
+JID</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getStatus">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getSubscription" class="summary-sig-name">getSubscription</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return 'subscription' value of contact 'jid'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getSubscription">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getResources" class="summary-sig-name">getResources</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Return list of connected resources of contact 'jid'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getResources">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setItem" class="summary-sig-name">setItem</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>,
+ <span class="summary-sig-arg">name</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">groups</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>)</span><br />
+ Rename contact 'jid' and sets the groups list that it now belongs to</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.setItem">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setItemMulti" class="summary-sig-name">setItemMulti</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">items</span>)</span><br />
+ Rename multiple contacts and sets their group lists</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.setItemMulti">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getItems" class="summary-sig-name">getItems</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return list of all [bare] JIDs that the roster is currently tracks</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getItems">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#keys" class="summary-sig-name">keys</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Same as getItems. Provided for the sake of dictionary interface</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.keys">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#__getitem__" class="summary-sig-name">__getitem__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">item</span>)</span><br />
+ Get the contact in the internal format. Raises KeyError if JID 'item' is
+not in roster</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.__getitem__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getItem" class="summary-sig-name">getItem</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">item</span>)</span><br />
+ Get the contact in the internal format (or None if JID 'item' is not in
+roster)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getItem">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Subscribe" class="summary-sig-name">Subscribe</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Send subscription request to JID 'jid'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Subscribe">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Unsubscribe" class="summary-sig-name">Unsubscribe</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Ask for removing our subscription for JID 'jid'</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Unsubscribe">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Authorize" class="summary-sig-name">Authorize</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Authorize JID 'jid'. Works only if these JID requested auth previously</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Authorize">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#Unauthorize" class="summary-sig-name">Unauthorize</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">jid</span>)</span><br />
+ Unauthorise JID 'jid'. Use for declining authorisation request or for
+removing existing authorization</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Unauthorize">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRaw" class="summary-sig-name">getRaw</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the internal data representation of the roster</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRaw">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#setRaw" class="summary-sig-name">setRaw</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Return the internal data representation of the roster</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.setRaw">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin" class="summary-sig-name">plugin</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>,
+ <span class="summary-sig-arg">request</span>=<span class="summary-sig-default">1</span>)</span><br />
+ Register presence and subscription trackers in the owner's dispatcher.
+Also request roster from server if the 'request' argument is set. Used
+internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.plugin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#_on_roster_set" class="summary-sig-name" onclick="show_private();">_on_roster_set</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster._on_roster_set">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.roster_nb.NonBlockingRoster-class.html#getRoster" class="summary-sig-name">getRoster</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">on_ready</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">force</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Request roster from server if neccessary and returns self</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRoster">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">version</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Init internal variables
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="Request"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">Request</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">force</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Request">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Request roster from server if it were not yet requested (or if the
+'force' argument is set)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="RosterIqHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">RosterIqHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">dis</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.RosterIqHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Subscription tracker. Used internally for setting items state in internal
+roster representation
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="PresenceHandler"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">PresenceHandler</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">dis</span>,
+ <span class="sig-arg">pres</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.PresenceHandler">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Presence tracker. Used internally for setting items' resources state in
+internal roster representation
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_getItemData"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_getItemData</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>,
+ <span class="sig-arg">dataname</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster._getItemData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return specific jid's representation in internal format. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_getResourceData"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_getResourceData</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>,
+ <span class="sig-arg">dataname</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster._getResourceData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return specific jid's resource representation in internal format. Used
+internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="delItem"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">delItem</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.delItem">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Delete contact 'jid' from roster
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getAsk"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getAsk</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getAsk">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return 'ask' value of contact 'jid'
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getGroups"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getGroups</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getGroups">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return groups list that contact 'jid' belongs to
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getName"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getName</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getName">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return name of contact 'jid'
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getPriority"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getPriority</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getPriority">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return priority of contact 'jid'. 'jid' should be a full (not bare) JID
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getRawRoster"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getRawRoster</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRawRoster">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return roster representation in internal format
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getRawItem"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getRawItem</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRawItem">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return roster item 'jid' representation in internal format
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getShow"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getShow</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getShow">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return 'show' value of contact 'jid'. 'jid' should be a full (not bare)
+JID
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getStatus"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getStatus</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getStatus">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return 'status' value of contact 'jid'. 'jid' should be a full (not bare)
+JID
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getSubscription"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getSubscription</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getSubscription">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return 'subscription' value of contact 'jid'
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getResources"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getResources</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getResources">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return list of connected resources of contact 'jid'
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setItem"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setItem</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>,
+ <span class="sig-arg">name</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">groups</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.setItem">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Rename contact 'jid' and sets the groups list that it now belongs to
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setItemMulti"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setItemMulti</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">items</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.setItemMulti">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Rename multiple contacts and sets their group lists
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getItems"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getItems</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getItems">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return list of all [bare] JIDs that the roster is currently tracks
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="keys"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">keys</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.keys">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Same as getItems. Provided for the sake of dictionary interface
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__getitem__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">item</span>)</span>
+ <br /><em class="fname">(Indexing operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.__getitem__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get the contact in the internal format. Raises KeyError if JID 'item' is
+not in roster
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getItem"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getItem</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">item</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getItem">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get the contact in the internal format (or None if JID 'item' is not in
+roster)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="Subscribe"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">Subscribe</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Subscribe">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send subscription request to JID 'jid'
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="Unsubscribe"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">Unsubscribe</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Unsubscribe">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Ask for removing our subscription for JID 'jid'
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="Authorize"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">Authorize</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Authorize">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Authorize JID 'jid'. Works only if these JID requested auth previously
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="Unauthorize"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">Unauthorize</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">jid</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.Unauthorize">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Unauthorise JID 'jid'. Use for declining authorisation request or for
+removing existing authorization
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getRaw"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getRaw</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRaw">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the internal data representation of the roster
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setRaw"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setRaw</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.setRaw">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the internal data representation of the roster
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugin</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>,
+ <span class="sig-arg">request</span>=<span class="sig-default">1</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.plugin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Register presence and subscription trackers in the owner's dispatcher.
+Also request roster from server if the 'request' argument is set. Used
+internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_roster_set"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_roster_set</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster._on_roster_set">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getRoster"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getRoster</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">on_ready</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">force</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.roster_nb-pysrc.html#NonBlockingRoster.getRoster">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Request roster from server if neccessary and returns self
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.simplexml-module.html b/doc/apidocs/nbxmpp.simplexml-module.html
new file mode 100644
index 0000000..14de838
--- /dev/null
+++ b/doc/apidocs/nbxmpp.simplexml-module.html
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.simplexml</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;simplexml
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.simplexml-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module simplexml</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html">source&nbsp;code</a></span></p>
+Simplexml module provides xmpppy library with all needed tools to handle XML
+nodes and XML streams. I'm personally using it in many other separate
+projects. It is designed to be as standalone as possible
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml.Node-class.html" class="summary-name">Node</a><br />
+ Node class describes syntax of separate XML Node. It have a constructor that
+permits node creation from set of &quot;namespace name&quot;, attributes and payload
+of text strings and other nodes. It does not natively support building node
+from text string and uses NodeBuilder class for that purpose. After
+creation node can be mangled in many ways so it can be completely changed.
+Also node can be serialised into string in one of two modes: default (where
+the textual representation of node describes it exactly) and &quot;fancy&quot; - with
+whitespace added to make indentation and thus make result more readable by
+human.
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml.T-class.html" class="summary-name">T</a><br />
+ Auxiliary class used to quick access to node's child nodes
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml.NT-class.html" class="summary-name">NT</a><br />
+ Auxiliary class used to quick create node's child nodes
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml.NodeBuilder-class.html" class="summary-name">NodeBuilder</a><br />
+ Builds a Node class minidom from data parsed to it. This class used for two
+purposes:
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml-module.html#XMLescape" class="summary-sig-name">XMLescape</a>(<span class="summary-sig-arg">txt</span>)</span><br />
+ Return provided string with symbols &amp; &lt; &gt; &quot; replaced by their respective XML
+entities</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#XMLescape">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml-module.html#ustr" class="summary-sig-name">ustr</a>(<span class="summary-sig-arg">what</span>)</span><br />
+ Converts object &quot;what&quot; to unicode string using it's own __str__ method if
+accessible or unicode method otherwise</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#ustr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml-module.html#XML2Node" class="summary-sig-name">XML2Node</a>(<span class="summary-sig-arg">xml</span>)</span><br />
+ Convert supplied textual string into XML node. Handy f.e. for reading
+configuration file. Raises xml.parser.expat.parsererror if provided string
+is not well-formed XML</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#XML2Node">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml-module.html#BadXML2Node" class="summary-sig-name">BadXML2Node</a>(<span class="summary-sig-arg">xml</span>)</span><br />
+ Convert supplied textual string into XML node. Survives if xml data is
+cutted half way round. I.e. &quot;&lt;html&gt;some text &lt;br&gt;some more text&quot;. Will raise
+xml.parser.expat.parsererror on misplaced tags though. F.e. &quot;&lt;b&gt;some text
+&lt;br&gt;some more text&lt;/b&gt;&quot; will not work</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#BadXML2Node">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.simplexml')">logging.getLogger('nbxmpp.simplexml')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml-module.html#ENCODING" class="summary-name">ENCODING</a> = <code title="'utf-8'"><code class="variable-quote">'</code><code class="variable-string">utf-8</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="xml">xml</span>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="XMLescape"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">XMLescape</span>(<span class="sig-arg">txt</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#XMLescape">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return provided string with symbols &amp; &lt; &gt; &quot; replaced by their respective XML
+entities
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="ustr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">ustr</span>(<span class="sig-arg">what</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#ustr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Converts object &quot;what&quot; to unicode string using it's own __str__ method if
+accessible or unicode method otherwise
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="XML2Node"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">XML2Node</span>(<span class="sig-arg">xml</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#XML2Node">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Convert supplied textual string into XML node. Handy f.e. for reading
+configuration file. Raises xml.parser.expat.parsererror if provided string
+is not well-formed XML
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="BadXML2Node"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">BadXML2Node</span>(<span class="sig-arg">xml</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#BadXML2Node">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Convert supplied textual string into XML node. Survives if xml data is
+cutted half way round. I.e. &quot;&lt;html&gt;some text &lt;br&gt;some more text&quot;. Will raise
+xml.parser.expat.parsererror on misplaced tags though. F.e. &quot;&lt;b&gt;some text
+&lt;br&gt;some more text&lt;/b&gt;&quot; will not work
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.simplexml')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="ENCODING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ENCODING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">utf-8</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.simplexml-pysrc.html b/doc/apidocs/nbxmpp.simplexml-pysrc.html
new file mode 100644
index 0000000..4964fb1
--- /dev/null
+++ b/doc/apidocs/nbxmpp.simplexml-pysrc.html
@@ -0,0 +1,983 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.simplexml</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;simplexml
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.simplexml-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.simplexml-module.html">Module nbxmpp.simplexml</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## simplexml.py based on Mattew Allum's xmlstream.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment"># $Id: simplexml.py,v 1.27 2005/04/30 07:20:27 snakeru Exp $</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">Simplexml module provides xmpppy library with all needed tools to handle XML</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">nodes and XML streams. I'm personally using it in many other separate</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">projects. It is designed to be as standalone as possible</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-0', 'log', 'link-0');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.simplexml'</tt><tt class="py-op">)</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> </tt>
+<a name="XMLescape"></a><div id="XMLescape-def"><a name="L27"></a><tt class="py-lineno"> 27</tt> <a class="py-toggle" href="#" id="XMLescape-toggle" onclick="return toggle('XMLescape');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml-module.html#XMLescape">XMLescape</a><tt class="py-op">(</tt><tt class="py-param">txt</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XMLescape-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="XMLescape-expanded"><a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-docstring"> Return provided string with symbols &amp; &lt; &gt; " replaced by their respective XML</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-docstring"> entities</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt class="py-comment"># replace also FORM FEED and ESC, because they are not valid XML chars</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">txt</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">"&amp;"</tt><tt class="py-op">,</tt> <tt class="py-string">"&amp;amp;"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">"&lt;"</tt><tt class="py-op">,</tt> <tt class="py-string">"&amp;lt;"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">"&gt;"</tt><tt class="py-op">,</tt> <tt class="py-string">"&amp;gt;"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'"'</tt><tt class="py-op">,</tt> <tt class="py-string">"&amp;quot;"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">u'\x0C'</tt><tt class="py-op">,</tt> <tt class="py-string">""</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">u'\x1B'</tt><tt class="py-op">,</tt> <tt class="py-string">""</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable nbxmpp.simplexml.ENCODING=nbxmpp.simplexml-module.html#ENCODING"><a title="nbxmpp.simplexml.ENCODING" class="py-name" href="#" onclick="return doclink('link-1', 'ENCODING', 'link-1');">ENCODING</a></tt><tt class="py-op">=</tt><tt class="py-string">'utf-8'</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> </tt>
+<a name="ustr"></a><div id="ustr-def"><a name="L37"></a><tt class="py-lineno"> 37</tt> <a class="py-toggle" href="#" id="ustr-toggle" onclick="return toggle('ustr');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml-module.html#ustr">ustr</a><tt class="py-op">(</tt><tt class="py-param">what</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ustr-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ustr-expanded"><a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"> Converts object "what" to unicode string using it's own __str__ method if</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring"> accessible or unicode method otherwise</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">what</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">what</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">what</tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Method nbxmpp.protocol.JID.__str__()=nbxmpp.protocol.JID-class.html#__str__,Method nbxmpp.simplexml.Node.__str__()=nbxmpp.simplexml.Node-class.html#__str__,Method nbxmpp.tls_nb.SSLWrapper.Error.__str__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-2', '__str__', 'link-2');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">what</tt><tt class="py-op">)</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name"><a title="nbxmpp.simplexml.ENCODING" class="py-name" href="#" onclick="return doclink('link-3', 'ENCODING', 'link-1');">ENCODING</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">r</tt> </tt>
+</div><a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
+<a name="Node"></a><div id="Node-def"><a name="L52"></a><tt class="py-lineno"> 52</tt> <a class="py-toggle" href="#" id="Node-toggle" onclick="return toggle('Node');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html">Node</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Node-expanded"><a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-docstring"> Node class describes syntax of separate XML Node. It have a constructor that</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-docstring"> permits node creation from set of "namespace name", attributes and payload</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> of text strings and other nodes. It does not natively support building node</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> from text string and uses NodeBuilder class for that purpose. After</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> creation node can be mangled in many ways so it can be completely changed.</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> Also node can be serialised into string in one of two modes: default (where</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> the textual representation of node describes it exactly) and "fancy" - with</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> whitespace added to make indentation and thus make result more readable by</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> human.</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"> Node class have attribute FORCE_NODE_RECREATION that is defaults to False</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> thus enabling fast node replication from the some other node. The drawback</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> of the fast way is that new node shares some info with the "original" node</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> that is changing the one node may influence the other. Though it is rarely</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> needed (in xmpppy it is never needed at all since I'm usually never using</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> original node after replication (and using replication only to move upwards</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"> on the classes tree).</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt id="link-4" class="py-name" targets="Variable nbxmpp.simplexml.Node.FORCE_NODE_RECREATION=nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION"><a title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" class="py-name" href="#" onclick="return doclink('link-4', 'FORCE_NODE_RECREATION', 'link-4');">FORCE_NODE_RECREATION</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
+<a name="Node.__init__"></a><div id="Node.__init__-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="Node.__init__-toggle" onclick="return toggle('Node.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">parent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">nsp</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-param">node_built</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.__init__-expanded"><a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt class="py-docstring"> Takes "tag" argument as the name of node (prepended by namespace, if</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-docstring"> needed and separated from it by a space), attrs dictionary as the set of</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> arguments, payload list as the set of textual strings and child nodes</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> that this node carries within itself and "parent" argument that is</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> another node that this one will be the child of. Also the __init__ can be</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring"> provided with "node" argument that is either a text string containing</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt class="py-docstring"> exactly one node or another Node instance to begin with. If both "node"</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-docstring"> and other arguments is provided then the node initially created as</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-docstring"> replica of "node" provided and then modified to be compliant with other</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-docstring"> arguments.</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">:</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" class="py-name" href="#" onclick="return doclink('link-5', 'FORCE_NODE_RECREATION', 'link-4');">FORCE_NODE_RECREATION</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Class nbxmpp.simplexml.Node=nbxmpp.simplexml.Node-class.html"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-6', 'Node', 'link-6');">Node</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-7', 'Node', 'link-6');">Node</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name" targets="Class nbxmpp.simplexml.NodeBuilder=nbxmpp.simplexml.NodeBuilder-class.html"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-8', 'NodeBuilder', 'link-8');">NodeBuilder</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">node_built</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Variable nbxmpp.name=nbxmpp-module.html#name,Variable nbxmpp.protocol.name=nbxmpp.protocol-module.html#name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-9', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsd</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-10', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.keys()=nbxmpp.roster_nb.NonBlockingRoster-class.html#keys"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-11', 'keys', 'link-11');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">data</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">kid</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">:</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">kid</tt><tt class="py-op">)</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">nsd</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsd</tt><tt class="py-op">[</tt><tt class="py-name">k</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-12', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsd</tt> <tt class="py-op">=</tt> <tt class="py-string">'tag'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">parent</tt><tt class="py-op">:</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">parent</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsp_cache</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">nsp</tt><tt class="py-op">:</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">nsp</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsp_cache</tt><tt class="py-op">[</tt><tt class="py-name">k</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt> <tt class="py-keyword">in</tt> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">attr</tt> <tt class="py-op">==</tt> <tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsd</tt><tt class="py-op">[</tt><tt class="py-string">u''</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">attr</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'xmlns:'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsd</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">[</tt><tt class="py-number">6</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node_built</tt><tt class="py-op">:</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-13', 'name', 'link-9');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">''</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-name">tag</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method nbxmpp.simplexml.Node.lookup_nsp()=nbxmpp.simplexml.Node-class.html#lookup_nsp"><a title="nbxmpp.simplexml.Node.lookup_nsp" class="py-name" href="#" onclick="return doclink('link-14', 'lookup_nsp', 'link-14');">lookup_nsp</a></tt><tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">)</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">' '</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tag</tt><tt class="py-op">:</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-15', 'name', 'link-9');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-name">tag</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-16', 'name', 'link-9');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-name">tag</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">payload</tt><tt class="py-op">]</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">payload</tt><tt class="py-op">:</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt id="link-17" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-17', 'Node', 'link-6');">Node</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method nbxmpp.simplexml.Node.addChild()=nbxmpp.simplexml.Node-class.html#addChild"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-18', 'addChild', 'link-18');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">i</tt><tt class="py-op">)</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-19" class="py-name" targets="Function nbxmpp.simplexml.ustr()=nbxmpp.simplexml-module.html#ustr"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-19', 'ustr', 'link-19');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
+<a name="Node.lookup_nsp"></a><div id="Node.lookup_nsp-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="Node.lookup_nsp-toggle" onclick="return toggle('Node.lookup_nsp');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#lookup_nsp">lookup_nsp</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pfx</tt><tt class="py-op">=</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.lookup_nsp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.lookup_nsp-expanded"><a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsd</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Method nbxmpp.bosh.KeyStack.get()=nbxmpp.bosh.KeyStack-class.html#get"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-20', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ns</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsp_cache</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-21', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ns</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">:</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="nbxmpp.simplexml.Node.lookup_nsp" class="py-name" href="#" onclick="return doclink('link-22', 'lookup_nsp', 'link-14');">lookup_nsp</a></tt><tt class="py-op">(</tt><tt class="py-name">pfx</tt><tt class="py-op">)</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">nsp_cache</tt><tt class="py-op">[</tt><tt class="py-name">pfx</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">ns</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'http://www.gajim.org/xmlns/undeclared'</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ns</tt> </tt>
+</div><a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> </tt>
+<a name="Node.__str__"></a><div id="Node.__str__-def"><a name="L146"></a><tt class="py-lineno">146</tt> <a class="py-toggle" href="#" id="Node.__str__-toggle" onclick="return toggle('Node.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fancy</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.__str__-expanded"><a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"><tt class="py-docstring"> Method used to dump node into textual representation. If "fancy" argument</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"><tt class="py-docstring"> is set to True produces indented output for readability</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">fancy</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt> <tt class="py-op">*</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-string">"&lt;"</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-23', 'name', 'link-9');">name</a></tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">:</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">!=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt><tt class="py-op">:</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'xmlns'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">' xmlns="%s"'</tt><tt class="py-op">%</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-24', 'keys', 'link-11');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">val</tt> <tt class="py-op">=</tt> <tt id="link-25" class="py-name"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-25', 'ustr', 'link-19');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">' %s="%s"'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt id="link-26" class="py-name" targets="Function nbxmpp.simplexml.XMLescape()=nbxmpp.simplexml-module.html#XMLescape"><a title="nbxmpp.simplexml.XMLescape" class="py-name" href="#" onclick="return doclink('link-26', 'XMLescape', 'link-26');">XMLescape</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> <tt class="py-op">)</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"&gt;"</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">cnt</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">:</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fancy</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"\n"</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">a</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">:</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">fancy</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">&gt;=</tt><tt class="py-name">cnt</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt><tt class="py-op">=</tt><tt class="py-name">s</tt><tt class="py-op">+</tt><tt id="link-27" class="py-name"><a title="nbxmpp.simplexml.XMLescape" class="py-name" href="#" onclick="return doclink('link-27', 'XMLescape', 'link-26');">XMLescape</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">cnt</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">&gt;=</tt><tt class="py-name">cnt</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt><tt class="py-op">=</tt><tt class="py-name">s</tt><tt class="py-op">+</tt><tt id="link-28" class="py-name"><a title="nbxmpp.simplexml.XMLescape" class="py-name" href="#" onclick="return doclink('link-28', 'XMLescape', 'link-26');">XMLescape</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">cnt</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">a</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">a</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-name">a</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-29', '__str__', 'link-2');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-name">a</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="nbxmpp.protocol.JID.__str__
+nbxmpp.simplexml.Node.__str__
+nbxmpp.tls_nb.SSLWrapper.Error.__str__" class="py-name" href="#" onclick="return doclink('link-30', '__str__', 'link-2');">__str__</a></tt><tt class="py-op">(</tt><tt class="py-name">fancy</tt> <tt class="py-keyword">and</tt> <tt class="py-name">fancy</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">cnt</tt><tt class="py-op">=</tt><tt class="py-name">cnt</tt><tt class="py-op">+</tt><tt class="py-number">1</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">fancy</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">cnt</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt id="link-31" class="py-name"><a title="nbxmpp.simplexml.XMLescape" class="py-name" href="#" onclick="return doclink('link-31', 'XMLescape', 'link-26');">XMLescape</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">cnt</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">cnt</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt id="link-32" class="py-name"><a title="nbxmpp.simplexml.XMLescape" class="py-name" href="#" onclick="return doclink('link-32', 'XMLescape', 'link-26');">XMLescape</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">cnt</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt> <tt class="py-keyword">and</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">s</tt><tt class="py-op">=</tt><tt class="py-name">s</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-string">' /&gt;'</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fancy</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"\n"</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fancy</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">fancy</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt> <tt class="py-op">*</tt> <tt class="py-string">' '</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"&lt;/"</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-33', 'name', 'link-9');">name</a></tt> <tt class="py-op">+</tt> <tt class="py-string">"&gt;"</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">fancy</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt> <tt class="py-op">+</tt> <tt class="py-string">"\n"</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt>
+</div><a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> </tt>
+<a name="Node.addChild"></a><div id="Node.addChild-def"><a name="L182"></a><tt class="py-lineno">182</tt> <a class="py-toggle" href="#" id="Node.addChild-toggle" onclick="return toggle('Node.addChild');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#addChild">addChild</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.addChild-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.addChild-expanded"><a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"><tt class="py-docstring"> If "node" argument is provided, adds it as child node. Else creates new</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"><tt class="py-docstring"> node from the other arguments' values and adds it as well</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'xmlns'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">(</tt><tt class="py-string">"Use namespace=x instead of attrs={'xmlns':x}"</tt><tt class="py-op">)</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">:</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-name">newnode</tt><tt class="py-op">=</tt><tt class="py-name">node</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-name">newnode</tt><tt class="py-op">=</tt><tt id="link-34" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-34', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">=</tt><tt id="link-35" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-35', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">namespace</tt><tt class="py-op">:</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">newnode</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method nbxmpp.simplexml.Node.setNamespace()=nbxmpp.simplexml.Node-class.html#setNamespace"><a title="nbxmpp.simplexml.Node.setNamespace" class="py-name" href="#" onclick="return doclink('link-36', 'setNamespace', 'link-36');">setNamespace</a></tt><tt class="py-op">(</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">newnode</tt><tt class="py-op">)</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">newnode</tt> </tt>
+</div><a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> </tt>
+<a name="Node.addData"></a><div id="Node.addData-def"><a name="L198"></a><tt class="py-lineno">198</tt> <a class="py-toggle" href="#" id="Node.addData-toggle" onclick="return toggle('Node.addData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#addData">addData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.addData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.addData-expanded"><a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"><tt class="py-docstring"> Add some CDATA to node</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-37" class="py-name"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-37', 'ustr', 'link-19');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> </tt>
+<a name="Node.clearData"></a><div id="Node.clearData-def"><a name="L204"></a><tt class="py-lineno">204</tt> <a class="py-toggle" href="#" id="Node.clearData-toggle" onclick="return toggle('Node.clearData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#clearData">clearData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.clearData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.clearData-expanded"><a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"><tt class="py-docstring"> Remove all CDATA from the node</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> </tt>
+<a name="Node.delAttr"></a><div id="Node.delAttr-def"><a name="L210"></a><tt class="py-lineno">210</tt> <a class="py-toggle" href="#" id="Node.delAttr-toggle" onclick="return toggle('Node.delAttr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#delAttr">delAttr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.delAttr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.delAttr-expanded"><a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"><tt class="py-docstring"> Delete an attribute "key"</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> </tt>
+<a name="Node.delChild"></a><div id="Node.delChild-def"><a name="L216"></a><tt class="py-lineno">216</tt> <a class="py-toggle" href="#" id="Node.delChild-toggle" onclick="return toggle('Node.delChild');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#delChild">delChild</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.delChild-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.delChild-expanded"><a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"><tt class="py-docstring"> Delete the "node" from the node's childs list, if "node" is an instance.</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"><tt class="py-docstring"> Else delete the first node that have specified name and (optionally)</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"><tt class="py-docstring"> attributes</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt id="link-38" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-38', 'Node', 'link-6');">Node</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method nbxmpp.simplexml.Node.getTag()=nbxmpp.simplexml.Node-class.html#getTag"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-39', 'getTag', 'link-39');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">)</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">node</tt> </tt>
+</div><a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> </tt>
+<a name="Node.getAttrs"></a><div id="Node.getAttrs-def"><a name="L227"></a><tt class="py-lineno">227</tt> <a class="py-toggle" href="#" id="Node.getAttrs-toggle" onclick="return toggle('Node.getAttrs');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getAttrs">getAttrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getAttrs-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getAttrs-expanded"><a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"><tt class="py-docstring"> Return all node's attributes as dictionary</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt> </tt>
+</div><a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> </tt>
+<a name="Node.getAttr"></a><div id="Node.getAttr-def"><a name="L233"></a><tt class="py-lineno">233</tt> <a class="py-toggle" href="#" id="Node.getAttr-toggle" onclick="return toggle('Node.getAttr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getAttr">getAttr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getAttr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getAttr-expanded"><a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"> Return value of specified attribute</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-40', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> </tt>
+<a name="Node.getChildren"></a><div id="Node.getChildren-def"><a name="L239"></a><tt class="py-lineno">239</tt> <a class="py-toggle" href="#" id="Node.getChildren-toggle" onclick="return toggle('Node.getChildren');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getChildren">getChildren</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getChildren-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getChildren-expanded"><a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"><tt class="py-docstring"> Return all node's child nodes as list</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt> </tt>
+</div><a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> </tt>
+<a name="Node.getData"></a><div id="Node.getData-def"><a name="L245"></a><tt class="py-lineno">245</tt> <a class="py-toggle" href="#" id="Node.getData-toggle" onclick="return toggle('Node.getData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getData">getData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getData-expanded"><a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"><tt class="py-docstring"> Return all node CDATA as string (concatenated)</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> </tt>
+<a name="Node.getName"></a><div id="Node.getName-def"><a name="L251"></a><tt class="py-lineno">251</tt> <a class="py-toggle" href="#" id="Node.getName-toggle" onclick="return toggle('Node.getName');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getName">getName</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getName-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getName-expanded"><a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"><tt class="py-docstring"> Return the name of node</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-41', 'name', 'link-9');">name</a></tt> </tt>
+</div><a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> </tt>
+<a name="Node.getNamespace"></a><div id="Node.getNamespace-def"><a name="L257"></a><tt class="py-lineno">257</tt> <a class="py-toggle" href="#" id="Node.getNamespace-toggle" onclick="return toggle('Node.getNamespace');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getNamespace">getNamespace</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getNamespace-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getNamespace-expanded"><a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"><tt class="py-docstring"> Return the namespace of node</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt> </tt>
+</div><a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> </tt>
+<a name="Node.getParent"></a><div id="Node.getParent-def"><a name="L263"></a><tt class="py-lineno">263</tt> <a class="py-toggle" href="#" id="Node.getParent-toggle" onclick="return toggle('Node.getParent');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getParent">getParent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getParent-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getParent-expanded"><a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"><tt class="py-docstring"> Returns the parent of node (if present)</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+</div><a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> </tt>
+<a name="Node.getPayload"></a><div id="Node.getPayload-def"><a name="L269"></a><tt class="py-lineno">269</tt> <a class="py-toggle" href="#" id="Node.getPayload-toggle" onclick="return toggle('Node.getPayload');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getPayload">getPayload</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getPayload-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getPayload-expanded"><a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"><tt class="py-docstring"> Return the payload of node i.e. list of child nodes and CDATA entries.</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"><tt class="py-docstring"> F.e. for "&lt;node&gt;text1&lt;nodea/&gt;&lt;nodeb/&gt; text2&lt;/node&gt;" will be returned</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"><tt class="py-docstring"> list: ['text1', &lt;nodea instance&gt;, &lt;nodeb instance&gt;, ' text2']</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-name">ret</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">)</tt><tt class="py-op">+</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-name">ret</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IndexError</tt><tt class="py-op">:</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-name">ret</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IndexError</tt><tt class="py-op">:</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ret</tt> </tt>
+</div><a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> </tt>
+<a name="Node.getTag"></a><div id="Node.getTag-def"><a name="L288"></a><tt class="py-lineno">288</tt> <a class="py-toggle" href="#" id="Node.getTag-toggle" onclick="return toggle('Node.getTag');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getTag">getTag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getTag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getTag-expanded"><a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"><tt class="py-docstring"> Filter all child nodes using specified arguments as filter. Return the</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"><tt class="py-docstring"> first found or None if not found</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method nbxmpp.simplexml.Node.getTags()=nbxmpp.simplexml.Node-class.html#getTags"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-42', 'getTags', 'link-42');">getTags</a></tt><tt class="py-op">(</tt><tt id="link-43" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-43', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">,</tt> <tt class="py-name">one</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> </tt>
+<a name="Node.getTagAttr"></a><div id="Node.getTagAttr-def"><a name="L295"></a><tt class="py-lineno">295</tt> <a class="py-toggle" href="#" id="Node.getTagAttr-toggle" onclick="return toggle('Node.getTagAttr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getTagAttr">getTagAttr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getTagAttr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getTagAttr-expanded"><a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"><tt class="py-docstring"> Return attribute value of the child with specified name (or None if no</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"><tt class="py-docstring"> such attribute)</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-44', 'getTag', 'link-39');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> </tt>
+<a name="Node.getTagData"></a><div id="Node.getTagData-def"><a name="L305"></a><tt class="py-lineno">305</tt> <a class="py-toggle" href="#" id="Node.getTagData-toggle" onclick="return toggle('Node.getTagData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getTagData">getTagData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getTagData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getTagData-expanded"><a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"><tt class="py-docstring"> Return cocatenated CDATA of the child with specified name</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-45', 'getTag', 'link-39');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Method nbxmpp.simplexml.Node.getData()=nbxmpp.simplexml.Node-class.html#getData"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-46', 'getData', 'link-46');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> </tt>
+<a name="Node.getTags"></a><div id="Node.getTags-def"><a name="L314"></a><tt class="py-lineno">314</tt> <a class="py-toggle" href="#" id="Node.getTags-toggle" onclick="return toggle('Node.getTags');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#getTags">getTags</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">one</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.getTags-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.getTags-expanded"><a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"><tt class="py-docstring"> Filter all child nodes using specified arguments as filter. Returns the</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"><tt class="py-docstring"> list of nodes found</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt class="py-name">nodes</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">:</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">namespace</tt> <tt class="py-keyword">and</tt> <tt class="py-name">namespace</tt> <tt class="py-op">!=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method nbxmpp.simplexml.Node.getNamespace()=nbxmpp.simplexml.Node-class.html#getNamespace"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-47', 'getNamespace', 'link-47');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.getName()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getName,Method nbxmpp.simplexml.Node.getName()=nbxmpp.simplexml.Node-class.html#getName"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-48', 'getName', 'link-48');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-49" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-49', 'name', 'link-9');">name</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-50', 'keys', 'link-11');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt> <tt class="py-keyword">or</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">!=</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-name">nodes</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">node</tt><tt class="py-op">)</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">one</tt> <tt class="py-keyword">and</tt> <tt class="py-name">nodes</tt><tt class="py-op">:</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">nodes</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">one</tt><tt class="py-op">:</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">nodes</tt> </tt>
+</div><a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> </tt>
+<a name="Node.iterTags"></a><div id="Node.iterTags-def"><a name="L334"></a><tt class="py-lineno">334</tt> <a class="py-toggle" href="#" id="Node.iterTags-toggle" onclick="return toggle('Node.iterTags');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#iterTags">iterTags</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.iterTags-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.iterTags-expanded"><a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"><tt class="py-docstring"> Iterate over all children using specified arguments as filter</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">node</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">:</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">namespace</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">namespace</tt> <tt class="py-op">!=</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.simplexml.Node.getNamespace" class="py-name" href="#" onclick="return doclink('link-51', 'getNamespace', 'link-47');">getNamespace</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-52', 'getName', 'link-48');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-53" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-53', 'name', 'link-9');">name</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.keys" class="py-name" href="#" onclick="return doclink('link-54', 'keys', 'link-11');">keys</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt> <tt class="py-keyword">or</tt> \ </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">!=</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">node</tt> </tt>
+</div><a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> </tt>
+<a name="Node.setAttr"></a><div id="Node.setAttr-def"><a name="L349"></a><tt class="py-lineno">349</tt> <a class="py-toggle" href="#" id="Node.setAttr-toggle" onclick="return toggle('Node.setAttr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setAttr">setAttr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setAttr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setAttr-expanded"><a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"><tt class="py-docstring"> Set attribute "key" with the value "val"</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+</div><a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> </tt>
+<a name="Node.setData"></a><div id="Node.setData-def"><a name="L355"></a><tt class="py-lineno">355</tt> <a class="py-toggle" href="#" id="Node.setData-toggle" onclick="return toggle('Node.setData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setData">setData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setData-expanded"><a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"><tt class="py-docstring"> Set node's CDATA to provided string. Resets all previous CDATA!</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-55" class="py-name"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-55', 'ustr', 'link-19');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> </tt>
+<a name="Node.setName"></a><div id="Node.setName-def"><a name="L361"></a><tt class="py-lineno">361</tt> <a class="py-toggle" href="#" id="Node.setName-toggle" onclick="return toggle('Node.setName');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setName">setName</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setName-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setName-expanded"><a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"><tt class="py-docstring"> Change the node name</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-56', 'name', 'link-9');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+</div><a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> </tt>
+<a name="Node.setNamespace"></a><div id="Node.setNamespace-def"><a name="L367"></a><tt class="py-lineno">367</tt> <a class="py-toggle" href="#" id="Node.setNamespace-toggle" onclick="return toggle('Node.setNamespace');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setNamespace">setNamespace</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setNamespace-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setNamespace-expanded"><a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"><tt class="py-docstring"> Changes the node namespace</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">namespace</tt> <tt class="py-op">=</tt> <tt class="py-name">namespace</tt> </tt>
+</div><a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> </tt>
+<a name="Node.setParent"></a><div id="Node.setParent-def"><a name="L373"></a><tt class="py-lineno">373</tt> <a class="py-toggle" href="#" id="Node.setParent-toggle" onclick="return toggle('Node.setParent');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setParent">setParent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setParent-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setParent-expanded"><a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"><tt class="py-docstring"> Set node's parent to "node". WARNING: do not checks if the parent already</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"><tt class="py-docstring"> present and not removes the node from the list of childs of previous</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"><tt class="py-docstring"> parent</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt> </tt>
+</div><a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> </tt>
+<a name="Node.setPayload"></a><div id="Node.setPayload-def"><a name="L381"></a><tt class="py-lineno">381</tt> <a class="py-toggle" href="#" id="Node.setPayload-toggle" onclick="return toggle('Node.setPayload');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setPayload">setPayload</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">,</tt> <tt class="py-param">add</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setPayload-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setPayload-expanded"><a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"><tt class="py-docstring"> Set node payload according to the list specified. WARNING: completely</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"><tt class="py-docstring"> replaces all node's previous content. If you wish just to add child or</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"><tt class="py-docstring"> CDATA - use addData or addChild methods</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">payload</tt><tt class="py-op">]</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">add</tt><tt class="py-op">:</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt> <tt class="py-op">+=</tt> <tt class="py-name">payload</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt> <tt class="py-op">=</tt> <tt class="py-name">payload</tt> </tt>
+</div><a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> </tt>
+<a name="Node.setTag"></a><div id="Node.setTag-def"><a name="L394"></a><tt class="py-lineno">394</tt> <a class="py-toggle" href="#" id="Node.setTag-toggle" onclick="return toggle('Node.setTag');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setTag">setTag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> <tt class="py-param">namespace</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setTag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setTag-expanded"><a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"><tt class="py-docstring"> Same as getTag but if the node with specified namespace/attributes not</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"><tt class="py-docstring"> found, creates such node and returns it</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-name">node</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="nbxmpp.simplexml.Node.getTags" class="py-name" href="#" onclick="return doclink('link-57', 'getTags', 'link-42');">getTags</a></tt><tt class="py-op">(</tt><tt id="link-58" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-58', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt class="py-name">namespace</tt><tt class="py-op">,</tt> <tt class="py-name">one</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">node</tt><tt class="py-op">:</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">node</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-59', 'addChild', 'link-18');">addChild</a></tt><tt class="py-op">(</tt><tt id="link-60" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-60', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt class="py-name">namespace</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> </tt>
+<a name="Node.setTagAttr"></a><div id="Node.setTagAttr-def"><a name="L405"></a><tt class="py-lineno">405</tt> <a class="py-toggle" href="#" id="Node.setTagAttr-toggle" onclick="return toggle('Node.setTagAttr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setTagAttr">setTagAttr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setTagAttr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setTagAttr-expanded"><a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"><tt class="py-docstring"> Create new node (if not already present) with name "tag" and set it's</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"><tt class="py-docstring"> attribute "attr" to value "val"</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-61', 'getTag', 'link-39');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-62', 'addChild', 'link-18');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-name">attr</tt><tt class="py-op">:</tt> <tt class="py-name">val</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> </tt>
+<a name="Node.setTagData"></a><div id="Node.setTagData-def"><a name="L415"></a><tt class="py-lineno">415</tt> <a class="py-toggle" href="#" id="Node.setTagData-toggle" onclick="return toggle('Node.setTagData');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#setTagData">setTagData</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.setTagData-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.setTagData-expanded"><a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"><tt class="py-docstring"> Creates new node (if not already present) with name "tag" and</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"><tt class="py-docstring"> (optionally) attributes "attrs" and sets it's CDATA to string "val"</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-63', 'getTag', 'link-39');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method nbxmpp.simplexml.Node.setData()=nbxmpp.simplexml.Node-class.html#setData"><a title="nbxmpp.simplexml.Node.setData" class="py-name" href="#" onclick="return doclink('link-64', 'setData', 'link-64');">setData</a></tt><tt class="py-op">(</tt><tt id="link-65" class="py-name"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-65', 'ustr', 'link-19');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-66', 'addChild', 'link-18');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-67" class="py-name"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-67', 'ustr', 'link-19');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> </tt>
+<a name="Node.has_attr"></a><div id="Node.has_attr-def"><a name="L425"></a><tt class="py-lineno">425</tt> <a class="py-toggle" href="#" id="Node.has_attr-toggle" onclick="return toggle('Node.has_attr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#has_attr">has_attr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.has_attr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.has_attr-expanded"><a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"><tt class="py-docstring"> Check if node have attribute "key"</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">attrs</tt> </tt>
+</div><a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> </tt>
+<a name="Node.__getitem__"></a><div id="Node.__getitem__-def"><a name="L431"></a><tt class="py-lineno">431</tt> <a class="py-toggle" href="#" id="Node.__getitem__-toggle" onclick="return toggle('Node.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">item</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.__getitem__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.__getitem__-expanded"><a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"><tt class="py-docstring"> Return node's attribute "item" value</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttr()=nbxmpp.simplexml.Node-class.html#getAttr"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-68', 'getAttr', 'link-68');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-name">item</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> </tt>
+<a name="Node.__setitem__"></a><div id="Node.__setitem__-def"><a name="L437"></a><tt class="py-lineno">437</tt> <a class="py-toggle" href="#" id="Node.__setitem__-toggle" onclick="return toggle('Node.__setitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#__setitem__">__setitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">item</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.__setitem__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.__setitem__-expanded"><a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"><tt class="py-docstring"> Set node's attribute "item" value</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-69" class="py-name" targets="Method nbxmpp.simplexml.Node.setAttr()=nbxmpp.simplexml.Node-class.html#setAttr"><a title="nbxmpp.simplexml.Node.setAttr" class="py-name" href="#" onclick="return doclink('link-69', 'setAttr', 'link-69');">setAttr</a></tt><tt class="py-op">(</tt><tt class="py-name">item</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> </tt>
+<a name="Node.__delitem__"></a><div id="Node.__delitem__-def"><a name="L443"></a><tt class="py-lineno">443</tt> <a class="py-toggle" href="#" id="Node.__delitem__-toggle" onclick="return toggle('Node.__delitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#__delitem__">__delitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">item</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.__delitem__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.__delitem__-expanded"><a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"><tt class="py-docstring"> Delete node's attribute "item"</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Method nbxmpp.simplexml.Node.delAttr()=nbxmpp.simplexml.Node-class.html#delAttr"><a title="nbxmpp.simplexml.Node.delAttr" class="py-name" href="#" onclick="return doclink('link-70', 'delAttr', 'link-70');">delAttr</a></tt><tt class="py-op">(</tt><tt class="py-name">item</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> </tt>
+<a name="Node.__contains__"></a><div id="Node.__contains__-def"><a name="L449"></a><tt class="py-lineno">449</tt> <a class="py-toggle" href="#" id="Node.__contains__-toggle" onclick="return toggle('Node.__contains__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#__contains__">__contains__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">item</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.__contains__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.__contains__-expanded"><a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"><tt class="py-docstring"> Check if node has attribute "item"</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name" targets="Method nbxmpp.simplexml.Node.has_attr()=nbxmpp.simplexml.Node-class.html#has_attr"><a title="nbxmpp.simplexml.Node.has_attr" class="py-name" href="#" onclick="return doclink('link-71', 'has_attr', 'link-71');">has_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">item</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> </tt>
+<a name="Node.__getattr__"></a><div id="Node.__getattr__-def"><a name="L455"></a><tt class="py-lineno">455</tt> <a class="py-toggle" href="#" id="Node.__getattr__-toggle" onclick="return toggle('Node.__getattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.Node-class.html#__getattr__">__getattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Node.__getattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Node.__getattr__-expanded"><a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"><tt class="py-docstring"> Reduce memory usage caused by T/NT classes - use memory only when needed</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">attr</tt> <tt class="py-op">==</tt> <tt class="py-string">'T'</tt><tt class="py-op">:</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name" targets="Class nbxmpp.simplexml.T=nbxmpp.simplexml.T-class.html"><a title="nbxmpp.simplexml.T" class="py-name" href="#" onclick="return doclink('link-72', 'T', 'link-72');">T</a></tt> <tt class="py-op">=</tt> <tt id="link-73" class="py-name"><a title="nbxmpp.simplexml.T" class="py-name" href="#" onclick="return doclink('link-73', 'T', 'link-72');">T</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="nbxmpp.simplexml.T" class="py-name" href="#" onclick="return doclink('link-74', 'T', 'link-72');">T</a></tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">attr</tt> <tt class="py-op">==</tt> <tt class="py-string">'NT'</tt><tt class="py-op">:</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name" targets="Class nbxmpp.simplexml.NT=nbxmpp.simplexml.NT-class.html"><a title="nbxmpp.simplexml.NT" class="py-name" href="#" onclick="return doclink('link-75', 'NT', 'link-75');">NT</a></tt> <tt class="py-op">=</tt> <tt id="link-76" class="py-name"><a title="nbxmpp.simplexml.NT" class="py-name" href="#" onclick="return doclink('link-76', 'NT', 'link-75');">NT</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="nbxmpp.simplexml.NT" class="py-name" href="#" onclick="return doclink('link-77', 'NT', 'link-75');">NT</a></tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt> </tt>
+</div></div><a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> </tt>
+<a name="T"></a><div id="T-def"><a name="L467"></a><tt class="py-lineno">467</tt> <a class="py-toggle" href="#" id="T-toggle" onclick="return toggle('T');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.simplexml.T-class.html">T</a><tt class="py-op">:</tt> </tt>
+</div><div id="T-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="T-expanded"><a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"><tt class="py-docstring"> Auxiliary class used to quick access to node's child nodes</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> </tt>
+<a name="T.__init__"></a><div id="T.__init__-def"><a name="L472"></a><tt class="py-lineno">472</tt> <a class="py-toggle" href="#" id="T.__init__-toggle" onclick="return toggle('T.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.T-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">node</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="T.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="T.__init__-expanded"><a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'node'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">node</tt> </tt>
+</div><a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> </tt>
+<a name="T.__getattr__"></a><div id="T.__getattr__-def"><a name="L475"></a><tt class="py-lineno">475</tt> <a class="py-toggle" href="#" id="T.__getattr__-toggle" onclick="return toggle('T.__getattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.T-class.html#__getattr__">__getattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="T.__getattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="T.__getattr__-expanded"><a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method nbxmpp.simplexml.Node.setTag()=nbxmpp.simplexml.Node-class.html#setTag"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-78', 'setTag', 'link-78');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> </tt>
+<a name="T.__setattr__"></a><div id="T.__setattr__-def"><a name="L478"></a><tt class="py-lineno">478</tt> <a class="py-toggle" href="#" id="T.__setattr__-toggle" onclick="return toggle('T.__setattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.T-class.html#__setattr__">__setattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="T.__setattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="T.__setattr__-expanded"><a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">,</tt> <tt id="link-79" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-79', 'Node', 'link-6');">Node</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> <tt id="link-80" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-80', 'Node', 'link-6');">Node</a></tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-81', '__init__', 'link-81');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="nbxmpp.simplexml.Node.setTag" class="py-name" href="#" onclick="return doclink('link-82', 'setTag', 'link-78');">setTag</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method nbxmpp.simplexml.Node.setTagData()=nbxmpp.simplexml.Node-class.html#setTagData"><a title="nbxmpp.simplexml.Node.setTagData" class="py-name" href="#" onclick="return doclink('link-83', 'setTagData', 'link-83');">setTagData</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> </tt>
+<a name="T.__delattr__"></a><div id="T.__delattr__-def"><a name="L484"></a><tt class="py-lineno">484</tt> <a class="py-toggle" href="#" id="T.__delattr__-toggle" onclick="return toggle('T.__delattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.T-class.html#__delattr__">__delattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="T.__delattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="T.__delattr__-expanded"><a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name" targets="Method nbxmpp.simplexml.Node.delChild()=nbxmpp.simplexml.Node-class.html#delChild"><a title="nbxmpp.simplexml.Node.delChild" class="py-name" href="#" onclick="return doclink('link-84', 'delChild', 'link-84');">delChild</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> </tt>
+<a name="NT"></a><div id="NT-def"><a name="L487"></a><tt class="py-lineno">487</tt> <a class="py-toggle" href="#" id="NT-toggle" onclick="return toggle('NT');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.simplexml.NT-class.html">NT</a><tt class="py-op">(</tt><tt class="py-base-class">T</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NT-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NT-expanded"><a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"><tt class="py-docstring"> Auxiliary class used to quick create node's child nodes</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> </tt>
+<a name="NT.__getattr__"></a><div id="NT.__getattr__-def"><a name="L492"></a><tt class="py-lineno">492</tt> <a class="py-toggle" href="#" id="NT.__getattr__-toggle" onclick="return toggle('NT.__getattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NT-class.html#__getattr__">__getattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NT.__getattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NT.__getattr__-expanded"><a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-85', 'addChild', 'link-18');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> </tt>
+<a name="NT.__setattr__"></a><div id="NT.__setattr__-def"><a name="L495"></a><tt class="py-lineno">495</tt> <a class="py-toggle" href="#" id="NT.__setattr__-toggle" onclick="return toggle('NT.__setattr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NT-class.html#__setattr__">__setattr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NT.__setattr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NT.__setattr__-expanded"><a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">val</tt><tt class="py-op">,</tt> <tt id="link-86" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-86', 'Node', 'link-6');">Node</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-87', 'addChild', 'link-18');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">node</tt><tt class="py-op">=</tt><tt class="py-name">val</tt><tt class="py-op">)</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="nbxmpp.simplexml.Node.addChild" class="py-name" href="#" onclick="return doclink('link-88', 'addChild', 'link-18');">addChild</a></tt><tt class="py-op">(</tt><tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">val</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder"></a><div id="NodeBuilder-def"><a name="L501"></a><tt class="py-lineno">501</tt> <a class="py-toggle" href="#" id="NodeBuilder-toggle" onclick="return toggle('NodeBuilder');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html">NodeBuilder</a><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NodeBuilder-expanded"><a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"><tt class="py-docstring"> Builds a Node class minidom from data parsed to it. This class used for two</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"><tt class="py-docstring"> purposes:</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"><tt class="py-docstring"> 1. Creation an XML Node from a textual representation. F.e. reading a</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"><tt class="py-docstring"> config file. See an XML2Node method.</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"><tt class="py-docstring"> 2. Handling an incoming XML stream. This is done by mangling the</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"><tt class="py-docstring"> __dispatch_depth parameter and redefining the dispatch method.</tt> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"><tt class="py-docstring"> You do not need to use this class directly if you do not designing your own</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"><tt class="py-docstring"> XML handler</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.__init__"></a><div id="NodeBuilder.__init__-def"><a name="L515"></a><tt class="py-lineno">515</tt> <a class="py-toggle" href="#" id="NodeBuilder.__init__-toggle" onclick="return toggle('NodeBuilder.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">initial_node</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.__init__-expanded"><a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"><tt class="py-docstring"> Take two optional parameters: "data" and "initial_node"</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"><tt class="py-docstring"> By default class initialised with empty Node class instance. Though, if</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"><tt class="py-docstring"> "initial_node" is provided it used as "starting point". You can think</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"><tt class="py-docstring"> about it as of "node upgrade". "data" (if provided) feeded to parser</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"><tt class="py-docstring"> immidiatedly after instance init.</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"> <tt id="link-89" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-89', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Preparing to handle incoming XML stream."</tt><tt class="py-op">)</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt> <tt class="py-op">=</tt> <tt class="py-name">xml</tt><tt class="py-op">.</tt><tt class="py-name">parsers</tt><tt class="py-op">.</tt><tt class="py-name">expat</tt><tt class="py-op">.</tt><tt class="py-name">ParserCreate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">StartElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.starttag()=nbxmpp.simplexml.NodeBuilder-class.html#starttag"><a title="nbxmpp.simplexml.NodeBuilder.starttag" class="py-name" href="#" onclick="return doclink('link-90', 'starttag', 'link-90');">starttag</a></tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">EndElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.endtag()=nbxmpp.simplexml.NodeBuilder-class.html#endtag"><a title="nbxmpp.simplexml.NodeBuilder.endtag" class="py-name" href="#" onclick="return doclink('link-91', 'endtag', 'link-91');">endtag</a></tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">StartNamespaceDeclHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.handle_namespace_start()=nbxmpp.simplexml.NodeBuilder-class.html#handle_namespace_start"><a title="nbxmpp.simplexml.NodeBuilder.handle_namespace_start" class="py-name" href="#" onclick="return doclink('link-92', 'handle_namespace_start', 'link-92');">handle_namespace_start</a></tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">CharacterDataHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.handle_cdata()=nbxmpp.simplexml.NodeBuilder-class.html#handle_cdata"><a title="nbxmpp.simplexml.NodeBuilder.handle_cdata" class="py-name" href="#" onclick="return doclink('link-93', 'handle_cdata', 'link-93');">handle_cdata</a></tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">buffer_text</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">Parse</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">Parse</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__last_depth</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__max_depth</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_depth</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_nsp</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L539"></a><tt class="py-lineno">539</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt><tt class="py-op">=</tt><tt class="py-name">initial_node</tt> </tt>
+<a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_is_data</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">=</tt><tt class="py-name">None</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">streamError</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">data</tt><tt class="py-op">:</tt> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">Parse</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.check_data_buffer"></a><div id="NodeBuilder.check_data_buffer-def"><a name="L547"></a><tt class="py-lineno">547</tt> <a class="py-toggle" href="#" id="NodeBuilder.check_data_buffer-toggle" onclick="return toggle('NodeBuilder.check_data_buffer');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#check_data_buffer">check_data_buffer</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.check_data_buffer-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.check_data_buffer-expanded"><a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt><tt class="py-op">:</tt> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
+<a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.destroy"></a><div id="NodeBuilder.destroy-def"><a name="L553"></a><tt class="py-lineno">553</tt> <a class="py-toggle" href="#" id="NodeBuilder.destroy-toggle" onclick="return toggle('NodeBuilder.destroy');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#destroy">destroy</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.destroy-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.destroy-expanded"><a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"><tt class="py-docstring"> Method used to allow class instance to be garbage-collected</tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.check_data_buffer()=nbxmpp.simplexml.NodeBuilder-class.html#check_data_buffer"><a title="nbxmpp.simplexml.NodeBuilder.check_data_buffer" class="py-name" href="#" onclick="return doclink('link-94', 'check_data_buffer', 'link-94');">check_data_buffer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">StartElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">EndElementHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">CharacterDataHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parser</tt><tt class="py-op">.</tt><tt class="py-name">StartNamespaceDeclHandler</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.starttag"></a><div id="NodeBuilder.starttag-def"><a name="L563"></a><tt class="py-lineno">563</tt> <a class="py-toggle" href="#" id="NodeBuilder.starttag-toggle" onclick="return toggle('NodeBuilder.starttag');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#starttag">starttag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.starttag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.starttag-expanded"><a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"><tt class="py-docstring"> XML Parser callback. Used internally</tt> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.check_data_buffer" class="py-name" href="#" onclick="return doclink('link-95', 'check_data_buffer', 'link-94');">check_data_buffer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder._inc_depth()=nbxmpp.simplexml.NodeBuilder-class.html#_inc_depth"><a title="nbxmpp.simplexml.NodeBuilder._inc_depth" class="py-name" href="#" onclick="return doclink('link-96', '_inc_depth', 'link-96');">_inc_depth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> <tt id="link-97" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-97', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"STARTTAG.. DEPTH -&gt; %i , tag -&gt; %s, attrs -&gt; %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-op">`</tt><tt class="py-name">attrs</tt><tt class="py-op">`</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_depth</tt><tt class="py-op">:</tt> </tt>
+<a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt> <tt class="py-op">:</tt> </tt>
+<a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-98', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">=</tt><tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">nsp</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_nsp</tt><tt class="py-op">,</tt> <tt class="py-name">node_built</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> <tt id="link-99" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-99', 'Node', 'link-6');">Node</a></tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-100', '__init__', 'link-81');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">=</tt><tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">nsp</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_nsp</tt><tt class="py-op">,</tt> <tt class="py-name">node_built</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_depth</tt><tt class="py-op">:</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-101" class="py-name"><a title="nbxmpp.simplexml.Node" class="py-name" href="#" onclick="return doclink('link-101', 'Node', 'link-6');">Node</a></tt><tt class="py-op">(</tt><tt class="py-name">tag</tt><tt class="py-op">=</tt><tt class="py-name">tag</tt><tt class="py-op">,</tt> <tt class="py-name">parent</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">=</tt><tt class="py-name">attrs</tt><tt class="py-op">,</tt> <tt class="py-name">node_built</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">.</tt><tt class="py-name">kids</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L579"></a><tt class="py-lineno">579</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_nsp</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"> <tt class="py-name">nsp</tt><tt class="py-op">,</tt> <tt id="link-102" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-102', 'name', 'link-9');">name</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">''</tt><tt class="py-op">]</tt><tt class="py-op">+</tt><tt class="py-name">tag</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
+<a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">attr</tt><tt class="py-op">,</tt> <tt class="py-name">val</tt> <tt class="py-keyword">in</tt> <tt class="py-name">attrs</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">attr</tt> <tt class="py-op">==</tt> <tt class="py-string">'xmlns'</tt><tt class="py-op">:</tt> </tt>
+<a name="L585"></a><tt class="py-lineno">585</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_nsp</tt><tt class="py-op">[</tt><tt class="py-string">u''</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+<a name="L586"></a><tt class="py-lineno">586</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">attr</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'xmlns:'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_nsp</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">[</tt><tt class="py-number">6</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt><tt class="py-op">[</tt><tt class="py-name">attr</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">val</tt> </tt>
+<a name="L590"></a><tt class="py-lineno">590</tt> <tt class="py-line"> <tt class="py-name">ns</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_nsp</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-103', 'get', 'link-20');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">nsp</tt><tt class="py-op">,</tt> <tt class="py-string">'http://www.gajim.org/xmlns/undeclared-root'</tt><tt class="py-op">)</tt> </tt>
+<a name="L591"></a><tt class="py-lineno">591</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.stream_header_received()=nbxmpp.simplexml.NodeBuilder-class.html#stream_header_received"><a title="nbxmpp.simplexml.NodeBuilder.stream_header_received" class="py-name" href="#" onclick="return doclink('link-104', 'stream_header_received', 'link-104');">stream_header_received</a></tt><tt class="py-op">(</tt><tt class="py-name">ns</tt><tt class="py-op">,</tt> <tt id="link-105" class="py-name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-105', 'name', 'link-9');">name</a></tt><tt class="py-op">,</tt> <tt class="py-name">attrs</tt><tt class="py-op">)</tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_document_attrs</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L596"></a><tt class="py-lineno">596</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_is_data</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">:</tt> </tt>
+<a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_is_data</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+</div><a name="L599"></a><tt class="py-lineno">599</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.endtag"></a><div id="NodeBuilder.endtag-def"><a name="L600"></a><tt class="py-lineno">600</tt> <a class="py-toggle" href="#" id="NodeBuilder.endtag-toggle" onclick="return toggle('NodeBuilder.endtag');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#endtag">endtag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.endtag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.endtag-expanded"><a name="L601"></a><tt class="py-lineno">601</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"><tt class="py-docstring"> XML Parser callback. Used internally</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"> <tt id="link-106" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-106', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"DEPTH -&gt; %i , tag -&gt; %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt><tt class="py-op">,</tt> <tt class="py-name">tag</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L605"></a><tt class="py-lineno">605</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.check_data_buffer" class="py-name" href="#" onclick="return doclink('link-107', 'check_data_buffer', 'link-94');">check_data_buffer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_depth</tt><tt class="py-op">:</tt> </tt>
+<a name="L607"></a><tt class="py-lineno">607</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-108', 'getName', 'link-48');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'error'</tt><tt class="py-op">:</tt> </tt>
+<a name="L608"></a><tt class="py-lineno">608</tt> <tt class="py-line"> <tt class="py-name">children</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name" targets="Method nbxmpp.simplexml.Node.getChildren()=nbxmpp.simplexml.Node-class.html#getChildren"><a title="nbxmpp.simplexml.Node.getChildren" class="py-name" href="#" onclick="return doclink('link-109', 'getChildren', 'link-109');">getChildren</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L609"></a><tt class="py-lineno">609</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">children</tt><tt class="py-op">:</tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">streamError</tt> <tt class="py-op">=</tt> <tt class="py-name">children</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-110', 'getName', 'link-48');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">streamError</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="nbxmpp.simplexml.Node.getData" class="py-name" href="#" onclick="return doclink('link-111', 'getData', 'link-46');">getData</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#dispatch,Method nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#dispatch,Method nbxmpp.simplexml.NodeBuilder.dispatch()=nbxmpp.simplexml.NodeBuilder-class.html#dispatch"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.dispatch
+nbxmpp.dispatcher_nb.XMPPDispatcher.dispatch
+nbxmpp.simplexml.NodeBuilder.dispatch" class="py-name" href="#" onclick="return doclink('link-112', 'dispatch', 'link-112');">dispatch</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt><tt class="py-op">)</tt> </tt>
+<a name="L614"></a><tt class="py-lineno">614</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dispatch_depth</tt><tt class="py-op">:</tt> </tt>
+<a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> </tt>
+<a name="L616"></a><tt class="py-lineno">616</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L617"></a><tt class="py-lineno">617</tt> <tt class="py-line"> <tt id="link-113" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-113', 'log', 'link-0');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Got higher than dispatch level. Stream terminated?"</tt><tt class="py-op">)</tt> </tt>
+<a name="L618"></a><tt class="py-lineno">618</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder._dec_depth()=nbxmpp.simplexml.NodeBuilder-class.html#_dec_depth"><a title="nbxmpp.simplexml.NodeBuilder._dec_depth" class="py-name" href="#" onclick="return doclink('link-114', '_dec_depth', 'link-114');">_dec_depth</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L619"></a><tt class="py-lineno">619</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_is_data</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L620"></a><tt class="py-lineno">620</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.stream_footer_received()=nbxmpp.simplexml.NodeBuilder-class.html#stream_footer_received"><a title="nbxmpp.simplexml.NodeBuilder.stream_footer_received" class="py-name" href="#" onclick="return doclink('link-115', 'stream_footer_received', 'link-115');">stream_footer_received</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L621"></a><tt class="py-lineno">621</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.handle_cdata"></a><div id="NodeBuilder.handle_cdata-def"><a name="L622"></a><tt class="py-lineno">622</tt> <a class="py-toggle" href="#" id="NodeBuilder.handle_cdata-toggle" onclick="return toggle('NodeBuilder.handle_cdata');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#handle_cdata">handle_cdata</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.handle_cdata-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.handle_cdata-expanded"><a name="L623"></a><tt class="py-lineno">623</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_is_data</tt><tt class="py-op">:</tt> </tt>
+<a name="L624"></a><tt class="py-lineno">624</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt><tt class="py-op">:</tt> </tt>
+<a name="L625"></a><tt class="py-lineno">625</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L626"></a><tt class="py-lineno">626</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_ptr</tt><tt class="py-op">:</tt> </tt>
+<a name="L627"></a><tt class="py-lineno">627</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data_buffer</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">data</tt><tt class="py-op">]</tt> </tt>
+<a name="L628"></a><tt class="py-lineno">628</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_is_data</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
+</div><a name="L629"></a><tt class="py-lineno">629</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.handle_namespace_start"></a><div id="NodeBuilder.handle_namespace_start-def"><a name="L630"></a><tt class="py-lineno">630</tt> <a class="py-toggle" href="#" id="NodeBuilder.handle_namespace_start-toggle" onclick="return toggle('NodeBuilder.handle_namespace_start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#handle_namespace_start">handle_namespace_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">prefix</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.handle_namespace_start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.handle_namespace_start-expanded"><a name="L631"></a><tt class="py-lineno">631</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L632"></a><tt class="py-lineno">632</tt> <tt class="py-line"><tt class="py-docstring"> XML Parser callback. Used internally</tt> </tt>
+<a name="L633"></a><tt class="py-lineno">633</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L634"></a><tt class="py-lineno">634</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.check_data_buffer" class="py-name" href="#" onclick="return doclink('link-116', 'check_data_buffer', 'link-94');">check_data_buffer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L635"></a><tt class="py-lineno">635</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.getDom"></a><div id="NodeBuilder.getDom-def"><a name="L636"></a><tt class="py-lineno">636</tt> <a class="py-toggle" href="#" id="NodeBuilder.getDom-toggle" onclick="return toggle('NodeBuilder.getDom');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#getDom">getDom</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.getDom-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.getDom-expanded"><a name="L637"></a><tt class="py-lineno">637</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L638"></a><tt class="py-lineno">638</tt> <tt class="py-line"><tt class="py-docstring"> Return just built Node</tt> </tt>
+<a name="L639"></a><tt class="py-lineno">639</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L640"></a><tt class="py-lineno">640</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.check_data_buffer" class="py-name" href="#" onclick="return doclink('link-117', 'check_data_buffer', 'link-94');">check_data_buffer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L641"></a><tt class="py-lineno">641</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mini_dom</tt> </tt>
+</div><a name="L642"></a><tt class="py-lineno">642</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.dispatch"></a><div id="NodeBuilder.dispatch-def"><a name="L643"></a><tt class="py-lineno">643</tt> <a class="py-toggle" href="#" id="NodeBuilder.dispatch-toggle" onclick="return toggle('NodeBuilder.dispatch');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#dispatch">dispatch</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.dispatch-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.dispatch-expanded"><a name="L644"></a><tt class="py-lineno">644</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L645"></a><tt class="py-lineno">645</tt> <tt class="py-line"><tt class="py-docstring"> Get called when the NodeBuilder reaches some level of depth on it's way</tt> </tt>
+<a name="L646"></a><tt class="py-lineno">646</tt> <tt class="py-line"><tt class="py-docstring"> up with the built node as argument. Can be redefined to convert incoming</tt> </tt>
+<a name="L647"></a><tt class="py-lineno">647</tt> <tt class="py-line"><tt class="py-docstring"> XML stanzas to program events</tt> </tt>
+<a name="L648"></a><tt class="py-lineno">648</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L649"></a><tt class="py-lineno">649</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L650"></a><tt class="py-lineno">650</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.stream_header_received"></a><div id="NodeBuilder.stream_header_received-def"><a name="L651"></a><tt class="py-lineno">651</tt> <a class="py-toggle" href="#" id="NodeBuilder.stream_header_received-toggle" onclick="return toggle('NodeBuilder.stream_header_received');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#stream_header_received">stream_header_received</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">ns</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.stream_header_received-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.stream_header_received-expanded"><a name="L652"></a><tt class="py-lineno">652</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L653"></a><tt class="py-lineno">653</tt> <tt class="py-line"><tt class="py-docstring"> Method called when stream just opened</tt> </tt>
+<a name="L654"></a><tt class="py-lineno">654</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L655"></a><tt class="py-lineno">655</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.check_data_buffer" class="py-name" href="#" onclick="return doclink('link-118', 'check_data_buffer', 'link-94');">check_data_buffer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L656"></a><tt class="py-lineno">656</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.stream_footer_received"></a><div id="NodeBuilder.stream_footer_received-def"><a name="L657"></a><tt class="py-lineno">657</tt> <a class="py-toggle" href="#" id="NodeBuilder.stream_footer_received-toggle" onclick="return toggle('NodeBuilder.stream_footer_received');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#stream_footer_received">stream_footer_received</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.stream_footer_received-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.stream_footer_received-expanded"><a name="L658"></a><tt class="py-lineno">658</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L659"></a><tt class="py-lineno">659</tt> <tt class="py-line"><tt class="py-docstring"> Method called when stream just closed</tt> </tt>
+<a name="L660"></a><tt class="py-lineno">660</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L661"></a><tt class="py-lineno">661</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.check_data_buffer" class="py-name" href="#" onclick="return doclink('link-119', 'check_data_buffer', 'link-94');">check_data_buffer</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L662"></a><tt class="py-lineno">662</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder.has_received_endtag"></a><div id="NodeBuilder.has_received_endtag-def"><a name="L663"></a><tt class="py-lineno">663</tt> <a class="py-toggle" href="#" id="NodeBuilder.has_received_endtag-toggle" onclick="return toggle('NodeBuilder.has_received_endtag');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#has_received_endtag">has_received_endtag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">level</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder.has_received_endtag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder.has_received_endtag-expanded"><a name="L664"></a><tt class="py-lineno">664</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L665"></a><tt class="py-lineno">665</tt> <tt class="py-line"><tt class="py-docstring"> Return True if at least one end tag was seen (at level)</tt> </tt>
+<a name="L666"></a><tt class="py-lineno">666</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L667"></a><tt class="py-lineno">667</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">level</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__max_depth</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">level</tt> </tt>
+</div><a name="L668"></a><tt class="py-lineno">668</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder._inc_depth"></a><div id="NodeBuilder._inc_depth-def"><a name="L669"></a><tt class="py-lineno">669</tt> <a class="py-toggle" href="#" id="NodeBuilder._inc_depth-toggle" onclick="return toggle('NodeBuilder._inc_depth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#_inc_depth">_inc_depth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder._inc_depth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder._inc_depth-expanded"><a name="L670"></a><tt class="py-lineno">670</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__last_depth</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> </tt>
+<a name="L671"></a><tt class="py-lineno">671</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L672"></a><tt class="py-lineno">672</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__max_depth</tt> <tt class="py-op">=</tt> <tt class="py-name">max</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__max_depth</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L673"></a><tt class="py-lineno">673</tt> <tt class="py-line"> </tt>
+<a name="NodeBuilder._dec_depth"></a><div id="NodeBuilder._dec_depth-def"><a name="L674"></a><tt class="py-lineno">674</tt> <a class="py-toggle" href="#" id="NodeBuilder._dec_depth-toggle" onclick="return toggle('NodeBuilder._dec_depth');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml.NodeBuilder-class.html#_dec_depth">_dec_depth</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NodeBuilder._dec_depth-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NodeBuilder._dec_depth-expanded"><a name="L675"></a><tt class="py-lineno">675</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__last_depth</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> </tt>
+<a name="L676"></a><tt class="py-lineno">676</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__depth</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
+</div></div><a name="L677"></a><tt class="py-lineno">677</tt> <tt class="py-line"> </tt>
+<a name="XML2Node"></a><div id="XML2Node-def"><a name="L678"></a><tt class="py-lineno">678</tt> <a class="py-toggle" href="#" id="XML2Node-toggle" onclick="return toggle('XML2Node');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml-module.html#XML2Node">XML2Node</a><tt class="py-op">(</tt><tt class="py-param">xml</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="XML2Node-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="XML2Node-expanded"><a name="L679"></a><tt class="py-lineno">679</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L680"></a><tt class="py-lineno">680</tt> <tt class="py-line"><tt class="py-docstring"> Convert supplied textual string into XML node. Handy f.e. for reading</tt> </tt>
+<a name="L681"></a><tt class="py-lineno">681</tt> <tt class="py-line"><tt class="py-docstring"> configuration file. Raises xml.parser.expat.parsererror if provided string</tt> </tt>
+<a name="L682"></a><tt class="py-lineno">682</tt> <tt class="py-line"><tt class="py-docstring"> is not well-formed XML</tt> </tt>
+<a name="L683"></a><tt class="py-lineno">683</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L684"></a><tt class="py-lineno">684</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-120" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-120', 'NodeBuilder', 'link-8');">NodeBuilder</a></tt><tt class="py-op">(</tt><tt class="py-name">xml</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name" targets="Method nbxmpp.simplexml.NodeBuilder.getDom()=nbxmpp.simplexml.NodeBuilder-class.html#getDom"><a title="nbxmpp.simplexml.NodeBuilder.getDom" class="py-name" href="#" onclick="return doclink('link-121', 'getDom', 'link-121');">getDom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L685"></a><tt class="py-lineno">685</tt> <tt class="py-line"> </tt>
+<a name="BadXML2Node"></a><div id="BadXML2Node-def"><a name="L686"></a><tt class="py-lineno">686</tt> <a class="py-toggle" href="#" id="BadXML2Node-toggle" onclick="return toggle('BadXML2Node');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.simplexml-module.html#BadXML2Node">BadXML2Node</a><tt class="py-op">(</tt><tt class="py-param">xml</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BadXML2Node-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BadXML2Node-expanded"><a name="L687"></a><tt class="py-lineno">687</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L688"></a><tt class="py-lineno">688</tt> <tt class="py-line"><tt class="py-docstring"> Convert supplied textual string into XML node. Survives if xml data is</tt> </tt>
+<a name="L689"></a><tt class="py-lineno">689</tt> <tt class="py-line"><tt class="py-docstring"> cutted half way round. I.e. "&lt;html&gt;some text &lt;br&gt;some more text". Will raise</tt> </tt>
+<a name="L690"></a><tt class="py-lineno">690</tt> <tt class="py-line"><tt class="py-docstring"> xml.parser.expat.parsererror on misplaced tags though. F.e. "&lt;b&gt;some text</tt> </tt>
+<a name="L691"></a><tt class="py-lineno">691</tt> <tt class="py-line"><tt class="py-docstring"> &lt;br&gt;some more text&lt;/b&gt;" will not work</tt> </tt>
+<a name="L692"></a><tt class="py-lineno">692</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L693"></a><tt class="py-lineno">693</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-122" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder" class="py-name" href="#" onclick="return doclink('link-122', 'NodeBuilder', 'link-8');">NodeBuilder</a></tt><tt class="py-op">(</tt><tt class="py-name">xml</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="nbxmpp.simplexml.NodeBuilder.getDom" class="py-name" href="#" onclick="return doclink('link-123', 'getDom', 'link-121');">getDom</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L694"></a><tt class="py-lineno">694</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.simplexml.NT-class.html b/doc/apidocs/nbxmpp.simplexml.NT-class.html
new file mode 100644
index 0000000..d5b437d
--- /dev/null
+++ b/doc/apidocs/nbxmpp.simplexml.NT-class.html
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.simplexml.NT</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.simplexml-module.html">Module&nbsp;simplexml</a> ::
+ Class&nbsp;NT
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.simplexml.NT-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NT</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NT">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_s" name="uml_class_diagram_for_nbxmpp_s">
+<area shape="rect" id="node207" href="nbxmpp.simplexml.NT-class.html#__getattr__" title="nbxmpp.simplexml.NT.__getattr__" alt="" coords="17,135,185,153"/>
+<area shape="rect" id="node207" href="nbxmpp.simplexml.NT-class.html#__setattr__" title="nbxmpp.simplexml.NT.__setattr__" alt="" coords="17,153,185,172"/>
+<area shape="rect" id="node1" href="nbxmpp.simplexml.NT-class.html" title="Auxiliary class used to quick create node&#39;s child nodes" alt="" coords="5,102,197,178"/>
+<area shape="rect" id="node208" href="nbxmpp.simplexml.T-class.html#__init__" title="nbxmpp.simplexml.T.__init__" alt="" coords="31,39,171,57"/>
+<area shape="rect" id="node208" href="nbxmpp.simplexml.T-class.html#__delattr__" title="nbxmpp.simplexml.T.__delattr__" alt="" coords="31,57,171,76"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.T-class.html" title="Auxiliary class used to quick access to node&#39;s child nodes" alt="" coords="19,6,181,82"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_s.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_s" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Auxiliary class used to quick create node's child nodes
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NT-class.html#__getattr__" class="summary-sig-name">__getattr__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">attr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NT.__getattr__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NT-class.html#__setattr__" class="summary-sig-name">__setattr__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">attr</span>,
+ <span class="summary-sig-arg">val</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NT.__setattr__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.simplexml.T-class.html">T</a></code></b>:
+ <code><a href="nbxmpp.simplexml.T-class.html#__delattr__">__delattr__</a></code>,
+ <code><a href="nbxmpp.simplexml.T-class.html#__init__">__init__</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__getattr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__getattr__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">attr</span>)</span>
+ <br /><em class="fname">(Qualification operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NT.__getattr__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.simplexml.T-class.html#__getattr__">T.__getattr__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__setattr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__setattr__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">attr</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NT.__setattr__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.simplexml.T-class.html#__setattr__">T.__setattr__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.simplexml.Node-class.html b/doc/apidocs/nbxmpp.simplexml.Node-class.html
new file mode 100644
index 0000000..1a1e087
--- /dev/null
+++ b/doc/apidocs/nbxmpp.simplexml.Node-class.html
@@ -0,0 +1,1777 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.simplexml.Node</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.simplexml-module.html">Module&nbsp;simplexml</a> ::
+ Class&nbsp;Node
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.simplexml.Node-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Node</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_s_2" name="uml_class_diagram_for_nbxmpp_s_2">
+<area shape="rect" id="node1" href="nbxmpp.protocol.Acks-class.html" title="Acknowledgement elements for Stream Management" alt="" coords="5,358,128,397"/>
+<area shape="rect" id="node2" href="nbxmpp.protocol.DataField-class.html" title="This class is used in the DataForm class to describe the single data item" alt="" coords="157,358,309,397"/>
+<area shape="rect" id="node3" href="nbxmpp.protocol.ErrorNode-class.html" title="XMPP&#45;style error element" alt="" coords="339,358,496,397"/>
+<area shape="rect" id="node4" href="nbxmpp.protocol.DataForm-class.html" title="Used for manipulating dataforms in XMPP" alt="" coords="525,358,683,397"/>
+<area shape="rect" id="node5" href="nbxmpp.protocol.BOSHBody-class.html" title="&lt;body&gt; tag that wraps usual XMPP stanzas in XMPP over BOSH" alt="" coords="712,358,875,397"/>
+<area shape="rect" id="node6" href="nbxmpp.protocol.Protocol-class.html" title="A &quot;stanza&quot; object class. Contains methods that are common for presences, iqs and messages" alt="" coords="904,358,1048,397"/>
+<area shape="rect" id="node7" href="nbxmpp.protocol.Iq-class.html" title="XMPP Iq object &#45; get/set dialog mechanism" alt="" coords="677,417,781,455"/>
+<area shape="rect" id="node8" href="nbxmpp.protocol.Message-class.html" title="XMPP Message stanza &#45; &quot;push&quot; mechanism" alt="" coords="811,417,960,455"/>
+<area shape="rect" id="node10" href="nbxmpp.protocol.Presence-class.html" title="nbxmpp.protocol.Presence" alt="" coords="989,417,1141,455"/>
+<area shape="rect" id="node11" href="nbxmpp.protocol.Error-class.html" title="Used to quickly transform received stanza into error reply" alt="" coords="1171,417,1293,455"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" title="nbxmpp.simplexml.Node.FORCE_NODE_RECREATION" alt="" coords="265,31,943,49"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#__init__" title="Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if needed and separated from it by a space), attrs dictionary as the set of arguments, payload list as the set of textual strings and child nodes that this node carries within itself and &quot;parent&quot; argument that is another node that this one will be the child of. Also the __init__ can be provided with &quot;node&quot; argument that is either a text string containing exactly one node or another Node instance to begin with. If both &quot;node&quot; and other arguments is provided then the node initially created as replica of &quot;node&quot; provided and then modified to be compliant with other arguments." alt="" coords="265,52,943,71"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#lookup_nsp" title="nbxmpp.simplexml.Node.lookup_nsp" alt="" coords="265,71,943,89"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#__str__" title="Method used to dump node into textual representation. If &quot;fancy&quot; argument is set to True produces indented output for readability" alt="" coords="265,89,943,108"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#addChild" title="If &quot;node&quot; argument is provided, adds it as child node. Else creates new node from the other arguments&#39; values and adds it as well" alt="" coords="265,108,943,127"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#addData" title="Add some CDATA to node" alt="" coords="265,127,943,145"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#clearData" title="Remove all CDATA from the node" alt="" coords="265,145,943,164"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#delAttr" title="Delete an attribute &quot;key&quot;" alt="" coords="265,164,943,183"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#delChild" title="Delete the &quot;node&quot; from the node&#39;s childs list, if &quot;node&quot; is an instance. Else delete the first node that have specified name and (optionally) attributes" alt="" coords="265,183,943,201"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#getAttrs" title="Return all node&#39;s attributes as dictionary" alt="" coords="265,201,943,220"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#getAttr" title="Return value of specified attribute" alt="" coords="265,220,943,239"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#getChildren" title="Return all node&#39;s child nodes as list" alt="" coords="265,239,943,257"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#getData" title="Return all node CDATA as string (concatenated)" alt="" coords="265,257,943,276"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#getName" title="Return the name of node" alt="" coords="265,276,943,295"/>
+<area shape="rect" id="node209" href="nbxmpp.simplexml.Node-class.html#__getattr__" title="Reduce memory usage caused by T/NT classes &#45; use memory only when needed" alt="" coords="265,313,943,332"/>
+<area shape="rect" id="node9" href="nbxmpp.simplexml.Node-class.html" title="Node class describes syntax of separate XML Node. It have a constructor that permits node creation from set of &quot;namespace name&quot;, attributes and payload of text strings and other nodes. It does not natively support building node from text string and uses NodeBuilder class for that purpose. After creation node can be mangled in many ways so it can be completely changed. Also node can be serialised into string in one of two modes: default (where the textual representation of node describes it exactly) and &quot;fancy&quot; &#45; with whitespace added to make indentation and thus make result more readable by human." alt="" coords="253,6,955,338"/>
+<area shape="rect" id="node12" href="nbxmpp.protocol.Hashes-class.html" title="Hash elements for various XEPs as defined in XEP&#45;300" alt="" coords="1077,358,1219,397"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_s_2.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_s_2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>Node class describes syntax of separate XML Node. It have a constructor that
+permits node creation from set of &quot;namespace name&quot;, attributes and payload
+of text strings and other nodes. It does not natively support building node
+from text string and uses NodeBuilder class for that purpose. After
+creation node can be mangled in many ways so it can be completely changed.
+Also node can be serialised into string in one of two modes: default (where
+the textual representation of node describes it exactly) and &quot;fancy&quot; - with
+whitespace added to make indentation and thus make result more readable by
+human.</p>
+<p>Node class have attribute FORCE_NODE_RECREATION that is defaults to False
+thus enabling fast node replication from the some other node. The drawback
+of the fast way is that new node shares some info with the &quot;original&quot; node
+that is changing the one node may influence the other. Though it is rarely
+needed (in xmpppy it is never needed at all since I'm usually never using
+original node after replication (and using replication only to move upwards
+on the classes tree).</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">payload</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">parent</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">nsp</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">node_built</span>=<span class="summary-sig-default">False</span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#lookup_nsp" class="summary-sig-name">lookup_nsp</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">pfx</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.lookup_nsp">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">fancy</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Method used to dump node into textual representation. If &quot;fancy&quot; argument
+is set to True produces indented output for readability</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__str__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#addChild" class="summary-sig-name">addChild</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">payload</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ If &quot;node&quot; argument is provided, adds it as child node. Else creates new
+node from the other arguments' values and adds it as well</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.addChild">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#addData" class="summary-sig-name">addData</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Add some CDATA to node</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.addData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#clearData" class="summary-sig-name">clearData</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Remove all CDATA from the node</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.clearData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#delAttr" class="summary-sig-name">delAttr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">key</span>)</span><br />
+ Delete an attribute &quot;key&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.delAttr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#delChild" class="summary-sig-name">delChild</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">node</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>)</span><br />
+ Delete the &quot;node&quot; from the node's childs list, if &quot;node&quot; is an instance.
+Else delete the first node that have specified name and (optionally)
+attributes</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.delChild">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getAttrs" class="summary-sig-name">getAttrs</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return all node's attributes as dictionary</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getAttrs">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getAttr" class="summary-sig-name">getAttr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">key</span>)</span><br />
+ Return value of specified attribute</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getAttr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getChildren" class="summary-sig-name">getChildren</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return all node's child nodes as list</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getChildren">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getData" class="summary-sig-name">getData</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return all node CDATA as string (concatenated)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getName" class="summary-sig-name">getName</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the name of node</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getName">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getNamespace" class="summary-sig-name">getNamespace</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the namespace of node</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getNamespace">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getParent" class="summary-sig-name">getParent</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Returns the parent of node (if present)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getParent">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getPayload" class="summary-sig-name">getPayload</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return the payload of node i.e. list of child nodes and CDATA entries.
+F.e. for &quot;&lt;node&gt;text1&lt;nodea/&gt;&lt;nodeb/&gt; text2&lt;/node&gt;&quot; will be returned
+list: ['text1', &lt;nodea instance&gt;, &lt;nodeb instance&gt;, ' text2']</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getPayload">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getTag" class="summary-sig-name">getTag</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Filter all child nodes using specified arguments as filter. Return the
+first found or None if not found</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTag">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getTagAttr" class="summary-sig-name">getTagAttr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">attr</span>)</span><br />
+ Return attribute value of the child with specified name (or None if no
+such attribute)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTagAttr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getTagData" class="summary-sig-name">getTagData</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>)</span><br />
+ Return cocatenated CDATA of the child with specified name</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTagData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#getTags" class="summary-sig-name">getTags</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">one</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Filter all child nodes using specified arguments as filter. Returns the
+list of nodes found</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTags">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#iterTags" class="summary-sig-name">iterTags</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Iterate over all children using specified arguments as filter</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.iterTags">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setAttr" class="summary-sig-name">setAttr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">key</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set attribute &quot;key&quot; with the value &quot;val&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setAttr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setData" class="summary-sig-name">setData</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Set node's CDATA to provided string. Resets all previous CDATA!</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setName" class="summary-sig-name">setName</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Change the node name</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setName">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setNamespace" class="summary-sig-name">setNamespace</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">namespace</span>)</span><br />
+ Changes the node namespace</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setNamespace">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setParent" class="summary-sig-name">setParent</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">node</span>)</span><br />
+ Set node's parent to &quot;node&quot;. WARNING: do not checks if the parent already
+present and not removes the node from the list of childs of previous
+parent</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setParent">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setPayload" class="summary-sig-name">setPayload</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">payload</span>,
+ <span class="summary-sig-arg">add</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Set node payload according to the list specified. WARNING: completely
+replaces all node's previous content. If you wish just to add child or
+CDATA - use addData or addChild methods</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setPayload">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setTag" class="summary-sig-name">setTag</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="summary-sig-arg">namespace</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Same as getTag but if the node with specified namespace/attributes not
+found, creates such node and returns it</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setTag">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setTagAttr" class="summary-sig-name">setTagAttr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">attr</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Create new node (if not already present) with name &quot;tag&quot; and set it's
+attribute &quot;attr&quot; to value &quot;val&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setTagAttr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#setTagData" class="summary-sig-name">setTagData</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">val</span>,
+ <span class="summary-sig-arg">attrs</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>)</span><br />
+ Creates new node (if not already present) with name &quot;tag&quot; and
+(optionally) attributes &quot;attrs&quot; and sets it's CDATA to string &quot;val&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setTagData">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#has_attr" class="summary-sig-name">has_attr</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">key</span>)</span><br />
+ Check if node have attribute &quot;key&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.has_attr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#__getitem__" class="summary-sig-name">__getitem__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">item</span>)</span><br />
+ Return node's attribute &quot;item&quot; value</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__getitem__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#__setitem__" class="summary-sig-name">__setitem__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">item</span>,
+ <span class="summary-sig-arg">val</span>)</span><br />
+ Set node's attribute &quot;item&quot; value</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__setitem__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#__delitem__" class="summary-sig-name">__delitem__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">item</span>)</span><br />
+ Delete node's attribute &quot;item&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__delitem__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#__contains__" class="summary-sig-name">__contains__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">item</span>)</span><br />
+ Check if node has attribute &quot;item&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__contains__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.Node-class.html#__getattr__" class="summary-sig-name">__getattr__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">attr</span>)</span><br />
+ Reduce memory usage caused by T/NT classes - use memory only when needed</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__getattr__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.simplexml.Node-class.html#FORCE_NODE_RECREATION" class="summary-name">FORCE_NODE_RECREATION</a> = <code title="0">0</code>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">payload</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">parent</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">nsp</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">node_built</span>=<span class="sig-default">False</span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Takes &quot;tag&quot; argument as the name of node (prepended by namespace, if
+needed and separated from it by a space), attrs dictionary as the set of
+arguments, payload list as the set of textual strings and child nodes
+that this node carries within itself and &quot;parent&quot; argument that is
+another node that this one will be the child of. Also the __init__ can be
+provided with &quot;node&quot; argument that is either a text string containing
+exactly one node or another Node instance to begin with. If both &quot;node&quot;
+and other arguments is provided then the node initially created as
+replica of &quot;node&quot; provided and then modified to be compliant with other
+arguments.
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="lookup_nsp"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">lookup_nsp</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">pfx</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.lookup_nsp">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__str__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">fancy</span>=<span class="sig-default">0</span>)</span>
+ <br /><em class="fname">(Informal representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__str__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Method used to dump node into textual representation. If &quot;fancy&quot; argument
+is set to True produces indented output for readability
+ <dl class="fields">
+ <dt>Overrides:
+ object.__str__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="addChild"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">addChild</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">payload</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">namespace</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">node</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.addChild">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ If &quot;node&quot; argument is provided, adds it as child node. Else creates new
+node from the other arguments' values and adds it as well
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="addData"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">addData</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.addData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Add some CDATA to node
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="clearData"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">clearData</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.clearData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Remove all CDATA from the node
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="delAttr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">delAttr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">key</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.delAttr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Delete an attribute &quot;key&quot;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="delChild"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">delChild</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">node</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.delChild">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Delete the &quot;node&quot; from the node's childs list, if &quot;node&quot; is an instance.
+Else delete the first node that have specified name and (optionally)
+attributes
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getAttrs"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getAttrs</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getAttrs">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return all node's attributes as dictionary
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getAttr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getAttr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">key</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getAttr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return value of specified attribute
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getChildren"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getChildren</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getChildren">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return all node's child nodes as list
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getData"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getData</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return all node CDATA as string (concatenated)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getName"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getName</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getName">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the name of node
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getNamespace"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getNamespace</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getNamespace">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the namespace of node
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getParent"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getParent</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getParent">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Returns the parent of node (if present)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getPayload"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getPayload</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getPayload">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return the payload of node i.e. list of child nodes and CDATA entries.
+F.e. for &quot;&lt;node&gt;text1&lt;nodea/&gt;&lt;nodeb/&gt; text2&lt;/node&gt;&quot; will be returned
+list: ['text1', &lt;nodea instance&gt;, &lt;nodeb instance&gt;, ' text2']
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTag"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTag</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">namespace</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTag">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Filter all child nodes using specified arguments as filter. Return the
+first found or None if not found
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTagAttr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTagAttr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">attr</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTagAttr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return attribute value of the child with specified name (or None if no
+such attribute)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTagData"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTagData</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTagData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return cocatenated CDATA of the child with specified name
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getTags"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getTags</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">namespace</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">one</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.getTags">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Filter all child nodes using specified arguments as filter. Returns the
+list of nodes found
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="iterTags"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">iterTags</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">namespace</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.iterTags">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Iterate over all children using specified arguments as filter
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setAttr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setAttr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">key</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setAttr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set attribute &quot;key&quot; with the value &quot;val&quot;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setData"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setData</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set node's CDATA to provided string. Resets all previous CDATA!
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setName"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setName</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setName">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Change the node name
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setNamespace"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setNamespace</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">namespace</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setNamespace">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Changes the node namespace
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setParent"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setParent</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">node</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setParent">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set node's parent to &quot;node&quot;. WARNING: do not checks if the parent already
+present and not removes the node from the list of childs of previous
+parent
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setPayload"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setPayload</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">payload</span>,
+ <span class="sig-arg">add</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setPayload">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set node payload according to the list specified. WARNING: completely
+replaces all node's previous content. If you wish just to add child or
+CDATA - use addData or addChild methods
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setTag"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setTag</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>,
+ <span class="sig-arg">namespace</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setTag">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Same as getTag but if the node with specified namespace/attributes not
+found, creates such node and returns it
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setTagAttr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setTagAttr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">attr</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setTagAttr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Create new node (if not already present) with name &quot;tag&quot; and set it's
+attribute &quot;attr&quot; to value &quot;val&quot;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="setTagData"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">setTagData</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">val</span>,
+ <span class="sig-arg">attrs</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.setTagData">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Creates new node (if not already present) with name &quot;tag&quot; and
+(optionally) attributes &quot;attrs&quot; and sets it's CDATA to string &quot;val&quot;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="has_attr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">has_attr</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">key</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.has_attr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Check if node have attribute &quot;key&quot;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__getitem__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">item</span>)</span>
+ <br /><em class="fname">(Indexing operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__getitem__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return node's attribute &quot;item&quot; value
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__setitem__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__setitem__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">item</span>,
+ <span class="sig-arg">val</span>)</span>
+ <br /><em class="fname">(Index assignment operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__setitem__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Set node's attribute &quot;item&quot; value
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__delitem__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__delitem__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">item</span>)</span>
+ <br /><em class="fname">(Index deletion operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__delitem__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Delete node's attribute &quot;item&quot;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__contains__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__contains__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">item</span>)</span>
+ <br /><em class="fname">(In operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__contains__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Check if node has attribute &quot;item&quot;
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__getattr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__getattr__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">attr</span>)</span>
+ <br /><em class="fname">(Qualification operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#Node.__getattr__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Reduce memory usage caused by T/NT classes - use memory only when needed
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
+<a name="section-ClassVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variable Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariableDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="FORCE_NODE_RECREATION"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">FORCE_NODE_RECREATION</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+0
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.simplexml.NodeBuilder-class.html b/doc/apidocs/nbxmpp.simplexml.NodeBuilder-class.html
new file mode 100644
index 0000000..7db50c2
--- /dev/null
+++ b/doc/apidocs/nbxmpp.simplexml.NodeBuilder-class.html
@@ -0,0 +1,700 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.simplexml.NodeBuilder</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.simplexml-module.html">Module&nbsp;simplexml</a> ::
+ Class&nbsp;NodeBuilder
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.simplexml.NodeBuilder-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NodeBuilder</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder">source&nbsp;code</a></span></p>
+<p>Builds a Node class minidom from data parsed to it. This class used for two
+purposes:</p>
+<blockquote>
+<ol class="rst-arabic simple">
+<li>Creation an XML Node from a textual representation. F.e. reading a
+config file. See an XML2Node method.</li>
+<li>Handling an incoming XML stream. This is done by mangling the
+__dispatch_depth parameter and redefining the dispatch method.</li>
+</ol>
+</blockquote>
+<p>You do not need to use this class directly if you do not designing your own
+XML handler</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">initial_node</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Take two optional parameters: &quot;data&quot; and &quot;initial_node&quot;</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#check_data_buffer" class="summary-sig-name">check_data_buffer</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.check_data_buffer">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#destroy" class="summary-sig-name">destroy</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Method used to allow class instance to be garbage-collected</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.destroy">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#starttag" class="summary-sig-name">starttag</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">attrs</span>)</span><br />
+ XML Parser callback. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.starttag">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#endtag" class="summary-sig-name">endtag</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">tag</span>)</span><br />
+ XML Parser callback. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.endtag">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#handle_cdata" class="summary-sig-name">handle_cdata</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.handle_cdata">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#handle_namespace_start" class="summary-sig-name">handle_namespace_start</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">prefix</span>,
+ <span class="summary-sig-arg">uri</span>)</span><br />
+ XML Parser callback. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.handle_namespace_start">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#getDom" class="summary-sig-name">getDom</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Return just built Node</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.getDom">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#dispatch" class="summary-sig-name">dispatch</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>)</span><br />
+ Get called when the NodeBuilder reaches some level of depth on it's way
+up with the built node as argument. Can be redefined to convert incoming
+XML stanzas to program events</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.dispatch">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#stream_header_received" class="summary-sig-name">stream_header_received</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">ns</span>,
+ <span class="summary-sig-arg">tag</span>,
+ <span class="summary-sig-arg">attrs</span>)</span><br />
+ Method called when stream just opened</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.stream_header_received">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#stream_footer_received" class="summary-sig-name">stream_footer_received</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Method called when stream just closed</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.stream_footer_received">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#has_received_endtag" class="summary-sig-name">has_received_endtag</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">level</span>=<span class="summary-sig-default">0</span>)</span><br />
+ Return True if at least one end tag was seen (at level)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.has_received_endtag">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#_inc_depth" class="summary-sig-name" onclick="show_private();">_inc_depth</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder._inc_depth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.NodeBuilder-class.html#_dec_depth" class="summary-sig-name" onclick="show_private();">_dec_depth</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder._dec_depth">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">initial_node</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Take two optional parameters: &quot;data&quot; and &quot;initial_node&quot;</p>
+<p>By default class initialised with empty Node class instance. Though, if
+&quot;initial_node&quot; is provided it used as &quot;starting point&quot;. You can think
+about it as of &quot;node upgrade&quot;. &quot;data&quot; (if provided) feeded to parser
+immidiatedly after instance init.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="check_data_buffer"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">check_data_buffer</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.check_data_buffer">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="destroy"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">destroy</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.destroy">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Method used to allow class instance to be garbage-collected
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="starttag"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">starttag</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">attrs</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.starttag">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ XML Parser callback. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="endtag"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">endtag</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">tag</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.endtag">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ XML Parser callback. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="handle_cdata"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">handle_cdata</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.handle_cdata">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="handle_namespace_start"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">handle_namespace_start</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">prefix</span>,
+ <span class="sig-arg">uri</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.handle_namespace_start">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ XML Parser callback. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="getDom"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">getDom</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.getDom">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return just built Node
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="dispatch"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">dispatch</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.dispatch">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Get called when the NodeBuilder reaches some level of depth on it's way
+up with the built node as argument. Can be redefined to convert incoming
+XML stanzas to program events
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="stream_header_received"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">stream_header_received</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">ns</span>,
+ <span class="sig-arg">tag</span>,
+ <span class="sig-arg">attrs</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.stream_header_received">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Method called when stream just opened
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="stream_footer_received"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">stream_footer_received</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.stream_footer_received">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Method called when stream just closed
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="has_received_endtag"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">has_received_endtag</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">level</span>=<span class="sig-default">0</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder.has_received_endtag">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return True if at least one end tag was seen (at level)
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_inc_depth"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_inc_depth</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder._inc_depth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_dec_depth"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_dec_depth</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#NodeBuilder._dec_depth">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.simplexml.T-class.html b/doc/apidocs/nbxmpp.simplexml.T-class.html
new file mode 100644
index 0000000..83db72d
--- /dev/null
+++ b/doc/apidocs/nbxmpp.simplexml.T-class.html
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.simplexml.T</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.simplexml-module.html">Module&nbsp;simplexml</a> ::
+ Class&nbsp;T
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.simplexml.T-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class T</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_s_3" name="uml_class_diagram_for_nbxmpp_s_3">
+<area shape="rect" id="node221" href="nbxmpp.simplexml.T-class.html#__init__" title="nbxmpp.simplexml.T.__init__" alt="" coords="17,39,185,57"/>
+<area shape="rect" id="node221" href="nbxmpp.simplexml.T-class.html#__getattr__" title="nbxmpp.simplexml.T.__getattr__" alt="" coords="17,57,185,76"/>
+<area shape="rect" id="node221" href="nbxmpp.simplexml.T-class.html#__setattr__" title="nbxmpp.simplexml.T.__setattr__" alt="" coords="17,76,185,95"/>
+<area shape="rect" id="node221" href="nbxmpp.simplexml.T-class.html#__delattr__" title="nbxmpp.simplexml.T.__delattr__" alt="" coords="17,95,185,113"/>
+<area shape="rect" id="node1" href="nbxmpp.simplexml.T-class.html" title="Auxiliary class used to quick access to node&#39;s child nodes" alt="" coords="5,6,197,119"/>
+<area shape="rect" id="node2" href="nbxmpp.simplexml.NT-class.html" title="Auxiliary class used to quick create node&#39;s child nodes" alt="" coords="75,139,128,178"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_s_3.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_s_3" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Auxiliary class used to quick access to node's child nodes
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.T-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">node</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.T-class.html#__getattr__" class="summary-sig-name">__getattr__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">attr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__getattr__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.T-class.html#__setattr__" class="summary-sig-name">__setattr__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">attr</span>,
+ <span class="summary-sig-arg">val</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__setattr__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.simplexml.T-class.html#__delattr__" class="summary-sig-name">__delattr__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">attr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__delattr__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">node</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__getattr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__getattr__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">attr</span>)</span>
+ <br /><em class="fname">(Qualification operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__getattr__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__setattr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__setattr__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">attr</span>,
+ <span class="sig-arg">val</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__setattr__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="__delattr__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__delattr__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">attr</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.simplexml-pysrc.html#T.__delattr__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.smacks-module.html b/doc/apidocs/nbxmpp.smacks-module.html
new file mode 100644
index 0000000..ecd4ed4
--- /dev/null
+++ b/doc/apidocs/nbxmpp.smacks-module.html
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.smacks</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;smacks
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.smacks-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module smacks</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.smacks-pysrc.html">source&nbsp;code</a></span></p>
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.smacks.Smacks-class.html" class="summary-name">Smacks</a><br />
+ This is Smacks is the Stream Management class. It takes care of requesting
+and sending acks. Also, it keeps track of the unhandled outgoing stanzas.
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.smacks-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.smacks')">logging.getLogger('nbxmpp.smacks')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.smacks-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <a href="nbxmpp.protocol.Acks-class.html" title="nbxmpp.protocol.Acks">Acks</a>,
+ <span title="nbxmpp.protocol.NS_STREAM_MGMT">NS_STREAM_MGMT</span>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.smacks')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.smacks-pysrc.html b/doc/apidocs/nbxmpp.smacks-pysrc.html
new file mode 100644
index 0000000..a13faab
--- /dev/null
+++ b/doc/apidocs/nbxmpp.smacks-pysrc.html
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.smacks</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;smacks
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.smacks-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.smacks-module.html">Module nbxmpp.smacks</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.protocol=nbxmpp.protocol-module.html"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-0', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Class nbxmpp.protocol.Acks=nbxmpp.protocol.Acks-class.html"><a title="nbxmpp.protocol.Acks" class="py-name" href="#" onclick="return doclink('link-1', 'Acks', 'link-1');">Acks</a></tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name"><a title="nbxmpp.protocol" class="py-name" href="#" onclick="return doclink('link-2', 'protocol', 'link-0');">protocol</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Variable nbxmpp.protocol.NS_STREAM_MGMT=nbxmpp.protocol-module.html#NS_STREAM_MGMT"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-3', 'NS_STREAM_MGMT', 'link-3');">NS_STREAM_MGMT</a></tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-4', 'log', 'link-4');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.smacks'</tt><tt class="py-op">)</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"> </tt>
+<a name="Smacks"></a><div id="Smacks-def"><a name="L6"></a><tt class="py-lineno"> 6</tt> <a class="py-toggle" href="#" id="Smacks-toggle" onclick="return toggle('Smacks');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html">Smacks</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Smacks-expanded"><a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"> <tt class="py-docstring">'''</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring"> This is Smacks is the Stream Management class. It takes care of requesting</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring"> and sending acks. Also, it keeps track of the unhandled outgoing stanzas.</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-docstring"> The dispatcher has to be able to access this class to increment the</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-docstring"> number of handled stanzas</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-docstring"> '''</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"> </tt>
+<a name="Smacks.__init__"></a><div id="Smacks.__init__-def"><a name="L15"></a><tt class="py-lineno"> 15</tt> <a class="py-toggle" href="#" id="Smacks.__init__-toggle" onclick="return toggle('Smacks.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">con</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.__init__-expanded"><a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">con</tt> <tt class="py-op">=</tt> <tt class="py-name">con</tt> <tt class="py-comment"># Connection object</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out_h</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> <tt class="py-comment"># Outgoing stanzas handled</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">in_h</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> <tt class="py-comment"># Incoming stanzas handled</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> <tt class="py-comment"># Unhandled stanzas queue</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session_id</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumption</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> <tt class="py-comment"># If server supports resume</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> <tt class="py-comment"># Max number of stanzas in queue before making a request</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_queue</tt> <tt class="py-op">=</tt> <tt class="py-number">5</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enabled</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> <tt class="py-comment"># If SM is enabled</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">location</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> </tt>
+<a name="Smacks.set_owner"></a><div id="Smacks.set_owner-def"><a name="L29"></a><tt class="py-lineno"> 29</tt> <a class="py-toggle" href="#" id="Smacks.set_owner-toggle" onclick="return toggle('Smacks.set_owner');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#set_owner">set_owner</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.set_owner-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.set_owner-expanded"><a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> <tt class="py-op">=</tt> <tt class="py-name">owner</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt class="py-comment"># Register handlers</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Class nbxmpp.dispatcher_nb.Dispatcher=nbxmpp.dispatcher_nb.Dispatcher-class.html"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-5', 'Dispatcher', 'link-5');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterNamespace"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterNamespace" class="py-name" href="#" onclick="return doclink('link-6', 'RegisterNamespace', 'link-6');">RegisterNamespace</a></tt><tt class="py-op">(</tt><tt id="link-7" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-7', 'NS_STREAM_MGMT', 'link-3');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-8', 'Dispatcher', 'link-5');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Method nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#RegisterHandler"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-9', 'RegisterHandler', 'link-9');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'enabled'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method nbxmpp.smacks.Smacks._neg_response()=nbxmpp.smacks.Smacks-class.html#_neg_response"><a title="nbxmpp.smacks.Smacks._neg_response" class="py-name" href="#" onclick="return doclink('link-10', '_neg_response', 'link-10');">_neg_response</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-11" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-11', 'NS_STREAM_MGMT', 'link-3');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-12', 'Dispatcher', 'link-5');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-13', 'RegisterHandler', 'link-9');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'r'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method nbxmpp.smacks.Smacks.send_ack()=nbxmpp.smacks.Smacks-class.html#send_ack"><a title="nbxmpp.smacks.Smacks.send_ack" class="py-name" href="#" onclick="return doclink('link-14', 'send_ack', 'link-14');">send_ack</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-15" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-15', 'NS_STREAM_MGMT', 'link-3');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-16', 'Dispatcher', 'link-5');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-17', 'RegisterHandler', 'link-9');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'a'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method nbxmpp.smacks.Smacks.check_ack()=nbxmpp.smacks.Smacks-class.html#check_ack"><a title="nbxmpp.smacks.Smacks.check_ack" class="py-name" href="#" onclick="return doclink('link-18', 'check_ack', 'link-18');">check_ack</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-19" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-19', 'NS_STREAM_MGMT', 'link-3');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-20', 'Dispatcher', 'link-5');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-21', 'RegisterHandler', 'link-9');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'resumed'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="nbxmpp.smacks.Smacks.check_ack" class="py-name" href="#" onclick="return doclink('link-22', 'check_ack', 'link-18');">check_ack</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-23" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-23', 'NS_STREAM_MGMT', 'link-3');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-24', 'Dispatcher', 'link-5');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="nbxmpp.dispatcher_nb.XMPPDispatcher.RegisterHandler" class="py-name" href="#" onclick="return doclink('link-25', 'RegisterHandler', 'link-9');">RegisterHandler</a></tt><tt class="py-op">(</tt><tt class="py-string">'failed'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method nbxmpp.smacks.Smacks.error_handling()=nbxmpp.smacks.Smacks-class.html#error_handling"><a title="nbxmpp.smacks.Smacks.error_handling" class="py-name" href="#" onclick="return doclink('link-26', 'error_handling', 'link-26');">error_handling</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> <tt class="py-name">xmlns</tt><tt class="py-op">=</tt><tt id="link-27" class="py-name"><a title="nbxmpp.protocol.NS_STREAM_MGMT" class="py-name" href="#" onclick="return doclink('link-27', 'NS_STREAM_MGMT', 'link-3');">NS_STREAM_MGMT</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> </tt>
+<a name="Smacks._neg_response"></a><div id="Smacks._neg_response-def"><a name="L45"></a><tt class="py-lineno"> 45</tt> <a class="py-toggle" href="#" id="Smacks._neg_response-toggle" onclick="return toggle('Smacks._neg_response');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#_neg_response">_neg_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks._neg_response-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks._neg_response-expanded"><a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method nbxmpp.simplexml.Node.getAttr()=nbxmpp.simplexml.Node-class.html#getAttr"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-28', 'getAttr', 'link-28');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'resume'</tt><tt class="py-op">)</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'true'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'True'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'1'</tt><tt class="py-op">:</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumption</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session_id</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-29', 'getAttr', 'link-28');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'id'</tt><tt class="py-op">)</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'false'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'False'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">r</tt> <tt class="py-op">==</tt> <tt class="py-string">'0'</tt><tt class="py-op">:</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method nbxmpp.smacks.Smacks.negociate()=nbxmpp.smacks.Smacks-class.html#negociate"><a title="nbxmpp.smacks.Smacks.negociate" class="py-name" href="#" onclick="return doclink('link-30', 'negociate', 'link-30');">negociate</a></tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-name">l</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-31', 'getAttr', 'link-28');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">l</tt><tt class="py-op">:</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">location</tt> <tt class="py-op">=</tt> <tt class="py-name">l</tt> </tt>
+</div><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> </tt>
+<a name="Smacks.negociate"></a><div id="Smacks.negociate-def"><a name="L58"></a><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="Smacks.negociate-toggle" onclick="return toggle('Smacks.negociate');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#negociate">negociate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resume</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.negociate-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.negociate-expanded"><a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-comment"># Every time we attempt to negociate, we must erase all previous info</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-comment"># about any previous session</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">in_h</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out_h</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session_id</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enabled</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt id="link-32" class="py-name"><a title="nbxmpp.protocol.Acks" class="py-name" href="#" onclick="return doclink('link-32', 'Acks', 'link-1');">Acks</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method nbxmpp.protocol.Acks.buildEnable()=nbxmpp.protocol.Acks-class.html#buildEnable"><a title="nbxmpp.protocol.Acks.buildEnable" class="py-name" href="#" onclick="return doclink('link-33', 'buildEnable', 'link-33');">buildEnable</a></tt><tt class="py-op">(</tt><tt class="py-name">resume</tt><tt class="py-op">)</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-34', 'send', 'link-34');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">now</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
+<a name="Smacks.resume_request"></a><div id="Smacks.resume_request-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="Smacks.resume_request-toggle" onclick="return toggle('Smacks.resume_request');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#resume_request">resume_request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.resume_request-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.resume_request-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session_id</tt><tt class="py-op">:</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt id="link-35" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-35', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Attempted to resume without a valid session id '</tt><tt class="py-op">)</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">resume</tt> <tt class="py-op">=</tt> <tt id="link-36" class="py-name"><a title="nbxmpp.protocol.Acks" class="py-name" href="#" onclick="return doclink('link-36', 'Acks', 'link-1');">Acks</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">resume</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method nbxmpp.protocol.Acks.buildResume()=nbxmpp.protocol.Acks-class.html#buildResume"><a title="nbxmpp.protocol.Acks.buildResume" class="py-name" href="#" onclick="return doclink('link-37', 'buildResume', 'link-37');">buildResume</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">in_h</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">session_id</tt><tt class="py-op">)</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-38', 'send', 'link-34');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">resume</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> </tt>
+<a name="Smacks.send_ack"></a><div id="Smacks.send_ack-def"><a name="L80"></a><tt class="py-lineno"> 80</tt> <a class="py-toggle" href="#" id="Smacks.send_ack-toggle" onclick="return toggle('Smacks.send_ack');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#send_ack">send_ack</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.send_ack-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.send_ack-expanded"><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">ack</tt> <tt class="py-op">=</tt> <tt id="link-39" class="py-name"><a title="nbxmpp.protocol.Acks" class="py-name" href="#" onclick="return doclink('link-39', 'Acks', 'link-1');">Acks</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">ack</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method nbxmpp.protocol.Acks.buildAnswer()=nbxmpp.protocol.Acks-class.html#buildAnswer"><a title="nbxmpp.protocol.Acks.buildAnswer" class="py-name" href="#" onclick="return doclink('link-40', 'buildAnswer', 'link-40');">buildAnswer</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">in_h</tt><tt class="py-op">)</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-41', 'send', 'link-34');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">ack</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
+<a name="Smacks.request_ack"></a><div id="Smacks.request_ack-def"><a name="L85"></a><tt class="py-lineno"> 85</tt> <a class="py-toggle" href="#" id="Smacks.request_ack-toggle" onclick="return toggle('Smacks.request_ack');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#request_ack">request_ack</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.request_ack-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.request_ack-expanded"><a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt id="link-42" class="py-name"><a title="nbxmpp.protocol.Acks" class="py-name" href="#" onclick="return doclink('link-42', 'Acks', 'link-1');">Acks</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">r</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method nbxmpp.protocol.Acks.buildRequest()=nbxmpp.protocol.Acks-class.html#buildRequest"><a title="nbxmpp.protocol.Acks.buildRequest" class="py-name" href="#" onclick="return doclink('link-43', 'buildRequest', 'link-43');">buildRequest</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-44', 'send', 'link-34');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
+<a name="Smacks.check_ack"></a><div id="Smacks.check_ack-def"><a name="L90"></a><tt class="py-lineno"> 90</tt> <a class="py-toggle" href="#" id="Smacks.check_ack-toggle" onclick="return toggle('Smacks.check_ack');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#check_ack">check_ack</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.check_ack-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.check_ack-expanded"><a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-docstring">'''</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-docstring"> Checks if the number of stanzas sent are the same as the</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt class="py-docstring"> number of stanzas received by the server. Pops stanzas that were</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-docstring"> handled by the server from the queue.</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"><tt class="py-docstring"> '''</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">h</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="nbxmpp.simplexml.Node.getAttr" class="py-name" href="#" onclick="return doclink('link-45', 'getAttr', 'link-28');">getAttr</a></tt><tt class="py-op">(</tt><tt class="py-string">'h'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">diff</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">out_h</tt> <tt class="py-op">-</tt> <tt class="py-name">h</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">diff</tt> <tt class="py-keyword">or</tt> <tt class="py-name">diff</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt id="link-46" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-46', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Server and client number of stanzas handled mismatch '</tt><tt class="py-op">)</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">diff</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method nbxmpp.roster_nb.NonBlockingRoster.getName()=nbxmpp.roster_nb.NonBlockingRoster-class.html#getName,Method nbxmpp.simplexml.Node.getName()=nbxmpp.simplexml.Node-class.html#getName"><a title="nbxmpp.roster_nb.NonBlockingRoster.getName
+nbxmpp.simplexml.Node.getName" class="py-name" href="#" onclick="return doclink('link-47', 'getName', 'link-47');">getName</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'resumed'</tt><tt class="py-op">:</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enabled</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">con</tt><tt class="py-op">.</tt><tt class="py-name">set_oldst</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt> <tt class="py-op">!=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uqueue</tt><tt class="py-op">:</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-48', 'send', 'link-34');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> </tt>
+<a name="Smacks.error_handling"></a><div id="Smacks.error_handling-def"><a name="L113"></a><tt class="py-lineno">113</tt> <a class="py-toggle" href="#" id="Smacks.error_handling-toggle" onclick="return toggle('Smacks.error_handling');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.smacks.Smacks-class.html#error_handling">error_handling</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">disp</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Smacks.error_handling-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Smacks.error_handling-expanded"><a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-comment"># If the server doesn't recognize previd, forget about resuming</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-comment"># Ask for service discovery, etc..</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method nbxmpp.simplexml.Node.getTag()=nbxmpp.simplexml.Node-class.html#getTag"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-49', 'getTag', 'link-49');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'item-not-found'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enabled</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-comment"># we need to bind a resource</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name" targets="Class nbxmpp.auth_nb.NonBlockingBind=nbxmpp.auth_nb.NonBlockingBind-class.html,Method nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind()=nbxmpp.auth_nb.NonBlockingBind-class.html#NonBlockingBind"><a title="nbxmpp.auth_nb.NonBlockingBind
+nbxmpp.auth_nb.NonBlockingBind.NonBlockingBind" class="py-name" href="#" onclick="return doclink('link-50', 'NonBlockingBind', 'link-50');">NonBlockingBind</a></tt><tt class="py-op">.</tt><tt class="py-name">resuming</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient._on_auth_bind()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_auth_bind"><a title="nbxmpp.client_nb.NonBlockingClient._on_auth_bind" class="py-name" href="#" onclick="return doclink('link-51', '_on_auth_bind', 'link-51');">_on_auth_bind</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-comment"># Doesn't support resumption</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-52', 'getTag', 'link-49');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'feature-not-implemented'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name"><a title="nbxmpp.smacks.Smacks.negociate" class="py-name" href="#" onclick="return doclink('link-53', 'negociate', 'link-30');">negociate</a></tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="nbxmpp.simplexml.Node.getTag" class="py-name" href="#" onclick="return doclink('link-54', 'getTag', 'link-49');">getTag</a></tt><tt class="py-op">(</tt><tt class="py-string">'unexpected-request'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enabled</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt id="link-55" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-55', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Gajim failed to negociate Stream Management'</tt><tt class="py-op">)</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+</div></div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.smacks.Smacks-class.html b/doc/apidocs/nbxmpp.smacks.Smacks-class.html
new file mode 100644
index 0000000..73a88b1
--- /dev/null
+++ b/doc/apidocs/nbxmpp.smacks.Smacks-class.html
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.smacks.Smacks</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.smacks-module.html">Module&nbsp;smacks</a> ::
+ Class&nbsp;Smacks
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.smacks.Smacks-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Smacks</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks">source&nbsp;code</a></span></p>
+<p>This is Smacks is the Stream Management class. It takes care of requesting
+and sending acks. Also, it keeps track of the unhandled outgoing stanzas.</p>
+<p>The dispatcher has to be able to access this class to increment the
+number of handled stanzas</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">con</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#set_owner" class="summary-sig-name">set_owner</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.set_owner">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#_neg_response" class="summary-sig-name" onclick="show_private();">_neg_response</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">stanza</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks._neg_response">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#negociate" class="summary-sig-name">negociate</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">resume</span>=<span class="summary-sig-default">True</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.negociate">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#resume_request" class="summary-sig-name">resume_request</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.resume_request">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#send_ack" class="summary-sig-name">send_ack</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">stanza</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.send_ack">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#request_ack" class="summary-sig-name">request_ack</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.request_ack">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#check_ack" class="summary-sig-name">check_ack</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">stanza</span>)</span><br />
+ Checks if the number of stanzas sent are the same as the
+number of stanzas received by the server. Pops stanzas that were
+handled by the server from the queue.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.check_ack">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.smacks.Smacks-class.html#error_handling" class="summary-sig-name">error_handling</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">disp</span>,
+ <span class="summary-sig-arg">stanza</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.error_handling">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">con</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_owner"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_owner</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.set_owner">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_neg_response"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_neg_response</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">disp</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks._neg_response">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="negociate"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">negociate</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">resume</span>=<span class="sig-default">True</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.negociate">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="resume_request"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">resume_request</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.resume_request">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="send_ack"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send_ack</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">disp</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.send_ack">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="request_ack"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">request_ack</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.request_ack">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="check_ack"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">check_ack</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">disp</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.check_ack">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Checks if the number of stanzas sent are the same as the
+number of stanzas received by the server. Pops stanzas that were
+handled by the server from the queue.
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="error_handling"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">error_handling</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">disp</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.smacks-pysrc.html#Smacks.error_handling">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare-module.html b/doc/apidocs/nbxmpp.stringprepare-module.html
new file mode 100644
index 0000000..eef055c
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare-module.html
@@ -0,0 +1,664 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;stringprepare
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module stringprepare</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html">source&nbsp;code</a></span></p>
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.ILookupTable-class.html" class="summary-name">ILookupTable</a><br />
+ Interface for character lookup classes
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.IMappingTable-class.html" class="summary-name">IMappingTable</a><br />
+ Interface for character mapping classes
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.LookupTableFromFunction-class.html" class="summary-name">LookupTableFromFunction</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.LookupTable-class.html" class="summary-name">LookupTable</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.MappingTableFromFunction-class.html" class="summary-name">MappingTableFromFunction</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.EmptyMappingTable-class.html" class="summary-name">EmptyMappingTable</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.Profile-class.html" class="summary-name">Profile</a>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.NamePrep-class.html" class="summary-name">NamePrep</a><br />
+ Implements preparation of internationalized domain names
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_11" class="summary-name">C_11</a> = <code title="LookupTableFromFunction(stringprep.in_table_c11)">LookupTableFromFunction(stringprep.in_table_c11)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_12" class="summary-name">C_12</a> = <code title="LookupTableFromFunction(stringprep.in_table_c12)">LookupTableFromFunction(stringprep.in_table_c12)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_21" class="summary-name">C_21</a> = <code title="LookupTableFromFunction(stringprep.in_table_c21)">LookupTableFromFunction(stringprep.in_table_c21)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_22" class="summary-name">C_22</a> = <code title="LookupTableFromFunction(stringprep.in_table_c22)">LookupTableFromFunction(stringprep.in_table_c22)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_3" class="summary-name">C_3</a> = <code title="LookupTableFromFunction(stringprep.in_table_c3)">LookupTableFromFunction(stringprep.in_table_c3)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_4" class="summary-name">C_4</a> = <code title="LookupTableFromFunction(stringprep.in_table_c4)">LookupTableFromFunction(stringprep.in_table_c4)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_5" class="summary-name">C_5</a> = <code title="LookupTableFromFunction(stringprep.in_table_c5)">LookupTableFromFunction(stringprep.in_table_c5)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_6" class="summary-name">C_6</a> = <code title="LookupTableFromFunction(stringprep.in_table_c6)">LookupTableFromFunction(stringprep.in_table_c6)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_7" class="summary-name">C_7</a> = <code title="LookupTableFromFunction(stringprep.in_table_c7)">LookupTableFromFunction(stringprep.in_table_c7)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_8" class="summary-name">C_8</a> = <code title="LookupTableFromFunction(stringprep.in_table_c8)">LookupTableFromFunction(stringprep.in_table_c8)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#C_9" class="summary-name">C_9</a> = <code title="LookupTableFromFunction(stringprep.in_table_c9)">LookupTableFromFunction(stringprep.in_table_c9)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#B_1" class="summary-name">B_1</a> = <code title="EmptyMappingTable(stringprep.in_table_b1)">EmptyMappingTable(stringprep.in_table_b1)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#B_2" class="summary-name">B_2</a> = <code title="MappingTableFromFunction(stringprep.map_table_b2)">MappingTableFromFunction(stringprep.map_table_b2)</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#nodeprep" class="summary-name">nodeprep</a> = <code title="Profile(mappings= [B_1, B_2], prohibiteds= [C_11, C_12, C_21, C_22, C_\
+3, C_4, C_5, C_6, C_7, C_8, C_9, LookupTable([u'&quot;', u'&amp;', u&quot;'&quot;, u'/', \
+u':', u'&lt;', u'&gt;', u'@'])])">Profile(mappings= [B_1, B_2], prohibiteds= [C_11, C<code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#resourceprep" class="summary-name">resourceprep</a> = <code title="Profile(mappings= [B_1,], prohibiteds= [C_12, C_21, C_22, C_3, C_4, C_\
+5, C_6, C_7, C_8, C_9])">Profile(mappings= [B_1,], prohibiteds= [C_12, C<code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#nameprep" class="summary-name">nameprep</a> = <code title="NamePrep()">NamePrep()</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="stringprep">stringprep</span>,
+ <span title="unicodedata">unicodedata</span>,
+ <span title="encodings.idna">idna</span>
+</p><br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="C_11"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_11</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c11)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_12"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_12</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c12)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_21"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_21</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c21)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_22"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_22</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c22)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_3"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_3</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c3)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_4"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_4</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c4)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_5"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_5</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c5)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_6"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_6</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c6)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_7"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_7</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c7)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_8"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_8</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c8)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="C_9"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">C_9</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+LookupTableFromFunction(stringprep.in_table_c9)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="B_1"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">B_1</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+EmptyMappingTable(stringprep.in_table_b1)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="B_2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">B_2</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+MappingTableFromFunction(stringprep.map_table_b2)
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="nodeprep"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">nodeprep</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+Profile(mappings= [B_1, B_2], prohibiteds= [C_11, C_12, C_21, C_22, C_<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+3, C_4, C_5, C_6, C_7, C_8, C_9, LookupTable([u'&quot;', u'&amp;', u&quot;'&quot;, u'/', <span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+u':', u'&lt;', u'&gt;', u'@'])])
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="resourceprep"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">resourceprep</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+Profile(mappings= [B_1,], prohibiteds= [C_12, C_21, C_22, C_3, C_4, C_<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+5, C_6, C_7, C_8, C_9])
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="nameprep"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">nameprep</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+NamePrep()
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare-pysrc.html b/doc/apidocs/nbxmpp.stringprepare-pysrc.html
new file mode 100644
index 0000000..90c57b8
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare-pysrc.html
@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;stringprepare
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.stringprepare-module.html">Module nbxmpp.stringprepare</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># -*- coding:utf-8 -*-</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## src/common/xmpp/stringprepare.py</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2001-2005 Twisted Matrix Laboratories</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2005-2012 Yann Leboulanger &lt;asterix AT lagaule.org&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2006 Stefan Bethge &lt;stefan AT lanpartei.de&gt;</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2007 Jean-Marie Traissard &lt;jim AT lapin.org&gt;</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## This file is part of Gajim.</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## Gajim is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## by the Free Software Foundation; version 3 only.</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## Gajim is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-comment">## You should have received a copy of the GNU General Public License</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment">## along with Gajim. If not, see &lt;http://www.gnu.org/licenses/&gt;.</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">stringprep</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">unicodedata</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">encodings</tt> <tt class="py-keyword">import</tt> <tt class="py-name">idna</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> </tt>
+<a name="ILookupTable"></a><div id="ILookupTable-def"><a name="L28"></a><tt class="py-lineno"> 28</tt> <a class="py-toggle" href="#" id="ILookupTable-toggle" onclick="return toggle('ILookupTable');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.ILookupTable-class.html">ILookupTable</a><tt class="py-op">:</tt> </tt>
+</div><div id="ILookupTable-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ILookupTable-expanded"><a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-docstring"> Interface for character lookup classes</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> </tt>
+<a name="ILookupTable.lookup"></a><div id="ILookupTable.lookup-def"><a name="L33"></a><tt class="py-lineno"> 33</tt> <a class="py-toggle" href="#" id="ILookupTable.lookup-toggle" onclick="return toggle('ILookupTable.lookup');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.ILookupTable-class.html#lookup">lookup</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ILookupTable.lookup-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ILookupTable.lookup-expanded"><a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring"> Return whether character is in this table</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div></div><a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> </tt>
+<a name="IMappingTable"></a><div id="IMappingTable-def"><a name="L39"></a><tt class="py-lineno"> 39</tt> <a class="py-toggle" href="#" id="IMappingTable-toggle" onclick="return toggle('IMappingTable');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.IMappingTable-class.html">IMappingTable</a><tt class="py-op">:</tt> </tt>
+</div><div id="IMappingTable-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IMappingTable-expanded"><a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> Interface for character mapping classes</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> </tt>
+<a name="IMappingTable.map"></a><div id="IMappingTable.map-def"><a name="L44"></a><tt class="py-lineno"> 44</tt> <a class="py-toggle" href="#" id="IMappingTable.map-toggle" onclick="return toggle('IMappingTable.map');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.IMappingTable-class.html#map">map</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="IMappingTable.map-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IMappingTable.map-expanded"><a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> Return mapping for character</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div></div><a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> </tt>
+<a name="LookupTableFromFunction"></a><div id="LookupTableFromFunction-def"><a name="L50"></a><tt class="py-lineno"> 50</tt> <a class="py-toggle" href="#" id="LookupTableFromFunction-toggle" onclick="return toggle('LookupTableFromFunction');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.LookupTableFromFunction-class.html">LookupTableFromFunction</a><tt class="py-op">:</tt> </tt>
+</div><div id="LookupTableFromFunction-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="LookupTableFromFunction-expanded"><a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">__implements__</tt> <tt class="py-op">=</tt> <tt id="link-0" class="py-name" targets="Class nbxmpp.stringprepare.ILookupTable=nbxmpp.stringprepare.ILookupTable-class.html"><a title="nbxmpp.stringprepare.ILookupTable" class="py-name" href="#" onclick="return doclink('link-0', 'ILookupTable', 'link-0');">ILookupTable</a></tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt>
+<a name="LookupTableFromFunction.__init__"></a><div id="LookupTableFromFunction.__init__-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="LookupTableFromFunction.__init__-toggle" onclick="return toggle('LookupTableFromFunction.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">in_table_function</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="LookupTableFromFunction.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="LookupTableFromFunction.__init__-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Method nbxmpp.stringprepare.ILookupTable.lookup()=nbxmpp.stringprepare.ILookupTable-class.html#lookup,Method nbxmpp.stringprepare.LookupTable.lookup()=nbxmpp.stringprepare.LookupTable-class.html#lookup"><a title="nbxmpp.stringprepare.ILookupTable.lookup
+nbxmpp.stringprepare.LookupTable.lookup" class="py-name" href="#" onclick="return doclink('link-1', 'lookup', 'link-1');">lookup</a></tt> <tt class="py-op">=</tt> <tt class="py-name">in_table_function</tt> </tt>
+</div></div><a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> </tt>
+<a name="LookupTable"></a><div id="LookupTable-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="LookupTable-toggle" onclick="return toggle('LookupTable');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.LookupTable-class.html">LookupTable</a><tt class="py-op">:</tt> </tt>
+</div><div id="LookupTable-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="LookupTable-expanded"><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-name">__implements__</tt> <tt class="py-op">=</tt> <tt id="link-2" class="py-name"><a title="nbxmpp.stringprepare.ILookupTable" class="py-name" href="#" onclick="return doclink('link-2', 'ILookupTable', 'link-0');">ILookupTable</a></tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> </tt>
+<a name="LookupTable.__init__"></a><div id="LookupTable.__init__-def"><a name="L61"></a><tt class="py-lineno"> 61</tt> <a class="py-toggle" href="#" id="LookupTable.__init__-toggle" onclick="return toggle('LookupTable.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.LookupTable-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">table</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="LookupTable.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="LookupTable.__init__-expanded"><a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_table</tt> <tt class="py-op">=</tt> <tt class="py-name">table</tt> </tt>
+</div><a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> </tt>
+<a name="LookupTable.lookup"></a><div id="LookupTable.lookup-def"><a name="L64"></a><tt class="py-lineno"> 64</tt> <a class="py-toggle" href="#" id="LookupTable.lookup-toggle" onclick="return toggle('LookupTable.lookup');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.LookupTable-class.html#lookup">lookup</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="LookupTable.lookup-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="LookupTable.lookup-expanded"><a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_table</tt> </tt>
+</div></div><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> </tt>
+<a name="MappingTableFromFunction"></a><div id="MappingTableFromFunction-def"><a name="L67"></a><tt class="py-lineno"> 67</tt> <a class="py-toggle" href="#" id="MappingTableFromFunction-toggle" onclick="return toggle('MappingTableFromFunction');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.MappingTableFromFunction-class.html">MappingTableFromFunction</a><tt class="py-op">:</tt> </tt>
+</div><div id="MappingTableFromFunction-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MappingTableFromFunction-expanded"><a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-name">__implements__</tt> <tt class="py-op">=</tt> <tt id="link-3" class="py-name" targets="Class nbxmpp.stringprepare.IMappingTable=nbxmpp.stringprepare.IMappingTable-class.html"><a title="nbxmpp.stringprepare.IMappingTable" class="py-name" href="#" onclick="return doclink('link-3', 'IMappingTable', 'link-3');">IMappingTable</a></tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
+<a name="MappingTableFromFunction.__init__"></a><div id="MappingTableFromFunction.__init__-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="MappingTableFromFunction.__init__-toggle" onclick="return toggle('MappingTableFromFunction.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">map_table_function</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MappingTableFromFunction.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MappingTableFromFunction.__init__-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Method nbxmpp.stringprepare.EmptyMappingTable.map()=nbxmpp.stringprepare.EmptyMappingTable-class.html#map,Method nbxmpp.stringprepare.IMappingTable.map()=nbxmpp.stringprepare.IMappingTable-class.html#map,Method nbxmpp.stringprepare.Profile.map()=nbxmpp.stringprepare.Profile-class.html#map"><a title="nbxmpp.stringprepare.EmptyMappingTable.map
+nbxmpp.stringprepare.IMappingTable.map
+nbxmpp.stringprepare.Profile.map" class="py-name" href="#" onclick="return doclink('link-4', 'map', 'link-4');">map</a></tt> <tt class="py-op">=</tt> <tt class="py-name">map_table_function</tt> </tt>
+</div></div><a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt>
+<a name="EmptyMappingTable"></a><div id="EmptyMappingTable-def"><a name="L74"></a><tt class="py-lineno"> 74</tt> <a class="py-toggle" href="#" id="EmptyMappingTable-toggle" onclick="return toggle('EmptyMappingTable');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.EmptyMappingTable-class.html">EmptyMappingTable</a><tt class="py-op">:</tt> </tt>
+</div><div id="EmptyMappingTable-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EmptyMappingTable-expanded"><a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">__implements__</tt> <tt class="py-op">=</tt> <tt id="link-5" class="py-name"><a title="nbxmpp.stringprepare.IMappingTable" class="py-name" href="#" onclick="return doclink('link-5', 'IMappingTable', 'link-3');">IMappingTable</a></tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt>
+<a name="EmptyMappingTable.__init__"></a><div id="EmptyMappingTable.__init__-def"><a name="L78"></a><tt class="py-lineno"> 78</tt> <a class="py-toggle" href="#" id="EmptyMappingTable.__init__-toggle" onclick="return toggle('EmptyMappingTable.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">in_table_function</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EmptyMappingTable.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EmptyMappingTable.__init__-expanded"><a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_table_function</tt> <tt class="py-op">=</tt> <tt class="py-name">in_table_function</tt> </tt>
+</div><a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> </tt>
+<a name="EmptyMappingTable.map"></a><div id="EmptyMappingTable.map-def"><a name="L81"></a><tt class="py-lineno"> 81</tt> <a class="py-toggle" href="#" id="EmptyMappingTable.map-toggle" onclick="return toggle('EmptyMappingTable.map');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.EmptyMappingTable-class.html#map">map</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="EmptyMappingTable.map-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EmptyMappingTable.map-expanded"><a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_table_function</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">c</tt> </tt>
+</div></div><a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> </tt>
+<a name="Profile"></a><div id="Profile-def"><a name="L87"></a><tt class="py-lineno"> 87</tt> <a class="py-toggle" href="#" id="Profile-toggle" onclick="return toggle('Profile');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.Profile-class.html">Profile</a><tt class="py-op">:</tt> </tt>
+</div><div id="Profile-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Profile-expanded"><a name="Profile.__init__"></a><div id="Profile.__init__-def"><a name="L88"></a><tt class="py-lineno"> 88</tt> <a class="py-toggle" href="#" id="Profile.__init__-toggle" onclick="return toggle('Profile.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.Profile-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">mappings</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-param">normalize</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">prohibiteds</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-param">check_unassigneds</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">check_bidi</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Profile.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Profile.__init__-expanded"><a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mappings</tt> <tt class="py-op">=</tt> <tt class="py-name">mappings</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">normalize</tt> <tt class="py-op">=</tt> <tt class="py-name">normalize</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Variable nbxmpp.stringprepare.NamePrep.prohibiteds=nbxmpp.stringprepare.NamePrep-class.html#prohibiteds"><a title="nbxmpp.stringprepare.NamePrep.prohibiteds" class="py-name" href="#" onclick="return doclink('link-6', 'prohibiteds', 'link-6');">prohibiteds</a></tt> <tt class="py-op">=</tt> <tt id="link-7" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.prohibiteds" class="py-name" href="#" onclick="return doclink('link-7', 'prohibiteds', 'link-6');">prohibiteds</a></tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">do_check_unassigneds</tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name" targets="Method nbxmpp.stringprepare.Profile.check_unassigneds()=nbxmpp.stringprepare.Profile-class.html#check_unassigneds"><a title="nbxmpp.stringprepare.Profile.check_unassigneds" class="py-name" href="#" onclick="return doclink('link-8', 'check_unassigneds', 'link-8');">check_unassigneds</a></tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">do_check_bidi</tt> <tt class="py-op">=</tt> <tt class="py-name">check_bidi</tt> </tt>
+</div><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt>
+<a name="Profile.prepare"></a><div id="Profile.prepare-def"><a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="Profile.prepare-toggle" onclick="return toggle('Profile.prepare');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.Profile-class.html#prepare">prepare</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Profile.prepare-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Profile.prepare-expanded"><a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="nbxmpp.stringprepare.EmptyMappingTable.map
+nbxmpp.stringprepare.IMappingTable.map
+nbxmpp.stringprepare.Profile.map" class="py-name" href="#" onclick="return doclink('link-9', 'map', 'link-4');">map</a></tt><tt class="py-op">(</tt><tt class="py-name">string</tt><tt class="py-op">)</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">normalize</tt><tt class="py-op">:</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">unicodedata</tt><tt class="py-op">.</tt><tt class="py-name">normalize</tt><tt class="py-op">(</tt><tt class="py-string">"NFKC"</tt><tt class="py-op">,</tt> <tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method nbxmpp.stringprepare.NamePrep.check_prohibiteds()=nbxmpp.stringprepare.NamePrep-class.html#check_prohibiteds,Method nbxmpp.stringprepare.Profile.check_prohibiteds()=nbxmpp.stringprepare.Profile-class.html#check_prohibiteds"><a title="nbxmpp.stringprepare.NamePrep.check_prohibiteds
+nbxmpp.stringprepare.Profile.check_prohibiteds" class="py-name" href="#" onclick="return doclink('link-10', 'check_prohibiteds', 'link-10');">check_prohibiteds</a></tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">do_check_unassigneds</tt><tt class="py-op">:</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="nbxmpp.stringprepare.Profile.check_unassigneds" class="py-name" href="#" onclick="return doclink('link-11', 'check_unassigneds', 'link-8');">check_unassigneds</a></tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">do_check_bidi</tt><tt class="py-op">:</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Method nbxmpp.stringprepare.Profile.check_bidirectionals()=nbxmpp.stringprepare.Profile-class.html#check_bidirectionals"><a title="nbxmpp.stringprepare.Profile.check_bidirectionals" class="py-name" href="#" onclick="return doclink('link-12', 'check_bidirectionals', 'link-12');">check_bidirectionals</a></tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">result</tt> </tt>
+</div><a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> </tt>
+<a name="Profile.map"></a><div id="Profile.map-def"><a name="L107"></a><tt class="py-lineno">107</tt> <a class="py-toggle" href="#" id="Profile.map-toggle" onclick="return toggle('Profile.map');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.Profile-class.html#map">map</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Profile.map-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Profile.map-expanded"><a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">string</tt><tt class="py-op">:</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">result_c</tt> <tt class="py-op">=</tt> <tt class="py-name">c</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">mapping</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mappings</tt><tt class="py-op">:</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">result_c</tt> <tt class="py-op">=</tt> <tt class="py-name">mapping</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="nbxmpp.stringprepare.EmptyMappingTable.map
+nbxmpp.stringprepare.IMappingTable.map
+nbxmpp.stringprepare.Profile.map" class="py-name" href="#" onclick="return doclink('link-13', 'map', 'link-4');">map</a></tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">result_c</tt> <tt class="py-op">!=</tt> <tt class="py-name">c</tt><tt class="py-op">:</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">result_c</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">result_c</tt><tt class="py-op">)</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">u""</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> </tt>
+<a name="Profile.check_prohibiteds"></a><div id="Profile.check_prohibiteds-def"><a name="L123"></a><tt class="py-lineno">123</tt> <a class="py-toggle" href="#" id="Profile.check_prohibiteds-toggle" onclick="return toggle('Profile.check_prohibiteds');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.Profile-class.html#check_prohibiteds">check_prohibiteds</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Profile.check_prohibiteds-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Profile.check_prohibiteds-expanded"><a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">string</tt><tt class="py-op">:</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">table</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.prohibiteds" class="py-name" href="#" onclick="return doclink('link-14', 'prohibiteds', 'link-6');">prohibiteds</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">table</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="nbxmpp.stringprepare.ILookupTable.lookup
+nbxmpp.stringprepare.LookupTable.lookup" class="py-name" href="#" onclick="return doclink('link-15', 'lookup', 'link-1');">lookup</a></tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid character %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> </tt>
+<a name="Profile.check_unassigneds"></a><div id="Profile.check_unassigneds-def"><a name="L129"></a><tt class="py-lineno">129</tt> <a class="py-toggle" href="#" id="Profile.check_unassigneds-toggle" onclick="return toggle('Profile.check_unassigneds');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.Profile-class.html#check_unassigneds">check_unassigneds</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Profile.check_unassigneds-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Profile.check_unassigneds-expanded"><a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">string</tt><tt class="py-op">:</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_a1</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Unassigned code point %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> </tt>
+<a name="Profile.check_bidirectionals"></a><div id="Profile.check_bidirectionals-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="Profile.check_bidirectionals-toggle" onclick="return toggle('Profile.check_bidirectionals');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.Profile-class.html#check_bidirectionals">check_bidirectionals</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Profile.check_bidirectionals-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Profile.check_bidirectionals-expanded"><a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">found_LCat</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-name">found_RandALCat</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">string</tt><tt class="py-op">:</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_d1</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">found_RandALCat</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_d2</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">found_LCat</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">found_LCat</tt> <tt class="py-keyword">and</tt> <tt class="py-name">found_RandALCat</tt><tt class="py-op">:</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Violation of BIDI Requirement 2"</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">found_RandALCat</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_d1</tt><tt class="py-op">(</tt><tt class="py-name">string</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_d1</tt><tt class="py-op">(</tt><tt class="py-name">string</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Violation of BIDI Requirement 3"</tt> </tt>
+</div></div><a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> </tt>
+<a name="NamePrep"></a><div id="NamePrep-def"><a name="L152"></a><tt class="py-lineno">152</tt> <a class="py-toggle" href="#" id="NamePrep-toggle" onclick="return toggle('NamePrep');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.stringprepare.NamePrep-class.html">NamePrep</a><tt class="py-op">:</tt> </tt>
+</div><div id="NamePrep-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NamePrep-expanded"><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"> Implements preparation of internationalized domain names</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"> This class implements preparing internationalized domain names using the</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"> rules defined in RFC 3491, section 4 (Conversion operations).</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"><tt class="py-docstring"> We do not perform step 4 since we deal with unicode representations of</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"><tt class="py-docstring"> domain names and do not convert from or to ASCII representations using</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"><tt class="py-docstring"> punycode encoding. When such a conversion is needed, the L{idna} standard</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"><tt class="py-docstring"> library provides the C{ToUnicode()} and C{ToASCII()} functions. Note that</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-docstring"> L{idna} itself assumes UseSTD3ASCIIRules to be false.</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"><tt class="py-docstring"> The following steps are performed by C{prepare()}:</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"><tt class="py-docstring"> * Split the domain name in labels at the dots (RFC 3490, 3.1)</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"><tt class="py-docstring"> * Apply nameprep proper on each label (RFC 3491)</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"><tt class="py-docstring"> * Enforce the restrictions on ASCII characters in host names by</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"><tt class="py-docstring"> assuming STD3ASCIIRules to be true. (STD 3)</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-docstring"> * Rejoin the labels using the label separator U+002E (full stop).</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-comment"># Prohibited characters.</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt id="link-16" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.prohibiteds" class="py-name" href="#" onclick="return doclink('link-16', 'prohibiteds', 'link-6');">prohibiteds</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">unichr</tt><tt class="py-op">(</tt><tt id="link-17" class="py-name" targets="Variable nbxmpp.stringprepare.NamePrep.n=nbxmpp.stringprepare.NamePrep-class.html#n"><a title="nbxmpp.stringprepare.NamePrep.n" class="py-name" href="#" onclick="return doclink('link-17', 'n', 'link-17');">n</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt id="link-18" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.n" class="py-name" href="#" onclick="return doclink('link-18', 'n', 'link-17');">n</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0x00</tt><tt class="py-op">,</tt> <tt class="py-number">0x2c</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0x2e</tt><tt class="py-op">,</tt> <tt class="py-number">0x2f</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0x3a</tt><tt class="py-op">,</tt> <tt class="py-number">0x40</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0x5b</tt><tt class="py-op">,</tt> <tt class="py-number">0x60</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0x7b</tt><tt class="py-op">,</tt> <tt class="py-number">0x7f</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">]</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> </tt>
+<a name="NamePrep.prepare"></a><div id="NamePrep.prepare-def"><a name="L181"></a><tt class="py-lineno">181</tt> <a class="py-toggle" href="#" id="NamePrep.prepare-toggle" onclick="return toggle('NamePrep.prepare');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.NamePrep-class.html#prepare">prepare</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NamePrep.prepare-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NamePrep.prepare-expanded"><a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-name">labels</tt> <tt class="py-op">=</tt> <tt class="py-name">idna</tt><tt class="py-op">.</tt><tt class="py-name">dots</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-name">string</tt><tt class="py-op">)</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">labels</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">labels</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">trailing_dot</tt> <tt class="py-op">=</tt> <tt class="py-string">'.'</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">labels</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-name">trailing_dot</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">label</tt> <tt class="py-keyword">in</tt> <tt class="py-name">labels</tt><tt class="py-op">:</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method nbxmpp.stringprepare.NamePrep.nameprep()=nbxmpp.stringprepare.NamePrep-class.html#nameprep,Variable nbxmpp.stringprepare.nameprep=nbxmpp.stringprepare-module.html#nameprep"><a title="nbxmpp.stringprepare.NamePrep.nameprep
+nbxmpp.stringprepare.nameprep" class="py-name" href="#" onclick="return doclink('link-19', 'nameprep', 'link-19');">nameprep</a></tt><tt class="py-op">(</tt><tt class="py-name">label</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"."</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt><tt class="py-op">+</tt><tt class="py-name">trailing_dot</tt> </tt>
+</div><a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> </tt>
+<a name="NamePrep.check_prohibiteds"></a><div id="NamePrep.check_prohibiteds-def"><a name="L197"></a><tt class="py-lineno">197</tt> <a class="py-toggle" href="#" id="NamePrep.check_prohibiteds-toggle" onclick="return toggle('NamePrep.check_prohibiteds');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.NamePrep-class.html#check_prohibiteds">check_prohibiteds</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NamePrep.check_prohibiteds-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NamePrep.check_prohibiteds-expanded"><a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">string</tt><tt class="py-op">:</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.prohibiteds" class="py-name" href="#" onclick="return doclink('link-20', 'prohibiteds', 'link-6');">prohibiteds</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid character %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> </tt>
+<a name="NamePrep.nameprep"></a><div id="NamePrep.nameprep-def"><a name="L202"></a><tt class="py-lineno">202</tt> <a class="py-toggle" href="#" id="NamePrep.nameprep-toggle" onclick="return toggle('NamePrep.nameprep');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.stringprepare.NamePrep-class.html#nameprep">nameprep</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">label</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NamePrep.nameprep-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NamePrep.nameprep-expanded"><a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-name">label</tt> <tt class="py-op">=</tt> <tt class="py-name">idna</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.nameprep
+nbxmpp.stringprepare.nameprep" class="py-name" href="#" onclick="return doclink('link-21', 'nameprep', 'link-19');">nameprep</a></tt><tt class="py-op">(</tt><tt class="py-name">label</tt><tt class="py-op">)</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.check_prohibiteds
+nbxmpp.stringprepare.Profile.check_prohibiteds" class="py-name" href="#" onclick="return doclink('link-22', 'check_prohibiteds', 'link-10');">check_prohibiteds</a></tt><tt class="py-op">(</tt><tt class="py-name">label</tt><tt class="py-op">)</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">label</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid empty name"</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">label</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'-'</tt><tt class="py-op">:</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid leading hyphen-minus"</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">label</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'-'</tt><tt class="py-op">:</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">UnicodeError</tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid trailing hyphen-minus"</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">label</tt> </tt>
+</div></div><a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"><tt id="link-23" class="py-name" targets="Variable nbxmpp.stringprepare.C_11=nbxmpp.stringprepare-module.html#C_11"><a title="nbxmpp.stringprepare.C_11" class="py-name" href="#" onclick="return doclink('link-23', 'C_11', 'link-23');">C_11</a></tt> <tt class="py-op">=</tt> <tt id="link-24" class="py-name" targets="Class nbxmpp.stringprepare.LookupTableFromFunction=nbxmpp.stringprepare.LookupTableFromFunction-class.html"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-24', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c11</tt><tt class="py-op">)</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"><tt id="link-25" class="py-name" targets="Variable nbxmpp.stringprepare.C_12=nbxmpp.stringprepare-module.html#C_12"><a title="nbxmpp.stringprepare.C_12" class="py-name" href="#" onclick="return doclink('link-25', 'C_12', 'link-25');">C_12</a></tt> <tt class="py-op">=</tt> <tt id="link-26" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-26', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c12</tt><tt class="py-op">)</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"><tt id="link-27" class="py-name" targets="Variable nbxmpp.stringprepare.C_21=nbxmpp.stringprepare-module.html#C_21"><a title="nbxmpp.stringprepare.C_21" class="py-name" href="#" onclick="return doclink('link-27', 'C_21', 'link-27');">C_21</a></tt> <tt class="py-op">=</tt> <tt id="link-28" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-28', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c21</tt><tt class="py-op">)</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"><tt id="link-29" class="py-name" targets="Variable nbxmpp.stringprepare.C_22=nbxmpp.stringprepare-module.html#C_22"><a title="nbxmpp.stringprepare.C_22" class="py-name" href="#" onclick="return doclink('link-29', 'C_22', 'link-29');">C_22</a></tt> <tt class="py-op">=</tt> <tt id="link-30" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-30', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c22</tt><tt class="py-op">)</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"><tt id="link-31" class="py-name" targets="Variable nbxmpp.stringprepare.C_3=nbxmpp.stringprepare-module.html#C_3"><a title="nbxmpp.stringprepare.C_3" class="py-name" href="#" onclick="return doclink('link-31', 'C_3', 'link-31');">C_3</a></tt> <tt class="py-op">=</tt> <tt id="link-32" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-32', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c3</tt><tt class="py-op">)</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"><tt id="link-33" class="py-name" targets="Variable nbxmpp.stringprepare.C_4=nbxmpp.stringprepare-module.html#C_4"><a title="nbxmpp.stringprepare.C_4" class="py-name" href="#" onclick="return doclink('link-33', 'C_4', 'link-33');">C_4</a></tt> <tt class="py-op">=</tt> <tt id="link-34" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-34', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c4</tt><tt class="py-op">)</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"><tt id="link-35" class="py-name" targets="Variable nbxmpp.stringprepare.C_5=nbxmpp.stringprepare-module.html#C_5"><a title="nbxmpp.stringprepare.C_5" class="py-name" href="#" onclick="return doclink('link-35', 'C_5', 'link-35');">C_5</a></tt> <tt class="py-op">=</tt> <tt id="link-36" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-36', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c5</tt><tt class="py-op">)</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"><tt id="link-37" class="py-name" targets="Variable nbxmpp.stringprepare.C_6=nbxmpp.stringprepare-module.html#C_6"><a title="nbxmpp.stringprepare.C_6" class="py-name" href="#" onclick="return doclink('link-37', 'C_6', 'link-37');">C_6</a></tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-38', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c6</tt><tt class="py-op">)</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"><tt id="link-39" class="py-name" targets="Variable nbxmpp.stringprepare.C_7=nbxmpp.stringprepare-module.html#C_7"><a title="nbxmpp.stringprepare.C_7" class="py-name" href="#" onclick="return doclink('link-39', 'C_7', 'link-39');">C_7</a></tt> <tt class="py-op">=</tt> <tt id="link-40" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-40', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c7</tt><tt class="py-op">)</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"><tt id="link-41" class="py-name" targets="Variable nbxmpp.stringprepare.C_8=nbxmpp.stringprepare-module.html#C_8"><a title="nbxmpp.stringprepare.C_8" class="py-name" href="#" onclick="return doclink('link-41', 'C_8', 'link-41');">C_8</a></tt> <tt class="py-op">=</tt> <tt id="link-42" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-42', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c8</tt><tt class="py-op">)</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt id="link-43" class="py-name" targets="Variable nbxmpp.stringprepare.C_9=nbxmpp.stringprepare-module.html#C_9"><a title="nbxmpp.stringprepare.C_9" class="py-name" href="#" onclick="return doclink('link-43', 'C_9', 'link-43');">C_9</a></tt> <tt class="py-op">=</tt> <tt id="link-44" class="py-name"><a title="nbxmpp.stringprepare.LookupTableFromFunction" class="py-name" href="#" onclick="return doclink('link-44', 'LookupTableFromFunction', 'link-24');">LookupTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_c9</tt><tt class="py-op">)</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"><tt id="link-45" class="py-name" targets="Variable nbxmpp.stringprepare.B_1=nbxmpp.stringprepare-module.html#B_1"><a title="nbxmpp.stringprepare.B_1" class="py-name" href="#" onclick="return doclink('link-45', 'B_1', 'link-45');">B_1</a></tt> <tt class="py-op">=</tt> <tt id="link-46" class="py-name" targets="Class nbxmpp.stringprepare.EmptyMappingTable=nbxmpp.stringprepare.EmptyMappingTable-class.html"><a title="nbxmpp.stringprepare.EmptyMappingTable" class="py-name" href="#" onclick="return doclink('link-46', 'EmptyMappingTable', 'link-46');">EmptyMappingTable</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">in_table_b1</tt><tt class="py-op">)</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"><tt id="link-47" class="py-name" targets="Variable nbxmpp.stringprepare.B_2=nbxmpp.stringprepare-module.html#B_2"><a title="nbxmpp.stringprepare.B_2" class="py-name" href="#" onclick="return doclink('link-47', 'B_2', 'link-47');">B_2</a></tt> <tt class="py-op">=</tt> <tt id="link-48" class="py-name" targets="Class nbxmpp.stringprepare.MappingTableFromFunction=nbxmpp.stringprepare.MappingTableFromFunction-class.html"><a title="nbxmpp.stringprepare.MappingTableFromFunction" class="py-name" href="#" onclick="return doclink('link-48', 'MappingTableFromFunction', 'link-48');">MappingTableFromFunction</a></tt><tt class="py-op">(</tt><tt class="py-name">stringprep</tt><tt class="py-op">.</tt><tt class="py-name">map_table_b2</tt><tt class="py-op">)</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"><tt id="link-49" class="py-name" targets="Variable nbxmpp.stringprepare.nodeprep=nbxmpp.stringprepare-module.html#nodeprep"><a title="nbxmpp.stringprepare.nodeprep" class="py-name" href="#" onclick="return doclink('link-49', 'nodeprep', 'link-49');">nodeprep</a></tt> <tt class="py-op">=</tt> <tt id="link-50" class="py-name" targets="Class nbxmpp.stringprepare.Profile=nbxmpp.stringprepare.Profile-class.html"><a title="nbxmpp.stringprepare.Profile" class="py-name" href="#" onclick="return doclink('link-50', 'Profile', 'link-50');">Profile</a></tt><tt class="py-op">(</tt><tt class="py-name">mappings</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-51" class="py-name"><a title="nbxmpp.stringprepare.B_1" class="py-name" href="#" onclick="return doclink('link-51', 'B_1', 'link-45');">B_1</a></tt><tt class="py-op">,</tt> <tt id="link-52" class="py-name"><a title="nbxmpp.stringprepare.B_2" class="py-name" href="#" onclick="return doclink('link-52', 'B_2', 'link-47');">B_2</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt id="link-53" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.prohibiteds" class="py-name" href="#" onclick="return doclink('link-53', 'prohibiteds', 'link-6');">prohibiteds</a></tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-54" class="py-name"><a title="nbxmpp.stringprepare.C_11" class="py-name" href="#" onclick="return doclink('link-54', 'C_11', 'link-23');">C_11</a></tt><tt class="py-op">,</tt> <tt id="link-55" class="py-name"><a title="nbxmpp.stringprepare.C_12" class="py-name" href="#" onclick="return doclink('link-55', 'C_12', 'link-25');">C_12</a></tt><tt class="py-op">,</tt> <tt id="link-56" class="py-name"><a title="nbxmpp.stringprepare.C_21" class="py-name" href="#" onclick="return doclink('link-56', 'C_21', 'link-27');">C_21</a></tt><tt class="py-op">,</tt> <tt id="link-57" class="py-name"><a title="nbxmpp.stringprepare.C_22" class="py-name" href="#" onclick="return doclink('link-57', 'C_22', 'link-29');">C_22</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt id="link-58" class="py-name"><a title="nbxmpp.stringprepare.C_3" class="py-name" href="#" onclick="return doclink('link-58', 'C_3', 'link-31');">C_3</a></tt><tt class="py-op">,</tt> <tt id="link-59" class="py-name"><a title="nbxmpp.stringprepare.C_4" class="py-name" href="#" onclick="return doclink('link-59', 'C_4', 'link-33');">C_4</a></tt><tt class="py-op">,</tt> <tt id="link-60" class="py-name"><a title="nbxmpp.stringprepare.C_5" class="py-name" href="#" onclick="return doclink('link-60', 'C_5', 'link-35');">C_5</a></tt><tt class="py-op">,</tt> <tt id="link-61" class="py-name"><a title="nbxmpp.stringprepare.C_6" class="py-name" href="#" onclick="return doclink('link-61', 'C_6', 'link-37');">C_6</a></tt><tt class="py-op">,</tt> <tt id="link-62" class="py-name"><a title="nbxmpp.stringprepare.C_7" class="py-name" href="#" onclick="return doclink('link-62', 'C_7', 'link-39');">C_7</a></tt><tt class="py-op">,</tt> <tt id="link-63" class="py-name"><a title="nbxmpp.stringprepare.C_8" class="py-name" href="#" onclick="return doclink('link-63', 'C_8', 'link-41');">C_8</a></tt><tt class="py-op">,</tt> <tt id="link-64" class="py-name"><a title="nbxmpp.stringprepare.C_9" class="py-name" href="#" onclick="return doclink('link-64', 'C_9', 'link-43');">C_9</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt id="link-65" class="py-name" targets="Class nbxmpp.stringprepare.LookupTable=nbxmpp.stringprepare.LookupTable-class.html"><a title="nbxmpp.stringprepare.LookupTable" class="py-name" href="#" onclick="return doclink('link-65', 'LookupTable', 'link-65');">LookupTable</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">u'"'</tt><tt class="py-op">,</tt> <tt class="py-string">u'&amp;'</tt><tt class="py-op">,</tt> <tt class="py-string">u"'"</tt><tt class="py-op">,</tt> <tt class="py-string">u'/'</tt><tt class="py-op">,</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-string">u':'</tt><tt class="py-op">,</tt> <tt class="py-string">u'&lt;'</tt><tt class="py-op">,</tt> <tt class="py-string">u'&gt;'</tt><tt class="py-op">,</tt> <tt class="py-string">u'@'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"><tt id="link-66" class="py-name" targets="Variable nbxmpp.stringprepare.resourceprep=nbxmpp.stringprepare-module.html#resourceprep"><a title="nbxmpp.stringprepare.resourceprep" class="py-name" href="#" onclick="return doclink('link-66', 'resourceprep', 'link-66');">resourceprep</a></tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name"><a title="nbxmpp.stringprepare.Profile" class="py-name" href="#" onclick="return doclink('link-67', 'Profile', 'link-50');">Profile</a></tt><tt class="py-op">(</tt><tt class="py-name">mappings</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-68" class="py-name"><a title="nbxmpp.stringprepare.B_1" class="py-name" href="#" onclick="return doclink('link-68', 'B_1', 'link-45');">B_1</a></tt><tt class="py-op">,</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt id="link-69" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.prohibiteds" class="py-name" href="#" onclick="return doclink('link-69', 'prohibiteds', 'link-6');">prohibiteds</a></tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt id="link-70" class="py-name"><a title="nbxmpp.stringprepare.C_12" class="py-name" href="#" onclick="return doclink('link-70', 'C_12', 'link-25');">C_12</a></tt><tt class="py-op">,</tt> <tt id="link-71" class="py-name"><a title="nbxmpp.stringprepare.C_21" class="py-name" href="#" onclick="return doclink('link-71', 'C_21', 'link-27');">C_21</a></tt><tt class="py-op">,</tt> <tt id="link-72" class="py-name"><a title="nbxmpp.stringprepare.C_22" class="py-name" href="#" onclick="return doclink('link-72', 'C_22', 'link-29');">C_22</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt id="link-73" class="py-name"><a title="nbxmpp.stringprepare.C_3" class="py-name" href="#" onclick="return doclink('link-73', 'C_3', 'link-31');">C_3</a></tt><tt class="py-op">,</tt> <tt id="link-74" class="py-name"><a title="nbxmpp.stringprepare.C_4" class="py-name" href="#" onclick="return doclink('link-74', 'C_4', 'link-33');">C_4</a></tt><tt class="py-op">,</tt> <tt id="link-75" class="py-name"><a title="nbxmpp.stringprepare.C_5" class="py-name" href="#" onclick="return doclink('link-75', 'C_5', 'link-35');">C_5</a></tt><tt class="py-op">,</tt> <tt id="link-76" class="py-name"><a title="nbxmpp.stringprepare.C_6" class="py-name" href="#" onclick="return doclink('link-76', 'C_6', 'link-37');">C_6</a></tt><tt class="py-op">,</tt> <tt id="link-77" class="py-name"><a title="nbxmpp.stringprepare.C_7" class="py-name" href="#" onclick="return doclink('link-77', 'C_7', 'link-39');">C_7</a></tt><tt class="py-op">,</tt> <tt id="link-78" class="py-name"><a title="nbxmpp.stringprepare.C_8" class="py-name" href="#" onclick="return doclink('link-78', 'C_8', 'link-41');">C_8</a></tt><tt class="py-op">,</tt> <tt id="link-79" class="py-name"><a title="nbxmpp.stringprepare.C_9" class="py-name" href="#" onclick="return doclink('link-79', 'C_9', 'link-43');">C_9</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"><tt id="link-80" class="py-name"><a title="nbxmpp.stringprepare.NamePrep.nameprep
+nbxmpp.stringprepare.nameprep" class="py-name" href="#" onclick="return doclink('link-80', 'nameprep', 'link-19');">nameprep</a></tt> <tt class="py-op">=</tt> <tt id="link-81" class="py-name" targets="Class nbxmpp.stringprepare.NamePrep=nbxmpp.stringprepare.NamePrep-class.html"><a title="nbxmpp.stringprepare.NamePrep" class="py-name" href="#" onclick="return doclink('link-81', 'NamePrep', 'link-81');">NamePrep</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare.EmptyMappingTable-class.html b/doc/apidocs/nbxmpp.stringprepare.EmptyMappingTable-class.html
new file mode 100644
index 0000000..e79810e
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.EmptyMappingTable-class.html
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare.EmptyMappingTable</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.stringprepare-module.html">Module&nbsp;stringprepare</a> ::
+ Class&nbsp;EmptyMappingTable
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare.EmptyMappingTable-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class EmptyMappingTable</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#EmptyMappingTable">source&nbsp;code</a></span></p>
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Nested Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-NestedClasses"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.IMappingTable-class.html" class="summary-name">__implements__</a><br />
+ Interface for character mapping classes
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">in_table_function</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#EmptyMappingTable.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.EmptyMappingTable-class.html#map" class="summary-sig-name">map</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">c</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#EmptyMappingTable.map">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">in_table_function</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#EmptyMappingTable.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="map"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">map</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">c</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#EmptyMappingTable.map">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:07 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare.ILookupTable-class.html b/doc/apidocs/nbxmpp.stringprepare.ILookupTable-class.html
new file mode 100644
index 0000000..e737efa
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.ILookupTable-class.html
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare.ILookupTable</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.stringprepare-module.html">Module&nbsp;stringprepare</a> ::
+ Class&nbsp;ILookupTable
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare.ILookupTable-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class ILookupTable</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#ILookupTable">source&nbsp;code</a></span></p>
+Interface for character lookup classes
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.ILookupTable-class.html#lookup" class="summary-sig-name">lookup</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">c</span>)</span><br />
+ Return whether character is in this table</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#ILookupTable.lookup">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="lookup"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">lookup</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">c</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#ILookupTable.lookup">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return whether character is in this table
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare.IMappingTable-class.html b/doc/apidocs/nbxmpp.stringprepare.IMappingTable-class.html
new file mode 100644
index 0000000..004d5f4
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.IMappingTable-class.html
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare.IMappingTable</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.stringprepare-module.html">Module&nbsp;stringprepare</a> ::
+ Class&nbsp;IMappingTable
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare.IMappingTable-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class IMappingTable</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#IMappingTable">source&nbsp;code</a></span></p>
+Interface for character mapping classes
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.IMappingTable-class.html#map" class="summary-sig-name">map</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">c</span>)</span><br />
+ Return mapping for character</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#IMappingTable.map">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="map"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">map</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">c</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#IMappingTable.map">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Return mapping for character
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare.LookupTable-class.html b/doc/apidocs/nbxmpp.stringprepare.LookupTable-class.html
new file mode 100644
index 0000000..7191a19
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.LookupTable-class.html
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare.LookupTable</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.stringprepare-module.html">Module&nbsp;stringprepare</a> ::
+ Class&nbsp;LookupTable
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare.LookupTable-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class LookupTable</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTable">source&nbsp;code</a></span></p>
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Nested Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-NestedClasses"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.ILookupTable-class.html" class="summary-name">__implements__</a><br />
+ Interface for character lookup classes
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.LookupTable-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">table</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTable.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.LookupTable-class.html#lookup" class="summary-sig-name">lookup</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">c</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTable.lookup">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">table</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTable.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="lookup"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">lookup</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">c</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTable.lookup">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare.LookupTableFromFunction-class.html b/doc/apidocs/nbxmpp.stringprepare.LookupTableFromFunction-class.html
new file mode 100644
index 0000000..686f071
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.LookupTableFromFunction-class.html
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare.LookupTableFromFunction</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.stringprepare-module.html">Module&nbsp;stringprepare</a> ::
+ Class&nbsp;LookupTableFromFunction
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare.LookupTableFromFunction-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class LookupTableFromFunction</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTableFromFunction">source&nbsp;code</a></span></p>
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Nested Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-NestedClasses"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.ILookupTable-class.html" class="summary-name">__implements__</a><br />
+ Interface for character lookup classes
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">in_table_function</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTableFromFunction.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">in_table_function</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#LookupTableFromFunction.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare.MappingTableFromFunction-class.html b/doc/apidocs/nbxmpp.stringprepare.MappingTableFromFunction-class.html
new file mode 100644
index 0000000..199231e
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.MappingTableFromFunction-class.html
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare.MappingTableFromFunction</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.stringprepare-module.html">Module&nbsp;stringprepare</a> ::
+ Class&nbsp;MappingTableFromFunction
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare.MappingTableFromFunction-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class MappingTableFromFunction</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#MappingTableFromFunction">source&nbsp;code</a></span></p>
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Nested Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-NestedClasses"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.stringprepare.IMappingTable-class.html" class="summary-name">__implements__</a><br />
+ Interface for character mapping classes
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">map_table_function</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#MappingTableFromFunction.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">map_table_function</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#MappingTableFromFunction.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.stringprepare.NamePrep-class.html b/doc/apidocs/nbxmpp.stringprepare.NamePrep-class.html
new file mode 100644
index 0000000..3c65e31
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.NamePrep-class.html
Binary files differ
diff --git a/doc/apidocs/nbxmpp.stringprepare.Profile-class.html b/doc/apidocs/nbxmpp.stringprepare.Profile-class.html
new file mode 100644
index 0000000..f0feb09
--- /dev/null
+++ b/doc/apidocs/nbxmpp.stringprepare.Profile-class.html
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.stringprepare.Profile</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.stringprepare-module.html">Module&nbsp;stringprepare</a> ::
+ Class&nbsp;Profile
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.stringprepare.Profile-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Profile</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile">source&nbsp;code</a></span></p>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.Profile-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">mappings</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">normalize</span>=<span class="summary-sig-default">True</span>,
+ <span class="summary-sig-arg">prohibiteds</span>=<span class="summary-sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="summary-sig-arg">check_unassigneds</span>=<span class="summary-sig-default">True</span>,
+ <span class="summary-sig-arg">check_bidi</span>=<span class="summary-sig-default">True</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.Profile-class.html#prepare" class="summary-sig-name">prepare</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">string</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.prepare">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.Profile-class.html#map" class="summary-sig-name">map</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">string</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.map">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.Profile-class.html#check_prohibiteds" class="summary-sig-name">check_prohibiteds</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">string</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.check_prohibiteds">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.Profile-class.html#check_unassigneds" class="summary-sig-name">check_unassigneds</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">string</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.check_unassigneds">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.stringprepare.Profile-class.html#check_bidirectionals" class="summary-sig-name">check_bidirectionals</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">string</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.check_bidirectionals">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">mappings</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">normalize</span>=<span class="sig-default">True</span>,
+ <span class="sig-arg">prohibiteds</span>=<span class="sig-default"><code class="variable-group">[</code><code class="variable-group">]</code></span>,
+ <span class="sig-arg">check_unassigneds</span>=<span class="sig-default">True</span>,
+ <span class="sig-arg">check_bidi</span>=<span class="sig-default">True</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="prepare"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">prepare</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">string</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.prepare">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="map"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">map</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">string</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.map">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="check_prohibiteds"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">check_prohibiteds</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">string</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.check_prohibiteds">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="check_unassigneds"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">check_unassigneds</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">string</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.check_unassigneds">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="check_bidirectionals"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">check_bidirectionals</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">string</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.stringprepare-pysrc.html#Profile.check_bidirectionals">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.tls_nb-module.html b/doc/apidocs/nbxmpp.tls_nb-module.html
new file mode 100644
index 0000000..2abd962
--- /dev/null
+++ b/doc/apidocs/nbxmpp.tls_nb-module.html
@@ -0,0 +1,412 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.tls_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;tls_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.tls_nb-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module tls_nb</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html">source&nbsp;code</a></span></p>
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html" class="summary-name">SSLWrapper</a><br />
+ Abstract SSLWrapper base class
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html" class="summary-name">PyOpenSSLWrapper</a><br />
+ Wrapper class for PyOpenSSL's recv() and send() methods
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html" class="summary-name">StdlibSSLWrapper</a><br />
+ Wrapper class for Python socket.ssl read() and write() methods
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb.NonBlockingTLS-class.html" class="summary-name">NonBlockingTLS</a><br />
+ TLS connection used to encrypts already estabilished tcp connection
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb-module.html#gattr" class="summary-sig-name">gattr</a>(<span class="summary-sig-arg">obj</span>,
+ <span class="summary-sig-arg">attr</span>,
+ <span class="summary-sig-arg">default</span>=<span class="summary-sig-default">None</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#gattr">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.tls_nb')">logging.getLogger('nbxmpp.tls_nb')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb-module.html#PYOPENSSL" class="summary-name">PYOPENSSL</a> = <code title="'PYOPENSSL'"><code class="variable-quote">'</code><code class="variable-string">PYOPENSSL</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb-module.html#PYSTDLIB" class="summary-name">PYSTDLIB</a> = <code title="'PYSTDLIB'"><code class="variable-quote">'</code><code class="variable-string">PYSTDLIB</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb-module.html#USE_PYOPENSSL" class="summary-name">USE_PYOPENSSL</a> = <code title="True">True</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <span title="socket">socket</span>,
+ <a href="nbxmpp.plugin.PlugIn-class.html" title="nbxmpp.plugin.PlugIn">PlugIn</a>,
+ <span title="sys">sys</span>,
+ <span title="os">os</span>,
+ <span title="time">time</span>,
+ <span title="traceback">traceback</span>,
+ <span title="logging">logging</span>,
+ <span title="OpenSSL">OpenSSL</span>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="gattr"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">gattr</span>(<span class="sig-arg">obj</span>,
+ <span class="sig-arg">attr</span>,
+ <span class="sig-arg">default</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#gattr">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.tls_nb')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PYOPENSSL"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PYOPENSSL</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">PYOPENSSL</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PYSTDLIB"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PYSTDLIB</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">PYSTDLIB</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="USE_PYOPENSSL"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">USE_PYOPENSSL</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+True
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.tls_nb-pysrc.html b/doc/apidocs/nbxmpp.tls_nb-pysrc.html
new file mode 100644
index 0000000..62f367b
--- /dev/null
+++ b/doc/apidocs/nbxmpp.tls_nb-pysrc.html
@@ -0,0 +1,1193 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.tls_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;tls_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.tls_nb-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.tls_nb-module.html">Module nbxmpp.tls_nb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## tls_nb.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## based on transports_nb.py</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## modified by Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## modified by Tomas Karasek &lt;tom.to.the.k@gmail.com&gt;</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugin()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugin,Method nbxmpp.auth_nb.NonBlockingNonSASL.plugin()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin,Method nbxmpp.auth_nb.SASL.plugin()=nbxmpp.auth_nb.SASL-class.html#plugin,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugin()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin,Module nbxmpp.plugin=nbxmpp.plugin-module.html,Method nbxmpp.roster_nb.NonBlockingRoster.plugin()=nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin,Method nbxmpp.tls_nb.NonBlockingTLS.plugin()=nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin,Method nbxmpp.transports_nb.NonBlockingTransport.plugin()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin"><a title="nbxmpp.auth_nb.NonBlockingBind.plugin
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin
+nbxmpp.auth_nb.SASL.plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin
+nbxmpp.plugin
+nbxmpp.roster_nb.NonBlockingRoster.plugin
+nbxmpp.tls_nb.NonBlockingTLS.plugin
+nbxmpp.transports_nb.NonBlockingTransport.plugin" class="py-name" href="#" onclick="return doclink('link-0', 'plugin', 'link-0');">plugin</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn,Method nbxmpp.dispatcher_nb.Dispatcher.PlugIn()=nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn,Class nbxmpp.plugin.PlugIn=nbxmpp.plugin.PlugIn-class.html,Method nbxmpp.plugin.PlugIn.PlugIn()=nbxmpp.plugin.PlugIn-class.html#PlugIn"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-1', 'PlugIn', 'link-1');">PlugIn</a></tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">traceback</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt id="link-2" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-2', 'log', 'link-2');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.tls_nb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable nbxmpp.tls_nb.USE_PYOPENSSL=nbxmpp.tls_nb-module.html#USE_PYOPENSSL"><a title="nbxmpp.tls_nb.USE_PYOPENSSL" class="py-name" href="#" onclick="return doclink('link-3', 'USE_PYOPENSSL', 'link-3');">USE_PYOPENSSL</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable nbxmpp.tls_nb.PYOPENSSL=nbxmpp.tls_nb-module.html#PYOPENSSL"><a title="nbxmpp.tls_nb.PYOPENSSL" class="py-name" href="#" onclick="return doclink('link-4', 'PYOPENSSL', 'link-4');">PYOPENSSL</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'PYOPENSSL'</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable nbxmpp.tls_nb.PYSTDLIB=nbxmpp.tls_nb-module.html#PYSTDLIB"><a title="nbxmpp.tls_nb.PYSTDLIB" class="py-name" href="#" onclick="return doclink('link-5', 'PYSTDLIB', 'link-5');">PYSTDLIB</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'PYSTDLIB'</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> <tt class="py-comment">#raise ImportError("Manually disabled PyOpenSSL")</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> <tt id="link-6" class="py-name"><a title="nbxmpp.tls_nb.USE_PYOPENSSL" class="py-name" href="#" onclick="return doclink('link-6', 'USE_PYOPENSSL', 'link-3');">USE_PYOPENSSL</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> <tt id="link-7" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-7', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"PyOpenSSL loaded"</tt><tt class="py-op">)</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> <tt id="link-8" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-8', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Import of PyOpenSSL failed:"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: Remove these prints before release, replace with a warning dialog.</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"="</tt> <tt class="py-op">*</tt> <tt class="py-number">79</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"PyOpenSSL not found, falling back to Python builtin SSL objects (insecure)."</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"="</tt> <tt class="py-op">*</tt> <tt class="py-number">79</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> </tt>
+<a name="gattr"></a><div id="gattr-def"><a name="L49"></a><tt class="py-lineno"> 49</tt> <a class="py-toggle" href="#" id="gattr-toggle" onclick="return toggle('gattr');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb-module.html#gattr">gattr</a><tt class="py-op">(</tt><tt class="py-param">obj</tt><tt class="py-op">,</tt> <tt class="py-param">attr</tt><tt class="py-op">,</tt> <tt class="py-param">default</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="gattr-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="gattr-expanded"><a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">,</tt> <tt class="py-name">attr</tt><tt class="py-op">)</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">default</tt> </tt>
+</div><a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> </tt>
+<a name="SSLWrapper"></a><div id="SSLWrapper-def"><a name="L56"></a><tt class="py-lineno"> 56</tt> <a class="py-toggle" href="#" id="SSLWrapper-toggle" onclick="return toggle('SSLWrapper');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a><tt class="py-op">:</tt> </tt>
+</div><div id="SSLWrapper-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SSLWrapper-expanded"><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> Abstract SSLWrapper base class</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> </tt>
+<a name="SSLWrapper.Error"></a><div id="SSLWrapper.Error-def"><a name="L61"></a><tt class="py-lineno"> 61</tt> <a class="py-toggle" href="#" id="SSLWrapper.Error-toggle" onclick="return toggle('SSLWrapper.Error');">-</a><tt class="py-line"> <tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html">Error</a><tt class="py-op">(</tt><tt class="py-base-class">IOError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SSLWrapper.Error-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SSLWrapper.Error-expanded"><a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> Generic SSL Error Wrapper</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> </tt>
+<a name="SSLWrapper.Error.__init__"></a><div id="SSLWrapper.Error.__init__-def"><a name="L66"></a><tt class="py-lineno"> 66</tt> <a class="py-toggle" href="#" id="SSLWrapper.Error.__init__-toggle" onclick="return toggle('SSLWrapper.Error.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">sock</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">exc</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">errno</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">strerror</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-param">peer</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SSLWrapper.Error.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="SSLWrapper.Error.__init__-expanded"><a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt class="py-name">IOError</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">errno</tt> <tt class="py-op">=</tt> <tt class="py-name">errno</tt> <tt class="py-keyword">or</tt> <tt id="link-9" class="py-name" targets="Function nbxmpp.tls_nb.gattr()=nbxmpp.tls_nb-module.html#gattr"><a title="nbxmpp.tls_nb.gattr" class="py-name" href="#" onclick="return doclink('link-9', 'gattr', 'link-9');">gattr</a></tt><tt class="py-op">(</tt><tt class="py-name">exc</tt><tt class="py-op">,</tt> <tt class="py-string">'errno'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">exc</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">strerror</tt> <tt class="py-op">=</tt> <tt class="py-name">strerror</tt> <tt class="py-keyword">or</tt> <tt id="link-10" class="py-name"><a title="nbxmpp.tls_nb.gattr" class="py-name" href="#" onclick="return doclink('link-10', 'gattr', 'link-9');">gattr</a></tt><tt class="py-op">(</tt><tt class="py-name">exc</tt><tt class="py-op">,</tt> <tt class="py-string">'strerror'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt id="link-11" class="py-name"><a title="nbxmpp.tls_nb.gattr" class="py-name" href="#" onclick="return doclink('link-11', 'gattr', 'link-9');">gattr</a></tt><tt class="py-op">(</tt><tt class="py-name">exc</tt><tt class="py-op">,</tt> <tt class="py-string">'args'</tt><tt class="py-op">)</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">strerror</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">strerror</tt> <tt class="py-op">=</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">strerror</tt><tt class="py-op">)</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-op">=</tt> <tt class="py-name">sock</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc</tt> <tt class="py-op">=</tt> <tt class="py-name">exc</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peer</tt> <tt class="py-op">=</tt> <tt class="py-name">peer</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_name</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_args</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_str</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_repr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_name</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_args</tt> <tt class="py-op">=</tt> <tt id="link-12" class="py-name"><a title="nbxmpp.tls_nb.gattr" class="py-name" href="#" onclick="return doclink('link-12', 'gattr', 'link-9');">gattr</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc</tt><tt class="py-op">,</tt> <tt class="py-string">'args'</tt><tt class="py-op">)</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_str</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc</tt><tt class="py-op">)</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_repr</tt> <tt class="py-op">=</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">errno</tt><tt class="py-op">:</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">exc</tt><tt class="py-op">,</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">SysCallError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">errno</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-name">strerror</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_args</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> <tt class="py-keyword">pass</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-13', '__init__', 'link-13');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">errno</tt><tt class="py-op">,</tt> <tt class="py-name">strerror</tt><tt class="py-op">)</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peer</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">sock</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">ppeer</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">getpeername</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">ppeer</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">2</tt> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">ppeer</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt> \ </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">ppeer</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peer</tt> <tt class="py-op">=</tt> <tt class="py-name">ppeer</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> </tt>
+<a name="SSLWrapper.Error.__str__"></a><div id="SSLWrapper.Error.__str__-def"><a name="L107"></a><tt class="py-lineno">107</tt> <a class="py-toggle" href="#" id="SSLWrapper.Error.__str__-toggle" onclick="return toggle('SSLWrapper.Error.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SSLWrapper.Error.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="SSLWrapper.Error.__str__-expanded"><a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peer</tt><tt class="py-op">:</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">" for %s:%d"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peer</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errno</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">": [Errno: %d]"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errno</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">strerror</tt><tt class="py-op">:</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">" (%s)"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">strerror</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_name</tt><tt class="py-op">:</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">", Caused by %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_name</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_str</tt><tt class="py-op">:</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">strerror</tt><tt class="py-op">:</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">"(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_str</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">"(%s)"</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">exc_args</tt><tt class="py-op">)</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt>
+</div></div><a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> </tt>
+<a name="SSLWrapper.__init__"></a><div id="SSLWrapper.__init__-def"><a name="L123"></a><tt class="py-lineno">123</tt> <a class="py-toggle" href="#" id="SSLWrapper.__init__-toggle" onclick="return toggle('SSLWrapper.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.SSLWrapper-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">sslobj</tt><tt class="py-op">,</tt> <tt class="py-param">sock</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SSLWrapper.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SSLWrapper.__init__-expanded"><a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt> <tt class="py-op">=</tt> <tt class="py-name">sslobj</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-op">=</tt> <tt class="py-name">sock</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt id="link-14" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-14', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"%s.__init__ called with %s"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">,</tt> <tt class="py-name">sslobj</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> </tt>
+<a name="SSLWrapper.recv"></a><div id="SSLWrapper.recv-def"><a name="L128"></a><tt class="py-lineno">128</tt> <a class="py-toggle" href="#" id="SSLWrapper.recv-toggle" onclick="return toggle('SSLWrapper.recv');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.SSLWrapper-class.html#recv">recv</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SSLWrapper.recv-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SSLWrapper.recv-expanded"><a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> Receive wrapper for SSL object</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> We can return None out of this function to signal that no data is</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"><tt class="py-docstring"> available right now. Better than an exception, which differs</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"><tt class="py-docstring"> depending on which SSL lib we're using. Unfortunately returning ''</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"><tt class="py-docstring"> can indicate that the socket has been closed, so to be sure, we avoid</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"><tt class="py-docstring"> this by returning None.</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt> </tt>
+</div><a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> </tt>
+<a name="SSLWrapper.send"></a><div id="SSLWrapper.send-def"><a name="L140"></a><tt class="py-lineno">140</tt> <a class="py-toggle" href="#" id="SSLWrapper.send-toggle" onclick="return toggle('SSLWrapper.send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.SSLWrapper-class.html#send">send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SSLWrapper.send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SSLWrapper.send-expanded"><a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"><tt class="py-docstring"> Send wrapper for SSL object</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt> </tt>
+</div></div><a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> </tt>
+<a name="PyOpenSSLWrapper"></a><div id="PyOpenSSLWrapper-def"><a name="L147"></a><tt class="py-lineno">147</tt> <a class="py-toggle" href="#" id="PyOpenSSLWrapper-toggle" onclick="return toggle('PyOpenSSLWrapper');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html">PyOpenSSLWrapper</a><tt class="py-op">(</tt><tt class="py-base-class">SSLWrapper</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PyOpenSSLWrapper-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="PyOpenSSLWrapper-expanded"><a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"><tt class="py-docstring"> Wrapper class for PyOpenSSL's recv() and send() methods</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> </tt>
+<a name="PyOpenSSLWrapper.__init__"></a><div id="PyOpenSSLWrapper.__init__-def"><a name="L152"></a><tt class="py-lineno">152</tt> <a class="py-toggle" href="#" id="PyOpenSSLWrapper.__init__-toggle" onclick="return toggle('PyOpenSSLWrapper.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PyOpenSSLWrapper.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="PyOpenSSLWrapper.__init__-expanded"><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt id="link-15" class="py-name" targets="Class nbxmpp.tls_nb.SSLWrapper=nbxmpp.tls_nb.SSLWrapper-class.html"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-15', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-16', '__init__', 'link-13');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> </tt>
+<a name="PyOpenSSLWrapper.is_numtoolarge"></a><div id="PyOpenSSLWrapper.is_numtoolarge-def"><a name="L156"></a><tt class="py-lineno">156</tt> <a class="py-toggle" href="#" id="PyOpenSSLWrapper.is_numtoolarge-toggle" onclick="return toggle('PyOpenSSLWrapper.is_numtoolarge');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#is_numtoolarge">is_numtoolarge</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">e</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PyOpenSSLWrapper.is_numtoolarge-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="PyOpenSSLWrapper.is_numtoolarge-expanded"><a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-docstring">''' Magic methods don't need documentation '''</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'asn1 encoding routines'</tt><tt class="py-op">,</tt> <tt class="py-string">'a2d_ASN1_OBJECT'</tt><tt class="py-op">,</tt> <tt class="py-string">'first num too large'</tt><tt class="py-op">)</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">list</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">list</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">2</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">t</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> </tt>
+<a name="PyOpenSSLWrapper.recv"></a><div id="PyOpenSSLWrapper.recv-def"><a name="L163"></a><tt class="py-lineno">163</tt> <a class="py-toggle" href="#" id="PyOpenSSLWrapper.recv-toggle" onclick="return toggle('PyOpenSSLWrapper.recv');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#recv">recv</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">bufsize</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PyOpenSSLWrapper.recv-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="PyOpenSSLWrapper.recv-expanded"><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">flags</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method nbxmpp.tls_nb.PyOpenSSLWrapper.recv()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#recv,Method nbxmpp.tls_nb.SSLWrapper.recv()=nbxmpp.tls_nb.SSLWrapper-class.html#recv,Method nbxmpp.tls_nb.StdlibSSLWrapper.recv()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#recv"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper.recv
+nbxmpp.tls_nb.SSLWrapper.recv
+nbxmpp.tls_nb.StdlibSSLWrapper.recv" class="py-name" href="#" onclick="return doclink('link-17', 'recv', 'link-17');">recv</a></tt><tt class="py-op">(</tt><tt class="py-name">bufsize</tt><tt class="py-op">)</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper.recv
+nbxmpp.tls_nb.SSLWrapper.recv
+nbxmpp.tls_nb.StdlibSSLWrapper.recv" class="py-name" href="#" onclick="return doclink('link-18', 'recv', 'link-17');">recv</a></tt><tt class="py-op">(</tt><tt class="py-name">bufsize</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">WantReadError</tt><tt class="py-op">,</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">WantWriteError</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt id="link-19" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-19', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Recv: Want-error: "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">SysCallError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt id="link-20" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-20', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Recv: Got OpenSSL.SSL.SysCallError: "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-21" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-21', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Class nbxmpp.protocol.Error=nbxmpp.protocol.Error-class.html,Class nbxmpp.tls_nb.SSLWrapper.Error=nbxmpp.tls_nb.SSLWrapper.Error-class.html"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-22', 'Error', 'link-22');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">ZeroReturnError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-comment"># end-of-connection raises ZeroReturnError instead of having the</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-comment"># connection's .recv() method return a zero-sized result.</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-23" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-23', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-24', 'Error', 'link-22');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-25', 'Error', 'link-22');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method nbxmpp.tls_nb.PyOpenSSLWrapper.is_numtoolarge()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#is_numtoolarge"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper.is_numtoolarge" class="py-name" href="#" onclick="return doclink('link-26', 'is_numtoolarge', 'link-26');">is_numtoolarge</a></tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-comment"># warn, but ignore this exception</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt id="link-27" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-27', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">"Recv: OpenSSL: asn1enc: first num too large (ignored)"</tt><tt class="py-op">)</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt id="link-28" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-28', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Recv: Caught OpenSSL.SSL.Error:"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-29" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-29', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-30', 'Error', 'link-22');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">retval</tt> </tt>
+</div><a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> </tt>
+<a name="PyOpenSSLWrapper.send"></a><div id="PyOpenSSLWrapper.send-def"><a name="L189"></a><tt class="py-lineno">189</tt> <a class="py-toggle" href="#" id="PyOpenSSLWrapper.send-toggle" onclick="return toggle('PyOpenSSLWrapper.send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send">send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="PyOpenSSLWrapper.send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="PyOpenSSLWrapper.send-expanded"><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">flags</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-31', 'send', 'link-31');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-32', 'send', 'link-31');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">WantReadError</tt><tt class="py-op">,</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">WantWriteError</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-comment">#log.debug("Send: " + repr(e))</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-number">0.1</tt><tt class="py-op">)</tt> <tt class="py-comment"># prevent 100% CPU usage</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">SysCallError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-33', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Send: Got OpenSSL.SSL.SysCallError: "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-34" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-34', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-35', 'Error', 'link-22');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-36', 'Error', 'link-22');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper.is_numtoolarge" class="py-name" href="#" onclick="return doclink('link-37', 'is_numtoolarge', 'link-26');">is_numtoolarge</a></tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-comment"># warn, but ignore this exception</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt id="link-38" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-38', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">"Send: OpenSSL: asn1enc: first num too large (ignored)"</tt><tt class="py-op">)</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt id="link-39" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-39', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Send: Caught OpenSSL.SSL.Error:"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-40" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-40', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-41', 'Error', 'link-22');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+</div></div><a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> </tt>
+<a name="StdlibSSLWrapper"></a><div id="StdlibSSLWrapper-def"><a name="L212"></a><tt class="py-lineno">212</tt> <a class="py-toggle" href="#" id="StdlibSSLWrapper-toggle" onclick="return toggle('StdlibSSLWrapper');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html">StdlibSSLWrapper</a><tt class="py-op">(</tt><tt class="py-base-class">SSLWrapper</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="StdlibSSLWrapper-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="StdlibSSLWrapper-expanded"><a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"><tt class="py-docstring"> Wrapper class for Python socket.ssl read() and write() methods</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> </tt>
+<a name="StdlibSSLWrapper.__init__"></a><div id="StdlibSSLWrapper.__init__-def"><a name="L217"></a><tt class="py-lineno">217</tt> <a class="py-toggle" href="#" id="StdlibSSLWrapper.__init__-toggle" onclick="return toggle('StdlibSSLWrapper.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="StdlibSSLWrapper.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="StdlibSSLWrapper.__init__-expanded"><a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt> <tt class="py-op">=</tt> <tt id="link-42" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-42', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">parent</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-43', '__init__', 'link-13');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> </tt>
+<a name="StdlibSSLWrapper.recv"></a><div id="StdlibSSLWrapper.recv-def"><a name="L221"></a><tt class="py-lineno">221</tt> <a class="py-toggle" href="#" id="StdlibSSLWrapper.recv-toggle" onclick="return toggle('StdlibSSLWrapper.recv');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#recv">recv</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">bufsize</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="StdlibSSLWrapper.recv-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="StdlibSSLWrapper.recv-expanded"><a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-comment"># we simply ignore flags since ssl object doesn't support it</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-name">bufsize</tt><tt class="py-op">)</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">sslerror</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt id="link-44" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-44', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Recv: Caught socket.sslerror: "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SSL_ERROR_WANT_READ</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SSL_ERROR_WANT_WRITE</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-45" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-45', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-46', 'Error', 'link-22');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> </tt>
+<a name="StdlibSSLWrapper.send"></a><div id="StdlibSSLWrapper.send-def"><a name="L231"></a><tt class="py-lineno">231</tt> <a class="py-toggle" href="#" id="StdlibSSLWrapper.send-toggle" onclick="return toggle('StdlibSSLWrapper.send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send">send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">,</tt> <tt class="py-param">flags</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="StdlibSSLWrapper.send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="StdlibSSLWrapper.send-expanded"><a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-comment"># we simply ignore flags since ssl object doesn't support it</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">sslerror</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt id="link-47" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-47', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Send: Caught socket.sslerror:"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SSL_ERROR_WANT_READ</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SSL_ERROR_WANT_WRITE</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-48" class="py-name"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-48', 'SSLWrapper', 'link-15');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-49" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-49', 'Error', 'link-22');">Error</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sslobj</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+</div></div><a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS"></a><div id="NonBlockingTLS-def"><a name="L242"></a><tt class="py-lineno">242</tt> <a class="py-toggle" href="#" id="NonBlockingTLS-toggle" onclick="return toggle('NonBlockingTLS');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html">NonBlockingTLS</a><tt class="py-op">(</tt><tt class="py-base-class">PlugIn</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingTLS-expanded"><a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"><tt class="py-docstring"> TLS connection used to encrypts already estabilished tcp connection</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"><tt class="py-docstring"> Can be plugged into NonBlockingTCP and will make use of StdlibSSLWrapper or</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"><tt class="py-docstring"> PyOpenSSLWrapper.</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS.__init__"></a><div id="NonBlockingTLS.__init__-def"><a name="L250"></a><tt class="py-lineno">250</tt> <a class="py-toggle" href="#" id="NonBlockingTLS.__init__-toggle" onclick="return toggle('NonBlockingTLS.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cacerts</tt><tt class="py-op">,</tt> <tt class="py-param">mycerts</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS.__init__-expanded"><a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"><tt class="py-docstring"> :param cacerts: path to pem file with certificates of known XMPP servers</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"><tt class="py-docstring"> :param mycerts: path to pem file with certificates of user trusted servers</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt id="link-50" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-50', 'PlugIn', 'link-1');">PlugIn</a></tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-51', '__init__', 'link-13');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cacerts</tt> <tt class="py-op">=</tt> <tt class="py-name">cacerts</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mycerts</tt> <tt class="py-op">=</tt> <tt class="py-name">mycerts</tt> </tt>
+</div><a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-comment"># from ssl.h (partial extract)</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt id="link-52" class="py-name" targets="Variable nbxmpp.tls_nb.NonBlockingTLS.ssl_h_bits=nbxmpp.tls_nb.NonBlockingTLS-class.html#ssl_h_bits"><a title="nbxmpp.tls_nb.NonBlockingTLS.ssl_h_bits" class="py-name" href="#" onclick="return doclink('link-52', 'ssl_h_bits', 'link-52');">ssl_h_bits</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt class="py-string">"SSL_ST_CONNECT"</tt><tt class="py-op">:</tt> <tt class="py-number">0x1000</tt><tt class="py-op">,</tt> <tt class="py-string">"SSL_ST_ACCEPT"</tt><tt class="py-op">:</tt> <tt class="py-number">0x2000</tt><tt class="py-op">,</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-string">"SSL_CB_LOOP"</tt><tt class="py-op">:</tt> <tt class="py-number">0x01</tt><tt class="py-op">,</tt> <tt class="py-string">"SSL_CB_EXIT"</tt><tt class="py-op">:</tt> <tt class="py-number">0x02</tt><tt class="py-op">,</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-string">"SSL_CB_READ"</tt><tt class="py-op">:</tt> <tt class="py-number">0x04</tt><tt class="py-op">,</tt> <tt class="py-string">"SSL_CB_WRITE"</tt><tt class="py-op">:</tt> <tt class="py-number">0x08</tt><tt class="py-op">,</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-string">"SSL_CB_ALERT"</tt><tt class="py-op">:</tt> <tt class="py-number">0x4000</tt><tt class="py-op">,</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-string">"SSL_CB_HANDSHAKE_START"</tt><tt class="py-op">:</tt> <tt class="py-number">0x10</tt><tt class="py-op">,</tt> <tt class="py-string">"SSL_CB_HANDSHAKE_DONE"</tt><tt class="py-op">:</tt> <tt class="py-number">0x20</tt><tt class="py-op">}</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS.plugin"></a><div id="NonBlockingTLS.plugin-def"><a name="L266"></a><tt class="py-lineno">266</tt> <a class="py-toggle" href="#" id="NonBlockingTLS.plugin-toggle" onclick="return toggle('NonBlockingTLS.plugin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin">plugin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS.plugin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS.plugin-expanded"><a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"><tt class="py-docstring"> Use to PlugIn TLS into transport and start establishing immediately.</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"><tt class="py-docstring"> Returns True if TLS/SSL was established correctly, otherwise False</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt id="link-53" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-53', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Starting TLS estabilishing'</tt><tt class="py-op">)</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-name">res</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Method nbxmpp.tls_nb.NonBlockingTLS._startSSL()=nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL"><a title="nbxmpp.tls_nb.NonBlockingTLS._startSSL" class="py-name" href="#" onclick="return doclink('link-54', '_startSSL', 'link-54');">_startSSL</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt id="link-55" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-55', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"PlugIn: while trying _startSSL():"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">res</tt> </tt>
+</div><a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._dumpX509"></a><div id="NonBlockingTLS._dumpX509-def"><a name="L279"></a><tt class="py-lineno">279</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._dumpX509-toggle" onclick="return toggle('NonBlockingTLS._dumpX509');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509">_dumpX509</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cert</tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._dumpX509-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._dumpX509-expanded"><a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"Digest (SHA-1):"</tt><tt class="py-op">,</tt> <tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-string">"sha1"</tt><tt class="py-op">)</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"Digest (MD5):"</tt><tt class="py-op">,</tt> <tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-string">"md5"</tt><tt class="py-op">)</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"Serial #:"</tt><tt class="py-op">,</tt> <tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">get_serial_number</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"Version:"</tt><tt class="py-op">,</tt> <tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">get_version</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"Expired:"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"Yes"</tt> <tt class="py-keyword">if</tt> <tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">has_expired</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-string">"No"</tt><tt class="py-op">)</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"Subject:"</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Method nbxmpp.tls_nb.NonBlockingTLS._dumpX509Name()=nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509Name"><a title="nbxmpp.tls_nb.NonBlockingTLS._dumpX509Name" class="py-name" href="#" onclick="return doclink('link-56', '_dumpX509Name', 'link-56');">_dumpX509Name</a></tt><tt class="py-op">(</tt><tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">get_subject</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"Issuer:"</tt> </tt>
+<a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="nbxmpp.tls_nb.NonBlockingTLS._dumpX509Name" class="py-name" href="#" onclick="return doclink('link-57', '_dumpX509Name', 'link-56');">_dumpX509Name</a></tt><tt class="py-op">(</tt><tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">get_issuer</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Method nbxmpp.tls_nb.NonBlockingTLS._dumpPKey()=nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpPKey"><a title="nbxmpp.tls_nb.NonBlockingTLS._dumpPKey" class="py-name" href="#" onclick="return doclink('link-58', '_dumpPKey', 'link-58');">_dumpPKey</a></tt><tt class="py-op">(</tt><tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">get_pubkey</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._dumpX509Name"></a><div id="NonBlockingTLS._dumpX509Name-def"><a name="L291"></a><tt class="py-lineno">291</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._dumpX509Name-toggle" onclick="return toggle('NonBlockingTLS._dumpX509Name');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509Name">_dumpX509Name</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._dumpX509Name-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._dumpX509Name-expanded"><a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"X509Name:"</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-59" class="py-name" targets="Variable nbxmpp.name=nbxmpp-module.html#name,Variable nbxmpp.protocol.name=nbxmpp.protocol-module.html#name"><a title="nbxmpp.name
+nbxmpp.protocol.name" class="py-name" href="#" onclick="return doclink('link-59', 'name', 'link-59');">name</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._dumpPKey"></a><div id="NonBlockingTLS._dumpPKey-def"><a name="L294"></a><tt class="py-lineno">294</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._dumpPKey-toggle" onclick="return toggle('NonBlockingTLS._dumpPKey');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpPKey">_dumpPKey</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkey</tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._dumpPKey-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._dumpPKey-expanded"><a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-name">typedict</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt class="py-name">TYPE_RSA</tt><tt class="py-op">:</tt> <tt class="py-string">"RSA"</tt><tt class="py-op">,</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt class="py-name">TYPE_DSA</tt><tt class="py-op">:</tt> <tt class="py-string">"DSA"</tt><tt class="py-op">}</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"PKey bits:"</tt><tt class="py-op">,</tt> <tt class="py-name">pkey</tt><tt class="py-op">.</tt><tt class="py-name">bits</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">stream</tt><tt class="py-op">,</tt> <tt class="py-string">"PKey type: %s (%d)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">typedict</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method nbxmpp.bosh.KeyStack.get()=nbxmpp.bosh.KeyStack-class.html#get"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-60', 'get', 'link-60');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">pkey</tt><tt class="py-op">.</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-string">"Unknown"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">pkey</tt><tt class="py-op">.</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._startSSL"></a><div id="NonBlockingTLS._startSSL-def"><a name="L301"></a><tt class="py-lineno">301</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._startSSL-toggle" onclick="return toggle('NonBlockingTLS._startSSL');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL">_startSSL</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._startSSL-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._startSSL-expanded"><a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"><tt class="py-docstring"> Immediatedly switch socket to TLS mode. Used internally</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt id="link-61" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-61', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"_startSSL called"</tt><tt class="py-op">)</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-62" class="py-name"><a title="nbxmpp.tls_nb.USE_PYOPENSSL" class="py-name" href="#" onclick="return doclink('link-62', 'USE_PYOPENSSL', 'link-3');">USE_PYOPENSSL</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method nbxmpp.tls_nb.NonBlockingTLS._startSSL_pyOpenSSL()=nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_pyOpenSSL"><a title="nbxmpp.tls_nb.NonBlockingTLS._startSSL_pyOpenSSL" class="py-name" href="#" onclick="return doclink('link-63', '_startSSL_pyOpenSSL', 'link-63');">_startSSL_pyOpenSSL</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method nbxmpp.tls_nb.NonBlockingTLS._startSSL_stdlib()=nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_stdlib"><a title="nbxmpp.tls_nb.NonBlockingTLS._startSSL_stdlib" class="py-name" href="#" onclick="return doclink('link-64', '_startSSL_stdlib', 'link-64');">_startSSL_stdlib</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">result</tt><tt class="py-op">:</tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt id="link-65" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-65', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Synchronous handshake completed'</tt><tt class="py-op">)</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._load_cert_file"></a><div id="NonBlockingTLS._load_cert_file-def"><a name="L318"></a><tt class="py-lineno">318</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._load_cert_file-toggle" onclick="return toggle('NonBlockingTLS._load_cert_file');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_load_cert_file">_load_cert_file</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cert_path</tt><tt class="py-op">,</tt> <tt class="py-param">cert_store</tt><tt class="py-op">,</tt> <tt class="py-param">logg</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._load_cert_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._load_cert_file-expanded"><a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isfile</tt><tt class="py-op">(</tt><tt class="py-name">cert_path</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">cert_path</tt><tt class="py-op">)</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt id="link-66" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-66', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unable to open certificate file %s: %s'</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">cert_path</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-name">lines</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">readlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-name">i</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">lines</tt><tt class="py-op">:</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'BEGIN CERTIFICATE'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">=</tt> <tt class="py-name">i</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-string">'END CERTIFICATE'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt> <tt class="py-keyword">and</tt> <tt class="py-name">begin</tt> <tt class="py-op">&gt;</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-name">cert</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">lines</tt><tt class="py-op">[</tt><tt class="py-name">begin</tt><tt class="py-op">:</tt><tt class="py-name">i</tt><tt class="py-op">+</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-name">x509cert</tt> <tt class="py-op">=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt class="py-name">load_certificate</tt><tt class="py-op">(</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt class="py-name">FILETYPE_PEM</tt><tt class="py-op">,</tt> <tt class="py-name">cert</tt><tt class="py-op">)</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-name">cert_store</tt><tt class="py-op">.</tt><tt class="py-name">add_cert</tt><tt class="py-op">(</tt><tt class="py-name">x509cert</tt><tt class="py-op">)</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-67', 'Error', 'link-22');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">exception_obj</tt><tt class="py-op">:</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">logg</tt><tt class="py-op">:</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt id="link-68" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-68', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unable to load a certificate from file %s: %s'</tt> <tt class="py-op">%</tt>\ </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">cert_path</tt><tt class="py-op">,</tt> <tt class="py-name">exception_obj</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt id="link-69" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-69', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unknown error while loading certificate from file '</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-string">'%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">cert_path</tt><tt class="py-op">)</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-name">begin</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-name">i</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+</div><a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._startSSL_pyOpenSSL"></a><div id="NonBlockingTLS._startSSL_pyOpenSSL-def"><a name="L349"></a><tt class="py-lineno">349</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._startSSL_pyOpenSSL-toggle" onclick="return toggle('NonBlockingTLS._startSSL_pyOpenSSL');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_pyOpenSSL">_startSSL_pyOpenSSL</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._startSSL_pyOpenSSL-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._startSSL_pyOpenSSL-expanded"><a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt id="link-70" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-70', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"_startSSL_pyOpenSSL called"</tt><tt class="py-op">)</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-comment"># NonBlockingHTTPBOSH instance has no attribute _owner</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">tcpsock</tt><tt class="py-op">,</tt> <tt class="py-string">'_owner'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt> \ </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-keyword">and</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">exists</tt><tt class="py-op">(</tt><tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-name">conn</tt> <tt class="py-op">=</tt> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">_caller</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-comment"># FIXME make a checkbox for Client Cert / SSLv23 / TLSv1</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-comment"># If we are going to use a client cert/key pair for authentication,</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-comment"># we choose TLSv1 method.</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt> <tt class="py-op">=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">Context</tt><tt class="py-op">(</tt><tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">TLSv1_METHOD</tt><tt class="py-op">)</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt id="link-71" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-71', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Using client cert and key from %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt><tt class="py-op">)</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> <tt class="py-name">p12</tt> <tt class="py-op">=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt class="py-name">load_pkcs12</tt><tt class="py-op">(</tt><tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">client_cert_passphrase</tt><tt class="py-op">)</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-72', 'Error', 'link-22');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">exception_obj</tt><tt class="py-op">:</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt id="link-73" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-73', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unable to load client pkcs12 certificate from '</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-string">'file %s: %s ... Is it a valid PKCS12 cert?'</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt><tt class="py-op">,</tt> <tt class="py-name">exception_obj</tt><tt class="py-op">.</tt><tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt id="link-74" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-74', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unknown error while loading certificate from file '</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-string">'%s'</tt> <tt class="py-op">%</tt> <tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt><tt class="py-op">)</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt id="link-75" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-75', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'PKCS12 Client cert loaded OK'</tt><tt class="py-op">)</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt><tt class="py-op">.</tt><tt class="py-name">use_certificate</tt><tt class="py-op">(</tt><tt class="py-name">p12</tt><tt class="py-op">.</tt><tt class="py-name">get_certificate</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt><tt class="py-op">.</tt><tt class="py-name">use_privatekey</tt><tt class="py-op">(</tt><tt class="py-name">p12</tt><tt class="py-op">.</tt><tt class="py-name">get_privatekey</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> <tt id="link-76" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-76', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'p12 cert and key loaded'</tt><tt class="py-op">)</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-77', 'Error', 'link-22');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">exception_obj</tt><tt class="py-op">:</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt id="link-78" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-78', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unable to extract client certificate from '</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-string">'file %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt><tt class="py-op">)</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">msg</tt><tt class="py-op">:</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt id="link-79" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-79', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unknown error extracting client certificate '</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-string">'from file %s: %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">conn</tt><tt class="py-op">.</tt><tt class="py-name">client_cert</tt><tt class="py-op">,</tt> <tt class="py-name">msg</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt id="link-80" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-80', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'client cert and key loaded OK'</tt><tt class="py-op">)</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> <tt class="py-comment"># See http://docs.python.org/dev/library/ssl.html</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt> <tt class="py-op">=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">Context</tt><tt class="py-op">(</tt><tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">SSLv23_METHOD</tt><tt class="py-op">)</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-name">flags</tt> <tt class="py-op">=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">OP_NO_SSLv2</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-name">flags</tt> <tt class="py-op">|=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">OP_NO_TICKET</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-comment"># py-OpenSSL &lt; 0.9 or old OpenSSL</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt class="py-name">flags</tt> <tt class="py-op">|=</tt> <tt class="py-number">16384</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt><tt class="py-op">.</tt><tt class="py-name">set_options</tt><tt class="py-op">(</tt><tt class="py-name">flags</tt><tt class="py-op">)</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">ssl_errnum</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt><tt class="py-op">.</tt><tt class="py-name">set_verify</tt><tt class="py-op">(</tt><tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">VERIFY_PEER</tt><tt class="py-op">,</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method nbxmpp.tls_nb.NonBlockingTLS._ssl_verify_callback()=nbxmpp.tls_nb.NonBlockingTLS-class.html#_ssl_verify_callback"><a title="nbxmpp.tls_nb.NonBlockingTLS._ssl_verify_callback" class="py-name" href="#" onclick="return doclink('link-81', '_ssl_verify_callback', 'link-81');">_ssl_verify_callback</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt><tt class="py-op">.</tt><tt class="py-name">load_verify_locations</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cacerts</tt><tt class="py-op">)</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt id="link-82" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-82', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Unable to load SSL certificates from file %s'</tt> <tt class="py-op">%</tt> \ </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">abspath</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cacerts</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-name">store</tt> <tt class="py-op">=</tt> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt><tt class="py-op">.</tt><tt class="py-name">get_cert_store</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Method nbxmpp.tls_nb.NonBlockingTLS._load_cert_file()=nbxmpp.tls_nb.NonBlockingTLS-class.html#_load_cert_file"><a title="nbxmpp.tls_nb.NonBlockingTLS._load_cert_file" class="py-name" href="#" onclick="return doclink('link-83', '_load_cert_file', 'link-83');">_load_cert_file</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mycerts</tt><tt class="py-op">,</tt> <tt class="py-name">store</tt><tt class="py-op">)</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isdir</tt><tt class="py-op">(</tt><tt class="py-string">'/etc/ssl/certs'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">f</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">listdir</tt><tt class="py-op">(</tt><tt class="py-string">'/etc/ssl/certs'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-comment"># We don't logg because there is a lot a duplicated certs in this</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-comment"># folder</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="nbxmpp.tls_nb.NonBlockingTLS._load_cert_file" class="py-name" href="#" onclick="return doclink('link-84', '_load_cert_file', 'link-83');">_load_cert_file</a></tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-string">'/etc/ssl/certs'</tt><tt class="py-op">,</tt> <tt class="py-name">f</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">store</tt><tt class="py-op">,</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-name">logg</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt> <tt class="py-op">=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">SSL</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt><tt class="py-op">(</tt><tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslContext</tt><tt class="py-op">,</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">)</tt> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">.</tt><tt class="py-name">set_connect_state</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-comment"># set to client mode</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-name">wrapper</tt> <tt class="py-op">=</tt> <tt id="link-85" class="py-name" targets="Class nbxmpp.tls_nb.PyOpenSSLWrapper=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper" class="py-name" href="#" onclick="return doclink('link-85', 'PyOpenSSLWrapper', 'link-85');">PyOpenSSLWrapper</a></tt><tt class="py-op">(</tt><tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">)</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_recv</tt> <tt class="py-op">=</tt> <tt class="py-name">wrapper</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper.recv
+nbxmpp.tls_nb.SSLWrapper.recv
+nbxmpp.tls_nb.StdlibSSLWrapper.recv" class="py-name" href="#" onclick="return doclink('link-86', 'recv', 'link-17');">recv</a></tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_send</tt> <tt class="py-op">=</tt> <tt class="py-name">wrapper</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-87', 'send', 'link-31');">send</a></tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> <tt id="link-88" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-88', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Initiating handshake..."</tt><tt class="py-op">)</tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">.</tt><tt class="py-name">setblocking</tt><tt class="py-op">(</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">.</tt><tt class="py-name">do_handshake</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt id="link-89" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-89', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Error while TLS handshake: '</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">.</tt><tt class="py-name">setblocking</tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> <tt class="py-op">=</tt> <tt id="link-90" class="py-name"><a title="nbxmpp.tls_nb.PYOPENSSL" class="py-name" href="#" onclick="return doclink('link-90', 'PYOPENSSL', 'link-4');">PYOPENSSL</a></tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._startSSL_stdlib"></a><div id="NonBlockingTLS._startSSL_stdlib-def"><a name="L431"></a><tt class="py-lineno">431</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._startSSL_stdlib-toggle" onclick="return toggle('NonBlockingTLS._startSSL_stdlib');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_stdlib">_startSSL_stdlib</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._startSSL_stdlib-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._startSSL_stdlib-expanded"><a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt id="link-91" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-91', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"_startSSL_stdlib called"</tt><tt class="py-op">)</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt class="py-name">setblocking</tt><tt class="py-op">(</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">ssl</tt><tt class="py-op">(</tt><tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt class="py-name">setblocking</tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslIssuer</tt> <tt class="py-op">=</tt> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">.</tt><tt class="py-name">issuer</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslServer</tt> <tt class="py-op">=</tt> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"> <tt class="py-name">wrapper</tt> <tt class="py-op">=</tt> <tt id="link-92" class="py-name" targets="Class nbxmpp.tls_nb.StdlibSSLWrapper=nbxmpp.tls_nb.StdlibSSLWrapper-class.html"><a title="nbxmpp.tls_nb.StdlibSSLWrapper" class="py-name" href="#" onclick="return doclink('link-92', 'StdlibSSLWrapper', 'link-92');">StdlibSSLWrapper</a></tt><tt class="py-op">(</tt><tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sslObj</tt><tt class="py-op">,</tt> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">)</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_recv</tt> <tt class="py-op">=</tt> <tt class="py-name">wrapper</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper.recv
+nbxmpp.tls_nb.SSLWrapper.recv
+nbxmpp.tls_nb.StdlibSSLWrapper.recv" class="py-name" href="#" onclick="return doclink('link-93', 'recv', 'link-17');">recv</a></tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-name">tcpsock</tt><tt class="py-op">.</tt><tt class="py-name">_send</tt> <tt class="py-op">=</tt> <tt class="py-name">wrapper</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-94', 'send', 'link-31');">send</a></tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt id="link-95" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-95', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Exception caught in _startSSL_stdlib:"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> <tt class="py-op">=</tt> <tt id="link-96" class="py-name"><a title="nbxmpp.tls_nb.PYSTDLIB" class="py-name" href="#" onclick="return doclink('link-96', 'PYSTDLIB', 'link-5');">PYSTDLIB</a></tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTLS._ssl_verify_callback"></a><div id="NonBlockingTLS._ssl_verify_callback-def"><a name="L449"></a><tt class="py-lineno">449</tt> <a class="py-toggle" href="#" id="NonBlockingTLS._ssl_verify_callback-toggle" onclick="return toggle('NonBlockingTLS._ssl_verify_callback');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_ssl_verify_callback">_ssl_verify_callback</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">sslconn</tt><tt class="py-op">,</tt> <tt class="py-param">cert</tt><tt class="py-op">,</tt> <tt class="py-param">errnum</tt><tt class="py-op">,</tt> <tt class="py-param">depth</tt><tt class="py-op">,</tt> <tt class="py-param">ok</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTLS._ssl_verify_callback-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTLS._ssl_verify_callback-expanded"><a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-comment"># Exceptions can't propagate up through this callback, so print them here.</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">ssl_fingerprint_sha1</tt> <tt class="py-op">=</tt> <tt class="py-name">cert</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-string">'sha1'</tt><tt class="py-op">)</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">ssl_certificate</tt> <tt class="py-op">=</tt> <tt class="py-name">cert</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">ssl_errnum</tt> <tt class="py-op">=</tt> <tt class="py-name">errnum</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">ssl_cert_pem</tt> <tt class="py-op">=</tt> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt class="py-name">dump_certificate</tt><tt class="py-op">(</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt class="py-name">OpenSSL</tt><tt class="py-op">.</tt><tt class="py-name">crypto</tt><tt class="py-op">.</tt><tt class="py-name">FILETYPE_PEM</tt><tt class="py-op">,</tt> <tt class="py-name">cert</tt><tt class="py-op">)</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt id="link-97" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-97', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Exception caught in _ssl_info_callback:"</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-comment"># Make sure something is printed, even if log is disabled.</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-name">traceback</tt><tt class="py-op">.</tt><tt class="py-name">print_exc</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.tls_nb.NonBlockingTLS-class.html b/doc/apidocs/nbxmpp.tls_nb.NonBlockingTLS-class.html
new file mode 100644
index 0000000..cb694f7
--- /dev/null
+++ b/doc/apidocs/nbxmpp.tls_nb.NonBlockingTLS-class.html
@@ -0,0 +1,679 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.tls_nb.NonBlockingTLS</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.tls_nb-module.html">Module&nbsp;tls_nb</a> ::
+ Class&nbsp;NonBlockingTLS
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.tls_nb.NonBlockingTLS-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingTLS</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t" name="uml_class_diagram_for_nbxmpp_t">
+<area shape="rect" id="node223" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#ssl_h_bits" title="nbxmpp.tls_nb.NonBlockingTLS.ssl_h_bits" alt="" coords="29,145,231,164"/>
+<area shape="rect" id="node223" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__" title="nbxmpp.tls_nb.NonBlockingTLS.__init__" alt="" coords="29,167,231,185"/>
+<area shape="rect" id="node223" href="nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin" title="Use to PlugIn TLS into transport and start establishing immediately. Returns True if TLS/SSL was established correctly, otherwise False" alt="" coords="29,185,231,204"/>
+<area shape="rect" id="node1" href="nbxmpp.tls_nb.NonBlockingTLS-class.html" title="TLS connection used to encrypts already estabilished tcp connection" alt="" coords="17,121,241,210"/>
+<area shape="rect" id="node224" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="17,39,243,57"/>
+<area shape="rect" id="node224" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="17,57,243,76"/>
+<area shape="rect" id="node224" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="17,76,243,95"/>
+<area shape="rect" id="node2" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="5,6,253,101"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>TLS connection used to encrypts already estabilished tcp connection</p>
+<p>Can be plugged into NonBlockingTCP and will make use of StdlibSSLWrapper or
+PyOpenSSLWrapper.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">cacerts</span>,
+ <span class="summary-sig-arg">mycerts</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin" class="summary-sig-name">plugin</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span><br />
+ Use to PlugIn TLS into transport and start establishing immediately.
+Returns True if TLS/SSL was established correctly, otherwise False</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS.plugin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509" class="summary-sig-name" onclick="show_private();">_dumpX509</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">cert</span>,
+ <span class="summary-sig-arg">stream</span>=<span class="summary-sig-default">sys.stderr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._dumpX509">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpX509Name" class="summary-sig-name" onclick="show_private();">_dumpX509Name</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">name</span>,
+ <span class="summary-sig-arg">stream</span>=<span class="summary-sig-default">sys.stderr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._dumpX509Name">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_dumpPKey" class="summary-sig-name" onclick="show_private();">_dumpPKey</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">pkey</span>,
+ <span class="summary-sig-arg">stream</span>=<span class="summary-sig-default">sys.stderr</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._dumpPKey">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL" class="summary-sig-name" onclick="show_private();">_startSSL</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Immediatedly switch socket to TLS mode. Used internally</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._startSSL">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_load_cert_file" class="summary-sig-name" onclick="show_private();">_load_cert_file</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">cert_path</span>,
+ <span class="summary-sig-arg">cert_store</span>,
+ <span class="summary-sig-arg">logg</span>=<span class="summary-sig-default">True</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._load_cert_file">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_pyOpenSSL" class="summary-sig-name" onclick="show_private();">_startSSL_pyOpenSSL</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._startSSL_pyOpenSSL">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_startSSL_stdlib" class="summary-sig-name" onclick="show_private();">_startSSL_stdlib</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._startSSL_stdlib">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#_ssl_verify_callback" class="summary-sig-name" onclick="show_private();">_ssl_verify_callback</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">sslconn</span>,
+ <span class="summary-sig-arg">cert</span>,
+ <span class="summary-sig-arg">errnum</span>,
+ <span class="summary-sig-arg">depth</span>,
+ <span class="summary-sig-arg">ok</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._ssl_verify_callback">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb.NonBlockingTLS-class.html#ssl_h_bits" class="summary-name">ssl_h_bits</a> = <code title="{'SSL_CB_ALERT': 16384,
+ 'SSL_CB_EXIT': 2,
+ 'SSL_CB_HANDSHAKE_DONE': 32,
+ 'SSL_CB_HANDSHAKE_START': 16,
+ 'SSL_CB_LOOP': 1,
+ 'SSL_CB_READ': 4,
+ 'SSL_CB_WRITE': 8,
+ 'SSL_ST_ACCEPT': 8192,
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">SSL_CB_ALERT</code><code class="variable-quote">'</code><code class="variable-op">: </code>16384<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">SSL_CB_EXIT</code><code class="variable-quote">'</code><code class="variable-op">: </code>2<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">SSL_CB</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">cacerts</span>,
+ <span class="sig-arg">mycerts</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>cacerts</code></strong> - path to pem file with certificates of known XMPP servers</li>
+ <li><strong class="pname"><code>mycerts</code></strong> - path to pem file with certificates of user trusted servers</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugin</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS.plugin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Use to PlugIn TLS into transport and start establishing immediately.
+Returns True if TLS/SSL was established correctly, otherwise False
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_dumpX509"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_dumpX509</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">cert</span>,
+ <span class="sig-arg">stream</span>=<span class="sig-default">sys.stderr</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._dumpX509">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_dumpX509Name"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_dumpX509Name</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">name</span>,
+ <span class="sig-arg">stream</span>=<span class="sig-default">sys.stderr</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._dumpX509Name">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_dumpPKey"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_dumpPKey</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">pkey</span>,
+ <span class="sig-arg">stream</span>=<span class="sig-default">sys.stderr</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._dumpPKey">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_startSSL"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_startSSL</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._startSSL">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Immediatedly switch socket to TLS mode. Used internally
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_load_cert_file"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_load_cert_file</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">cert_path</span>,
+ <span class="sig-arg">cert_store</span>,
+ <span class="sig-arg">logg</span>=<span class="sig-default">True</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._load_cert_file">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_startSSL_pyOpenSSL"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_startSSL_pyOpenSSL</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._startSSL_pyOpenSSL">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_startSSL_stdlib"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_startSSL_stdlib</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._startSSL_stdlib">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_ssl_verify_callback"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_ssl_verify_callback</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">sslconn</span>,
+ <span class="sig-arg">cert</span>,
+ <span class="sig-arg">errnum</span>,
+ <span class="sig-arg">depth</span>,
+ <span class="sig-arg">ok</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#NonBlockingTLS._ssl_verify_callback">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
+<a name="section-ClassVariableDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Variable Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassVariableDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="ssl_h_bits"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">ssl_h_bits</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">SSL_CB_ALERT</code><code class="variable-quote">'</code><code class="variable-op">: </code>16384<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">SSL_CB_EXIT</code><code class="variable-quote">'</code><code class="variable-op">: </code>2<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">SSL_CB_HANDSHAKE_DONE</code><code class="variable-quote">'</code><code class="variable-op">: </code>32<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">SSL_CB_HANDSHAKE_START</code><code class="variable-quote">'</code><code class="variable-op">: </code>16<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">SSL_CB_LOOP</code><code class="variable-quote">'</code><code class="variable-op">: </code>1<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">SSL_CB_READ</code><code class="variable-quote">'</code><code class="variable-op">: </code>4<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">SSL_CB_WRITE</code><code class="variable-quote">'</code><code class="variable-op">: </code>8<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">SSL_ST_ACCEPT</code><code class="variable-quote">'</code><code class="variable-op">: </code>8192<code class="variable-op">,</code>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.tls_nb.PyOpenSSLWrapper-class.html b/doc/apidocs/nbxmpp.tls_nb.PyOpenSSLWrapper-class.html
new file mode 100644
index 0000000..7c1e25c
--- /dev/null
+++ b/doc/apidocs/nbxmpp.tls_nb.PyOpenSSLWrapper-class.html
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.tls_nb.PyOpenSSLWrapper</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.tls_nb-module.html">Module&nbsp;tls_nb</a> ::
+ Class&nbsp;PyOpenSSLWrapper
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class PyOpenSSLWrapper</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_2" name="uml_class_diagram_for_nbxmpp_t_2">
+<area shape="rect" id="node225" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__" title="nbxmpp.tls_nb.PyOpenSSLWrapper.__init__" alt="" coords="17,116,284,135"/>
+<area shape="rect" id="node225" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#is_numtoolarge" title="Magic methods don&#39;t need documentation" alt="" coords="17,135,284,153"/>
+<area shape="rect" id="node225" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#recv" title="Receive wrapper for SSL object" alt="" coords="17,153,284,172"/>
+<area shape="rect" id="node225" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send" title="Send wrapper for SSL object" alt="" coords="17,172,284,191"/>
+<area shape="rect" id="node1" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html" title="Wrapper class for PyOpenSSL&#39;s recv() and send() methods" alt="" coords="5,83,296,197"/>
+<area shape="rect" id="node226" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html" title="Generic SSL Error Wrapper" alt="" coords="111,31,189,49"/>
+<area shape="rect" id="node2" href="nbxmpp.tls_nb.SSLWrapper-class.html" title="Abstract SSLWrapper base class" alt="" coords="99,6,200,63"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_2.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_2" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Wrapper class for PyOpenSSL's recv() and send() methods
+
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Nested Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-NestedClasses"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a></code></b>:
+ <code><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html">Error</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">*args</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#is_numtoolarge" class="summary-sig-name">is_numtoolarge</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">e</span>)</span><br />
+ Magic methods don't need documentation</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.is_numtoolarge">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#recv" class="summary-sig-name">recv</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">bufsize</span>,
+ <span class="summary-sig-arg">flags</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Receive wrapper for SSL object</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.recv">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send" class="summary-sig-name">send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>,
+ <span class="summary-sig-arg">flags</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Send wrapper for SSL object</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">*args</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html#__init__">SSLWrapper.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="is_numtoolarge"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">is_numtoolarge</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">e</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.is_numtoolarge">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Magic methods don't need documentation
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="recv"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">recv</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">bufsize</span>,
+ <span class="sig-arg">flags</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.recv">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Receive wrapper for SSL object</p>
+<p>We can return None out of this function to signal that no data is
+available right now. Better than an exception, which differs
+depending on which SSL lib we're using. Unfortunately returning ''
+can indicate that the socket has been closed, so to be sure, we avoid
+this by returning None.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html#recv">SSLWrapper.recv</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>,
+ <span class="sig-arg">flags</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#PyOpenSSLWrapper.send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send wrapper for SSL object
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html#send">SSLWrapper.send</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.tls_nb.SSLWrapper-class.html b/doc/apidocs/nbxmpp.tls_nb.SSLWrapper-class.html
new file mode 100644
index 0000000..ccb3e3c
--- /dev/null
+++ b/doc/apidocs/nbxmpp.tls_nb.SSLWrapper-class.html
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.tls_nb.SSLWrapper</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.tls_nb-module.html">Module&nbsp;tls_nb</a> ::
+ Class&nbsp;SSLWrapper
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class SSLWrapper</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_3" name="uml_class_diagram_for_nbxmpp_t_3">
+<area shape="rect" id="node227" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html" title="Generic SSL Error Wrapper" alt="" coords="44,31,311,49"/>
+<area shape="rect" id="node227" href="nbxmpp.tls_nb.SSLWrapper-class.html#__init__" title="nbxmpp.tls_nb.SSLWrapper.__init__" alt="" coords="44,52,311,71"/>
+<area shape="rect" id="node227" href="nbxmpp.tls_nb.SSLWrapper-class.html#recv" title="Receive wrapper for SSL object" alt="" coords="44,71,311,89"/>
+<area shape="rect" id="node227" href="nbxmpp.tls_nb.SSLWrapper-class.html#send" title="Send wrapper for SSL object" alt="" coords="44,89,311,108"/>
+<area shape="rect" id="node1" href="nbxmpp.tls_nb.SSLWrapper-class.html" title="Abstract SSLWrapper base class" alt="" coords="32,6,323,114"/>
+<area shape="rect" id="node2" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html" title="Wrapper class for PyOpenSSL&#39;s recv() and send() methods" alt="" coords="5,134,165,173"/>
+<area shape="rect" id="node3" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html" title="Wrapper class for Python socket.ssl read() and write() methods" alt="" coords="195,134,344,173"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_3.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_3" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Abstract SSLWrapper base class
+
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Nested Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-NestedClasses"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html" class="summary-name">Error</a><br />
+ Generic SSL Error Wrapper
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.SSLWrapper-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">sslobj</span>,
+ <span class="summary-sig-arg">sock</span>=<span class="summary-sig-default">None</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.SSLWrapper-class.html#recv" class="summary-sig-name">recv</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>,
+ <span class="summary-sig-arg">flags</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Receive wrapper for SSL object</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.recv">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.SSLWrapper-class.html#send" class="summary-sig-name">send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>,
+ <span class="summary-sig-arg">flags</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Send wrapper for SSL object</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">sslobj</span>,
+ <span class="sig-arg">sock</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="recv"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">recv</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>,
+ <span class="sig-arg">flags</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.recv">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Receive wrapper for SSL object</p>
+<p>We can return None out of this function to signal that no data is
+available right now. Better than an exception, which differs
+depending on which SSL lib we're using. Unfortunately returning ''
+can indicate that the socket has been closed, so to be sure, we avoid
+this by returning None.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>,
+ <span class="sig-arg">flags</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send wrapper for SSL object
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.tls_nb.SSLWrapper.Error-class.html b/doc/apidocs/nbxmpp.tls_nb.SSLWrapper.Error-class.html
new file mode 100644
index 0000000..8af25f7
--- /dev/null
+++ b/doc/apidocs/nbxmpp.tls_nb.SSLWrapper.Error-class.html
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.tls_nb.SSLWrapper.Error</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.tls_nb-module.html">Module&nbsp;tls_nb</a> ::
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html">Class&nbsp;SSLWrapper</a> ::
+ Class&nbsp;Error
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Error</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.Error">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_4" name="uml_class_diagram_for_nbxmpp_t_4">
+<area shape="rect" id="node231" href="javascript:void(0);" title="exceptions.IOError.__new__" alt="" coords="213,535,335,553"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="I/O operation failed." alt="" coords="201,502,345,559"/>
+<area shape="rect" id="node230" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="17,612,531,631"/>
+<area shape="rect" id="node230" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__" title="str(x)" alt="" coords="17,631,531,649"/>
+<area shape="rect" id="node5" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html" title="Generic SSL Error Wrapper" alt="" coords="5,579,541,655"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="exceptions.BaseException.args" alt="" coords="189,31,359,49"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="exceptions.BaseException.message" alt="" coords="189,49,359,68"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="x.__delattr__(&#39;name&#39;) &lt;==&gt; del x.name" alt="" coords="189,71,359,89"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="x.__getattribute__(&#39;name&#39;) &lt;==&gt; x.name" alt="" coords="189,89,359,108"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="x[y]" alt="" coords="189,108,359,127"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="x[i:j]" alt="" coords="189,127,359,145"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="repr(x)" alt="" coords="189,145,359,164"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="x.__setattr__(&#39;name&#39;, value) &lt;==&gt; x.name = value" alt="" coords="189,164,359,183"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="exceptions.BaseException.__setstate__" alt="" coords="189,183,359,201"/>
+<area shape="rect" id="node235" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="189,201,359,220"/>
+<area shape="rect" id="node2" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="177,6,369,226"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all non&#45;exit exceptions." alt="" coords="193,246,353,290"/>
+<area shape="rect" id="node232" href="javascript:void(0);" title="exception errno" alt="" coords="181,399,368,417"/>
+<area shape="rect" id="node232" href="javascript:void(0);" title="exception filename" alt="" coords="181,417,368,436"/>
+<area shape="rect" id="node232" href="javascript:void(0);" title="exception strerror" alt="" coords="181,436,368,455"/>
+<area shape="rect" id="node232" href="javascript:void(0);" title="helper for pickle" alt="" coords="181,457,368,476"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="Base class for I/O related errors." alt="" coords="169,374,380,482"/>
+<area shape="rect" id="node6" href="javascript:void(0);" title="Base class for all standard Python exceptions that do not represent interpreter exiting." alt="" coords="180,310,369,354"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_4.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_4" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Generic SSL Error Wrapper
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">sock</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">exc</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">errno</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">strerror</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">peer</span>=<span class="summary-sig-default">None</span>)</span><br />
+ x.__init__(...) initializes x; see help(type(x)) for signature</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.Error.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ str(x)</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.Error.__str__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.IOError</code></b>:
+ <code>__new__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.EnvironmentError</code></b>:
+ <code>__reduce__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>__delattr__</code>,
+ <code>__getattribute__</code>,
+ <code>__getitem__</code>,
+ <code>__getslice__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__setstate__</code>,
+ <code>__unicode__</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__format__</code>,
+ <code>__hash__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__sizeof__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.EnvironmentError</code></b>:
+ <code>errno</code>,
+ <code>filename</code>,
+ <code>strerror</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
+ <code>args</code>,
+ <code>message</code>
+ </p>
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">sock</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">exc</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">errno</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">strerror</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">peer</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.Error.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ x.__init__(...) initializes x; see help(type(x)) for signature
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__str__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
+ <br /><em class="fname">(Informal representation operator)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#SSLWrapper.Error.__str__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ str(x)
+ <dl class="fields">
+ <dt>Overrides:
+ object.__str__
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.tls_nb.StdlibSSLWrapper-class.html b/doc/apidocs/nbxmpp.tls_nb.StdlibSSLWrapper-class.html
new file mode 100644
index 0000000..1a6b87e
--- /dev/null
+++ b/doc/apidocs/nbxmpp.tls_nb.StdlibSSLWrapper-class.html
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.tls_nb.StdlibSSLWrapper</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.tls_nb-module.html">Module&nbsp;tls_nb</a> ::
+ Class&nbsp;StdlibSSLWrapper
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class StdlibSSLWrapper</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#StdlibSSLWrapper">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_5" name="uml_class_diagram_for_nbxmpp_t_5">
+<area shape="rect" id="node236" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__" title="nbxmpp.tls_nb.StdlibSSLWrapper.__init__" alt="" coords="17,116,284,135"/>
+<area shape="rect" id="node236" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#recv" title="Receive wrapper for SSL object" alt="" coords="17,135,284,153"/>
+<area shape="rect" id="node236" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send" title="Send wrapper for SSL object" alt="" coords="17,153,284,172"/>
+<area shape="rect" id="node1" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html" title="Wrapper class for Python socket.ssl read() and write() methods" alt="" coords="5,83,296,178"/>
+<area shape="rect" id="node237" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html" title="Generic SSL Error Wrapper" alt="" coords="111,31,189,49"/>
+<area shape="rect" id="node2" href="nbxmpp.tls_nb.SSLWrapper-class.html" title="Abstract SSLWrapper base class" alt="" coords="99,6,200,63"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_5.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_5" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Wrapper class for Python socket.ssl read() and write() methods
+
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Nested Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-NestedClasses"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.tls_nb.SSLWrapper-class.html">SSLWrapper</a></code></b>:
+ <code><a href="nbxmpp.tls_nb.SSLWrapper.Error-class.html">Error</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">*args</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#StdlibSSLWrapper.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#recv" class="summary-sig-name">recv</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">bufsize</span>,
+ <span class="summary-sig-arg">flags</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Receive wrapper for SSL object</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#StdlibSSLWrapper.recv">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send" class="summary-sig-name">send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>,
+ <span class="summary-sig-arg">flags</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Send wrapper for SSL object</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#StdlibSSLWrapper.send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">*args</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#StdlibSSLWrapper.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html#__init__">SSLWrapper.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="recv"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">recv</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">bufsize</span>,
+ <span class="sig-arg">flags</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#StdlibSSLWrapper.recv">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Receive wrapper for SSL object</p>
+<p>We can return None out of this function to signal that no data is
+available right now. Better than an exception, which differs
+depending on which SSL lib we're using. Unfortunately returning ''
+can indicate that the socket has been closed, so to be sure, we avoid
+this by returning None.</p>
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html#recv">SSLWrapper.recv</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>,
+ <span class="sig-arg">flags</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.tls_nb-pysrc.html#StdlibSSLWrapper.send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Send wrapper for SSL object
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.tls_nb.SSLWrapper-class.html#send">SSLWrapper.send</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.transports_nb-module.html b/doc/apidocs/nbxmpp.transports_nb-module.html
new file mode 100644
index 0000000..f924e1a
--- /dev/null
+++ b/doc/apidocs/nbxmpp.transports_nb-module.html
@@ -0,0 +1,698 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.transports_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;transports_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.transports_nb-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module transports_nb</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html">source&nbsp;code</a></span></p>
+<p>Transports are objects responsible for connecting to XMPP server and putting
+data to wrapped sockets in in desired form (SSL, TLS, TCP, for HTTP proxy,
+for SOCKS5 proxy...)</p>
+<p>Transports are not aware of XMPP stanzas and only responsible for low-level
+connection handling.</p>
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Classes</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Classes"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html" class="summary-name">NonBlockingTransport</a><br />
+ Abstract class representing a transport
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb.NonBlockingTCP-class.html" class="summary-name">NonBlockingTCP</a><br />
+ Non-blocking TCP socket wrapper
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html" class="summary-name">NonBlockingHTTP</a><br />
+ Socket wrapper that creates HTTP message out of sent data and peels-off HTTP
+headers from incoming messages
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" class="summary-name">NonBlockingHTTPBOSH</a><br />
+ Class for BOSH HTTP connections. Slightly redefines HTTP transport by
+calling bosh bodytag generating callback before putting data on wire
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Functions</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Functions"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb-module.html#urisplit" class="summary-sig-name">urisplit</a>(<span class="summary-sig-arg">uri</span>)</span><br />
+ Function for splitting URI string to tuple (protocol, host, port, path).
+e.g. urisplit('<a class="rst-reference external" href="http://httpcm.jabber.org:123/webclient" target="_top">http://httpcm.jabber.org:123/webclient</a>') returns ('http',
+'httpcm.jabber.org', 123, '/webclient') return 443 as default port if proto
+is https else 80</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#urisplit">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb-module.html#get_proxy_data_from_dict" class="summary-sig-name">get_proxy_data_from_dict</a>(<span class="summary-sig-arg">proxy</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#get_proxy_data_from_dict">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Variables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#log" class="summary-name">log</a> = <code title="logging.getLogger('nbxmpp.transports_nb')">logging.getLogger('nbxmpp.transports_nb')</code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#CONNECT_TIMEOUT_SECONDS" class="summary-name">CONNECT_TIMEOUT_SECONDS</a> = <code title="30">30</code><br />
+ timeout to connect to the server socket, it doesn't include auth
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#DISCONNECT_TIMEOUT_SECONDS" class="summary-name">DISCONNECT_TIMEOUT_SECONDS</a> = <code title="5">5</code><br />
+ how long to wait for a disconnect to complete
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#RECV_BUFSIZE" class="summary-name">RECV_BUFSIZE</a> = <code title="32768">32768</code><br />
+ size of the buffer which reads data from server
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#DATA_RECEIVED" class="summary-name">DATA_RECEIVED</a> = <code title="'DATA RECEIVED'"><code class="variable-quote">'</code><code class="variable-string">DATA RECEIVED</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#DATA_SENT" class="summary-name">DATA_SENT</a> = <code title="'DATA SENT'"><code class="variable-quote">'</code><code class="variable-string">DATA SENT</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#DATA_ERROR" class="summary-name">DATA_ERROR</a> = <code title="'DATA ERROR'"><code class="variable-quote">'</code><code class="variable-string">DATA ERROR</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#DISCONNECTED" class="summary-name">DISCONNECTED</a> = <code title="'DISCONNECTED'"><code class="variable-quote">'</code><code class="variable-string">DISCONNECTED</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#DISCONNECTING" class="summary-name">DISCONNECTING</a> = <code title="'DISCONNECTING'"><code class="variable-quote">'</code><code class="variable-string">DISCONNECTING</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#CONNECTING" class="summary-name">CONNECTING</a> = <code title="'CONNECTING'"><code class="variable-quote">'</code><code class="variable-string">CONNECTING</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#PROXY_CONNECTING" class="summary-name">PROXY_CONNECTING</a> = <code title="'PROXY_CONNECTING'"><code class="variable-quote">'</code><code class="variable-string">PROXY_CONNECTING</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#CONNECTED" class="summary-name">CONNECTED</a> = <code title="'CONNECTED'"><code class="variable-quote">'</code><code class="variable-string">CONNECTED</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#STATES" class="summary-name">STATES</a> = <code title="('DISCONNECTED',
+ 'CONNECTING',
+ 'PROXY_CONNECTING',
+ 'CONNECTED',
+ 'DISCONNECTING')"><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">DISCONNECTED</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">CONNECTING</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">PROXY_CONNECTING</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">C</code><code class="variable-ellipsis">...</code></code>
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="nbxmpp.transports_nb-module.html#__package__" class="summary-name">__package__</a> = <code title="'nbxmpp'"><code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code></code>
+ </td>
+ </tr>
+</table>
+<p class="indent-wrapped-lines"><b>Imports:</b>
+ <a href="nbxmpp.simplexml-module.html#ustr" title="nbxmpp.simplexml.ustr">ustr</a>,
+ <a href="nbxmpp.plugin.PlugIn-class.html" title="nbxmpp.plugin.PlugIn">PlugIn</a>,
+ <a href="nbxmpp.idlequeue.IdleObject-class.html" title="nbxmpp.idlequeue.IdleObject">IdleObject</a>,
+ <a href="nbxmpp.proxy_connectors-module.html" title="nbxmpp.proxy_connectors">proxy_connectors</a>,
+ <a href="nbxmpp.tls_nb-module.html" title="nbxmpp.tls_nb">tls_nb</a>,
+ <span title="socket">socket</span>,
+ <span title="errno">errno</span>,
+ <span title="time">time</span>,
+ <span title="traceback">traceback</span>,
+ <span title="base64">base64</span>,
+ <span title="urlparse">urlparse</span>,
+ <span title="logging">logging</span>
+</p><br />
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Function Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-FunctionDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="urisplit"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">urisplit</span>(<span class="sig-arg">uri</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#urisplit">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Function for splitting URI string to tuple (protocol, host, port, path).
+e.g. urisplit('<a class="rst-rst-reference external rst-reference external" href="http://httpcm.jabber.org:123/webclient" target="_top">http://httpcm.jabber.org:123/webclient</a>') returns ('http',
+'httpcm.jabber.org', 123, '/webclient') return 443 as default port if proto
+is https else 80
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_proxy_data_from_dict"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_proxy_data_from_dict</span>(<span class="sig-arg">proxy</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#get_proxy_data_from_dict">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Variables Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-VariablesDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="log"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">log</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+logging.getLogger('nbxmpp.transports_nb')
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="CONNECT_TIMEOUT_SECONDS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">CONNECT_TIMEOUT_SECONDS</h3>
+ timeout to connect to the server socket, it doesn't include auth
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+30
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="DISCONNECT_TIMEOUT_SECONDS"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">DISCONNECT_TIMEOUT_SECONDS</h3>
+ how long to wait for a disconnect to complete
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+5
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="RECV_BUFSIZE"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">RECV_BUFSIZE</h3>
+ size of the buffer which reads data from server
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+32768
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="DATA_RECEIVED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">DATA_RECEIVED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">DATA RECEIVED</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="DATA_SENT"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">DATA_SENT</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">DATA SENT</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="DATA_ERROR"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">DATA_ERROR</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">DATA ERROR</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="DISCONNECTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">DISCONNECTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">DISCONNECTED</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="DISCONNECTING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">DISCONNECTING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">DISCONNECTING</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="CONNECTING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">CONNECTING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">CONNECTING</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="PROXY_CONNECTING"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">PROXY_CONNECTING</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">PROXY_CONNECTING</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="CONNECTED"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">CONNECTED</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">CONNECTED</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="STATES"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">STATES</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">DISCONNECTED</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">CONNECTING</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">PROXY_CONNECTING</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">CONNECTED</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">DISCONNECTING</code><code class="variable-quote">'</code><code class="variable-group">)</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="__package__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <h3 class="epydoc">__package__</h3>
+
+ <dl class="fields">
+ </dl>
+ <dl class="fields">
+ <dt>Value:</dt>
+ <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">nbxmpp</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:04 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.transports_nb-pysrc.html b/doc/apidocs/nbxmpp.transports_nb-pysrc.html
new file mode 100644
index 0000000..00906e8
--- /dev/null
+++ b/doc/apidocs/nbxmpp.transports_nb-pysrc.html
@@ -0,0 +1,1486 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.transports_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ Module&nbsp;transports_nb
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.transports_nb-pysrc.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="nbxmpp.transports_nb-module.html">Module nbxmpp.transports_nb</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">## transports_nb.py</tt> </tt>
+<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment">## based on transports.py</tt> </tt>
+<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment">## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov</tt> </tt>
+<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment">## modified by Dimitur Kirov &lt;dkirov@gmail.com&gt;</tt> </tt>
+<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">## modified by Tomas Karasek &lt;tom.to.the.k@gmail.com&gt;</tt> </tt>
+<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment">## This program is free software; you can redistribute it and/or modify</tt> </tt>
+<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment">## it under the terms of the GNU General Public License as published by</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-comment">## the Free Software Foundation; either version 2, or (at your option)</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-comment">## any later version.</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-comment">##</tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-comment">## This program is distributed in the hope that it will be useful,</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment">## but WITHOUT ANY WARRANTY; without even the implied warranty of</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-comment">## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment">## GNU General Public License for more details.</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring">Transports are objects responsible for connecting to XMPP server and putting</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring">data to wrapped sockets in in desired form (SSL, TLS, TCP, for HTTP proxy,</tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring">for SOCKS5 proxy...)</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-docstring">Transports are not aware of XMPP stanzas and only responsible for low-level</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-docstring">connection handling.</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module nbxmpp.simplexml=nbxmpp.simplexml-module.html"><a title="nbxmpp.simplexml" class="py-name" href="#" onclick="return doclink('link-0', 'simplexml', 'link-0');">simplexml</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Function nbxmpp.simplexml.ustr()=nbxmpp.simplexml-module.html#ustr"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-1', 'ustr', 'link-1');">ustr</a></tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.plugin()=nbxmpp.auth_nb.NonBlockingBind-class.html#plugin,Method nbxmpp.auth_nb.NonBlockingNonSASL.plugin()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#plugin,Method nbxmpp.auth_nb.SASL.plugin()=nbxmpp.auth_nb.SASL-class.html#plugin,Method nbxmpp.dispatcher_nb.XMPPDispatcher.plugin()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#plugin,Module nbxmpp.plugin=nbxmpp.plugin-module.html,Method nbxmpp.roster_nb.NonBlockingRoster.plugin()=nbxmpp.roster_nb.NonBlockingRoster-class.html#plugin,Method nbxmpp.tls_nb.NonBlockingTLS.plugin()=nbxmpp.tls_nb.NonBlockingTLS-class.html#plugin,Method nbxmpp.transports_nb.NonBlockingTransport.plugin()=nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin"><a title="nbxmpp.auth_nb.NonBlockingBind.plugin
+nbxmpp.auth_nb.NonBlockingNonSASL.plugin
+nbxmpp.auth_nb.SASL.plugin
+nbxmpp.dispatcher_nb.XMPPDispatcher.plugin
+nbxmpp.plugin
+nbxmpp.roster_nb.NonBlockingRoster.plugin
+nbxmpp.tls_nb.NonBlockingTLS.plugin
+nbxmpp.transports_nb.NonBlockingTransport.plugin" class="py-name" href="#" onclick="return doclink('link-2', 'plugin', 'link-2');">plugin</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#PlugIn,Method nbxmpp.dispatcher_nb.Dispatcher.PlugIn()=nbxmpp.dispatcher_nb.Dispatcher-class.html#PlugIn,Class nbxmpp.plugin.PlugIn=nbxmpp.plugin.PlugIn-class.html,Method nbxmpp.plugin.PlugIn.PlugIn()=nbxmpp.plugin.PlugIn-class.html#PlugIn"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-3', 'PlugIn', 'link-3');">PlugIn</a></tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name" targets="Module nbxmpp.idlequeue=nbxmpp.idlequeue-module.html"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-4', 'idlequeue', 'link-4');">idlequeue</a></tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Class nbxmpp.idlequeue.IdleObject=nbxmpp.idlequeue.IdleObject-class.html"><a title="nbxmpp.idlequeue.IdleObject" class="py-name" href="#" onclick="return doclink('link-5', 'IdleObject', 'link-5');">IdleObject</a></tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Module nbxmpp.proxy_connectors=nbxmpp.proxy_connectors-module.html"><a title="nbxmpp.proxy_connectors" class="py-name" href="#" onclick="return doclink('link-6', 'proxy_connectors', 'link-6');">proxy_connectors</a></tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Module nbxmpp.tls_nb=nbxmpp.tls_nb-module.html"><a title="nbxmpp.tls_nb" class="py-name" href="#" onclick="return doclink('link-7', 'tls_nb', 'link-7');">tls_nb</a></tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">errno</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">traceback</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">base64</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urlparse</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable nbxmpp.auth_nb.log=nbxmpp.auth_nb-module.html#log,Variable nbxmpp.bosh.log=nbxmpp.bosh-module.html#log,Variable nbxmpp.client_nb.log=nbxmpp.client_nb-module.html#log,Variable nbxmpp.dispatcher_nb.log=nbxmpp.dispatcher_nb-module.html#log,Variable nbxmpp.idlequeue.log=nbxmpp.idlequeue-module.html#log,Variable nbxmpp.plugin.log=nbxmpp.plugin-module.html#log,Variable nbxmpp.proxy_connectors.log=nbxmpp.proxy_connectors-module.html#log,Variable nbxmpp.roster_nb.log=nbxmpp.roster_nb-module.html#log,Variable nbxmpp.simplexml.log=nbxmpp.simplexml-module.html#log,Variable nbxmpp.smacks.log=nbxmpp.smacks-module.html#log,Variable nbxmpp.tls_nb.log=nbxmpp.tls_nb-module.html#log,Variable nbxmpp.transports_nb.log=nbxmpp.transports_nb-module.html#log"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-8', 'log', 'link-8');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'nbxmpp.transports_nb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> </tt>
+<a name="urisplit"></a><div id="urisplit-def"><a name="L43"></a><tt class="py-lineno"> 43</tt> <a class="py-toggle" href="#" id="urisplit-toggle" onclick="return toggle('urisplit');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb-module.html#urisplit">urisplit</a><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="urisplit-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="urisplit-expanded"><a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> Function for splitting URI string to tuple (protocol, host, port, path).</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-docstring"> e.g. urisplit('http://httpcm.jabber.org:123/webclient') returns ('http',</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"><tt class="py-docstring"> 'httpcm.jabber.org', 123, '/webclient') return 443 as default port if proto</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-docstring"> is https else 80</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-name">splitted</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlsplit</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">proto</tt><tt class="py-op">,</tt> <tt class="py-name">host</tt><tt class="py-op">,</tt> <tt class="py-name">path</tt> <tt class="py-op">=</tt> <tt class="py-name">splitted</tt><tt class="py-op">.</tt><tt class="py-name">scheme</tt><tt class="py-op">,</tt> <tt class="py-name">splitted</tt><tt class="py-op">.</tt><tt class="py-name">hostname</tt><tt class="py-op">,</tt> <tt class="py-name">splitted</tt><tt class="py-op">.</tt><tt class="py-name">path</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-name">splitted</tt><tt class="py-op">.</tt><tt class="py-name">port</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt id="link-9" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-9', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'port cannot be extracted from BOSH URL %s, using default port'</tt> \ </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">port</tt><tt class="py-op">:</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">proto</tt> <tt class="py-op">==</tt> <tt class="py-string">'https'</tt><tt class="py-op">:</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-number">443</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-number">80</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">proto</tt><tt class="py-op">,</tt> <tt class="py-name">host</tt><tt class="py-op">,</tt> <tt class="py-name">port</tt><tt class="py-op">,</tt> <tt class="py-name">path</tt> </tt>
+</div><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> </tt>
+<a name="get_proxy_data_from_dict"></a><div id="get_proxy_data_from_dict-def"><a name="L65"></a><tt class="py-lineno"> 65</tt> <a class="py-toggle" href="#" id="get_proxy_data_from_dict-toggle" onclick="return toggle('get_proxy_data_from_dict');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb-module.html#get_proxy_data_from_dict">get_proxy_data_from_dict</a><tt class="py-op">(</tt><tt class="py-param">proxy</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="get_proxy_data_from_dict-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="get_proxy_data_from_dict-expanded"><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">tcp_host</tt><tt class="py-op">,</tt> <tt class="py-name">tcp_port</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_pass</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-name">proxy_type</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">proxy_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'bosh'</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_useproxy'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-comment"># with BOSH not over proxy we have to parse the hostname from BOSH URI</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">proto</tt><tt class="py-op">,</tt> <tt class="py-name">tcp_host</tt><tt class="py-op">,</tt> <tt class="py-name">tcp_port</tt><tt class="py-op">,</tt> <tt class="py-name">path</tt> <tt class="py-op">=</tt> <tt id="link-10" class="py-name" targets="Function nbxmpp.transports_nb.urisplit()=nbxmpp.transports_nb-module.html#urisplit"><a title="nbxmpp.transports_nb.urisplit" class="py-name" href="#" onclick="return doclink('link-10', 'urisplit', 'link-10');">urisplit</a></tt><tt class="py-op">(</tt><tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'bosh_uri'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-comment"># with proxy!=bosh or with bosh over HTTP proxy we're connecting to proxy</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-comment"># machine</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-name">tcp_host</tt><tt class="py-op">,</tt> <tt class="py-name">tcp_port</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'host'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'port'</tt><tt class="py-op">]</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">proxy</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method nbxmpp.bosh.KeyStack.get()=nbxmpp.bosh.KeyStack-class.html#get"><a title="nbxmpp.bosh.KeyStack.get" class="py-name" href="#" onclick="return doclink('link-11', 'get', 'link-11');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'useauth'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_pass</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'user'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">proxy</tt><tt class="py-op">[</tt><tt class="py-string">'pass'</tt><tt class="py-op">]</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tcp_host</tt><tt class="py-op">,</tt> <tt class="py-name">tcp_port</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_pass</tt> </tt>
+</div><a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-comment">#: timeout to connect to the server socket, it doesn't include auth</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable nbxmpp.transports_nb.CONNECT_TIMEOUT_SECONDS=nbxmpp.transports_nb-module.html#CONNECT_TIMEOUT_SECONDS"><a title="nbxmpp.transports_nb.CONNECT_TIMEOUT_SECONDS" class="py-name" href="#" onclick="return doclink('link-12', 'CONNECT_TIMEOUT_SECONDS', 'link-12');">CONNECT_TIMEOUT_SECONDS</a></tt> <tt class="py-op">=</tt> <tt class="py-number">30</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-comment">#: how long to wait for a disconnect to complete</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt id="link-13" class="py-name" targets="Variable nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS=nbxmpp.transports_nb-module.html#DISCONNECT_TIMEOUT_SECONDS"><a title="nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS" class="py-name" href="#" onclick="return doclink('link-13', 'DISCONNECT_TIMEOUT_SECONDS', 'link-13');">DISCONNECT_TIMEOUT_SECONDS</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-comment">#: size of the buffer which reads data from server</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-comment"># if lower, more stanzas will be fragmented and processed twice</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt id="link-14" class="py-name" targets="Variable nbxmpp.transports_nb.RECV_BUFSIZE=nbxmpp.transports_nb-module.html#RECV_BUFSIZE"><a title="nbxmpp.transports_nb.RECV_BUFSIZE" class="py-name" href="#" onclick="return doclink('link-14', 'RECV_BUFSIZE', 'link-14');">RECV_BUFSIZE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">32768</tt> <tt class="py-comment"># 2x maximum size of ssl packet, should be plenty</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-comment"># it's inefficient but should work. Problem is that connect machine makes wrong</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"><tt class="py-comment"># assumptions and that we only check for pending data in sockets but not in SSL</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"><tt class="py-comment"># buffer...</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt id="link-15" class="py-name" targets="Variable nbxmpp.transports_nb.DATA_RECEIVED=nbxmpp.transports_nb-module.html#DATA_RECEIVED"><a title="nbxmpp.transports_nb.DATA_RECEIVED" class="py-name" href="#" onclick="return doclink('link-15', 'DATA_RECEIVED', 'link-15');">DATA_RECEIVED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'DATA RECEIVED'</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt id="link-16" class="py-name" targets="Variable nbxmpp.transports_nb.DATA_SENT=nbxmpp.transports_nb-module.html#DATA_SENT"><a title="nbxmpp.transports_nb.DATA_SENT" class="py-name" href="#" onclick="return doclink('link-16', 'DATA_SENT', 'link-16');">DATA_SENT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'DATA SENT'</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt id="link-17" class="py-name" targets="Variable nbxmpp.transports_nb.DATA_ERROR=nbxmpp.transports_nb-module.html#DATA_ERROR"><a title="nbxmpp.transports_nb.DATA_ERROR" class="py-name" href="#" onclick="return doclink('link-17', 'DATA_ERROR', 'link-17');">DATA_ERROR</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'DATA ERROR'</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"><tt id="link-18" class="py-name" targets="Variable nbxmpp.transports_nb.DISCONNECTED=nbxmpp.transports_nb-module.html#DISCONNECTED"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-18', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'DISCONNECTED'</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"><tt id="link-19" class="py-name" targets="Variable nbxmpp.transports_nb.DISCONNECTING=nbxmpp.transports_nb-module.html#DISCONNECTING"><a title="nbxmpp.transports_nb.DISCONNECTING" class="py-name" href="#" onclick="return doclink('link-19', 'DISCONNECTING', 'link-19');">DISCONNECTING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'DISCONNECTING'</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"><tt id="link-20" class="py-name" targets="Variable nbxmpp.transports_nb.CONNECTING=nbxmpp.transports_nb-module.html#CONNECTING"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-20', 'CONNECTING', 'link-20');">CONNECTING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'CONNECTING'</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt id="link-21" class="py-name" targets="Variable nbxmpp.transports_nb.PROXY_CONNECTING=nbxmpp.transports_nb-module.html#PROXY_CONNECTING"><a title="nbxmpp.transports_nb.PROXY_CONNECTING" class="py-name" href="#" onclick="return doclink('link-21', 'PROXY_CONNECTING', 'link-21');">PROXY_CONNECTING</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'PROXY_CONNECTING'</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt id="link-22" class="py-name" targets="Variable nbxmpp.transports_nb.CONNECTED=nbxmpp.transports_nb-module.html#CONNECTED"><a title="nbxmpp.transports_nb.CONNECTED" class="py-name" href="#" onclick="return doclink('link-22', 'CONNECTED', 'link-22');">CONNECTED</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'CONNECTED'</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt id="link-23" class="py-name" targets="Variable nbxmpp.transports_nb.STATES=nbxmpp.transports_nb-module.html#STATES"><a title="nbxmpp.transports_nb.STATES" class="py-name" href="#" onclick="return doclink('link-23', 'STATES', 'link-23');">STATES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-24" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-24', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt><tt class="py-op">,</tt> <tt id="link-25" class="py-name"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-25', 'CONNECTING', 'link-20');">CONNECTING</a></tt><tt class="py-op">,</tt> <tt id="link-26" class="py-name"><a title="nbxmpp.transports_nb.PROXY_CONNECTING" class="py-name" href="#" onclick="return doclink('link-26', 'PROXY_CONNECTING', 'link-21');">PROXY_CONNECTING</a></tt><tt class="py-op">,</tt> <tt id="link-27" class="py-name"><a title="nbxmpp.transports_nb.CONNECTED" class="py-name" href="#" onclick="return doclink('link-27', 'CONNECTED', 'link-22');">CONNECTED</a></tt><tt class="py-op">,</tt> <tt id="link-28" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTING" class="py-name" href="#" onclick="return doclink('link-28', 'DISCONNECTING', 'link-19');">DISCONNECTING</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport"></a><div id="NonBlockingTransport-def"><a name="L103"></a><tt class="py-lineno">103</tt> <a class="py-toggle" href="#" id="NonBlockingTransport-toggle" onclick="return toggle('NonBlockingTransport');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a><tt class="py-op">(</tt><tt class="py-base-class">PlugIn</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingTransport-expanded"><a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"><tt class="py-docstring"> Abstract class representing a transport</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"><tt class="py-docstring"> Subclasses CAN have different constructor signature but connect method SHOULD</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"><tt class="py-docstring"> be the same.</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.__init__"></a><div id="NonBlockingTransport.__init__-def"><a name="L111"></a><tt class="py-lineno">111</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.__init__-toggle" onclick="return toggle('NonBlockingTransport.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">raise_event</tt><tt class="py-op">,</tt> <tt class="py-param">on_disconnect</tt><tt class="py-op">,</tt> <tt class="py-param">idlequeue</tt><tt class="py-op">,</tt> <tt class="py-param">estabilish_tls</tt><tt class="py-op">,</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-param">certs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.__init__-expanded"><a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"><tt class="py-docstring"> Each trasport class can have different constructor but it has to have at</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"><tt class="py-docstring"> least all the arguments of NonBlockingTransport constructor</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"><tt class="py-docstring"> :param raise_event: callback for monitoring of sent and received data</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"><tt class="py-docstring"> :param on_disconnect: callback called on disconnection during runtime</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"><tt class="py-docstring"> :param idlequeue: processing idlequeue</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> :param estabilish_tls: boolean whether to estabilish TLS connection after</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> TCP connection is done</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"><tt class="py-docstring"> :param certs: tuple of (cacerts, mycerts) see constructor of</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"><tt class="py-docstring"> tls_nb.NonBlockingTLS for more details</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt id="link-29" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-29', 'PlugIn', 'link-3');">PlugIn</a></tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method nbxmpp.auth_nb.NonBlockingBind.__init__()=nbxmpp.auth_nb.NonBlockingBind-class.html#__init__,Method nbxmpp.auth_nb.NonBlockingNonSASL.__init__()=nbxmpp.auth_nb.NonBlockingNonSASL-class.html#__init__,Method nbxmpp.auth_nb.SASL.__init__()=nbxmpp.auth_nb.SASL-class.html#__init__,Method nbxmpp.bosh.AckChecker.__init__()=nbxmpp.bosh.AckChecker-class.html#__init__,Method nbxmpp.bosh.KeyStack.__init__()=nbxmpp.bosh.KeyStack-class.html#__init__,Method nbxmpp.bosh.NonBlockingBOSH.__init__()=nbxmpp.bosh.NonBlockingBOSH-class.html#__init__,Method nbxmpp.client_nb.NonBlockingClient.__init__()=nbxmpp.client_nb.NonBlockingClient-class.html#__init__,Method nbxmpp.dispatcher_nb.XMPPDispatcher.__init__()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#__init__,Method nbxmpp.idlequeue.IdleCommand.__init__()=nbxmpp.idlequeue.IdleCommand-class.html#__init__,Method nbxmpp.idlequeue.IdleObject.__init__()=nbxmpp.idlequeue.IdleObject-class.html#__init__,Method nbxmpp.idlequeue.IdleQueue.__init__()=nbxmpp.idlequeue.IdleQueue-class.html#__init__,Method nbxmpp.plugin.PlugIn.__init__()=nbxmpp.plugin.PlugIn-class.html#__init__,Method nbxmpp.protocol.Acks.__init__()=nbxmpp.protocol.Acks-class.html#__init__,Method nbxmpp.protocol.BOSHBody.__init__()=nbxmpp.protocol.BOSHBody-class.html#__init__,Method nbxmpp.protocol.DataField.__init__()=nbxmpp.protocol.DataField-class.html#__init__,Method nbxmpp.protocol.DataForm.__init__()=nbxmpp.protocol.DataForm-class.html#__init__,Method nbxmpp.protocol.Error.__init__()=nbxmpp.protocol.Error-class.html#__init__,Method nbxmpp.protocol.ErrorNode.__init__()=nbxmpp.protocol.ErrorNode-class.html#__init__,Method nbxmpp.protocol.Hashes.__init__()=nbxmpp.protocol.Hashes-class.html#__init__,Method nbxmpp.protocol.Iq.__init__()=nbxmpp.protocol.Iq-class.html#__init__,Method nbxmpp.protocol.JID.__init__()=nbxmpp.protocol.JID-class.html#__init__,Method nbxmpp.protocol.Message.__init__()=nbxmpp.protocol.Message-class.html#__init__,Method nbxmpp.protocol.Presence.__init__()=nbxmpp.protocol.Presence-class.html#__init__,Method nbxmpp.protocol.Protocol.__init__()=nbxmpp.protocol.Protocol-class.html#__init__,Method nbxmpp.proxy_connectors.ProxyConnector.__init__()=nbxmpp.proxy_connectors.ProxyConnector-class.html#__init__,Method nbxmpp.roster_nb.NonBlockingRoster.__init__()=nbxmpp.roster_nb.NonBlockingRoster-class.html#__init__,Method nbxmpp.simplexml.Node.__init__()=nbxmpp.simplexml.Node-class.html#__init__,Method nbxmpp.simplexml.NodeBuilder.__init__()=nbxmpp.simplexml.NodeBuilder-class.html#__init__,Method nbxmpp.simplexml.T.__init__()=nbxmpp.simplexml.T-class.html#__init__,Method nbxmpp.smacks.Smacks.__init__()=nbxmpp.smacks.Smacks-class.html#__init__,Method nbxmpp.stringprepare.EmptyMappingTable.__init__()=nbxmpp.stringprepare.EmptyMappingTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTable.__init__()=nbxmpp.stringprepare.LookupTable-class.html#__init__,Method nbxmpp.stringprepare.LookupTableFromFunction.__init__()=nbxmpp.stringprepare.LookupTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.MappingTableFromFunction.__init__()=nbxmpp.stringprepare.MappingTableFromFunction-class.html#__init__,Method nbxmpp.stringprepare.Profile.__init__()=nbxmpp.stringprepare.Profile-class.html#__init__,Method nbxmpp.tls_nb.NonBlockingTLS.__init__()=nbxmpp.tls_nb.NonBlockingTLS-class.html#__init__,Method nbxmpp.tls_nb.PyOpenSSLWrapper.__init__()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.Error.__init__()=nbxmpp.tls_nb.SSLWrapper.Error-class.html#__init__,Method nbxmpp.tls_nb.SSLWrapper.__init__()=nbxmpp.tls_nb.SSLWrapper-class.html#__init__,Method nbxmpp.tls_nb.StdlibSSLWrapper.__init__()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingHTTP.__init__()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTCP.__init__()=nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__,Method nbxmpp.transports_nb.NonBlockingTransport.__init__()=nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-30', '__init__', 'link-30');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method nbxmpp.client_nb.NonBlockingClient.raise_event()=nbxmpp.client_nb.NonBlockingClient-class.html#raise_event"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-31', 'raise_event', 'link-31');">raise_event</a></tt> <tt class="py-op">=</tt> <tt id="link-32" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-32', 'raise_event', 'link-31');">raise_event</a></tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_disconnect</tt> <tt class="py-op">=</tt> <tt class="py-name">on_disconnect</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-33', 'idlequeue', 'link-4');">idlequeue</a></tt> <tt class="py-op">=</tt> <tt id="link-34" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-34', 'idlequeue', 'link-4');">idlequeue</a></tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">conn_5tuple</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.set_state()=nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_state" class="py-name" href="#" onclick="return doclink('link-35', 'set_state', 'link-35');">set_state</a></tt><tt class="py-op">(</tt><tt id="link-36" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-36', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">estabilish_tls</tt> <tt class="py-op">=</tt> <tt class="py-name">estabilish_tls</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">certs</tt> <tt class="py-op">=</tt> <tt class="py-name">certs</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-comment"># type of used ssl lib (if any) will be assigned to this member var</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_exported_methods</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.onreceive()=nbxmpp.bosh.NonBlockingBOSH-class.html#onreceive,Method nbxmpp.transports_nb.NonBlockingTransport.onreceive()=nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-37', 'onreceive', 'link-37');">onreceive</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout" class="py-name" href="#" onclick="return doclink('link-38', 'set_send_timeout', 'link-38');">set_send_timeout</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2()=nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2" class="py-name" href="#" onclick="return doclink('link-39', 'set_send_timeout2', 'link-39');">set_send_timeout2</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.set_timeout()=nbxmpp.bosh.NonBlockingBOSH-class.html#set_timeout,Method nbxmpp.transports_nb.NonBlockingTCP.set_timeout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout,Method nbxmpp.transports_nb.NonBlockingTransport.set_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout"><a title="nbxmpp.bosh.NonBlockingBOSH.set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout" class="py-name" href="#" onclick="return doclink('link-40', 'set_timeout', 'link-40');">set_timeout</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.remove_timeout()=nbxmpp.idlequeue.IdleQueue-class.html#remove_timeout,Method nbxmpp.transports_nb.NonBlockingTCP.remove_timeout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout,Method nbxmpp.transports_nb.NonBlockingTransport.remove_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-41', 'remove_timeout', 'link-41');">remove_timeout</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.start_disconnect()=nbxmpp.bosh.NonBlockingBOSH-class.html#start_disconnect,Method nbxmpp.transports_nb.NonBlockingTCP.start_disconnect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect,Method nbxmpp.transports_nb.NonBlockingTransport.start_disconnect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect"><a title="nbxmpp.bosh.NonBlockingBOSH.start_disconnect
+nbxmpp.transports_nb.NonBlockingTCP.start_disconnect
+nbxmpp.transports_nb.NonBlockingTransport.start_disconnect" class="py-name" href="#" onclick="return doclink('link-42', 'start_disconnect', 'link-42');">start_disconnect</a></tt><tt class="py-op">]</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-comment"># time to wait for SOME stanza to come and then send keepalive</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-comment"># in case we want to something different than sending keepalives</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout2</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.plugin"></a><div id="NonBlockingTransport.plugin-def"><a name="L151"></a><tt class="py-lineno">151</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.plugin-toggle" onclick="return toggle('NonBlockingTransport.plugin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin">plugin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">owner</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.plugin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.plugin-expanded"><a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-name">owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
+</div><a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.plugout"></a><div id="NonBlockingTransport.plugout-def"><a name="L154"></a><tt class="py-lineno">154</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.plugout-toggle" onclick="return toggle('NonBlockingTransport.plugout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout">plugout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.plugout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.plugout-expanded"><a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt class="py-name">Connection</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.disconnect()=nbxmpp.bosh.NonBlockingBOSH-class.html#disconnect,Method nbxmpp.client_nb.NonBlockingClient.disconnect()=nbxmpp.client_nb.NonBlockingClient-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTCP.disconnect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect,Method nbxmpp.transports_nb.NonBlockingTransport.disconnect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-43', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.connect"></a><div id="NonBlockingTransport.connect-def"><a name="L159"></a><tt class="py-lineno">159</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.connect-toggle" onclick="return toggle('NonBlockingTransport.connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#connect">connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">conn_5tuple</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect_failure</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.connect-expanded"><a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"><tt class="py-docstring"> Creates and connects transport to server and port defined in conn_5tuple</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"><tt class="py-docstring"> which should be item from list returned from getaddrinfo</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"><tt class="py-docstring"> :param conn_5tuple: 5-tuple returned from getaddrinfo</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"><tt class="py-docstring"> :param on_connect: callback called on successful connect to the server</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"><tt class="py-docstring"> :param on_connect_failure: callback called on failure when connecting</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect</tt> <tt class="py-op">=</tt> <tt class="py-name">on_connect</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect_failure</tt> <tt class="py-op">=</tt> <tt class="py-name">on_connect_failure</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-name">conn_5tuple</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">conn_5tuple</tt> <tt class="py-op">=</tt> <tt class="py-name">conn_5tuple</tt> </tt>
+</div><a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.set_state"></a><div id="NonBlockingTransport.set_state-def"><a name="L173"></a><tt class="py-lineno">173</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.set_state-toggle" onclick="return toggle('NonBlockingTransport.set_state');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state">set_state</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">newstate</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.set_state-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.set_state-expanded"><a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-keyword">assert</tt><tt class="py-op">(</tt><tt class="py-name">newstate</tt> <tt class="py-keyword">in</tt> <tt id="link-44" class="py-name"><a title="nbxmpp.transports_nb.STATES" class="py-name" href="#" onclick="return doclink('link-44', 'STATES', 'link-23');">STATES</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt class="py-name">newstate</tt> </tt>
+</div><a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.get_state"></a><div id="NonBlockingTransport.get_state-def"><a name="L177"></a><tt class="py-lineno">177</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.get_state-toggle" onclick="return toggle('NonBlockingTransport.get_state');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state">get_state</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.get_state-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.get_state-expanded"><a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> </tt>
+</div><a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport._on_connect"></a><div id="NonBlockingTransport._on_connect-def"><a name="L180"></a><tt class="py-lineno">180</tt> <a class="py-toggle" href="#" id="NonBlockingTransport._on_connect-toggle" onclick="return toggle('NonBlockingTransport._on_connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect">_on_connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport._on_connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport._on_connect-expanded"><a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"><tt class="py-docstring"> Preceeds call of on_connect callback</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-comment"># data is reference to socket wrapper instance. We don't need it in client</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-comment"># because</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_state" class="py-name" href="#" onclick="return doclink('link-45', 'set_state', 'link-35');">set_state</a></tt><tt class="py-op">(</tt><tt id="link-46" class="py-name"><a title="nbxmpp.transports_nb.CONNECTED" class="py-name" href="#" onclick="return doclink('link-46', 'CONNECTED', 'link-22');">CONNECTED</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport._on_connect_failure"></a><div id="NonBlockingTransport._on_connect_failure-def"><a name="L189"></a><tt class="py-lineno">189</tt> <a class="py-toggle" href="#" id="NonBlockingTransport._on_connect_failure-toggle" onclick="return toggle('NonBlockingTransport._on_connect_failure');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure">_on_connect_failure</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">err_message</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport._on_connect_failure-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport._on_connect_failure-expanded"><a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"><tt class="py-docstring"> Preceeds call of on_connect_failure callback</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-comment"># In case of error while connecting we need to disconnect transport</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-comment"># but we don't want to call DisconnectHandlers from client,</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-comment"># thus the do_callback=False</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-47', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_connect_failure</tt><tt class="py-op">(</tt><tt class="py-name">err_message</tt><tt class="py-op">=</tt><tt class="py-name">err_message</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.send"></a><div id="NonBlockingTransport.send-def"><a name="L199"></a><tt class="py-lineno">199</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.send-toggle" onclick="return toggle('NonBlockingTransport.send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#send">send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">raw_data</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.send-expanded"><a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.get_state()=nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-48', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-49" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-49', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt id="link-50" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-50', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Unable to send %s \n because state is %s.'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">raw_data</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-51', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.disconnect"></a><div id="NonBlockingTransport.disconnect-def"><a name="L204"></a><tt class="py-lineno">204</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.disconnect-toggle" onclick="return toggle('NonBlockingTransport.disconnect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect">disconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.disconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.disconnect-expanded"><a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_state" class="py-name" href="#" onclick="return doclink('link-52', 'set_state', 'link-35');">set_state</a></tt><tt class="py-op">(</tt><tt id="link-53" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-53', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">do_callback</tt><tt class="py-op">:</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-comment"># invoke callback given in __init__</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_disconnect</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.onreceive"></a><div id="NonBlockingTransport.onreceive-def"><a name="L210"></a><tt class="py-lineno">210</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.onreceive-toggle" onclick="return toggle('NonBlockingTransport.onreceive');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive">onreceive</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">recv_handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.onreceive-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.onreceive-expanded"><a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"><tt class="py-docstring"> Set the on_receive callback.</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"><tt class="py-docstring"> onreceive(None) sets callback to Dispatcher.ProcessNonBlocking which is</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"><tt class="py-docstring"> the default one that will decide what to do with received stanza based on</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"><tt class="py-docstring"> its tag name and namespace.</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"><tt class="py-docstring"> Do not confuse it with on_receive() method, which is the callback</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"><tt class="py-docstring"> itself.</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">recv_handler</tt><tt class="py-op">:</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-string">'_owner'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">,</tt> <tt class="py-string">'Dispatcher'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_owner</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name" targets="Class nbxmpp.dispatcher_nb.Dispatcher=nbxmpp.dispatcher_nb.Dispatcher-class.html"><a title="nbxmpp.dispatcher_nb.Dispatcher" class="py-name" href="#" onclick="return doclink('link-54', 'Dispatcher', 'link-54');">Dispatcher</a></tt><tt class="py-op">.</tt><tt id="link-55" class="py-name" targets="Method nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.BOSHDispatcher-class.html#ProcessNonBlocking,Method nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#ProcessNonBlocking"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.ProcessNonBlocking
+nbxmpp.dispatcher_nb.XMPPDispatcher.ProcessNonBlocking" class="py-name" href="#" onclick="return doclink('link-55', 'ProcessNonBlocking', 'link-55');">ProcessNonBlocking</a></tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt id="link-56" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-56', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'No Dispatcher plugged. Received data will not be processed'</tt><tt class="py-op">)</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt> <tt class="py-op">=</tt> <tt class="py-name">recv_handler</tt> </tt>
+</div><a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport._tcp_connecting_started"></a><div id="NonBlockingTransport._tcp_connecting_started-def"><a name="L230"></a><tt class="py-lineno">230</tt> <a class="py-toggle" href="#" id="NonBlockingTransport._tcp_connecting_started-toggle" onclick="return toggle('NonBlockingTransport._tcp_connecting_started');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started">_tcp_connecting_started</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport._tcp_connecting_started-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport._tcp_connecting_started-expanded"><a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_state" class="py-name" href="#" onclick="return doclink('link-57', 'set_state', 'link-35');">set_state</a></tt><tt class="py-op">(</tt><tt id="link-58" class="py-name"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-58', 'CONNECTING', 'link-20');">CONNECTING</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.read_timeout"></a><div id="NonBlockingTransport.read_timeout-def"><a name="L233"></a><tt class="py-lineno">233</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.read_timeout-toggle" onclick="return toggle('NonBlockingTransport.read_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout">read_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.read_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.read_timeout-expanded"><a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"> Called when there's no response from server in defined timeout</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout</tt><tt class="py-op">:</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout"><a title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout" class="py-name" href="#" onclick="return doclink('link-59', 'renew_send_timeout', 'link-59');">renew_send_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.read_timeout2"></a><div id="NonBlockingTransport.read_timeout2-def"><a name="L241"></a><tt class="py-lineno">241</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.read_timeout2-toggle" onclick="return toggle('NonBlockingTransport.read_timeout2');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2">read_timeout2</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.read_timeout2-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.read_timeout2-expanded"><a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"><tt class="py-docstring"> called when there's no response from server in defined timeout</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout2</tt><tt class="py-op">:</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout2</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2()=nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2"><a title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2" class="py-name" href="#" onclick="return doclink('link-60', 'renew_send_timeout2', 'link-60');">renew_send_timeout2</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.renew_send_timeout"></a><div id="NonBlockingTransport.renew_send_timeout-def"><a name="L249"></a><tt class="py-lineno">249</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.renew_send_timeout-toggle" onclick="return toggle('NonBlockingTransport.renew_send_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout">renew_send_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.renew_send_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.renew_send_timeout-expanded"><a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout" class="py-name" href="#" onclick="return doclink('link-61', 'set_timeout', 'link-40');">set_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.renew_send_timeout2"></a><div id="NonBlockingTransport.renew_send_timeout2-def"><a name="L253"></a><tt class="py-lineno">253</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.renew_send_timeout2-toggle" onclick="return toggle('NonBlockingTransport.renew_send_timeout2');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2">renew_send_timeout2</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.renew_send_timeout2-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.renew_send_timeout2-expanded"><a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout2</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout2</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.set_timeout2()=nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_timeout2" class="py-name" href="#" onclick="return doclink('link-62', 'set_timeout2', 'link-62');">set_timeout2</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout2</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.set_timeout"></a><div id="NonBlockingTransport.set_timeout-def"><a name="L257"></a><tt class="py-lineno">257</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.set_timeout-toggle" onclick="return toggle('NonBlockingTransport.set_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout">set_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.set_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.set_timeout-expanded"><a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-63', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.set_read_timeout()=nbxmpp.idlequeue.IdleQueue-class.html#set_read_timeout"><a title="nbxmpp.idlequeue.IdleQueue.set_read_timeout" class="py-name" href="#" onclick="return doclink('link-64', 'set_read_timeout', 'link-64');">set_read_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.set_timeout2"></a><div id="NonBlockingTransport.set_timeout2-def"><a name="L260"></a><tt class="py-lineno">260</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.set_timeout2-toggle" onclick="return toggle('NonBlockingTransport.set_timeout2');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2">set_timeout2</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.set_timeout2-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.set_timeout2-expanded"><a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-65', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.set_read_timeout" class="py-name" href="#" onclick="return doclink('link-66', 'set_read_timeout', 'link-64');">set_read_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">timeout2</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport.read_timeout2()=nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2"><a title="nbxmpp.transports_nb.NonBlockingTransport.read_timeout2" class="py-name" href="#" onclick="return doclink('link-67', 'read_timeout2', 'link-67');">read_timeout2</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.get_fd"></a><div id="NonBlockingTransport.get_fd-def"><a name="L263"></a><tt class="py-lineno">263</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.get_fd-toggle" onclick="return toggle('NonBlockingTransport.get_fd');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd">get_fd</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.get_fd-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.get_fd-expanded"><a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.remove_timeout"></a><div id="NonBlockingTransport.remove_timeout-def"><a name="L266"></a><tt class="py-lineno">266</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.remove_timeout-toggle" onclick="return toggle('NonBlockingTransport.remove_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout">remove_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.remove_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.remove_timeout-expanded"><a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-68', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-69" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-69', 'remove_timeout', 'link-41');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.set_send_timeout"></a><div id="NonBlockingTransport.set_send_timeout-def"><a name="L269"></a><tt class="py-lineno">269</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.set_send_timeout-toggle" onclick="return toggle('NonBlockingTransport.set_send_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout">set_send_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">on_timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.set_send_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.set_send_timeout-expanded"><a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout</tt> <tt class="py-op">=</tt> <tt class="py-name">timeout</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">on_timeout</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTransport.set_send_timeout2"></a><div id="NonBlockingTransport.set_send_timeout2-def"><a name="L276"></a><tt class="py-lineno">276</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.set_send_timeout2-toggle" onclick="return toggle('NonBlockingTransport.set_send_timeout2');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2">set_send_timeout2</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout2</tt><tt class="py-op">,</tt> <tt class="py-param">on_timeout2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.set_send_timeout2-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.set_send_timeout2-expanded"><a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout2</tt> <tt class="py-op">=</tt> <tt class="py-name">timeout2</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendtimeout2</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout2</tt> <tt class="py-op">=</tt> <tt class="py-name">on_timeout2</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_timeout2</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: where and why does this need to be called</tt> </tt>
+<a name="NonBlockingTransport.start_disconnect"></a><div id="NonBlockingTransport.start_disconnect-def"><a name="L284"></a><tt class="py-lineno">284</tt> <a class="py-toggle" href="#" id="NonBlockingTransport.start_disconnect-toggle" onclick="return toggle('NonBlockingTransport.start_disconnect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect">start_disconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTransport.start_disconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTransport.start_disconnect-expanded"><a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_state" class="py-name" href="#" onclick="return doclink('link-70', 'set_state', 'link-35');">set_state</a></tt><tt class="py-op">(</tt><tt id="link-71" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTING" class="py-name" href="#" onclick="return doclink('link-71', 'DISCONNECTING', 'link-19');">DISCONNECTING</a></tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP"></a><div id="NonBlockingTCP-def"><a name="L288"></a><tt class="py-lineno">288</tt> <a class="py-toggle" href="#" id="NonBlockingTCP-toggle" onclick="return toggle('NonBlockingTCP');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a><tt class="py-op">(</tt><tt class="py-base-class">NonBlockingTransport</tt><tt class="py-op">,</tt> <tt class="py-base-class">IdleObject</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingTCP-expanded"><a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"><tt class="py-docstring"> Non-blocking TCP socket wrapper</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"><tt class="py-docstring"> It is used for simple XMPP connection. Can be connected via proxy and can</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"><tt class="py-docstring"> estabilish TLS connection.</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="NonBlockingTCP.__init__"></a><div id="NonBlockingTCP.__init__-def"><a name="L295"></a><tt class="py-lineno">295</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.__init__-toggle" onclick="return toggle('NonBlockingTCP.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">raise_event</tt><tt class="py-op">,</tt> <tt class="py-param">on_disconnect</tt><tt class="py-op">,</tt> <tt class="py-param">idlequeue</tt><tt class="py-op">,</tt> <tt class="py-param">estabilish_tls</tt><tt class="py-op">,</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-param">certs</tt><tt class="py-op">,</tt> <tt class="py-param">proxy_dict</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.__init__-expanded"><a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"><tt class="py-docstring"> :param proxy_dict: dictionary with proxy data as loaded from config file</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt id="link-72" class="py-name" targets="Class nbxmpp.transports_nb.NonBlockingTransport=nbxmpp.transports_nb.NonBlockingTransport-class.html"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-72', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-73', '__init__', 'link-30');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-74" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-74', 'raise_event', 'link-31');">raise_event</a></tt><tt class="py-op">,</tt> <tt class="py-name">on_disconnect</tt><tt class="py-op">,</tt> <tt id="link-75" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-75', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-name">estabilish_tls</tt><tt class="py-op">,</tt> <tt class="py-name">certs</tt><tt class="py-op">)</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt id="link-76" class="py-name"><a title="nbxmpp.idlequeue.IdleObject" class="py-name" href="#" onclick="return doclink('link-76', 'IdleObject', 'link-5');">IdleObject</a></tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-77', '__init__', 'link-30');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-comment"># queue with messages to be send</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendqueue</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-comment"># bytes remained from the last send message</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt> <tt class="py-op">=</tt> <tt class="py-name">proxy_dict</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_remote_disconnect</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-78', 'disconnect', 'link-43');">disconnect</a></tt> </tt>
+</div><a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: transport should not be aware xmpp</tt> </tt>
+<a name="NonBlockingTCP.start_disconnect"></a><div id="NonBlockingTCP.start_disconnect-def"><a name="L314"></a><tt class="py-lineno">314</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.start_disconnect-toggle" onclick="return toggle('NonBlockingTCP.start_disconnect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect">start_disconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.start_disconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.start_disconnect-expanded"><a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt id="link-79" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-79', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.start_disconnect
+nbxmpp.transports_nb.NonBlockingTCP.start_disconnect
+nbxmpp.transports_nb.NonBlockingTransport.start_disconnect" class="py-name" href="#" onclick="return doclink('link-80', 'start_disconnect', 'link-42');">start_disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.send()=nbxmpp.bosh.NonBlockingBOSH-class.html#send,Method nbxmpp.dispatcher_nb.XMPPDispatcher.send()=nbxmpp.dispatcher_nb.XMPPDispatcher-class.html#send,Method nbxmpp.tls_nb.PyOpenSSLWrapper.send()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#send,Method nbxmpp.tls_nb.SSLWrapper.send()=nbxmpp.tls_nb.SSLWrapper-class.html#send,Method nbxmpp.tls_nb.StdlibSSLWrapper.send()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#send,Method nbxmpp.transports_nb.NonBlockingTCP.send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#send,Method nbxmpp.transports_nb.NonBlockingTransport.send()=nbxmpp.transports_nb.NonBlockingTransport-class.html#send"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-81', 'send', 'link-81');">send</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;/stream:stream&gt;'</tt><tt class="py-op">,</tt> <tt class="py-name">now</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-82', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.connect"></a><div id="NonBlockingTCP.connect-def"><a name="L319"></a><tt class="py-lineno">319</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.connect-toggle" onclick="return toggle('NonBlockingTCP.connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect">connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">conn_5tuple</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect</tt><tt class="py-op">,</tt> <tt class="py-param">on_connect_failure</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.connect-expanded"><a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt id="link-83" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-83', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-84" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.connect()=nbxmpp.bosh.NonBlockingBOSH-class.html#connect,Method nbxmpp.client_nb.NonBlockingClient.connect()=nbxmpp.client_nb.NonBlockingClient-class.html#connect,Method nbxmpp.transports_nb.NonBlockingTCP.connect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#connect,Method nbxmpp.transports_nb.NonBlockingTransport.connect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#connect"><a title="nbxmpp.bosh.NonBlockingBOSH.connect
+nbxmpp.client_nb.NonBlockingClient.connect
+nbxmpp.transports_nb.NonBlockingTCP.connect
+nbxmpp.transports_nb.NonBlockingTransport.connect" class="py-name" href="#" onclick="return doclink('link-84', 'connect', 'link-84');">connect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">conn_5tuple</tt><tt class="py-op">,</tt> <tt class="py-name">on_connect</tt><tt class="py-op">,</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-name">on_connect_failure</tt><tt class="py-op">)</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt id="link-85" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-85', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'NonBlockingTCP Connect :: About to connect to %s:%s'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">conn_5tuple</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure()=nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure"><a title="nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure" class="py-name" href="#" onclick="return doclink('link-86', '_on_connect_failure', 'link-86');">_on_connect_failure</a></tt><tt class="py-op">(</tt><tt class="py-string">'NonBlockingTCP Connect: Error while creating\</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"><tt class="py-string"> socket: %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_send</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-87', 'send', 'link-81');">send</a></tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_recv</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name" targets="Method nbxmpp.tls_nb.PyOpenSSLWrapper.recv()=nbxmpp.tls_nb.PyOpenSSLWrapper-class.html#recv,Method nbxmpp.tls_nb.SSLWrapper.recv()=nbxmpp.tls_nb.SSLWrapper-class.html#recv,Method nbxmpp.tls_nb.StdlibSSLWrapper.recv()=nbxmpp.tls_nb.StdlibSSLWrapper-class.html#recv"><a title="nbxmpp.tls_nb.PyOpenSSLWrapper.recv
+nbxmpp.tls_nb.SSLWrapper.recv
+nbxmpp.tls_nb.StdlibSSLWrapper.recv" class="py-name" href="#" onclick="return doclink('link-88', 'recv', 'link-88');">recv</a></tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt class="py-name">fileno</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-comment"># we want to be notified when send is possible to connected socket because</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-comment"># it means the TCP connection is estabilished</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTCP._plug_idle()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle"><a title="nbxmpp.transports_nb.NonBlockingTCP._plug_idle" class="py-name" href="#" onclick="return doclink('link-89', '_plug_idle', 'link-89');">_plug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">writable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">readable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peerhost</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-comment"># variable for errno symbol that will be found from exception raised</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-comment"># from connect()</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-name">errnum</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-name">errstr</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-comment"># set timeout for TCP connecting - if nonblocking connect() fails, pollend</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-comment"># is called. If if succeeds pollout is called.</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-90', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.set_read_timeout" class="py-name" href="#" onclick="return doclink('link-91', 'set_read_timeout', 'link-64');">set_read_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt id="link-92" class="py-name"><a title="nbxmpp.transports_nb.CONNECT_TIMEOUT_SECONDS" class="py-name" href="#" onclick="return doclink('link-92', 'CONNECT_TIMEOUT_SECONDS', 'link-12');">CONNECT_TIMEOUT_SECONDS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt class="py-name">setblocking</tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.connect
+nbxmpp.client_nb.NonBlockingClient.connect
+nbxmpp.transports_nb.NonBlockingTCP.connect
+nbxmpp.transports_nb.NonBlockingTransport.connect" class="py-name" href="#" onclick="return doclink('link-93', 'connect', 'link-84');">connect</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">exc</tt><tt class="py-op">:</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt> <tt class="py-op">=</tt> <tt class="py-name">exc</tt><tt class="py-op">.</tt><tt class="py-name">args</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">errnum</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EINPROGRESS</tt><tt class="py-op">,</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EALREADY</tt><tt class="py-op">,</tt> <tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">EWOULDBLOCK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-comment"># connecting in progress</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt id="link-94" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-94', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'After NB connect() of %s. "%s" raised =&gt; CONNECTING'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started()=nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started"><a title="nbxmpp.transports_nb.NonBlockingTransport._tcp_connecting_started" class="py-name" href="#" onclick="return doclink('link-95', '_tcp_connecting_started', 'link-95');">_tcp_connecting_started</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-comment"># if there was some other exception, call failure callback and unplug</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-comment"># transport which will also remove read_timeouts for descriptor</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure" class="py-name" href="#" onclick="return doclink('link-96', '_on_connect_failure', 'link-86');">_on_connect_failure</a></tt><tt class="py-op">(</tt><tt class="py-string">'Exception while connecting to %s:%s - %s %s'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">,</tt> <tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP._connect_to_proxy"></a><div id="NonBlockingTCP._connect_to_proxy-def"><a name="L368"></a><tt class="py-lineno">368</tt> <a class="py-toggle" href="#" id="NonBlockingTCP._connect_to_proxy-toggle" onclick="return toggle('NonBlockingTCP._connect_to_proxy');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy">_connect_to_proxy</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP._connect_to_proxy-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP._connect_to_proxy-expanded"><a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_state" class="py-name" href="#" onclick="return doclink('link-97', 'set_state', 'link-35');">set_state</a></tt><tt class="py-op">(</tt><tt id="link-98" class="py-name"><a title="nbxmpp.transports_nb.PROXY_CONNECTING" class="py-name" href="#" onclick="return doclink('link-98', 'PROXY_CONNECTING', 'link-21');">PROXY_CONNECTING</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'socks5'</tt><tt class="py-op">:</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-name">proxyclass</tt> <tt class="py-op">=</tt> <tt id="link-99" class="py-name"><a title="nbxmpp.proxy_connectors" class="py-name" href="#" onclick="return doclink('link-99', 'proxy_connectors', 'link-6');">proxy_connectors</a></tt><tt class="py-op">.</tt><tt id="link-100" class="py-name" targets="Class nbxmpp.proxy_connectors.SOCKS5Connector=nbxmpp.proxy_connectors.SOCKS5Connector-class.html"><a title="nbxmpp.proxy_connectors.SOCKS5Connector" class="py-name" href="#" onclick="return doclink('link-100', 'SOCKS5Connector', 'link-100');">SOCKS5Connector</a></tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'http'</tt> <tt class="py-op">:</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-name">proxyclass</tt> <tt class="py-op">=</tt> <tt id="link-101" class="py-name"><a title="nbxmpp.proxy_connectors" class="py-name" href="#" onclick="return doclink('link-101', 'proxy_connectors', 'link-6');">proxy_connectors</a></tt><tt class="py-op">.</tt><tt id="link-102" class="py-name" targets="Class nbxmpp.proxy_connectors.HTTPCONNECTConnector=nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html"><a title="nbxmpp.proxy_connectors.HTTPCONNECTConnector" class="py-name" href="#" onclick="return doclink('link-102', 'HTTPCONNECTConnector', 'link-102');">HTTPCONNECTConnector</a></tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-name">proxyclass</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name" targets="Class Method nbxmpp.dispatcher_nb.Dispatcher.get_instance()=nbxmpp.dispatcher_nb.Dispatcher-class.html#get_instance,Class Method nbxmpp.plugin.PlugIn.get_instance()=nbxmpp.plugin.PlugIn-class.html#get_instance,Class Method nbxmpp.proxy_connectors.ProxyConnector.get_instance()=nbxmpp.proxy_connectors.ProxyConnector-class.html#get_instance"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-103', 'get_instance', 'link-103');">get_instance</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> <tt class="py-name">send_method</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-104', 'send', 'link-81');">send</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> <tt id="link-105" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-105', 'onreceive', 'link-37');">onreceive</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.onreceive
+nbxmpp.transports_nb.NonBlockingTransport.onreceive" class="py-name" href="#" onclick="return doclink('link-106', 'onreceive', 'link-37');">onreceive</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-name">old_on_receive</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt><tt class="py-op">,</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-name">on_success</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH._on_connect()=nbxmpp.bosh.NonBlockingBOSH-class.html#_on_connect,Method nbxmpp.client_nb.NonBlockingClient._on_connect()=nbxmpp.client_nb.NonBlockingClient-class.html#_on_connect,Method nbxmpp.transports_nb.NonBlockingTCP._on_connect()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect,Method nbxmpp.transports_nb.NonBlockingTransport._on_connect()=nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-107', '_on_connect', 'link-107');">_on_connect</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-name">on_failure</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure" class="py-name" href="#" onclick="return doclink('link-108', '_on_connect_failure', 'link-86');">_on_connect_failure</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-name">xmpp_server</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'xmpp_server'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-name">proxy_creds</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">[</tt><tt class="py-string">'credentials'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP._on_connect"></a><div id="NonBlockingTCP._on_connect-def"><a name="L383"></a><tt class="py-lineno">383</tt> <a class="py-toggle" href="#" id="NonBlockingTCP._on_connect-toggle" onclick="return toggle('NonBlockingTCP._on_connect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect">_on_connect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP._on_connect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP._on_connect-expanded"><a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"><tt class="py-docstring"> Preceed invoking of on_connect callback. TCP connection is already</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"><tt class="py-docstring"> estabilished by this time</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">estabilish_tls</tt><tt class="py-op">:</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTCP.tls_init()=nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init"><a title="nbxmpp.transports_nb.NonBlockingTCP.tls_init" class="py-name" href="#" onclick="return doclink('link-109', 'tls_init', 'link-109');">tls_init</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-name">on_succ</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt><tt class="py-op">:</tt> <tt id="link-110" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-110', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-111', '_on_connect', 'link-107');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-name">on_fail</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure" class="py-name" href="#" onclick="return doclink('link-112', '_on_connect_failure', 'link-86');">_on_connect_failure</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-string">'error while estabilishing TLS'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt id="link-113" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-113', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-114', '_on_connect', 'link-107');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.tls_init"></a><div id="NonBlockingTCP.tls_init-def"><a name="L396"></a><tt class="py-lineno">396</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.tls_init-toggle" onclick="return toggle('NonBlockingTCP.tls_init');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init">tls_init</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">on_succ</tt><tt class="py-op">,</tt> <tt class="py-param">on_fail</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.tls_init-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.tls_init-expanded"><a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"><tt class="py-docstring"> Estabilishes TLS/SSL using this TCP connection by plugging a</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"><tt class="py-docstring"> NonBlockingTLS module</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-name">cacerts</tt><tt class="py-op">,</tt> <tt class="py-name">mycerts</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">certs</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt id="link-115" class="py-name"><a title="nbxmpp.tls_nb" class="py-name" href="#" onclick="return doclink('link-115', 'tls_nb', 'link-7');">tls_nb</a></tt><tt class="py-op">.</tt><tt id="link-116" class="py-name" targets="Class nbxmpp.tls_nb.NonBlockingTLS=nbxmpp.tls_nb.NonBlockingTLS-class.html"><a title="nbxmpp.tls_nb.NonBlockingTLS" class="py-name" href="#" onclick="return doclink('link-116', 'NonBlockingTLS', 'link-116');">NonBlockingTLS</a></tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="nbxmpp.dispatcher_nb.Dispatcher.get_instance
+nbxmpp.plugin.PlugIn.get_instance
+nbxmpp.proxy_connectors.ProxyConnector.get_instance" class="py-name" href="#" onclick="return doclink('link-117', 'get_instance', 'link-103');">get_instance</a></tt><tt class="py-op">(</tt><tt class="py-name">cacerts</tt><tt class="py-op">,</tt> <tt class="py-name">mycerts</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="nbxmpp.dispatcher_nb.BOSHDispatcher.PlugIn
+nbxmpp.dispatcher_nb.Dispatcher.PlugIn
+nbxmpp.plugin.PlugIn
+nbxmpp.plugin.PlugIn.PlugIn" class="py-name" href="#" onclick="return doclink('link-118', 'PlugIn', 'link-3');">PlugIn</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">result</tt><tt class="py-op">:</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-name">on_succ</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-name">on_fail</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.pollin"></a><div id="NonBlockingTCP.pollin-def"><a name="L408"></a><tt class="py-lineno">408</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.pollin-toggle" onclick="return toggle('NonBlockingTCP.pollin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin">pollin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.pollin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.pollin-expanded"><a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"><tt class="py-docstring"> Called by idlequeu when receive on plugged socket is possible</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt id="link-119" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-119', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'pollin called, state == %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-120', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTCP._do_receive()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive"><a title="nbxmpp.transports_nb.NonBlockingTCP._do_receive" class="py-name" href="#" onclick="return doclink('link-121', '_do_receive', 'link-121');">_do_receive</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.pollout"></a><div id="NonBlockingTCP.pollout-def"><a name="L415"></a><tt class="py-lineno">415</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.pollout-toggle" onclick="return toggle('NonBlockingTCP.pollout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout">pollout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.pollout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.pollout-expanded"><a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"><tt class="py-docstring"> Called by idlequeu when send to plugged socket is possible</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> <tt id="link-122" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-122', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'pollout called, state == %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-123', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-124', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-125" class="py-name"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-125', 'CONNECTING', 'link-20');">CONNECTING</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt id="link-126" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-126', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'%s socket wrapper connected'</tt> <tt class="py-op">%</tt> <tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-127', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-128', 'remove_timeout', 'link-41');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-129" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP._plug_idle" class="py-name" href="#" onclick="return doclink('link-129', '_plug_idle', 'link-89');">_plug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">writable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">readable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">peerhost</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt class="py-name">getsockname</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_dict</tt><tt class="py-op">:</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTCP._connect_to_proxy()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy"><a title="nbxmpp.transports_nb.NonBlockingTCP._connect_to_proxy" class="py-name" href="#" onclick="return doclink('link-130', '_connect_to_proxy', 'link-130');">_connect_to_proxy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH._on_connect
+nbxmpp.client_nb.NonBlockingClient._on_connect
+nbxmpp.transports_nb.NonBlockingTCP._on_connect
+nbxmpp.transports_nb.NonBlockingTransport._on_connect" class="py-name" href="#" onclick="return doclink('link-131', '_on_connect', 'link-107');">_on_connect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingHTTPBOSH._do_send()=nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#_do_send,Method nbxmpp.transports_nb.NonBlockingTCP._do_send()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send"><a title="nbxmpp.transports_nb.NonBlockingHTTPBOSH._do_send
+nbxmpp.transports_nb.NonBlockingTCP._do_send" class="py-name" href="#" onclick="return doclink('link-132', '_do_send', 'link-132');">_do_send</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.pollend"></a><div id="NonBlockingTCP.pollend-def"><a name="L433"></a><tt class="py-lineno">433</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.pollend-toggle" onclick="return toggle('NonBlockingTCP.pollend');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend">pollend</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.pollend-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.pollend-expanded"><a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"><tt class="py-docstring"> Called by idlequeue on TCP connection errors</tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt id="link-133" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-133', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'pollend called, state == %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-134', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-135', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-136" class="py-name"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-136', 'CONNECTING', 'link-20');">CONNECTING</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure" class="py-name" href="#" onclick="return doclink('link-137', '_on_connect_failure', 'link-86');">_on_connect_failure</a></tt><tt class="py-op">(</tt><tt class="py-string">'Error during connect to %s:%s'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-138', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.disconnect"></a><div id="NonBlockingTCP.disconnect-def"><a name="L445"></a><tt class="py-lineno">445</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.disconnect-toggle" onclick="return toggle('NonBlockingTCP.disconnect');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect">disconnect</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.disconnect-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.disconnect-expanded"><a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-139', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-140" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-140', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.set_state" class="py-name" href="#" onclick="return doclink('link-141', 'set_state', 'link-35');">set_state</a></tt><tt class="py-op">(</tt><tt id="link-142" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-142', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-143', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-144" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.unplug_idle()=nbxmpp.idlequeue.IdleQueue-class.html#unplug_idle"><a title="nbxmpp.idlequeue.IdleQueue.unplug_idle" class="py-name" href="#" onclick="return doclink('link-144', 'unplug_idle', 'link-144');">unplug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'NonBlockingTLS'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name"><a title="nbxmpp.tls_nb.NonBlockingTLS" class="py-name" href="#" onclick="return doclink('link-145', 'NonBlockingTLS', 'link-116');">NonBlockingTLS</a></tt><tt class="py-op">.</tt><tt id="link-146" class="py-name" targets="Method nbxmpp.plugin.PlugIn.PlugOut()=nbxmpp.plugin.PlugIn-class.html#PlugOut"><a title="nbxmpp.plugin.PlugIn.PlugOut" class="py-name" href="#" onclick="return doclink('link-146', 'PlugOut', 'link-146');">PlugOut</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt class="py-name">shutdown</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SHUT_RDWR</tt><tt class="py-op">)</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sock</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt id="link-147" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-147', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Error while disconnecting socket: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt id="link-148" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-148', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-149', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">do_callback</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.read_timeout"></a><div id="NonBlockingTCP.read_timeout-def"><a name="L460"></a><tt class="py-lineno">460</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.read_timeout-toggle" onclick="return toggle('NonBlockingTCP.read_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout">read_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.read_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.read_timeout-expanded"><a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt id="link-150" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-150', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'read_timeout called, state == %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-151', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-152', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-153" class="py-name"><a title="nbxmpp.transports_nb.CONNECTING" class="py-name" href="#" onclick="return doclink('link-153', 'CONNECTING', 'link-20');">CONNECTING</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-comment"># if read_timeout is called during connecting, connect() didn't end yet</tt> </tt>
+<a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-comment"># thus we have to call the tcp failure callback</tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport._on_connect_failure" class="py-name" href="#" onclick="return doclink('link-154', '_on_connect_failure', 'link-86');">_on_connect_failure</a></tt><tt class="py-op">(</tt><tt class="py-string">'Error during connect to %s:%s'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> <tt id="link-155" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-155', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-156" class="py-name" targets="Method nbxmpp.idlequeue.IdleCommand.read_timeout()=nbxmpp.idlequeue.IdleCommand-class.html#read_timeout,Method nbxmpp.idlequeue.IdleObject.read_timeout()=nbxmpp.idlequeue.IdleObject-class.html#read_timeout,Method nbxmpp.transports_nb.NonBlockingTCP.read_timeout()=nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout,Method nbxmpp.transports_nb.NonBlockingTransport.read_timeout()=nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout"><a title="nbxmpp.idlequeue.IdleCommand.read_timeout
+nbxmpp.idlequeue.IdleObject.read_timeout
+nbxmpp.transports_nb.NonBlockingTCP.read_timeout
+nbxmpp.transports_nb.NonBlockingTransport.read_timeout" class="py-name" href="#" onclick="return doclink('link-156', 'read_timeout', 'link-156');">read_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.set_timeout"></a><div id="NonBlockingTCP.set_timeout-def"><a name="L470"></a><tt class="py-lineno">470</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.set_timeout-toggle" onclick="return toggle('NonBlockingTCP.set_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout">set_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.set_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.set_timeout-expanded"><a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-157', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt id="link-158" class="py-name"><a title="nbxmpp.transports_nb.DISCONNECTED" class="py-name" href="#" onclick="return doclink('link-158', 'DISCONNECTED', 'link-18');">DISCONNECTED</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt> <tt class="py-op">!=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt id="link-159" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-159', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.set_timeout
+nbxmpp.transports_nb.NonBlockingTCP.set_timeout
+nbxmpp.transports_nb.NonBlockingTransport.set_timeout" class="py-name" href="#" onclick="return doclink('link-160', 'set_timeout', 'link-40');">set_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt id="link-161" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-161', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'set_timeout: TIMEOUT NOT SET: state is %s, fd is %s'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-162', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.remove_timeout"></a><div id="NonBlockingTCP.remove_timeout-def"><a name="L477"></a><tt class="py-lineno">477</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.remove_timeout-toggle" onclick="return toggle('NonBlockingTCP.remove_timeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout">remove_timeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.remove_timeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.remove_timeout-expanded"><a name="L478"></a><tt class="py-lineno">478</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">:</tt> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt id="link-163" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-163', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-164" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-164', 'remove_timeout', 'link-41');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt id="link-165" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-165', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'remove_timeout: no self.fd state is %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-166', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.send"></a><div id="NonBlockingTCP.send-def"><a name="L483"></a><tt class="py-lineno">483</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.send-toggle" onclick="return toggle('NonBlockingTCP.send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send">send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">raw_data</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.send-expanded"><a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"><tt class="py-docstring"> Append raw_data to the queue of messages to be send. If supplied data is</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"><tt class="py-docstring"> unicode string, encode it to utf-8.</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt id="link-167" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport" class="py-name" href="#" onclick="return doclink('link-167', 'NonBlockingTransport', 'link-72');">NonBlockingTransport</a></tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-168', 'send', 'link-81');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">raw_data</tt><tt class="py-op">,</tt> <tt class="py-name">now</tt><tt class="py-op">)</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-name">r</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-169" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingTCP.encode_stanza()=nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza"><a title="nbxmpp.transports_nb.NonBlockingTCP.encode_stanza" class="py-name" href="#" onclick="return doclink('link-169', 'encode_stanza', 'link-169');">encode_stanza</a></tt><tt class="py-op">(</tt><tt class="py-name">raw_data</tt><tt class="py-op">)</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">now</tt><tt class="py-op">:</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendqueue</tt><tt class="py-op">.</tt><tt class="py-name">insert</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">r</tt><tt class="py-op">)</tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingHTTPBOSH._do_send
+nbxmpp.transports_nb.NonBlockingTCP._do_send" class="py-name" href="#" onclick="return doclink('link-170', '_do_send', 'link-132');">_do_send</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendqueue</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">r</tt><tt class="py-op">)</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP._plug_idle" class="py-name" href="#" onclick="return doclink('link-171', '_plug_idle', 'link-89');">_plug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">writable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">readable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP.encode_stanza"></a><div id="NonBlockingTCP.encode_stanza-def"><a name="L500"></a><tt class="py-lineno">500</tt> <a class="py-toggle" href="#" id="NonBlockingTCP.encode_stanza-toggle" onclick="return toggle('NonBlockingTCP.encode_stanza');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza">encode_stanza</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stanza</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP.encode_stanza-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP.encode_stanza-expanded"><a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"><tt class="py-docstring"> Encode str or unicode to utf-8</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt id="link-172" class="py-name"><a title="nbxmpp.simplexml.ustr" class="py-name" href="#" onclick="return doclink('link-172', 'ustr', 'link-1');">ustr</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">stanza</tt> </tt>
+</div><a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP._plug_idle"></a><div id="NonBlockingTCP._plug_idle-def"><a name="L510"></a><tt class="py-lineno">510</tt> <a class="py-toggle" href="#" id="NonBlockingTCP._plug_idle-toggle" onclick="return toggle('NonBlockingTCP._plug_idle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle">_plug_idle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">writable</tt><tt class="py-op">,</tt> <tt class="py-param">readable</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP._plug_idle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP._plug_idle-expanded"><a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"><tt class="py-docstring"> Plug file descriptor of socket to Idlequeue</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"><tt class="py-docstring"> Plugged socket will be watched for "send possible" or/and "recv possible"</tt> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"><tt class="py-docstring"> events. pollin() callback is invoked on "recv possible", pollout() on</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"><tt class="py-docstring"> "send_possible".</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"><tt class="py-docstring"> Plugged socket will always be watched for "error" event - in that case,</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"><tt class="py-docstring"> pollend() is called.</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> <tt id="link-173" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-173', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Plugging fd %d, W:%s, R:%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt class="py-name">writable</tt><tt class="py-op">,</tt> <tt class="py-name">readable</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-174', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">.</tt><tt id="link-175" class="py-name" targets="Method nbxmpp.idlequeue.IdleQueue.plug_idle()=nbxmpp.idlequeue.IdleQueue-class.html#plug_idle"><a title="nbxmpp.idlequeue.IdleQueue.plug_idle" class="py-name" href="#" onclick="return doclink('link-175', 'plug_idle', 'link-175');">plug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">writable</tt><tt class="py-op">,</tt> <tt class="py-name">readable</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP._do_send"></a><div id="NonBlockingTCP._do_send-def"><a name="L524"></a><tt class="py-lineno">524</tt> <a class="py-toggle" href="#" id="NonBlockingTCP._do_send-toggle" onclick="return toggle('NonBlockingTCP._do_send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send">_do_send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP._do_send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP._do_send-expanded"><a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"><tt class="py-docstring"> Called when send() to connected socket is possible. First message from</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"><tt class="py-docstring"> sendqueue will be sent</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt><tt class="py-op">:</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendqueue</tt><tt class="py-op">:</tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> <tt id="link-176" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-176', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">'calling send on empty buffer and queue'</tt><tt class="py-op">)</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-177" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP._plug_idle" class="py-name" href="#" onclick="return doclink('link-177', '_plug_idle', 'link-89');">_plug_idle</a></tt><tt class="py-op">(</tt><tt class="py-name">writable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">,</tt> <tt class="py-name">readable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendqueue</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-name">send_count</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_send</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt><tt class="py-op">)</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">send_count</tt><tt class="py-op">:</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> <tt class="py-name">sent_data</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-name">send_count</tt><tt class="py-op">]</tt> </tt>
+<a name="L539"></a><tt class="py-lineno">539</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt><tt class="py-op">[</tt><tt class="py-name">send_count</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
+<a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP._plug_idle" class="py-name" href="#" onclick="return doclink('link-178', '_plug_idle', 'link-89');">_plug_idle</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"> <tt class="py-name">writable</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendqueue</tt><tt class="py-op">!=</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt><tt class="py-op">!=</tt><tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"> <tt class="py-name">readable</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-179', 'raise_event', 'link-31');">raise_event</a></tt><tt class="py-op">(</tt><tt id="link-180" class="py-name"><a title="nbxmpp.transports_nb.DATA_SENT" class="py-name" href="#" onclick="return doclink('link-180', 'DATA_SENT', 'link-16');">DATA_SENT</a></tt><tt class="py-op">,</tt> <tt class="py-name">sent_data</tt><tt class="py-op">)</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> <tt id="link-181" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-181', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'_do_send:'</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-name">traceback</tt><tt class="py-op">.</tt><tt class="py-name">print_exc</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-182', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP._do_receive"></a><div id="NonBlockingTCP._do_receive-def"><a name="L550"></a><tt class="py-lineno">550</tt> <a class="py-toggle" href="#" id="NonBlockingTCP._do_receive-toggle" onclick="return toggle('NonBlockingTCP._do_receive');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive">_do_receive</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP._do_receive-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP._do_receive-expanded"><a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"><tt class="py-docstring"> Reads all pending incoming data. Will call owner's disconnected() method</tt> </tt>
+<a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"><tt class="py-docstring"> if appropriate</tt> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"> <tt class="py-name">errnum</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-name">errstr</tt> <tt class="py-op">=</tt> <tt class="py-string">'No Error Set'</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> <tt class="py-comment"># get as many bites, as possible, but not more than RECV_BUFSIZE</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"> <tt class="py-name">received</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_recv</tt><tt class="py-op">(</tt><tt id="link-183" class="py-name"><a title="nbxmpp.transports_nb.RECV_BUFSIZE" class="py-name" href="#" onclick="return doclink('link-183', 'RECV_BUFSIZE', 'link-14');">RECV_BUFSIZE</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"> <tt id="link-184" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-184', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"_do_receive: got %s:"</tt> <tt class="py-op">%</tt> <tt class="py-name">received</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-185" class="py-name"><a title="nbxmpp.tls_nb" class="py-name" href="#" onclick="return doclink('link-185', 'tls_nb', 'link-7');">tls_nb</a></tt><tt class="py-op">.</tt><tt id="link-186" class="py-name" targets="Class nbxmpp.tls_nb.SSLWrapper=nbxmpp.tls_nb.SSLWrapper-class.html"><a title="nbxmpp.tls_nb.SSLWrapper" class="py-name" href="#" onclick="return doclink('link-186', 'SSLWrapper', 'link-186');">SSLWrapper</a></tt><tt class="py-op">.</tt><tt id="link-187" class="py-name" targets="Class nbxmpp.protocol.Error=nbxmpp.protocol.Error-class.html,Class nbxmpp.tls_nb.SSLWrapper.Error=nbxmpp.tls_nb.SSLWrapper.Error-class.html"><a title="nbxmpp.protocol.Error
+nbxmpp.tls_nb.SSLWrapper.Error" class="py-name" href="#" onclick="return doclink('link-187', 'Error', 'link-187');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"> <tt id="link-188" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-188', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"_do_receive, caught SSL error, got %s:"</tt> <tt class="py-op">%</tt> <tt class="py-name">received</tt><tt class="py-op">,</tt> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> <tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt> <tt class="py-op">=</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">errno</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">strerror</tt> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> </tt>
+<a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">received</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
+<a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-name">errstr</tt> <tt class="py-op">=</tt> <tt class="py-string">'zero bytes on recv'</tt> </tt>
+<a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> </tt>
+<a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">received</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> \ </tt>
+<a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> <tt class="py-op">==</tt> <tt id="link-189" class="py-name"><a title="nbxmpp.tls_nb" class="py-name" href="#" onclick="return doclink('link-189', 'tls_nb', 'link-7');">tls_nb</a></tt><tt class="py-op">.</tt><tt id="link-190" class="py-name" targets="Variable nbxmpp.tls_nb.PYSTDLIB=nbxmpp.tls_nb-module.html#PYSTDLIB"><a title="nbxmpp.tls_nb.PYSTDLIB" class="py-name" href="#" onclick="return doclink('link-190', 'PYSTDLIB', 'link-190');">PYSTDLIB</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">errnum</tt> <tt class="py-op">==</tt> <tt class="py-number">8</tt> <tt class="py-op">)</tt> <tt class="py-keyword">or</tt> \ </tt>
+<a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">ssl_lib</tt> <tt class="py-op">==</tt> <tt id="link-191" class="py-name"><a title="nbxmpp.tls_nb" class="py-name" href="#" onclick="return doclink('link-191', 'tls_nb', 'link-7');">tls_nb</a></tt><tt class="py-op">.</tt><tt id="link-192" class="py-name" targets="Variable nbxmpp.tls_nb.PYOPENSSL=nbxmpp.tls_nb-module.html#PYOPENSSL"><a title="nbxmpp.tls_nb.PYOPENSSL" class="py-name" href="#" onclick="return doclink('link-192', 'PYOPENSSL', 'link-192');">PYOPENSSL</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">errnum</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"> <tt class="py-comment"># 8 in stdlib: errstr == EOF occured in violation of protocol</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"> <tt class="py-comment"># -1 in pyopenssl: errstr == Unexpected EOF</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"> <tt id="link-193" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-193', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Disconnected by remote server: #%s, %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_remote_disconnect</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L579"></a><tt class="py-lineno">579</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">errnum</tt><tt class="py-op">:</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"> <tt id="link-194" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-194', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Connection to %s:%s lost: %s %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">,</tt> </tt>
+<a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-name">errnum</tt><tt class="py-op">,</tt> <tt class="py-name">errstr</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-195', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L585"></a><tt class="py-lineno">585</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L586"></a><tt class="py-lineno">586</tt> <tt class="py-line"> </tt>
+<a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"> <tt class="py-comment"># this branch is for case of non-fatal SSL errors - None is returned from</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"> <tt class="py-comment"># recv() but no errnum is set</tt> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">received</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L590"></a><tt class="py-lineno">590</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L591"></a><tt class="py-lineno">591</tt> <tt class="py-line"> </tt>
+<a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"> <tt class="py-comment"># we have received some bytes, stop the timeout!</tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="nbxmpp.idlequeue.IdleQueue.remove_timeout
+nbxmpp.transports_nb.NonBlockingTCP.remove_timeout
+nbxmpp.transports_nb.NonBlockingTransport.remove_timeout" class="py-name" href="#" onclick="return doclink('link-196', 'remove_timeout', 'link-41');">remove_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout" class="py-name" href="#" onclick="return doclink('link-197', 'renew_send_timeout', 'link-59');">renew_send_timeout</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2" class="py-name" href="#" onclick="return doclink('link-198', 'renew_send_timeout2', 'link-60');">renew_send_timeout2</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L596"></a><tt class="py-lineno">596</tt> <tt class="py-line"> <tt class="py-comment"># pass received data to owner</tt> </tt>
+<a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt><tt class="py-op">:</tt> </tt>
+<a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-199', 'raise_event', 'link-31');">raise_event</a></tt><tt class="py-op">(</tt><tt id="link-200" class="py-name"><a title="nbxmpp.transports_nb.DATA_RECEIVED" class="py-name" href="#" onclick="return doclink('link-200', 'DATA_RECEIVED', 'link-15');">DATA_RECEIVED</a></tt><tt class="py-op">,</tt> <tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L599"></a><tt class="py-lineno">599</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingHTTP._on_receive()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#_on_receive,Method nbxmpp.transports_nb.NonBlockingTCP._on_receive()=nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_receive"><a title="nbxmpp.transports_nb.NonBlockingHTTP._on_receive
+nbxmpp.transports_nb.NonBlockingTCP._on_receive" class="py-name" href="#" onclick="return doclink('link-201', '_on_receive', 'link-201');">_on_receive</a></tt><tt class="py-op">(</tt><tt class="py-name">received</tt><tt class="py-op">)</tt> </tt>
+<a name="L600"></a><tt class="py-lineno">600</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L601"></a><tt class="py-lineno">601</tt> <tt class="py-line"> <tt class="py-comment"># This should never happen, so we need the debug.</tt> </tt>
+<a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"> <tt class="py-comment"># (If there is no handler on receive specified, data is passed to</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"> <tt class="py-comment"># Dispatcher.ProcessNonBlocking)</tt> </tt>
+<a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"> <tt id="link-202" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-202', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'SOCKET %s Unhandled data received: %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L605"></a><tt class="py-lineno">605</tt> <tt class="py-line"> <tt class="py-name">received</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-203" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-203', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L607"></a><tt class="py-lineno">607</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingTCP._on_receive"></a><div id="NonBlockingTCP._on_receive-def"><a name="L608"></a><tt class="py-lineno">608</tt> <a class="py-toggle" href="#" id="NonBlockingTCP._on_receive-toggle" onclick="return toggle('NonBlockingTCP._on_receive');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_receive">_on_receive</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingTCP._on_receive-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingTCP._on_receive-expanded"><a name="L609"></a><tt class="py-lineno">609</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt> <tt class="py-line"><tt class="py-docstring"> Preceeds on_receive callback. It peels off and checks HTTP headers in</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"><tt class="py-docstring"> HTTP classes, in here it just calls the callback</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L614"></a><tt class="py-lineno">614</tt> <tt class="py-line"> </tt>
+<a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTP"></a><div id="NonBlockingHTTP-def"><a name="L616"></a><tt class="py-lineno">616</tt> <a class="py-toggle" href="#" id="NonBlockingHTTP-toggle" onclick="return toggle('NonBlockingHTTP');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a><tt class="py-op">(</tt><tt class="py-base-class">NonBlockingTCP</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTP-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingHTTP-expanded"><a name="L617"></a><tt class="py-lineno">617</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L618"></a><tt class="py-lineno">618</tt> <tt class="py-line"><tt class="py-docstring"> Socket wrapper that creates HTTP message out of sent data and peels-off HTTP</tt> </tt>
+<a name="L619"></a><tt class="py-lineno">619</tt> <tt class="py-line"><tt class="py-docstring"> headers from incoming messages</tt> </tt>
+<a name="L620"></a><tt class="py-lineno">620</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L621"></a><tt class="py-lineno">621</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTP.__init__"></a><div id="NonBlockingHTTP.__init__-def"><a name="L622"></a><tt class="py-lineno">622</tt> <a class="py-toggle" href="#" id="NonBlockingHTTP.__init__-toggle" onclick="return toggle('NonBlockingHTTP.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">raise_event</tt><tt class="py-op">,</tt> <tt class="py-param">on_disconnect</tt><tt class="py-op">,</tt> <tt class="py-param">idlequeue</tt><tt class="py-op">,</tt> <tt class="py-param">estabilish_tls</tt><tt class="py-op">,</tt> </tt>
+<a name="L623"></a><tt class="py-lineno">623</tt> <tt class="py-line"> <tt class="py-param">certs</tt><tt class="py-op">,</tt> <tt class="py-param">on_http_request_possible</tt><tt class="py-op">,</tt> <tt class="py-param">on_persistent_fallback</tt><tt class="py-op">,</tt> <tt class="py-param">http_dict</tt><tt class="py-op">,</tt> </tt>
+<a name="L624"></a><tt class="py-lineno">624</tt> <tt class="py-line"> <tt class="py-param">proxy_dict</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTP.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingHTTP.__init__-expanded"><a name="L625"></a><tt class="py-lineno">625</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L626"></a><tt class="py-lineno">626</tt> <tt class="py-line"><tt class="py-docstring"> :param on_http_request_possible: method to call when HTTP request to</tt> </tt>
+<a name="L627"></a><tt class="py-lineno">627</tt> <tt class="py-line"><tt class="py-docstring"> socket owned by transport is possible.</tt> </tt>
+<a name="L628"></a><tt class="py-lineno">628</tt> <tt class="py-line"><tt class="py-docstring"> :param on_persistent_fallback: callback called when server ends TCP</tt> </tt>
+<a name="L629"></a><tt class="py-lineno">629</tt> <tt class="py-line"><tt class="py-docstring"> connection. It doesn't have to be fatal for HTTP session.</tt> </tt>
+<a name="L630"></a><tt class="py-lineno">630</tt> <tt class="py-line"><tt class="py-docstring"> :param http_dict: dictionary with data for HTTP request and headers</tt> </tt>
+<a name="L631"></a><tt class="py-lineno">631</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L632"></a><tt class="py-lineno">632</tt> <tt class="py-line"> <tt id="link-204" class="py-name" targets="Class nbxmpp.transports_nb.NonBlockingTCP=nbxmpp.transports_nb.NonBlockingTCP-class.html"><a title="nbxmpp.transports_nb.NonBlockingTCP" class="py-name" href="#" onclick="return doclink('link-204', 'NonBlockingTCP', 'link-204');">NonBlockingTCP</a></tt><tt class="py-op">.</tt><tt id="link-205" class="py-name"><a title="nbxmpp.auth_nb.NonBlockingBind.__init__
+nbxmpp.auth_nb.NonBlockingNonSASL.__init__
+nbxmpp.auth_nb.SASL.__init__
+nbxmpp.bosh.AckChecker.__init__
+nbxmpp.bosh.KeyStack.__init__
+nbxmpp.bosh.NonBlockingBOSH.__init__
+nbxmpp.client_nb.NonBlockingClient.__init__
+nbxmpp.dispatcher_nb.XMPPDispatcher.__init__
+nbxmpp.idlequeue.IdleCommand.__init__
+nbxmpp.idlequeue.IdleObject.__init__
+nbxmpp.idlequeue.IdleQueue.__init__
+nbxmpp.plugin.PlugIn.__init__
+nbxmpp.protocol.Acks.__init__
+nbxmpp.protocol.BOSHBody.__init__
+nbxmpp.protocol.DataField.__init__
+nbxmpp.protocol.DataForm.__init__
+nbxmpp.protocol.Error.__init__
+nbxmpp.protocol.ErrorNode.__init__
+nbxmpp.protocol.Hashes.__init__
+nbxmpp.protocol.Iq.__init__
+nbxmpp.protocol.JID.__init__
+nbxmpp.protocol.Message.__init__
+nbxmpp.protocol.Presence.__init__
+nbxmpp.protocol.Protocol.__init__
+nbxmpp.proxy_connectors.ProxyConnector.__init__
+nbxmpp.roster_nb.NonBlockingRoster.__init__
+nbxmpp.simplexml.Node.__init__
+nbxmpp.simplexml.NodeBuilder.__init__
+nbxmpp.simplexml.T.__init__
+nbxmpp.smacks.Smacks.__init__
+nbxmpp.stringprepare.EmptyMappingTable.__init__
+nbxmpp.stringprepare.LookupTable.__init__
+nbxmpp.stringprepare.LookupTableFromFunction.__init__
+nbxmpp.stringprepare.MappingTableFromFunction.__init__
+nbxmpp.stringprepare.Profile.__init__
+nbxmpp.tls_nb.NonBlockingTLS.__init__
+nbxmpp.tls_nb.PyOpenSSLWrapper.__init__
+nbxmpp.tls_nb.SSLWrapper.Error.__init__
+nbxmpp.tls_nb.SSLWrapper.__init__
+nbxmpp.tls_nb.StdlibSSLWrapper.__init__
+nbxmpp.transports_nb.NonBlockingHTTP.__init__
+nbxmpp.transports_nb.NonBlockingTCP.__init__
+nbxmpp.transports_nb.NonBlockingTransport.__init__" class="py-name" href="#" onclick="return doclink('link-205', '__init__', 'link-30');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt id="link-206" class="py-name"><a title="nbxmpp.client_nb.NonBlockingClient.raise_event" class="py-name" href="#" onclick="return doclink('link-206', 'raise_event', 'link-31');">raise_event</a></tt><tt class="py-op">,</tt> <tt class="py-name">on_disconnect</tt><tt class="py-op">,</tt> <tt id="link-207" class="py-name"><a title="nbxmpp.idlequeue" class="py-name" href="#" onclick="return doclink('link-207', 'idlequeue', 'link-4');">idlequeue</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L633"></a><tt class="py-lineno">633</tt> <tt class="py-line"> <tt class="py-name">estabilish_tls</tt><tt class="py-op">,</tt> <tt class="py-name">certs</tt><tt class="py-op">,</tt> <tt class="py-name">proxy_dict</tt><tt class="py-op">)</tt> </tt>
+<a name="L634"></a><tt class="py-lineno">634</tt> <tt class="py-line"> </tt>
+<a name="L635"></a><tt class="py-lineno">635</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_protocol</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_host</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_port</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_path</tt> <tt class="py-op">=</tt> \ </tt>
+<a name="L636"></a><tt class="py-lineno">636</tt> <tt class="py-line"> <tt id="link-208" class="py-name"><a title="nbxmpp.transports_nb.urisplit" class="py-name" href="#" onclick="return doclink('link-208', 'urisplit', 'link-10');">urisplit</a></tt><tt class="py-op">(</tt><tt class="py-name">http_dict</tt><tt class="py-op">[</tt><tt class="py-string">'http_uri'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L637"></a><tt class="py-lineno">637</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_protocol</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_protocol</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'http'</tt> </tt>
+<a name="L638"></a><tt class="py-lineno">638</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_path</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_path</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'/'</tt> </tt>
+<a name="L639"></a><tt class="py-lineno">639</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_version</tt> <tt class="py-op">=</tt> <tt class="py-name">http_dict</tt><tt class="py-op">[</tt><tt class="py-string">'http_version'</tt><tt class="py-op">]</tt> </tt>
+<a name="L640"></a><tt class="py-lineno">640</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_persistent</tt> <tt class="py-op">=</tt> <tt class="py-name">http_dict</tt><tt class="py-op">[</tt><tt class="py-string">'http_persistent'</tt><tt class="py-op">]</tt> </tt>
+<a name="L641"></a><tt class="py-lineno">641</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add_proxy_headers</tt> <tt class="py-op">=</tt> <tt class="py-name">http_dict</tt><tt class="py-op">[</tt><tt class="py-string">'add_proxy_headers'</tt><tt class="py-op">]</tt> </tt>
+<a name="L642"></a><tt class="py-lineno">642</tt> <tt class="py-line"> </tt>
+<a name="L643"></a><tt class="py-lineno">643</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'proxy_user'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">http_dict</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'proxy_pass'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">http_dict</tt><tt class="py-op">:</tt> </tt>
+<a name="L644"></a><tt class="py-lineno">644</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt> <tt class="py-op">=</tt> <tt class="py-name">http_dict</tt><tt class="py-op">[</tt><tt class="py-string">'proxy_user'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">http_dict</tt><tt class="py-op">[</tt> </tt>
+<a name="L645"></a><tt class="py-lineno">645</tt> <tt class="py-line"> <tt class="py-string">'proxy_pass'</tt><tt class="py-op">]</tt> </tt>
+<a name="L646"></a><tt class="py-lineno">646</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L647"></a><tt class="py-lineno">647</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt> </tt>
+<a name="L648"></a><tt class="py-lineno">648</tt> <tt class="py-line"> </tt>
+<a name="L649"></a><tt class="py-lineno">649</tt> <tt class="py-line"> <tt class="py-comment"># buffer for partial responses</tt> </tt>
+<a name="L650"></a><tt class="py-lineno">650</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">recvbuff</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L651"></a><tt class="py-lineno">651</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">expected_length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L652"></a><tt class="py-lineno">652</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pending_requests</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L653"></a><tt class="py-lineno">653</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-209" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible()=nbxmpp.bosh.NonBlockingBOSH-class.html#on_http_request_possible"><a title="nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible" class="py-name" href="#" onclick="return doclink('link-209', 'on_http_request_possible', 'link-209');">on_http_request_possible</a></tt> <tt class="py-op">=</tt> <tt id="link-210" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible" class="py-name" href="#" onclick="return doclink('link-210', 'on_http_request_possible', 'link-209');">on_http_request_possible</a></tt> </tt>
+<a name="L654"></a><tt class="py-lineno">654</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_recv_time</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L655"></a><tt class="py-lineno">655</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">close_current_connection</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L656"></a><tt class="py-lineno">656</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_remote_disconnect</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt><tt class="py-op">:</tt> <tt id="link-211" class="py-name" targets="Method nbxmpp.bosh.NonBlockingBOSH.on_persistent_fallback()=nbxmpp.bosh.NonBlockingBOSH-class.html#on_persistent_fallback"><a title="nbxmpp.bosh.NonBlockingBOSH.on_persistent_fallback" class="py-name" href="#" onclick="return doclink('link-211', 'on_persistent_fallback', 'link-211');">on_persistent_fallback</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L657"></a><tt class="py-lineno">657</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTP.http_send"></a><div id="NonBlockingHTTP.http_send-def"><a name="L658"></a><tt class="py-lineno">658</tt> <a class="py-toggle" href="#" id="NonBlockingHTTP.http_send-toggle" onclick="return toggle('NonBlockingHTTP.http_send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send">http_send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">raw_data</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTP.http_send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingHTTP.http_send-expanded"><a name="L659"></a><tt class="py-lineno">659</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.send
+nbxmpp.dispatcher_nb.XMPPDispatcher.send
+nbxmpp.tls_nb.PyOpenSSLWrapper.send
+nbxmpp.tls_nb.SSLWrapper.send
+nbxmpp.tls_nb.StdlibSSLWrapper.send
+nbxmpp.transports_nb.NonBlockingTCP.send
+nbxmpp.transports_nb.NonBlockingTransport.send" class="py-name" href="#" onclick="return doclink('link-212', 'send', 'link-81');">send</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-213" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingHTTP.build_http_message()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message"><a title="nbxmpp.transports_nb.NonBlockingHTTP.build_http_message" class="py-name" href="#" onclick="return doclink('link-213', 'build_http_message', 'link-213');">build_http_message</a></tt><tt class="py-op">(</tt><tt class="py-name">raw_data</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">now</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L660"></a><tt class="py-lineno">660</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTP._on_receive"></a><div id="NonBlockingHTTP._on_receive-def"><a name="L661"></a><tt class="py-lineno">661</tt> <a class="py-toggle" href="#" id="NonBlockingHTTP._on_receive-toggle" onclick="return toggle('NonBlockingHTTP._on_receive');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#_on_receive">_on_receive</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTP._on_receive-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingHTTP._on_receive-expanded"><a name="L662"></a><tt class="py-lineno">662</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L663"></a><tt class="py-lineno">663</tt> <tt class="py-line"><tt class="py-docstring"> Preceeds passing received data to owner class. Gets rid of HTTP headers</tt> </tt>
+<a name="L664"></a><tt class="py-lineno">664</tt> <tt class="py-line"><tt class="py-docstring"> and checks them.</tt> </tt>
+<a name="L665"></a><tt class="py-lineno">665</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L666"></a><tt class="py-lineno">666</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-214" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTransport.get_state" class="py-name" href="#" onclick="return doclink('link-214', 'get_state', 'link-48');">get_state</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt id="link-215" class="py-name"><a title="nbxmpp.transports_nb.PROXY_CONNECTING" class="py-name" href="#" onclick="return doclink('link-215', 'PROXY_CONNECTING', 'link-21');">PROXY_CONNECTING</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L667"></a><tt class="py-lineno">667</tt> <tt class="py-line"> <tt id="link-216" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP" class="py-name" href="#" onclick="return doclink('link-216', 'NonBlockingTCP', 'link-204');">NonBlockingTCP</a></tt><tt class="py-op">.</tt><tt id="link-217" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingHTTP._on_receive
+nbxmpp.transports_nb.NonBlockingTCP._on_receive" class="py-name" href="#" onclick="return doclink('link-217', '_on_receive', 'link-201');">_on_receive</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L668"></a><tt class="py-lineno">668</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L669"></a><tt class="py-lineno">669</tt> <tt class="py-line"> </tt>
+<a name="L670"></a><tt class="py-lineno">670</tt> <tt class="py-line"> <tt class="py-comment"># append currently received data to HTTP msg in buffer</tt> </tt>
+<a name="L671"></a><tt class="py-lineno">671</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">recvbuff</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">recvbuff</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
+<a name="L672"></a><tt class="py-lineno">672</tt> <tt class="py-line"> <tt class="py-name">statusline</tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">httpbody</tt><tt class="py-op">,</tt> <tt class="py-name">buffer_rest</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-218" class="py-name" targets="Method nbxmpp.transports_nb.NonBlockingHTTP.parse_http_message()=nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message"><a title="nbxmpp.transports_nb.NonBlockingHTTP.parse_http_message" class="py-name" href="#" onclick="return doclink('link-218', 'parse_http_message', 'link-218');">parse_http_message</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L673"></a><tt class="py-lineno">673</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">recvbuff</tt><tt class="py-op">)</tt> </tt>
+<a name="L674"></a><tt class="py-lineno">674</tt> <tt class="py-line"> </tt>
+<a name="L675"></a><tt class="py-lineno">675</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt class="py-name">statusline</tt> <tt class="py-keyword">and</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">and</tt> <tt class="py-name">httpbody</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L676"></a><tt class="py-lineno">676</tt> <tt class="py-line"> <tt id="link-219" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-219', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Received incomplete HTTP response'</tt><tt class="py-op">)</tt> </tt>
+<a name="L677"></a><tt class="py-lineno">677</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L678"></a><tt class="py-lineno">678</tt> <tt class="py-line"> </tt>
+<a name="L679"></a><tt class="py-lineno">679</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">statusline</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'200'</tt><tt class="py-op">:</tt> </tt>
+<a name="L680"></a><tt class="py-lineno">680</tt> <tt class="py-line"> <tt id="link-220" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-220', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'HTTP Error: %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">statusline</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">statusline</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L681"></a><tt class="py-lineno">681</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-221" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-221', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L682"></a><tt class="py-lineno">682</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L683"></a><tt class="py-lineno">683</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">expected_length</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Length'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L684"></a><tt class="py-lineno">684</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'Connection'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">and</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'Connection'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">==</tt><tt class="py-string">'close'</tt><tt class="py-op">:</tt> </tt>
+<a name="L685"></a><tt class="py-lineno">685</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">close_current_connection</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L686"></a><tt class="py-lineno">686</tt> <tt class="py-line"> </tt>
+<a name="L687"></a><tt class="py-lineno">687</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">expected_length</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">httpbody</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L688"></a><tt class="py-lineno">688</tt> <tt class="py-line"> <tt class="py-comment"># If we haven't received the whole HTTP mess yet, let's end the thread.</tt> </tt>
+<a name="L689"></a><tt class="py-lineno">689</tt> <tt class="py-line"> <tt class="py-comment"># It will be finnished from one of following recvs on plugged socket.</tt> </tt>
+<a name="L690"></a><tt class="py-lineno">690</tt> <tt class="py-line"> <tt id="link-222" class="py-name"><a title="nbxmpp.auth_nb.log
+nbxmpp.bosh.log
+nbxmpp.client_nb.log
+nbxmpp.dispatcher_nb.log
+nbxmpp.idlequeue.log
+nbxmpp.plugin.log
+nbxmpp.proxy_connectors.log
+nbxmpp.roster_nb.log
+nbxmpp.simplexml.log
+nbxmpp.smacks.log
+nbxmpp.tls_nb.log
+nbxmpp.transports_nb.log" class="py-name" href="#" onclick="return doclink('link-222', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'not enough bytes in HTTP response - %d expected, got %d'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L691"></a><tt class="py-lineno">691</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">expected_length</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">httpbody</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L692"></a><tt class="py-lineno">692</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L693"></a><tt class="py-lineno">693</tt> <tt class="py-line"> <tt class="py-comment"># First part of buffer has been extraced and is going to be handled,</tt> </tt>
+<a name="L694"></a><tt class="py-lineno">694</tt> <tt class="py-line"> <tt class="py-comment"># remove it from buffer</tt> </tt>
+<a name="L695"></a><tt class="py-lineno">695</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">recvbuff</tt> <tt class="py-op">=</tt> <tt class="py-name">buffer_rest</tt> </tt>
+<a name="L696"></a><tt class="py-lineno">696</tt> <tt class="py-line"> </tt>
+<a name="L697"></a><tt class="py-lineno">697</tt> <tt class="py-line"> <tt class="py-comment"># everything was received</tt> </tt>
+<a name="L698"></a><tt class="py-lineno">698</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">expected_length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L699"></a><tt class="py-lineno">699</tt> <tt class="py-line"> </tt>
+<a name="L700"></a><tt class="py-lineno">700</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_persistent</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">close_current_connection</tt><tt class="py-op">:</tt> </tt>
+<a name="L701"></a><tt class="py-lineno">701</tt> <tt class="py-line"> <tt class="py-comment"># not-persistent connections disconnect after response</tt> </tt>
+<a name="L702"></a><tt class="py-lineno">702</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.disconnect
+nbxmpp.client_nb.NonBlockingClient.disconnect
+nbxmpp.transports_nb.NonBlockingTCP.disconnect
+nbxmpp.transports_nb.NonBlockingTransport.disconnect" class="py-name" href="#" onclick="return doclink('link-223', 'disconnect', 'link-43');">disconnect</a></tt><tt class="py-op">(</tt><tt class="py-name">do_callback</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L703"></a><tt class="py-lineno">703</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">close_current_connection</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L704"></a><tt class="py-lineno">704</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_recv_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L705"></a><tt class="py-lineno">705</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">on_receive</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">=</tt><tt class="py-name">httpbody</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L706"></a><tt class="py-lineno">706</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name"><a title="nbxmpp.bosh.NonBlockingBOSH.on_http_request_possible" class="py-name" href="#" onclick="return doclink('link-224', 'on_http_request_possible', 'link-209');">on_http_request_possible</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L707"></a><tt class="py-lineno">707</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTP.build_http_message"></a><div id="NonBlockingHTTP.build_http_message-def"><a name="L708"></a><tt class="py-lineno">708</tt> <a class="py-toggle" href="#" id="NonBlockingHTTP.build_http_message-toggle" onclick="return toggle('NonBlockingHTTP.build_http_message');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message">build_http_message</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">httpbody</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'POST'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTP.build_http_message-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingHTTP.build_http_message-expanded"><a name="L709"></a><tt class="py-lineno">709</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L710"></a><tt class="py-lineno">710</tt> <tt class="py-line"><tt class="py-docstring"> Builds http message with given body. Values for headers and status line</tt> </tt>
+<a name="L711"></a><tt class="py-lineno">711</tt> <tt class="py-line"><tt class="py-docstring"> fields are taken from class variables</tt> </tt>
+<a name="L712"></a><tt class="py-lineno">712</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L713"></a><tt class="py-lineno">713</tt> <tt class="py-line"> <tt class="py-name">absolute_uri</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s://%s:%s%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_protocol</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_host</tt><tt class="py-op">,</tt> </tt>
+<a name="L714"></a><tt class="py-lineno">714</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_port</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_path</tt><tt class="py-op">)</tt> </tt>
+<a name="L715"></a><tt class="py-lineno">715</tt> <tt class="py-line"> <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'%s %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">absolute_uri</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_version</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L716"></a><tt class="py-lineno">716</tt> <tt class="py-line"> <tt class="py-string">'Host: %s:%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_host</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">http_port</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L717"></a><tt class="py-lineno">717</tt> <tt class="py-line"> <tt class="py-string">'User-Agent: Gajim'</tt><tt class="py-op">,</tt> </tt>
+<a name="L718"></a><tt class="py-lineno">718</tt> <tt class="py-line"> <tt class="py-string">'Content-Type: text/xml; charset=utf-8'</tt><tt class="py-op">,</tt> </tt>
+<a name="L719"></a><tt class="py-lineno">719</tt> <tt class="py-line"> <tt class="py-string">'Content-Length: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">httpbody</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L720"></a><tt class="py-lineno">720</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add_proxy_headers</tt><tt class="py-op">:</tt> </tt>
+<a name="L721"></a><tt class="py-lineno">721</tt> <tt class="py-line"> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Proxy-Connection: keep-alive'</tt><tt class="py-op">)</tt> </tt>
+<a name="L722"></a><tt class="py-lineno">722</tt> <tt class="py-line"> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Pragma: no-cache'</tt><tt class="py-op">)</tt> </tt>
+<a name="L723"></a><tt class="py-lineno">723</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt><tt class="py-op">:</tt> </tt>
+<a name="L724"></a><tt class="py-lineno">724</tt> <tt class="py-line"> <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s:%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_user</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">proxy_pass</tt><tt class="py-op">)</tt> </tt>
+<a name="L725"></a><tt class="py-lineno">725</tt> <tt class="py-line"> <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">encodestring</tt><tt class="py-op">(</tt><tt class="py-name">credentials</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L726"></a><tt class="py-lineno">726</tt> <tt class="py-line"> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Proxy-Authorization: Basic %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">credentials</tt><tt class="py-op">)</tt> </tt>
+<a name="L727"></a><tt class="py-lineno">727</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L728"></a><tt class="py-lineno">728</tt> <tt class="py-line"> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Connection: Keep-Alive'</tt><tt class="py-op">)</tt> </tt>
+<a name="L729"></a><tt class="py-lineno">729</tt> <tt class="py-line"> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L730"></a><tt class="py-lineno">730</tt> <tt class="py-line"> <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-string">'\r\n'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L731"></a><tt class="py-lineno">731</tt> <tt class="py-line"> <tt class="py-keyword">return</tt><tt class="py-op">(</tt><tt class="py-string">'%s%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">httpbody</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L732"></a><tt class="py-lineno">732</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTP.parse_http_message"></a><div id="NonBlockingHTTP.parse_http_message-def"><a name="L733"></a><tt class="py-lineno">733</tt> <a class="py-toggle" href="#" id="NonBlockingHTTP.parse_http_message-toggle" onclick="return toggle('NonBlockingHTTP.parse_http_message');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message">parse_http_message</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">message</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTP.parse_http_message-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingHTTP.parse_http_message-expanded"><a name="L734"></a><tt class="py-lineno">734</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L735"></a><tt class="py-lineno">735</tt> <tt class="py-line"><tt class="py-docstring"> Split http message into a tuple:</tt> </tt>
+<a name="L736"></a><tt class="py-lineno">736</tt> <tt class="py-line"><tt class="py-docstring"> - (statusline - list of e.g. ['HTTP/1.1', '200', 'OK'],</tt> </tt>
+<a name="L737"></a><tt class="py-lineno">737</tt> <tt class="py-line"><tt class="py-docstring"> - headers - dictionary of headers e.g. {'Content-Length': '604',</tt> </tt>
+<a name="L738"></a><tt class="py-lineno">738</tt> <tt class="py-line"><tt class="py-docstring"> 'Content-Type': 'text/xml; charset=utf-8'},</tt> </tt>
+<a name="L739"></a><tt class="py-lineno">739</tt> <tt class="py-line"><tt class="py-docstring"> - httpbody - string with http body)</tt> </tt>
+<a name="L740"></a><tt class="py-lineno">740</tt> <tt class="py-line"><tt class="py-docstring"> - http_rest - what is left in the message after a full HTTP header + body</tt> </tt>
+<a name="L741"></a><tt class="py-lineno">741</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L742"></a><tt class="py-lineno">742</tt> <tt class="py-line"> <tt class="py-name">splitted</tt> <tt class="py-op">=</tt> <tt class="py-name">message</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n\r\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L743"></a><tt class="py-lineno">743</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">splitted</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L744"></a><tt class="py-lineno">744</tt> <tt class="py-line"> <tt class="py-comment"># no complete http message. Keep filling the buffer until we find one</tt> </tt>
+<a name="L745"></a><tt class="py-lineno">745</tt> <tt class="py-line"> <tt class="py-name">buffer_rest</tt> <tt class="py-op">=</tt> <tt class="py-name">message</tt> </tt>
+<a name="L746"></a><tt class="py-lineno">746</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">buffer_rest</tt><tt class="py-op">)</tt> </tt>
+<a name="L747"></a><tt class="py-lineno">747</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L748"></a><tt class="py-lineno">748</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">header</tt><tt class="py-op">,</tt> <tt class="py-name">httpbody</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">splitted</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L749"></a><tt class="py-lineno">749</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\r'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L750"></a><tt class="py-lineno">750</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L751"></a><tt class="py-lineno">751</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L752"></a><tt class="py-lineno">752</tt> <tt class="py-line"> <tt class="py-name">statusline</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L753"></a><tt class="py-lineno">753</tt> <tt class="py-line"> <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
+<a name="L754"></a><tt class="py-lineno">754</tt> <tt class="py-line"> <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L755"></a><tt class="py-lineno">755</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">dummy</tt> <tt class="py-keyword">in</tt> <tt class="py-name">header</tt><tt class="py-op">:</tt> </tt>
+<a name="L756"></a><tt class="py-lineno">756</tt> <tt class="py-line"> <tt class="py-name">row</tt> <tt class="py-op">=</tt> <tt class="py-name">dummy</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L757"></a><tt class="py-lineno">757</tt> <tt class="py-line"> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-name">row</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">row</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L758"></a><tt class="py-lineno">758</tt> <tt class="py-line"> <tt class="py-name">body_size</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Length'</tt><tt class="py-op">]</tt> </tt>
+<a name="L759"></a><tt class="py-lineno">759</tt> <tt class="py-line"> <tt class="py-name">rest_splitted</tt> <tt class="py-op">=</tt> <tt class="py-name">splitted</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
+<a name="L760"></a><tt class="py-lineno">760</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">httpbody</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">body_size</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">rest_splitted</tt><tt class="py-op">:</tt> </tt>
+<a name="L761"></a><tt class="py-lineno">761</tt> <tt class="py-line"> <tt class="py-comment"># Complete httpbody until it has the announced size</tt> </tt>
+<a name="L762"></a><tt class="py-lineno">762</tt> <tt class="py-line"> <tt class="py-name">httpbody</tt> <tt class="py-op">=</tt> <tt class="py-string">'\n\n'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">httpbody</tt><tt class="py-op">,</tt> <tt class="py-name">rest_splitted</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L763"></a><tt class="py-lineno">763</tt> <tt class="py-line"> <tt class="py-name">buffer_rest</tt> <tt class="py-op">=</tt> <tt class="py-string">"\n\n"</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">rest_splitted</tt><tt class="py-op">)</tt> </tt>
+<a name="L764"></a><tt class="py-lineno">764</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">statusline</tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">httpbody</tt><tt class="py-op">,</tt> <tt class="py-name">buffer_rest</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L765"></a><tt class="py-lineno">765</tt> <tt class="py-line"> </tt>
+<a name="L766"></a><tt class="py-lineno">766</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTPBOSH"></a><div id="NonBlockingHTTPBOSH-def"><a name="L767"></a><tt class="py-lineno">767</tt> <a class="py-toggle" href="#" id="NonBlockingHTTPBOSH-toggle" onclick="return toggle('NonBlockingHTTPBOSH');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html">NonBlockingHTTPBOSH</a><tt class="py-op">(</tt><tt class="py-base-class">NonBlockingHTTP</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTPBOSH-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NonBlockingHTTPBOSH-expanded"><a name="L768"></a><tt class="py-lineno">768</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
+<a name="L769"></a><tt class="py-lineno">769</tt> <tt class="py-line"><tt class="py-docstring"> Class for BOSH HTTP connections. Slightly redefines HTTP transport by</tt> </tt>
+<a name="L770"></a><tt class="py-lineno">770</tt> <tt class="py-line"><tt class="py-docstring"> calling bosh bodytag generating callback before putting data on wire</tt> </tt>
+<a name="L771"></a><tt class="py-lineno">771</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
+<a name="L772"></a><tt class="py-lineno">772</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTPBOSH.set_stanza_build_cb"></a><div id="NonBlockingHTTPBOSH.set_stanza_build_cb-def"><a name="L773"></a><tt class="py-lineno">773</tt> <a class="py-toggle" href="#" id="NonBlockingHTTPBOSH.set_stanza_build_cb-toggle" onclick="return toggle('NonBlockingHTTPBOSH.set_stanza_build_cb');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#set_stanza_build_cb">set_stanza_build_cb</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">build_cb</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTPBOSH.set_stanza_build_cb-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingHTTPBOSH.set_stanza_build_cb-expanded"><a name="L774"></a><tt class="py-lineno">774</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build_cb</tt> <tt class="py-op">=</tt> <tt class="py-name">build_cb</tt> </tt>
+</div><a name="L775"></a><tt class="py-lineno">775</tt> <tt class="py-line"> </tt>
+<a name="NonBlockingHTTPBOSH._do_send"></a><div id="NonBlockingHTTPBOSH._do_send-def"><a name="L776"></a><tt class="py-lineno">776</tt> <a class="py-toggle" href="#" id="NonBlockingHTTPBOSH._do_send-toggle" onclick="return toggle('NonBlockingHTTPBOSH._do_send');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#_do_send">_do_send</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonBlockingHTTPBOSH._do_send-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="NonBlockingHTTPBOSH._do_send-expanded"><a name="L777"></a><tt class="py-lineno">777</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">==</tt> <tt id="link-225" class="py-name"><a title="nbxmpp.transports_nb.PROXY_CONNECTING" class="py-name" href="#" onclick="return doclink('link-225', 'PROXY_CONNECTING', 'link-21');">PROXY_CONNECTING</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L778"></a><tt class="py-lineno">778</tt> <tt class="py-line"> <tt id="link-226" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP" class="py-name" href="#" onclick="return doclink('link-226', 'NonBlockingTCP', 'link-204');">NonBlockingTCP</a></tt><tt class="py-op">.</tt><tt id="link-227" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingHTTPBOSH._do_send
+nbxmpp.transports_nb.NonBlockingTCP._do_send" class="py-name" href="#" onclick="return doclink('link-227', '_do_send', 'link-132');">_do_send</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L779"></a><tt class="py-lineno">779</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
+<a name="L780"></a><tt class="py-lineno">780</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt><tt class="py-op">:</tt> </tt>
+<a name="L781"></a><tt class="py-lineno">781</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">build_cb</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L782"></a><tt class="py-lineno">782</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-228" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP.encode_stanza" class="py-name" href="#" onclick="return doclink('link-228', 'encode_stanza', 'link-169');">encode_stanza</a></tt><tt class="py-op">(</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+<a name="L783"></a><tt class="py-lineno">783</tt> <tt class="py-line"> <tt class="py-name">stanza</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-229" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingHTTP.build_http_message" class="py-name" href="#" onclick="return doclink('link-229', 'build_http_message', 'link-213');">build_http_message</a></tt><tt class="py-op">(</tt><tt class="py-name">httpbody</tt><tt class="py-op">=</tt><tt class="py-name">stanza</tt><tt class="py-op">)</tt> </tt>
+<a name="L784"></a><tt class="py-lineno">784</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sendbuff</tt> <tt class="py-op">=</tt> <tt class="py-name">stanza</tt> </tt>
+<a name="L785"></a><tt class="py-lineno">785</tt> <tt class="py-line"> <tt id="link-230" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingTCP" class="py-name" href="#" onclick="return doclink('link-230', 'NonBlockingTCP', 'link-204');">NonBlockingTCP</a></tt><tt class="py-op">.</tt><tt id="link-231" class="py-name"><a title="nbxmpp.transports_nb.NonBlockingHTTPBOSH._do_send
+nbxmpp.transports_nb.NonBlockingTCP._do_send" class="py-name" href="#" onclick="return doclink('link-231', '_do_send', 'link-132');">_do_send</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L786"></a><tt class="py-lineno">786</tt> <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:09 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTP-class.html b/doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTP-class.html
new file mode 100644
index 0000000..02cbe35
--- /dev/null
+++ b/doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTP-class.html
@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.transports_nb.NonBlockingHTTP</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.transports_nb-module.html">Module&nbsp;transports_nb</a> ::
+ Class&nbsp;NonBlockingHTTP
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingHTTP</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_6" name="uml_class_diagram_for_nbxmpp_t_6">
+<area shape="rect" id="node242" href="nbxmpp.idlequeue.IdleObject-class.html#fd" title="filedescriptor, must be unique for each IdleObject" alt="" coords="300,248,431,267"/>
+<area shape="rect" id="node1" href="nbxmpp.idlequeue.IdleObject-class.html" title="Idle listener interface. Listed methods are called by IdleQueue." alt="" coords="288,223,443,281"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect" title="nbxmpp.transports_nb.NonBlockingTCP.start_disconnect" alt="" coords="311,436,697,455"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect" title="Creates and connects transport to server and port defined in conn_5tuple which should be item from list returned from getaddrinfo" alt="" coords="311,455,697,473"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init" title="Estabilishes TLS/SSL using this TCP connection by plugging a NonBlockingTLS module" alt="" coords="311,473,697,492"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin" title="Called by idlequeu when receive on plugged socket is possible" alt="" coords="311,492,697,511"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout" title="Called by idlequeu when send to plugged socket is possible" alt="" coords="311,511,697,529"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend" title="Called by idlequeue on TCP connection errors" alt="" coords="311,529,697,548"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect" title="nbxmpp.transports_nb.NonBlockingTCP.disconnect" alt="" coords="311,548,697,567"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout" title="Called when there&#39;s no response from server in defined timeout" alt="" coords="311,567,697,585"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout" title="nbxmpp.transports_nb.NonBlockingTCP.set_timeout" alt="" coords="311,585,697,604"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout" title="nbxmpp.transports_nb.NonBlockingTCP.remove_timeout" alt="" coords="311,604,697,623"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send" title="Append raw_data to the queue of messages to be send. If supplied data is unicode string, encode it to utf&#45;8." alt="" coords="311,623,697,641"/>
+<area shape="rect" id="node239" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza" title="Encode str or unicode to utf&#45;8" alt="" coords="311,641,697,660"/>
+<area shape="rect" id="node2" href="nbxmpp.transports_nb.NonBlockingTCP-class.html" title="Non&#45;blocking TCP socket wrapper" alt="" coords="299,403,709,666"/>
+<area shape="rect" id="node238" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__" title="Each trasport class can have different constructor but it has to have at least all the arguments of NonBlockingTransport constructor" alt="" coords="17,719,989,737"/>
+<area shape="rect" id="node238" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send" title="nbxmpp.transports_nb.NonBlockingHTTP.http_send" alt="" coords="17,737,989,756"/>
+<area shape="rect" id="node238" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message" title="Builds http message with given body. Values for headers and status line fields are taken from class variables" alt="" coords="17,756,989,775"/>
+<area shape="rect" id="node238" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message" title="(statusline &#45; list of e.g. [&#39;HTTP/1.1&#39;, &#39;200&#39;, &#39;OK&#39;]," alt="" coords="17,775,989,793"/>
+<area shape="rect" id="node4" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html" title="Socket wrapper that creates HTTP message out of sent data and peels&#45;off HTTP headers from incoming messages" alt="" coords="5,686,1000,799"/>
+<area shape="rect" id="node241" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="529,39,755,57"/>
+<area shape="rect" id="node241" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="529,57,755,76"/>
+<area shape="rect" id="node241" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="529,76,755,95"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="517,6,765,101"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin" title="nbxmpp.transports_nb.NonBlockingTransport.plugin" alt="" coords="484,153,801,172"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout" title="nbxmpp.transports_nb.NonBlockingTransport.plugout" alt="" coords="484,172,801,191"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state" title="nbxmpp.transports_nb.NonBlockingTransport.set_state" alt="" coords="484,191,801,209"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state" title="nbxmpp.transports_nb.NonBlockingTransport.get_state" alt="" coords="484,209,801,228"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive" title="Set the on_receive callback." alt="" coords="484,228,801,247"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2" title="called when there&#39;s no response from server in defined timeout" alt="" coords="484,247,801,265"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout" alt="" coords="484,265,801,284"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2" alt="" coords="484,284,801,303"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_timeout2" alt="" coords="484,303,801,321"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd" title="nbxmpp.transports_nb.NonBlockingTransport.get_fd" alt="" coords="484,321,801,340"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout" alt="" coords="484,340,801,359"/>
+<area shape="rect" id="node240" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2" alt="" coords="484,359,801,377"/>
+<area shape="rect" id="node5" href="nbxmpp.transports_nb.NonBlockingTransport-class.html" title="Abstract class representing a transport" alt="" coords="472,121,813,383"/>
+<area shape="rect" id="node6" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" title="Class for BOSH HTTP connections. Slightly redefines HTTP transport by calling bosh bodytag generating callback before putting data on wire" alt="" coords="412,819,596,858"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_6.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_6" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Socket wrapper that creates HTTP message out of sent data and peels-off HTTP
+headers from incoming messages
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">raise_event</span>,
+ <span class="summary-sig-arg">on_disconnect</span>,
+ <span class="summary-sig-arg">idlequeue</span>,
+ <span class="summary-sig-arg">estabilish_tls</span>,
+ <span class="summary-sig-arg">certs</span>,
+ <span class="summary-sig-arg">on_http_request_possible</span>,
+ <span class="summary-sig-arg">on_persistent_fallback</span>,
+ <span class="summary-sig-arg">http_dict</span>,
+ <span class="summary-sig-arg">proxy_dict</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send" class="summary-sig-name">http_send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">raw_data</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.http_send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#_on_receive" class="summary-sig-name" onclick="show_private();">_on_receive</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Preceeds passing received data to owner class. Gets rid of HTTP headers
+and checks them.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP._on_receive">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message" class="summary-sig-name">build_http_message</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">httpbody</span>,
+ <span class="summary-sig-arg">method</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">POST</code><code class="variable-quote">'</code></span>)</span><br />
+ Builds http message with given body. Values for headers and status line
+fields are taken from class variables</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.build_http_message">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message" class="summary-sig-name">parse_http_message</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">message</span>)</span><br />
+ (statusline - list of e.g. ['HTTP/1.1', '200', 'OK'],</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.parse_http_message">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a></code></b>:
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect">connect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect">disconnect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza">encode_stanza</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend">pollend</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin">pollin</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout">pollout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout">read_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout">remove_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send">send</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout">set_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect">start_disconnect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init">tls_init</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a></code></b> (private):
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy" onclick="show_private();">_connect_to_proxy</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive" onclick="show_private();">_do_receive</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send" onclick="show_private();">_do_send</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect" onclick="show_private();">_on_connect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle" onclick="show_private();">_plug_idle</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a></code></b>:
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd">get_fd</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state">get_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive">onreceive</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin">plugin</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout">plugout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2">read_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout">renew_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2">renew_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout">set_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2">set_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state">set_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2">set_timeout2</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a></code></b> (private):
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure" onclick="show_private();">_on_connect_failure</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started" onclick="show_private();">_tcp_connecting_started</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleObject-class.html">idlequeue.IdleObject</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleObject-class.html#fd">fd</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">raise_event</span>,
+ <span class="sig-arg">on_disconnect</span>,
+ <span class="sig-arg">idlequeue</span>,
+ <span class="sig-arg">estabilish_tls</span>,
+ <span class="sig-arg">certs</span>,
+ <span class="sig-arg">on_http_request_possible</span>,
+ <span class="sig-arg">on_persistent_fallback</span>,
+ <span class="sig-arg">http_dict</span>,
+ <span class="sig-arg">proxy_dict</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>on_http_request_possible</code></strong> - method to call when HTTP request to
+socket owned by transport is possible.</li>
+ <li><strong class="pname"><code>on_persistent_fallback</code></strong> - callback called when server ends TCP
+connection. It doesn't have to be fatal for HTTP session.</li>
+ <li><strong class="pname"><code>http_dict</code></strong> - dictionary with data for HTTP request and headers</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#__init__">idlequeue.IdleObject.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="http_send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">http_send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">raw_data</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.http_send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_receive"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_receive</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP._on_receive">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Preceeds passing received data to owner class. Gets rid of HTTP headers
+and checks them.
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_receive" onclick="show_private();">NonBlockingTCP._on_receive</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="build_http_message"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">build_http_message</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">httpbody</span>,
+ <span class="sig-arg">method</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">POST</code><code class="variable-quote">'</code></span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.build_http_message">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Builds http message with given body. Values for headers and status line
+fields are taken from class variables
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="parse_http_message"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">parse_http_message</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">message</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTP.parse_http_message">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <dl class="rst-docutils">
+<dt>Split http message into a tuple:</dt>
+<dd><ul class="rst-first rst-last">
+<li><p class="rst-first">(statusline - list of e.g. ['HTTP/1.1', '200', 'OK'],</p>
+</li>
+<li><dl class="rst-first rst-docutils">
+<dt>headers - dictionary of headers e.g. {'Content-Length': '604',</dt>
+<dd><p class="rst-first rst-last">'Content-Type': 'text/xml; charset=utf-8'},</p>
+</dd>
+</dl>
+</li>
+<li><p class="rst-first">httpbody - string with http body)</p>
+</li>
+<li><p class="rst-first">http_rest - what is left in the message after a full HTTP header + body</p>
+</li>
+</ul>
+</dd>
+</dl>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html b/doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html
new file mode 100644
index 0000000..339bd2e
--- /dev/null
+++ b/doc/apidocs/nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html
@@ -0,0 +1,385 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.transports_nb.NonBlockingHTTPBOSH</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.transports_nb-module.html">Module&nbsp;transports_nb</a> ::
+ Class&nbsp;NonBlockingHTTPBOSH
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingHTTPBOSH</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTPBOSH">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_7" name="uml_class_diagram_for_nbxmpp_t_7">
+<area shape="rect" id="node244" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#set_stanza_build_cb" title="nbxmpp.transports_nb.NonBlockingHTTPBOSH.set_stanza_build_cb" alt="" coords="389,852,617,871"/>
+<area shape="rect" id="node1" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" title="Class for BOSH HTTP connections. Slightly redefines HTTP transport by calling bosh bodytag generating callback before putting data on wire" alt="" coords="377,819,628,877"/>
+<area shape="rect" id="node249" href="nbxmpp.idlequeue.IdleObject-class.html#fd" title="filedescriptor, must be unique for each IdleObject" alt="" coords="300,248,431,267"/>
+<area shape="rect" id="node2" href="nbxmpp.idlequeue.IdleObject-class.html" title="Idle listener interface. Listed methods are called by IdleQueue." alt="" coords="288,223,443,281"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect" title="nbxmpp.transports_nb.NonBlockingTCP.start_disconnect" alt="" coords="311,436,697,455"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect" title="Creates and connects transport to server and port defined in conn_5tuple which should be item from list returned from getaddrinfo" alt="" coords="311,455,697,473"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init" title="Estabilishes TLS/SSL using this TCP connection by plugging a NonBlockingTLS module" alt="" coords="311,473,697,492"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin" title="Called by idlequeu when receive on plugged socket is possible" alt="" coords="311,492,697,511"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout" title="Called by idlequeu when send to plugged socket is possible" alt="" coords="311,511,697,529"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend" title="Called by idlequeue on TCP connection errors" alt="" coords="311,529,697,548"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect" title="nbxmpp.transports_nb.NonBlockingTCP.disconnect" alt="" coords="311,548,697,567"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout" title="Called when there&#39;s no response from server in defined timeout" alt="" coords="311,567,697,585"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout" title="nbxmpp.transports_nb.NonBlockingTCP.set_timeout" alt="" coords="311,585,697,604"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout" title="nbxmpp.transports_nb.NonBlockingTCP.remove_timeout" alt="" coords="311,604,697,623"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send" title="Append raw_data to the queue of messages to be send. If supplied data is unicode string, encode it to utf&#45;8." alt="" coords="311,623,697,641"/>
+<area shape="rect" id="node246" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza" title="Encode str or unicode to utf&#45;8" alt="" coords="311,641,697,660"/>
+<area shape="rect" id="node6" href="nbxmpp.transports_nb.NonBlockingTCP-class.html" title="Non&#45;blocking TCP socket wrapper" alt="" coords="299,403,709,666"/>
+<area shape="rect" id="node248" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="529,39,755,57"/>
+<area shape="rect" id="node248" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="529,57,755,76"/>
+<area shape="rect" id="node248" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="529,76,755,95"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="517,6,765,101"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin" title="nbxmpp.transports_nb.NonBlockingTransport.plugin" alt="" coords="484,153,801,172"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout" title="nbxmpp.transports_nb.NonBlockingTransport.plugout" alt="" coords="484,172,801,191"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state" title="nbxmpp.transports_nb.NonBlockingTransport.set_state" alt="" coords="484,191,801,209"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state" title="nbxmpp.transports_nb.NonBlockingTransport.get_state" alt="" coords="484,209,801,228"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive" title="Set the on_receive callback." alt="" coords="484,228,801,247"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2" title="called when there&#39;s no response from server in defined timeout" alt="" coords="484,247,801,265"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout" alt="" coords="484,265,801,284"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2" alt="" coords="484,284,801,303"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_timeout2" alt="" coords="484,303,801,321"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd" title="nbxmpp.transports_nb.NonBlockingTransport.get_fd" alt="" coords="484,321,801,340"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout" alt="" coords="484,340,801,359"/>
+<area shape="rect" id="node247" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2" alt="" coords="484,359,801,377"/>
+<area shape="rect" id="node5" href="nbxmpp.transports_nb.NonBlockingTransport-class.html" title="Abstract class representing a transport" alt="" coords="472,121,813,383"/>
+<area shape="rect" id="node245" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__" title="Each trasport class can have different constructor but it has to have at least all the arguments of NonBlockingTransport constructor" alt="" coords="17,719,989,737"/>
+<area shape="rect" id="node245" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send" title="nbxmpp.transports_nb.NonBlockingHTTP.http_send" alt="" coords="17,737,989,756"/>
+<area shape="rect" id="node245" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message" title="Builds http message with given body. Values for headers and status line fields are taken from class variables" alt="" coords="17,756,989,775"/>
+<area shape="rect" id="node245" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message" title="(statusline &#45; list of e.g. [&#39;HTTP/1.1&#39;, &#39;200&#39;, &#39;OK&#39;]," alt="" coords="17,775,989,793"/>
+<area shape="rect" id="node4" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html" title="Socket wrapper that creates HTTP message out of sent data and peels&#45;off HTTP headers from incoming messages" alt="" coords="5,686,1000,799"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_7.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_7" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+Class for BOSH HTTP connections. Slightly redefines HTTP transport by
+calling bosh bodytag generating callback before putting data on wire
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#set_stanza_build_cb" class="summary-sig-name">set_stanza_build_cb</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">build_cb</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTPBOSH.set_stanza_build_cb">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html#_do_send" class="summary-sig-name" onclick="show_private();">_do_send</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called when send() to connected socket is possible. First message from
+sendqueue will be sent</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTPBOSH._do_send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a></code></b>:
+ <code><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#__init__">__init__</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#build_http_message">build_http_message</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#http_send">http_send</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#parse_http_message">parse_http_message</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html">NonBlockingHTTP</a></code></b> (private):
+ <code><a href="nbxmpp.transports_nb.NonBlockingHTTP-class.html#_on_receive" onclick="show_private();">_on_receive</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a></code></b>:
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect">connect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect">disconnect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza">encode_stanza</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend">pollend</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin">pollin</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout">pollout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout">read_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout">remove_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send">send</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout">set_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect">start_disconnect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init">tls_init</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html">NonBlockingTCP</a></code></b> (private):
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy" onclick="show_private();">_connect_to_proxy</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive" onclick="show_private();">_do_receive</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect" onclick="show_private();">_on_connect</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle" onclick="show_private();">_plug_idle</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a></code></b>:
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd">get_fd</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state">get_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive">onreceive</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin">plugin</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout">plugout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2">read_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout">renew_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2">renew_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout">set_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2">set_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state">set_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2">set_timeout2</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a></code></b> (private):
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure" onclick="show_private();">_on_connect_failure</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started" onclick="show_private();">_tcp_connecting_started</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleObject-class.html">idlequeue.IdleObject</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleObject-class.html#fd">fd</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="set_stanza_build_cb"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_stanza_build_cb</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">build_cb</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTPBOSH.set_stanza_build_cb">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_do_send"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_do_send</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingHTTPBOSH._do_send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called when send() to connected socket is possible. First message from
+sendqueue will be sent
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send" onclick="show_private();">NonBlockingTCP._do_send</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.transports_nb.NonBlockingTCP-class.html b/doc/apidocs/nbxmpp.transports_nb.NonBlockingTCP-class.html
new file mode 100644
index 0000000..7e4967a
--- /dev/null
+++ b/doc/apidocs/nbxmpp.transports_nb.NonBlockingTCP-class.html
@@ -0,0 +1,1061 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.transports_nb.NonBlockingTCP</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.transports_nb-module.html">Module&nbsp;transports_nb</a> ::
+ Class&nbsp;NonBlockingTCP
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTCP-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingTCP</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_8" name="uml_class_diagram_for_nbxmpp_t_8">
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin" title="nbxmpp.transports_nb.NonBlockingTransport.plugin" alt="" coords="291,153,608,172"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout" title="nbxmpp.transports_nb.NonBlockingTransport.plugout" alt="" coords="291,172,608,191"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state" title="nbxmpp.transports_nb.NonBlockingTransport.set_state" alt="" coords="291,191,608,209"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state" title="nbxmpp.transports_nb.NonBlockingTransport.get_state" alt="" coords="291,209,608,228"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive" title="Set the on_receive callback." alt="" coords="291,228,608,247"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2" title="called when there&#39;s no response from server in defined timeout" alt="" coords="291,247,608,265"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout" alt="" coords="291,265,608,284"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2" alt="" coords="291,284,608,303"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_timeout2" alt="" coords="291,303,608,321"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd" title="nbxmpp.transports_nb.NonBlockingTransport.get_fd" alt="" coords="291,321,608,340"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout" alt="" coords="291,340,608,359"/>
+<area shape="rect" id="node251" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.set_send_timeout2" alt="" coords="291,359,608,377"/>
+<area shape="rect" id="node1" href="nbxmpp.transports_nb.NonBlockingTransport-class.html" title="Abstract class representing a transport" alt="" coords="279,121,620,383"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__" title="Each trasport class can have different constructor but it has to have at least all the arguments of NonBlockingTransport constructor" alt="" coords="17,436,604,455"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect" title="nbxmpp.transports_nb.NonBlockingTCP.start_disconnect" alt="" coords="17,455,604,473"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect" title="Creates and connects transport to server and port defined in conn_5tuple which should be item from list returned from getaddrinfo" alt="" coords="17,473,604,492"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init" title="Estabilishes TLS/SSL using this TCP connection by plugging a NonBlockingTLS module" alt="" coords="17,492,604,511"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin" title="Called by idlequeu when receive on plugged socket is possible" alt="" coords="17,511,604,529"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout" title="Called by idlequeu when send to plugged socket is possible" alt="" coords="17,529,604,548"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend" title="Called by idlequeue on TCP connection errors" alt="" coords="17,548,604,567"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect" title="nbxmpp.transports_nb.NonBlockingTCP.disconnect" alt="" coords="17,567,604,585"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout" title="Called when there&#39;s no response from server in defined timeout" alt="" coords="17,585,604,604"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout" title="nbxmpp.transports_nb.NonBlockingTCP.set_timeout" alt="" coords="17,604,604,623"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout" title="nbxmpp.transports_nb.NonBlockingTCP.remove_timeout" alt="" coords="17,623,604,641"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send" title="Append raw_data to the queue of messages to be send. If supplied data is unicode string, encode it to utf&#45;8." alt="" coords="17,641,604,660"/>
+<area shape="rect" id="node250" href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza" title="Encode str or unicode to utf&#45;8" alt="" coords="17,660,604,679"/>
+<area shape="rect" id="node6" href="nbxmpp.transports_nb.NonBlockingTCP-class.html" title="Non&#45;blocking TCP socket wrapper" alt="" coords="5,403,616,685"/>
+<area shape="rect" id="node2" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" title="Class for BOSH HTTP connections. Slightly redefines HTTP transport by calling bosh bodytag generating callback before putting data on wire" alt="" coords="219,763,403,802"/>
+<area shape="rect" id="node252" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="336,39,561,57"/>
+<area shape="rect" id="node252" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="336,57,561,76"/>
+<area shape="rect" id="node252" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="336,76,561,95"/>
+<area shape="rect" id="node3" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="324,6,572,101"/>
+<area shape="rect" id="node4" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html" title="Socket wrapper that creates HTTP message out of sent data and peels&#45;off HTTP headers from incoming messages" alt="" coords="237,705,384,743"/>
+<area shape="rect" id="node253" href="nbxmpp.idlequeue.IdleObject-class.html#fd" title="filedescriptor, must be unique for each IdleObject" alt="" coords="107,248,237,267"/>
+<area shape="rect" id="node5" href="nbxmpp.idlequeue.IdleObject-class.html" title="Idle listener interface. Listed methods are called by IdleQueue." alt="" coords="95,223,249,281"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_8.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_8" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>Non-blocking TCP socket wrapper</p>
+<p>It is used for simple XMPP connection. Can be connected via proxy and can
+estabilish TLS connection.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">raise_event</span>,
+ <span class="summary-sig-arg">on_disconnect</span>,
+ <span class="summary-sig-arg">idlequeue</span>,
+ <span class="summary-sig-arg">estabilish_tls</span>,
+ <span class="summary-sig-arg">certs</span>,
+ <span class="summary-sig-arg">proxy_dict</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#start_disconnect" class="summary-sig-name">start_disconnect</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.start_disconnect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#connect" class="summary-sig-name">connect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">conn_5tuple</span>,
+ <span class="summary-sig-arg">on_connect</span>,
+ <span class="summary-sig-arg">on_connect_failure</span>)</span><br />
+ Creates and connects transport to server and port defined in conn_5tuple
+which should be item from list returned from getaddrinfo</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_connect_to_proxy" class="summary-sig-name" onclick="show_private();">_connect_to_proxy</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._connect_to_proxy">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_connect" class="summary-sig-name" onclick="show_private();">_on_connect</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Preceed invoking of on_connect callback. TCP connection is already
+estabilished by this time</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._on_connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#tls_init" class="summary-sig-name">tls_init</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">on_succ</span>,
+ <span class="summary-sig-arg">on_fail</span>)</span><br />
+ Estabilishes TLS/SSL using this TCP connection by plugging a
+NonBlockingTLS module</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.tls_init">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollin" class="summary-sig-name">pollin</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called by idlequeu when receive on plugged socket is possible</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.pollin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollout" class="summary-sig-name">pollout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called by idlequeu when send to plugged socket is possible</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.pollout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#pollend" class="summary-sig-name">pollend</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called by idlequeue on TCP connection errors</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.pollend">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#disconnect" class="summary-sig-name">disconnect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">do_callback</span>=<span class="summary-sig-default">True</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.disconnect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#read_timeout" class="summary-sig-name">read_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called when there's no response from server in defined timeout</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.read_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#set_timeout" class="summary-sig-name">set_timeout</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">timeout</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.set_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#remove_timeout" class="summary-sig-name">remove_timeout</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.remove_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#send" class="summary-sig-name">send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">raw_data</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span><br />
+ Append raw_data to the queue of messages to be send. If supplied data is
+unicode string, encode it to utf-8.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#encode_stanza" class="summary-sig-name">encode_stanza</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">stanza</span>)</span><br />
+ Encode str or unicode to utf-8</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.encode_stanza">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_plug_idle" class="summary-sig-name" onclick="show_private();">_plug_idle</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">writable</span>,
+ <span class="summary-sig-arg">readable</span>)</span><br />
+ Plug file descriptor of socket to Idlequeue</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._plug_idle">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_send" class="summary-sig-name" onclick="show_private();">_do_send</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called when send() to connected socket is possible. First message from
+sendqueue will be sent</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._do_send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_do_receive" class="summary-sig-name" onclick="show_private();">_do_receive</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Reads all pending incoming data. Will call owner's disconnected() method
+if appropriate</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._do_receive">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTCP-class.html#_on_receive" class="summary-sig-name" onclick="show_private();">_on_receive</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">data</span>)</span><br />
+ Preceeds on_receive callback. It peels off and checks HTTP headers in
+HTTP classes, in here it just calls the callback</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._on_receive">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a></code></b>:
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd">get_fd</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state">get_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive">onreceive</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin">plugin</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout">plugout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2">read_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout">renew_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2">renew_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout">set_send_timeout</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2">set_send_timeout2</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state">set_state</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2">set_timeout2</a></code>
+ </p>
+ <div class="private"> <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html">NonBlockingTransport</a></code></b> (private):
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure" onclick="show_private();">_on_connect_failure</a></code>,
+ <code><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started" onclick="show_private();">_tcp_connecting_started</a></code>
+ </p></div>
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== INSTANCE VARIABLES ==================== -->
+<a name="section-InstanceVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Variables</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceVariables"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.idlequeue.IdleObject-class.html">idlequeue.IdleObject</a></code></b>:
+ <code><a href="nbxmpp.idlequeue.IdleObject-class.html#fd">fd</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">raise_event</span>,
+ <span class="sig-arg">on_disconnect</span>,
+ <span class="sig-arg">idlequeue</span>,
+ <span class="sig-arg">estabilish_tls</span>,
+ <span class="sig-arg">certs</span>,
+ <span class="sig-arg">proxy_dict</span>=<span class="sig-default">None</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>proxy_dict</code></strong> - dictionary with proxy data as loaded from config file</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#__init__">idlequeue.IdleObject.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="start_disconnect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">start_disconnect</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.start_disconnect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect">NonBlockingTransport.start_disconnect</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="connect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">conn_5tuple</span>,
+ <span class="sig-arg">on_connect</span>,
+ <span class="sig-arg">on_connect_failure</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Creates and connects transport to server and port defined in conn_5tuple
+which should be item from list returned from getaddrinfo
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>conn_5tuple</code></strong> - 5-tuple returned from getaddrinfo</li>
+ <li><strong class="pname"><code>on_connect</code></strong> - callback called on successful connect to the server</li>
+ <li><strong class="pname"><code>on_connect_failure</code></strong> - callback called on failure when connecting</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#connect">NonBlockingTransport.connect</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="_connect_to_proxy"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_connect_to_proxy</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._connect_to_proxy">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_connect"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_connect</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._on_connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Preceed invoking of on_connect callback. TCP connection is already
+estabilished by this time
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect" onclick="show_private();">NonBlockingTransport._on_connect</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="tls_init"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">tls_init</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">on_succ</span>,
+ <span class="sig-arg">on_fail</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.tls_init">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Estabilishes TLS/SSL using this TCP connection by plugging a
+NonBlockingTLS module
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollin</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.pollin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called by idlequeu when receive on plugged socket is possible
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#pollin">idlequeue.IdleObject.pollin</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.pollout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called by idlequeu when send to plugged socket is possible
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#pollout">idlequeue.IdleObject.pollout</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="pollend"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">pollend</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.pollend">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called by idlequeue on TCP connection errors
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#pollend">idlequeue.IdleObject.pollend</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="disconnect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">disconnect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">do_callback</span>=<span class="sig-default">True</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.disconnect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect">NonBlockingTransport.disconnect</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="read_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">read_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.read_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called when there's no response from server in defined timeout
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.idlequeue.IdleObject-class.html#read_timeout">idlequeue.IdleObject.read_timeout</a>
+ <dd><em class="note">(inherited documentation)</em></dd>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_timeout</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">timeout</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.set_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout">NonBlockingTransport.set_timeout</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="remove_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">remove_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.remove_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout">NonBlockingTransport.remove_timeout</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">raw_data</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Append raw_data to the queue of messages to be send. If supplied data is
+unicode string, encode it to utf-8.
+ <dl class="fields">
+ <dt>Overrides:
+ <a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#send">NonBlockingTransport.send</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="encode_stanza"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">encode_stanza</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">stanza</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP.encode_stanza">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Encode str or unicode to utf-8
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_plug_idle"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_plug_idle</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">writable</span>,
+ <span class="sig-arg">readable</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._plug_idle">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Plug file descriptor of socket to Idlequeue</p>
+<p>Plugged socket will be watched for &quot;send possible&quot; or/and &quot;recv possible&quot;
+events. pollin() callback is invoked on &quot;recv possible&quot;, pollout() on
+&quot;send_possible&quot;.</p>
+<p>Plugged socket will always be watched for &quot;error&quot; event - in that case,
+pollend() is called.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_do_send"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_do_send</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._do_send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called when send() to connected socket is possible. First message from
+sendqueue will be sent
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_do_receive"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_do_receive</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._do_receive">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Reads all pending incoming data. Will call owner's disconnected() method
+if appropriate
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_receive"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_receive</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">data</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTCP._on_receive">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Preceeds on_receive callback. It peels off and checks HTTP headers in
+HTTP classes, in here it just calls the callback
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/nbxmpp.transports_nb.NonBlockingTransport-class.html b/doc/apidocs/nbxmpp.transports_nb.NonBlockingTransport-class.html
new file mode 100644
index 0000000..56fed7a
--- /dev/null
+++ b/doc/apidocs/nbxmpp.transports_nb.NonBlockingTransport-class.html
@@ -0,0 +1,1102 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp.transports_nb.NonBlockingTransport</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="nbxmpp-module.html">Package&nbsp;nbxmpp</a> ::
+ <a href="nbxmpp.transports_nb-module.html">Module&nbsp;transports_nb</a> ::
+ Class&nbsp;NonBlockingTransport
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="nbxmpp.transports_nb.NonBlockingTransport-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NonBlockingTransport</h1><p class="nomargin-top"><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_nbxmpp_t_9" name="uml_class_diagram_for_nbxmpp_t_9">
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__" title="Each trasport class can have different constructor but it has to have at least all the arguments of NonBlockingTransport constructor" alt="" coords="17,153,485,172"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin" title="nbxmpp.transports_nb.NonBlockingTransport.plugin" alt="" coords="17,172,485,191"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout" title="nbxmpp.transports_nb.NonBlockingTransport.plugout" alt="" coords="17,191,485,209"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#connect" title="Creates and connects transport to server and port defined in conn_5tuple which should be item from list returned from getaddrinfo" alt="" coords="17,209,485,228"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state" title="nbxmpp.transports_nb.NonBlockingTransport.set_state" alt="" coords="17,228,485,247"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state" title="nbxmpp.transports_nb.NonBlockingTransport.get_state" alt="" coords="17,247,485,265"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#send" title="nbxmpp.transports_nb.NonBlockingTransport.send" alt="" coords="17,265,485,284"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect" title="nbxmpp.transports_nb.NonBlockingTransport.disconnect" alt="" coords="17,284,485,303"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive" title="Set the on_receive callback." alt="" coords="17,303,485,321"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout" title="Called when there&#39;s no response from server in defined timeout" alt="" coords="17,321,485,340"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2" title="called when there&#39;s no response from server in defined timeout" alt="" coords="17,340,485,359"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout" alt="" coords="17,359,485,377"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2" title="nbxmpp.transports_nb.NonBlockingTransport.renew_send_timeout2" alt="" coords="17,377,485,396"/>
+<area shape="rect" id="node256" href="nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect" title="nbxmpp.transports_nb.NonBlockingTransport.start_disconnect" alt="" coords="17,415,485,433"/>
+<area shape="rect" id="node1" href="nbxmpp.transports_nb.NonBlockingTransport-class.html" title="Abstract class representing a transport" alt="" coords="5,121,496,439"/>
+<area shape="rect" id="node4" href="nbxmpp.bosh.NonBlockingBOSH-class.html" title="nbxmpp.bosh.NonBlockingBOSH" alt="" coords="61,459,251,498"/>
+<area shape="rect" id="node6" href="nbxmpp.transports_nb.NonBlockingTCP-class.html" title="Non&#45;blocking TCP socket wrapper" alt="" coords="280,459,419,498"/>
+<area shape="rect" id="node257" href="nbxmpp.plugin.PlugIn-class.html#PlugIn" title="Attach to owner and register ourself and our _exported_methods in it. If defined by a subclass, call self.plugin(owner) to execute hook code after plugging" alt="" coords="139,39,364,57"/>
+<area shape="rect" id="node257" href="nbxmpp.plugin.PlugIn-class.html#PlugOut" title="Unregister our _exported_methods from owner and detach from it. If defined by a subclass, call self.plugout() after unplugging to execute hook code" alt="" coords="139,57,364,76"/>
+<area shape="rect" id="node257" href="nbxmpp.plugin.PlugIn-class.html#get_instance" title="Factory Method for object creation" alt="" coords="139,76,364,95"/>
+<area shape="rect" id="node2" href="nbxmpp.plugin.PlugIn-class.html" title="Abstract xmpppy plugin infrastructure code, providing plugging in/out and debugging functionality" alt="" coords="127,6,375,101"/>
+<area shape="rect" id="node3" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html" title="Socket wrapper that creates HTTP message out of sent data and peels&#45;off HTTP headers from incoming messages" alt="" coords="276,518,423,557"/>
+<area shape="rect" id="node5" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html" title="Class for BOSH HTTP connections. Slightly redefines HTTP transport by calling bosh bodytag generating callback before putting data on wire" alt="" coords="257,577,441,615"/>
+</map>
+ <img src="uml_class_diagram_for_nbxmpp_t_9.gif" alt='' usemap="#uml_class_diagram_for_nbxmpp_t_9" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<p>Abstract class representing a transport</p>
+<p>Subclasses CAN have different constructor signature but connect method SHOULD
+be the same.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">raise_event</span>,
+ <span class="summary-sig-arg">on_disconnect</span>,
+ <span class="summary-sig-arg">idlequeue</span>,
+ <span class="summary-sig-arg">estabilish_tls</span>,
+ <span class="summary-sig-arg">certs</span>)</span><br />
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugin" class="summary-sig-name">plugin</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">owner</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.plugin">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#plugout" class="summary-sig-name">plugout</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.plugout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#connect" class="summary-sig-name">connect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">conn_5tuple</span>,
+ <span class="summary-sig-arg">on_connect</span>,
+ <span class="summary-sig-arg">on_connect_failure</span>)</span><br />
+ Creates and connects transport to server and port defined in conn_5tuple
+which should be item from list returned from getaddrinfo</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_state" class="summary-sig-name">set_state</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">newstate</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_state">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_state" class="summary-sig-name">get_state</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.get_state">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect" class="summary-sig-name" onclick="show_private();">_on_connect</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Preceeds call of on_connect callback</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport._on_connect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_on_connect_failure" class="summary-sig-name" onclick="show_private();">_on_connect_failure</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">err_message</span>)</span><br />
+ Preceeds call of on_connect_failure callback</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport._on_connect_failure">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#send" class="summary-sig-name">send</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">raw_data</span>,
+ <span class="summary-sig-arg">now</span>=<span class="summary-sig-default">False</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.send">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#disconnect" class="summary-sig-name">disconnect</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">do_callback</span>=<span class="summary-sig-default">True</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.disconnect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#onreceive" class="summary-sig-name">onreceive</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">recv_handler</span>)</span><br />
+ Set the on_receive callback.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.onreceive">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#_tcp_connecting_started" class="summary-sig-name" onclick="show_private();">_tcp_connecting_started</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport._tcp_connecting_started">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout" class="summary-sig-name">read_timeout</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Called when there's no response from server in defined timeout</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.read_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#read_timeout2" class="summary-sig-name">read_timeout2</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ called when there's no response from server in defined timeout</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.read_timeout2">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout" class="summary-sig-name">renew_send_timeout</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.renew_send_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#renew_send_timeout2" class="summary-sig-name">renew_send_timeout2</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.renew_send_timeout2">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout" class="summary-sig-name">set_timeout</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">timeout</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_timeout2" class="summary-sig-name">set_timeout2</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">timeout2</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_timeout2">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#get_fd" class="summary-sig-name">get_fd</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.get_fd">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#remove_timeout" class="summary-sig-name">remove_timeout</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.remove_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout" class="summary-sig-name">set_send_timeout</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">timeout</span>,
+ <span class="summary-sig-arg">on_timeout</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_send_timeout">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#set_send_timeout2" class="summary-sig-name">set_send_timeout2</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">timeout2</span>,
+ <span class="summary-sig-arg">on_timeout2</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_send_timeout2">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="nbxmpp.transports_nb.NonBlockingTransport-class.html#start_disconnect" class="summary-sig-name">start_disconnect</a>(<span class="summary-sig-arg">self</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.start_disconnect">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugIn">PlugIn</a></code>,
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#PlugOut">PlugOut</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Class Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-ClassMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code><a href="nbxmpp.plugin.PlugIn-class.html">plugin.PlugIn</a></code></b>:
+ <code><a href="nbxmpp.plugin.PlugIn-class.html#get_instance">get_instance</a></code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">raise_event</span>,
+ <span class="sig-arg">on_disconnect</span>,
+ <span class="sig-arg">idlequeue</span>,
+ <span class="sig-arg">estabilish_tls</span>,
+ <span class="sig-arg">certs</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Each trasport class can have different constructor but it has to have at
+least all the arguments of NonBlockingTransport constructor
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>raise_event</code></strong> - callback for monitoring of sent and received data</li>
+ <li><strong class="pname"><code>on_disconnect</code></strong> - callback called on disconnection during runtime</li>
+ <li><strong class="pname"><code>idlequeue</code></strong> - processing idlequeue</li>
+ <li><strong class="pname"><code>estabilish_tls</code></strong> - boolean whether to estabilish TLS connection after
+TCP connection is done</li>
+ <li><strong class="pname"><code>certs</code></strong> - tuple of (cacerts, mycerts) see constructor of
+tls_nb.NonBlockingTLS for more details</li>
+ </ul></dd>
+ <dt>Overrides:
+ <a href="nbxmpp.plugin.PlugIn-class.html#__init__">plugin.PlugIn.__init__</a>
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugin"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugin</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">owner</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.plugin">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="plugout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">plugout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.plugout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="connect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">conn_5tuple</span>,
+ <span class="sig-arg">on_connect</span>,
+ <span class="sig-arg">on_connect_failure</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Creates and connects transport to server and port defined in conn_5tuple
+which should be item from list returned from getaddrinfo
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>conn_5tuple</code></strong> - 5-tuple returned from getaddrinfo</li>
+ <li><strong class="pname"><code>on_connect</code></strong> - callback called on successful connect to the server</li>
+ <li><strong class="pname"><code>on_connect_failure</code></strong> - callback called on failure when connecting</li>
+ </ul></dd>
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_state"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_state</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">newstate</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_state">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_state"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_state</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.get_state">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_connect"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_connect</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport._on_connect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Preceeds call of on_connect callback
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_on_connect_failure"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_on_connect_failure</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">err_message</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport._on_connect_failure">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Preceeds call of on_connect_failure callback
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="send"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">send</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">raw_data</span>,
+ <span class="sig-arg">now</span>=<span class="sig-default">False</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.send">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="disconnect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">disconnect</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">do_callback</span>=<span class="sig-default">True</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.disconnect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="onreceive"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">onreceive</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">recv_handler</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.onreceive">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Set the on_receive callback.</p>
+<p>onreceive(None) sets callback to Dispatcher.ProcessNonBlocking which is
+the default one that will decide what to do with received stanza based on
+its tag name and namespace.</p>
+<p>Do not confuse it with on_receive() method, which is the callback
+itself.</p>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="_tcp_connecting_started"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">_tcp_connecting_started</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport._tcp_connecting_started">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="read_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">read_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.read_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ Called when there's no response from server in defined timeout
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="read_timeout2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">read_timeout2</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.read_timeout2">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ called when there's no response from server in defined timeout
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="renew_send_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">renew_send_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.renew_send_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="renew_send_timeout2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">renew_send_timeout2</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.renew_send_timeout2">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_timeout</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">timeout</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_timeout2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_timeout2</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">timeout2</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_timeout2">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="get_fd"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">get_fd</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.get_fd">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="remove_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">remove_timeout</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.remove_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_send_timeout"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_send_timeout</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">timeout</span>,
+ <span class="sig-arg">on_timeout</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_send_timeout">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="set_send_timeout2"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">set_send_timeout2</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">timeout2</span>,
+ <span class="sig-arg">on_timeout2</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.set_send_timeout2">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="start_disconnect"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">start_disconnect</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="nbxmpp.transports_nb-pysrc.html#NonBlockingTransport.start_disconnect">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="nbxmpp-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a class="navbar" target="_top" href="http://python-nbxmpp.gajim.org">python-nbxmpp</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Tue May 8 11:18:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/redirect.html b/doc/apidocs/redirect.html
new file mode 100644
index 0000000..743f852
--- /dev/null
+++ b/doc/apidocs/redirect.html
@@ -0,0 +1,38 @@
+<html><head><title>Epydoc Redirect Page</title>
+<meta http-equiv="cache-control" content="no-cache" />
+<meta http-equiv="expires" content="0" />
+<meta http-equiv="pragma" content="no-cache" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+<!--
+var pages = ["nbxmpp.stringprepare.MappingTableFromFunction-c", "nbxmpp.proxy_connectors.HTTPCONNECTConnector-c", "nbxmpp.stringprepare.LookupTableFromFunction-c", "nbxmpp.transports_nb.NonBlockingTransport-c", "nbxmpp.transports_nb.NonBlockingHTTPBOSH-c", "nbxmpp.proxy_connectors.SOCKS5Connector-c", "nbxmpp.protocol.RemoteConnectionFailed-c", "nbxmpp.proxy_connectors.ProxyConnector-c", "nbxmpp.stringprepare.EmptyMappingTable-c", "nbxmpp.protocol.UnsupportedStanzaType-c", "nbxmpp.transports_nb.NonBlockingHTTP-c", "nbxmpp.dispatcher_nb.BOSHDispatcher-c", "nbxmpp.dispatcher_nb.XMPPDispatcher-c", "nbxmpp.protocol.InternalServerError-c", "nbxmpp.protocol.UnsupportedEncoding-c", "nbxmpp.transports_nb.NonBlockingTCP-c", "nbxmpp.client_nb.NonBlockingClient-c", "nbxmpp.protocol.BadNamespacePrefix-c", "nbxmpp.protocol.ImproperAddressing-c", "nbxmpp.protocol.ResourceConstraint-c", "nbxmpp.protocol.UndefinedCondition-c", "nbxmpp.protocol.UnsupportedVersion-c", "nbxmpp.roster_nb.NonBlockingRoster-c", "nbxmpp.stringprepare.IMappingTable-c", "nbxmpp.auth_nb.NonBlockingNonSASL-c", "nbxmpp.protocol.ConnectionTimeout-c", "nbxmpp.stringprepare.ILookupTable-c", "nbxmpp.idlequeue.SelectIdleQueue-c", "nbxmpp.protocol.InvalidNamespace-c", "nbxmpp.protocol.XMLNotWellFormed-c", "nbxmpp.stringprepare.LookupTable-c", "nbxmpp.dispatcher_nb.Dispatcher-c", "nbxmpp.protocol.PolicyViolation-c", "nbxmpp.auth_nb.NonBlockingBind-c", "nbxmpp.idlequeue.GlibIdleQueue-c", "nbxmpp.protocol.SystemShutdown-c", "nbxmpp.tls_nb.PyOpenSSLWrapper-c", "nbxmpp.tls_nb.SSLWrapper.Error-c", "nbxmpp.tls_nb.StdlibSSLWrapper-c", "nbxmpp.protocol.NodeProcessed-c", "nbxmpp.protocol.NotAuthorized-c", "nbxmpp.protocol.RestrictedXML-c", "nbxmpp.stringprepare.NamePrep-c", "nbxmpp.idlequeue.IdleCommand-c", "nbxmpp.protocol.SeeOtherHost-c", "nbxmpp.simplexml.NodeBuilder-c", "nbxmpp.stringprepare.Profile-c", "nbxmpp.tls_nb.NonBlockingTLS-c", "nbxmpp.bosh.NonBlockingBOSH-c", "nbxmpp.idlequeue.IdleObject-c", "nbxmpp.protocol.HostUnknown-c", "nbxmpp.protocol.InvalidFrom-c", "nbxmpp.protocol.StreamError-c", "nbxmpp.idlequeue.IdleQueue-c", "nbxmpp.protocol.InvalidXML-c", "nbxmpp.protocol.BadFormat-c", "nbxmpp.protocol.DataField-c", "nbxmpp.protocol.ErrorNode-c", "nbxmpp.protocol.InvalidID-c", "nbxmpp.protocol.BOSHBody-c", "nbxmpp.protocol.Conflict-c", "nbxmpp.protocol.DataForm-c", "nbxmpp.protocol.HostGone-c", "nbxmpp.protocol.Presence-c", "nbxmpp.protocol.Protocol-c", "nbxmpp.tls_nb.SSLWrapper-c", "nbxmpp.proxy_connectors-m", "nbxmpp.protocol.Message-c", "nbxmpp.bosh.AckChecker-c", "nbxmpp.protocol.Hashes-c", "nbxmpp.protocol.Error-c", "nbxmpp.simplexml.Node-c", "nbxmpp.dispatcher_nb-m", "nbxmpp.stringprepare-m", "nbxmpp.transports_nb-m", "nbxmpp.bosh.KeyStack-c", "nbxmpp.plugin.PlugIn-c", "nbxmpp.protocol.Acks-c", "nbxmpp.smacks.Smacks-c", "nbxmpp.auth_nb.SASL-c", "nbxmpp.protocol.JID-c", "nbxmpp.simplexml.NT-c", "nbxmpp.features_nb-m", "nbxmpp.protocol.Iq-c", "nbxmpp.simplexml.T-c", "nbxmpp.client_nb-m", "nbxmpp.idlequeue-m", "nbxmpp.roster_nb-m", "nbxmpp.simplexml-m", "nbxmpp.protocol-m", "nbxmpp.auth_nb-m", "nbxmpp.plugin-m", "nbxmpp.smacks-m", "nbxmpp.tls_nb-m", "nbxmpp.bosh-m", "nbxmpp.c14n-m", "nbxmpp-m"];
+var dottedName = get_anchor();
+if (dottedName) {
+ var target = redirect_url(dottedName);
+ if (target) window.location.replace(target);
+}
+// -->
+</script>
+
+<h3>Epydoc Auto-redirect page</h3>
+
+<p>When javascript is enabled, this page will redirect URLs of
+the form <tt>redirect.html#<i>dotted.name</i></tt> to the
+documentation for the object with the given fully-qualified
+dotted name.</p>
+<p><a id="message"> &nbsp; </a></p>
+
+<script type="text/javascript">
+<!--
+if (dottedName) {
+ var msg = document.getElementById("message");
+ msg.innerHTML = "No documentation found for <tt>"+
+ dottedName+"</tt>";
+}
+// -->
+</script>
+
+</body>
+</html>
diff --git a/doc/apidocs/toc-everything.html b/doc/apidocs/toc-everything.html
new file mode 100644
index 0000000..55d622e
--- /dev/null
+++ b/doc/apidocs/toc-everything.html
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Everything</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Everything</h1>
+<hr />
+ <h2 class="toc">All Classes</h2>
+ <a target="mainFrame" href="nbxmpp.auth_nb.NonBlockingBind-class.html"
+ >nbxmpp.auth_nb.NonBlockingBind</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html"
+ >nbxmpp.auth_nb.NonBlockingNonSASL</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb.SASL-class.html"
+ >nbxmpp.auth_nb.SASL</a><br /> <a target="mainFrame" href="nbxmpp.bosh.AckChecker-class.html"
+ >nbxmpp.bosh.AckChecker</a><br /> <a target="mainFrame" href="nbxmpp.bosh.KeyStack-class.html"
+ >nbxmpp.bosh.KeyStack</a><br /> <a target="mainFrame" href="nbxmpp.bosh.NonBlockingBOSH-class.html"
+ >nbxmpp.bosh.NonBlockingBOSH</a><br /> <a target="mainFrame" href="nbxmpp.client_nb.NonBlockingClient-class.html"
+ >nbxmpp.client_nb.NonBlockingClient</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html"
+ >nbxmpp.dispatcher_nb.BOSHDispatcher</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb.Dispatcher-class.html"
+ >nbxmpp.dispatcher_nb.Dispatcher</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html"
+ >nbxmpp.dispatcher_nb.XMPPDispatcher</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.GlibIdleQueue-class.html"
+ >nbxmpp.idlequeue.GlibIdleQueue</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.IdleCommand-class.html"
+ >nbxmpp.idlequeue.IdleCommand</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.IdleObject-class.html"
+ >nbxmpp.idlequeue.IdleObject</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.IdleQueue-class.html"
+ >nbxmpp.idlequeue.IdleQueue</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.SelectIdleQueue-class.html"
+ >nbxmpp.idlequeue.SelectIdleQueue</a><br /> <a target="mainFrame" href="nbxmpp.plugin.PlugIn-class.html"
+ >nbxmpp.plugin.PlugIn</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Acks-class.html"
+ >nbxmpp.protocol.Acks</a><br /> <a target="mainFrame" href="nbxmpp.protocol.BOSHBody-class.html"
+ >nbxmpp.protocol.BOSHBody</a><br /> <a target="mainFrame" href="nbxmpp.protocol.BadFormat-class.html"
+ >nbxmpp.protocol.BadFormat</a><br /> <a target="mainFrame" href="nbxmpp.protocol.BadNamespacePrefix-class.html"
+ >nbxmpp.protocol.BadNamespacePrefix</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Conflict-class.html"
+ >nbxmpp.protocol.Conflict</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ConnectionTimeout-class.html"
+ >nbxmpp.protocol.ConnectionTimeout</a><br /> <a target="mainFrame" href="nbxmpp.protocol.DataField-class.html"
+ >nbxmpp.protocol.DataField</a><br /> <a target="mainFrame" href="nbxmpp.protocol.DataForm-class.html"
+ >nbxmpp.protocol.DataForm</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Error-class.html"
+ >nbxmpp.protocol.Error</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ErrorNode-class.html"
+ >nbxmpp.protocol.ErrorNode</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Hashes-class.html"
+ >nbxmpp.protocol.Hashes</a><br /> <a target="mainFrame" href="nbxmpp.protocol.HostGone-class.html"
+ >nbxmpp.protocol.HostGone</a><br /> <a target="mainFrame" href="nbxmpp.protocol.HostUnknown-class.html"
+ >nbxmpp.protocol.HostUnknown</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ImproperAddressing-class.html"
+ >nbxmpp.protocol.ImproperAddressing</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InternalServerError-class.html"
+ >nbxmpp.protocol.InternalServerError</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidFrom-class.html"
+ >nbxmpp.protocol.InvalidFrom</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidID-class.html"
+ >nbxmpp.protocol.InvalidID</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidNamespace-class.html"
+ >nbxmpp.protocol.InvalidNamespace</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidXML-class.html"
+ >nbxmpp.protocol.InvalidXML</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Iq-class.html"
+ >nbxmpp.protocol.Iq</a><br /> <a target="mainFrame" href="nbxmpp.protocol.JID-class.html"
+ >nbxmpp.protocol.JID</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Message-class.html"
+ >nbxmpp.protocol.Message</a><br /> <a target="mainFrame" href="nbxmpp.protocol.NodeProcessed-class.html"
+ >nbxmpp.protocol.NodeProcessed</a><br /> <a target="mainFrame" href="nbxmpp.protocol.NotAuthorized-class.html"
+ >nbxmpp.protocol.NotAuthorized</a><br /> <a target="mainFrame" href="nbxmpp.protocol.PolicyViolation-class.html"
+ >nbxmpp.protocol.PolicyViolation</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Presence-class.html"
+ >nbxmpp.protocol.Presence</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Protocol-class.html"
+ >nbxmpp.protocol.Protocol</a><br /> <a target="mainFrame" href="nbxmpp.protocol.RemoteConnectionFailed-class.html"
+ >nbxmpp.protocol.RemoteConnectionFailed</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ResourceConstraint-class.html"
+ >nbxmpp.protocol.ResourceConstraint</a><br /> <a target="mainFrame" href="nbxmpp.protocol.RestrictedXML-class.html"
+ >nbxmpp.protocol.RestrictedXML</a><br /> <a target="mainFrame" href="nbxmpp.protocol.SeeOtherHost-class.html"
+ >nbxmpp.protocol.SeeOtherHost</a><br /> <a target="mainFrame" href="nbxmpp.protocol.StreamError-class.html"
+ >nbxmpp.protocol.StreamError</a><br /> <a target="mainFrame" href="nbxmpp.protocol.SystemShutdown-class.html"
+ >nbxmpp.protocol.SystemShutdown</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UndefinedCondition-class.html"
+ >nbxmpp.protocol.UndefinedCondition</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UnsupportedEncoding-class.html"
+ >nbxmpp.protocol.UnsupportedEncoding</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UnsupportedStanzaType-class.html"
+ >nbxmpp.protocol.UnsupportedStanzaType</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UnsupportedVersion-class.html"
+ >nbxmpp.protocol.UnsupportedVersion</a><br /> <a target="mainFrame" href="nbxmpp.protocol.XMLNotWellFormed-class.html"
+ >nbxmpp.protocol.XMLNotWellFormed</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html"
+ >nbxmpp.proxy_connectors.HTTPCONNECTConnector</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors.ProxyConnector-class.html"
+ >nbxmpp.proxy_connectors.ProxyConnector</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html"
+ >nbxmpp.proxy_connectors.SOCKS5Connector</a><br /> <a target="mainFrame" href="nbxmpp.roster_nb.NonBlockingRoster-class.html"
+ >nbxmpp.roster_nb.NonBlockingRoster</a><br /> <a target="mainFrame" href="nbxmpp.simplexml.NT-class.html"
+ >nbxmpp.simplexml.NT</a><br /> <a target="mainFrame" href="nbxmpp.simplexml.Node-class.html"
+ >nbxmpp.simplexml.Node</a><br /> <a target="mainFrame" href="nbxmpp.simplexml.NodeBuilder-class.html"
+ >nbxmpp.simplexml.NodeBuilder</a><br /> <a target="mainFrame" href="nbxmpp.simplexml.T-class.html"
+ >nbxmpp.simplexml.T</a><br /> <a target="mainFrame" href="nbxmpp.smacks.Smacks-class.html"
+ >nbxmpp.smacks.Smacks</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.EmptyMappingTable-class.html"
+ >nbxmpp.stringprepare.EmptyMappingTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.ILookupTable-class.html"
+ >nbxmpp.stringprepare.ILookupTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.IMappingTable-class.html"
+ >nbxmpp.stringprepare.IMappingTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.LookupTable-class.html"
+ >nbxmpp.stringprepare.LookupTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.LookupTableFromFunction-class.html"
+ >nbxmpp.stringprepare.LookupTableFromFunction</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.MappingTableFromFunction-class.html"
+ >nbxmpp.stringprepare.MappingTableFromFunction</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.NamePrep-class.html"
+ >nbxmpp.stringprepare.NamePrep</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.Profile-class.html"
+ >nbxmpp.stringprepare.Profile</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.NonBlockingTLS-class.html"
+ >nbxmpp.tls_nb.NonBlockingTLS</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html"
+ >nbxmpp.tls_nb.PyOpenSSLWrapper</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.SSLWrapper-class.html"
+ >nbxmpp.tls_nb.SSLWrapper</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.SSLWrapper.Error-class.html"
+ >nbxmpp.tls_nb.SSLWrapper.Error</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html"
+ >nbxmpp.tls_nb.StdlibSSLWrapper</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html"
+ >nbxmpp.transports_nb.NonBlockingHTTP</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html"
+ >nbxmpp.transports_nb.NonBlockingHTTPBOSH</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingTCP-class.html"
+ >nbxmpp.transports_nb.NonBlockingTCP</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingTransport-class.html"
+ >nbxmpp.transports_nb.NonBlockingTransport</a><br /> <h2 class="toc">All Functions</h2>
+ <a target="mainFrame" href="nbxmpp.auth_nb-module.html#C"
+ >nbxmpp.auth_nb.C</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#H"
+ >nbxmpp.auth_nb.H</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#HH"
+ >nbxmpp.auth_nb.HH</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#challenge_splitter"
+ >nbxmpp.auth_nb.challenge_splitter</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#scram_parse"
+ >nbxmpp.auth_nb.scram_parse</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#get_rand_number"
+ >nbxmpp.bosh.get_rand_number</a><br /> <a target="mainFrame" href="nbxmpp.c14n-module.html#c14n"
+ >nbxmpp.c14n.c14n</a><br /> <a target="mainFrame" href="nbxmpp.c14n-module.html#normalise_attr"
+ >nbxmpp.c14n.normalise_attr</a><br /> <a target="mainFrame" href="nbxmpp.c14n-module.html#normalise_text"
+ >nbxmpp.c14n.normalise_text</a><br /> <div class="private">
+ <a target="mainFrame" href="nbxmpp.features_nb-module.html#_ReceivedRegInfo"
+ >nbxmpp.features_nb._ReceivedRegInfo</a><br /> </div>
+ <div class="private">
+ <a target="mainFrame" href="nbxmpp.features_nb-module.html#_on_default_response"
+ >nbxmpp.features_nb._on_default_response</a><br /> </div>
+ <a target="mainFrame" href="nbxmpp.features_nb-module.html#changePasswordTo"
+ >nbxmpp.features_nb.changePasswordTo</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#delPrivacyList"
+ >nbxmpp.features_nb.delPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getActiveAndDefaultPrivacyLists"
+ >nbxmpp.features_nb.getActiveAndDefaultPrivacyLists</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getPrivacyList"
+ >nbxmpp.features_nb.getPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getPrivacyLists"
+ >nbxmpp.features_nb.getPrivacyLists</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getRegInfo"
+ >nbxmpp.features_nb.getRegInfo</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#register"
+ >nbxmpp.features_nb.register</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#setActivePrivacyList"
+ >nbxmpp.features_nb.setActivePrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#setDefaultPrivacyList"
+ >nbxmpp.features_nb.setDefaultPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#setPrivacyList"
+ >nbxmpp.features_nb.setPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#unregister"
+ >nbxmpp.features_nb.unregister</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#get_idlequeue"
+ >nbxmpp.idlequeue.get_idlequeue</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ascii_upper"
+ >nbxmpp.protocol.ascii_upper</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#isErrorNode"
+ >nbxmpp.protocol.isErrorNode</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#isResultNode"
+ >nbxmpp.protocol.isResultNode</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#BadXML2Node"
+ >nbxmpp.simplexml.BadXML2Node</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#XML2Node"
+ >nbxmpp.simplexml.XML2Node</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#XMLescape"
+ >nbxmpp.simplexml.XMLescape</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#ustr"
+ >nbxmpp.simplexml.ustr</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#gattr"
+ >nbxmpp.tls_nb.gattr</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#get_proxy_data_from_dict"
+ >nbxmpp.transports_nb.get_proxy_data_from_dict</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#urisplit"
+ >nbxmpp.transports_nb.urisplit</a><br /> <h2 class="toc">All Variables</h2>
+ <a target="mainFrame" href="nbxmpp-module.html#ERRORS"
+ >nbxmpp.ERRORS</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_BAD_REQUEST"
+ >nbxmpp.ERR_BAD_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_CONFLICT"
+ >nbxmpp.ERR_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_FEATURE_NOT_IMPLEMENTED"
+ >nbxmpp.ERR_FEATURE_NOT_IMPLEMENTED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_FORBIDDEN"
+ >nbxmpp.ERR_FORBIDDEN</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_GONE"
+ >nbxmpp.ERR_GONE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_INTERNAL_SERVER_ERROR"
+ >nbxmpp.ERR_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_ITEM_NOT_FOUND"
+ >nbxmpp.ERR_ITEM_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_JID_MALFORMED"
+ >nbxmpp.ERR_JID_MALFORMED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_NOT_ACCEPTABLE"
+ >nbxmpp.ERR_NOT_ACCEPTABLE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_NOT_ALLOWED"
+ >nbxmpp.ERR_NOT_ALLOWED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_NOT_AUTHORIZED"
+ >nbxmpp.ERR_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_PAYMENT_REQUIRED"
+ >nbxmpp.ERR_PAYMENT_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_RECIPIENT_UNAVAILABLE"
+ >nbxmpp.ERR_RECIPIENT_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REDIRECT"
+ >nbxmpp.ERR_REDIRECT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REGISTRATION_REQUIRED"
+ >nbxmpp.ERR_REGISTRATION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REMOTE_SERVER_NOT_FOUND"
+ >nbxmpp.ERR_REMOTE_SERVER_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REMOTE_SERVER_TIMEOUT"
+ >nbxmpp.ERR_REMOTE_SERVER_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_RESOURCE_CONSTRAINT"
+ >nbxmpp.ERR_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_SERVICE_UNAVAILABLE"
+ >nbxmpp.ERR_SERVICE_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_SUBSCRIPTION_REQUIRED"
+ >nbxmpp.ERR_SUBSCRIPTION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_UNDEFINED_CONDITION"
+ >nbxmpp.ERR_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_UNEXPECTED_REQUEST"
+ >nbxmpp.ERR_UNEXPECTED_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_ABORTED"
+ >nbxmpp.SASL_ABORTED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_INCORRECT_ENCODING"
+ >nbxmpp.SASL_INCORRECT_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_INVALID_AUTHZID"
+ >nbxmpp.SASL_INVALID_AUTHZID</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_INVALID_MECHANISM"
+ >nbxmpp.SASL_INVALID_MECHANISM</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_MECHANISM_TOO_WEAK"
+ >nbxmpp.SASL_MECHANISM_TOO_WEAK</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_NOT_AUTHORIZED"
+ >nbxmpp.SASL_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_TEMPORARY_AUTH_FAILURE"
+ >nbxmpp.SASL_TEMPORARY_AUTH_FAILURE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_BAD_FORMAT"
+ >nbxmpp.STREAM_BAD_FORMAT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_BAD_NAMESPACE_PREFIX"
+ >nbxmpp.STREAM_BAD_NAMESPACE_PREFIX</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_CONFLICT"
+ >nbxmpp.STREAM_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_CONNECTION_TIMEOUT"
+ >nbxmpp.STREAM_CONNECTION_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_HOST_GONE"
+ >nbxmpp.STREAM_HOST_GONE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_HOST_UNKNOWN"
+ >nbxmpp.STREAM_HOST_UNKNOWN</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_IMPROPER_ADDRESSING"
+ >nbxmpp.STREAM_IMPROPER_ADDRESSING</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INTERNAL_SERVER_ERROR"
+ >nbxmpp.STREAM_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_FROM"
+ >nbxmpp.STREAM_INVALID_FROM</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_ID"
+ >nbxmpp.STREAM_INVALID_ID</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_NAMESPACE"
+ >nbxmpp.STREAM_INVALID_NAMESPACE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_XML"
+ >nbxmpp.STREAM_INVALID_XML</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_NOT_AUTHORIZED"
+ >nbxmpp.STREAM_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_POLICY_VIOLATION"
+ >nbxmpp.STREAM_POLICY_VIOLATION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_REMOTE_CONNECTION_FAILED"
+ >nbxmpp.STREAM_REMOTE_CONNECTION_FAILED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_RESOURCE_CONSTRAINT"
+ >nbxmpp.STREAM_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_RESTRICTED_XML"
+ >nbxmpp.STREAM_RESTRICTED_XML</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_SEE_OTHER_HOST"
+ >nbxmpp.STREAM_SEE_OTHER_HOST</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_SYSTEM_SHUTDOWN"
+ >nbxmpp.STREAM_SYSTEM_SHUTDOWN</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNDEFINED_CONDITION"
+ >nbxmpp.STREAM_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNSUPPORTED_ENCODING"
+ >nbxmpp.STREAM_UNSUPPORTED_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNSUPPORTED_STANZA_TYPE"
+ >nbxmpp.STREAM_UNSUPPORTED_STANZA_TYPE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNSUPPORTED_VERSION"
+ >nbxmpp.STREAM_UNSUPPORTED_VERSION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_XML_NOT_WELL_FORMED"
+ >nbxmpp.STREAM_XML_NOT_WELL_FORMED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#__package__"
+ >nbxmpp.__package__</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#GSS_STATE_STEP"
+ >nbxmpp.auth_nb.GSS_STATE_STEP</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#GSS_STATE_WRAP"
+ >nbxmpp.auth_nb.GSS_STATE_WRAP</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_FAILURE"
+ >nbxmpp.auth_nb.SASL_FAILURE</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_FAILURE_IN_PROGRESS"
+ >nbxmpp.auth_nb.SASL_FAILURE_IN_PROGRESS</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_IN_PROCESS"
+ >nbxmpp.auth_nb.SASL_IN_PROCESS</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_SUCCESS"
+ >nbxmpp.auth_nb.SASL_SUCCESS</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_UNSUPPORTED"
+ >nbxmpp.auth_nb.SASL_UNSUPPORTED</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#__package__"
+ >nbxmpp.auth_nb.__package__</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#have_kerberos"
+ >nbxmpp.auth_nb.have_kerberos</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#kerberos"
+ >nbxmpp.auth_nb.kerberos</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#log"
+ >nbxmpp.auth_nb.log</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#FAKE_DESCRIPTOR"
+ >nbxmpp.bosh.FAKE_DESCRIPTOR</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#KEY_COUNT"
+ >nbxmpp.bosh.KEY_COUNT</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#__package__"
+ >nbxmpp.bosh.__package__</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#bosh_errors"
+ >nbxmpp.bosh.bosh_errors</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#log"
+ >nbxmpp.bosh.log</a><br /> <a target="mainFrame" href="nbxmpp.c14n-module.html#__package__"
+ >nbxmpp.c14n.__package__</a><br /> <a target="mainFrame" href="nbxmpp.client_nb-module.html#__package__"
+ >nbxmpp.client_nb.__package__</a><br /> <a target="mainFrame" href="nbxmpp.client_nb-module.html#log"
+ >nbxmpp.client_nb.log</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#DEFAULT_TIMEOUT_SECONDS"
+ >nbxmpp.dispatcher_nb.DEFAULT_TIMEOUT_SECONDS</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#XML_DECLARATION"
+ >nbxmpp.dispatcher_nb.XML_DECLARATION</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#__package__"
+ >nbxmpp.dispatcher_nb.__package__</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#log"
+ >nbxmpp.dispatcher_nb.log</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#outgoingID"
+ >nbxmpp.dispatcher_nb.outgoingID</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_ACT_ALLOW"
+ >nbxmpp.features_nb.PL_ACT_ALLOW</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_ACT_DENY"
+ >nbxmpp.features_nb.PL_ACT_DENY</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_TYPE_GROUP"
+ >nbxmpp.features_nb.PL_TYPE_GROUP</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_TYPE_JID"
+ >nbxmpp.features_nb.PL_TYPE_JID</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_TYPE_SUBC"
+ >nbxmpp.features_nb.PL_TYPE_SUBC</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_ACTIVE_DEFAULT"
+ >nbxmpp.features_nb.PRIVACY_LISTS_ACTIVE_DEFAULT</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_RECEIVED"
+ >nbxmpp.features_nb.PRIVACY_LISTS_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PRIVACY_LIST_RECEIVED"
+ >nbxmpp.features_nb.PRIVACY_LIST_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#REGISTER_DATA_RECEIVED"
+ >nbxmpp.features_nb.REGISTER_DATA_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#__package__"
+ >nbxmpp.features_nb.__package__</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_CLOSE"
+ >nbxmpp.idlequeue.FLAG_CLOSE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_READ"
+ >nbxmpp.idlequeue.FLAG_READ</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_READ_WRITE"
+ >nbxmpp.idlequeue.FLAG_READ_WRITE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_WRITE"
+ >nbxmpp.idlequeue.FLAG_WRITE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#HAVE_GOBJECT"
+ >nbxmpp.idlequeue.HAVE_GOBJECT</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#IS_CLOSED"
+ >nbxmpp.idlequeue.IS_CLOSED</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#PENDING_READ"
+ >nbxmpp.idlequeue.PENDING_READ</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#PENDING_WRITE"
+ >nbxmpp.idlequeue.PENDING_WRITE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#__package__"
+ >nbxmpp.idlequeue.__package__</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#log"
+ >nbxmpp.idlequeue.log</a><br /> <a target="mainFrame" href="nbxmpp-module.html#name"
+ >nbxmpp.name</a><br /> <a target="mainFrame" href="nbxmpp.plugin-module.html#__package__"
+ >nbxmpp.plugin.__package__</a><br /> <a target="mainFrame" href="nbxmpp.plugin-module.html#log"
+ >nbxmpp.plugin.log</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERRORS"
+ >nbxmpp.protocol.ERRORS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_BAD_REQUEST"
+ >nbxmpp.protocol.ERR_BAD_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_CONFLICT"
+ >nbxmpp.protocol.ERR_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_FEATURE_NOT_IMPLEMENTED"
+ >nbxmpp.protocol.ERR_FEATURE_NOT_IMPLEMENTED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_FORBIDDEN"
+ >nbxmpp.protocol.ERR_FORBIDDEN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_GONE"
+ >nbxmpp.protocol.ERR_GONE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_INTERNAL_SERVER_ERROR"
+ >nbxmpp.protocol.ERR_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_ITEM_NOT_FOUND"
+ >nbxmpp.protocol.ERR_ITEM_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_JID_MALFORMED"
+ >nbxmpp.protocol.ERR_JID_MALFORMED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_NOT_ACCEPTABLE"
+ >nbxmpp.protocol.ERR_NOT_ACCEPTABLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_NOT_ALLOWED"
+ >nbxmpp.protocol.ERR_NOT_ALLOWED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_NOT_AUTHORIZED"
+ >nbxmpp.protocol.ERR_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_PAYMENT_REQUIRED"
+ >nbxmpp.protocol.ERR_PAYMENT_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_RECIPIENT_UNAVAILABLE"
+ >nbxmpp.protocol.ERR_RECIPIENT_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REDIRECT"
+ >nbxmpp.protocol.ERR_REDIRECT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REGISTRATION_REQUIRED"
+ >nbxmpp.protocol.ERR_REGISTRATION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_NOT_FOUND"
+ >nbxmpp.protocol.ERR_REMOTE_SERVER_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_TIMEOUT"
+ >nbxmpp.protocol.ERR_REMOTE_SERVER_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_RESOURCE_CONSTRAINT"
+ >nbxmpp.protocol.ERR_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_SERVICE_UNAVAILABLE"
+ >nbxmpp.protocol.ERR_SERVICE_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_SUBSCRIPTION_REQUIRED"
+ >nbxmpp.protocol.ERR_SUBSCRIPTION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_UNDEFINED_CONDITION"
+ >nbxmpp.protocol.ERR_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_UNEXPECTED_REQUEST"
+ >nbxmpp.protocol.ERR_UNEXPECTED_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ACTIVITY"
+ >nbxmpp.protocol.NS_ACTIVITY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ADDRESS"
+ >nbxmpp.protocol.NS_ADDRESS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AGENTS"
+ >nbxmpp.protocol.NS_AGENTS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AMP"
+ >nbxmpp.protocol.NS_AMP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AMP_ERRORS"
+ >nbxmpp.protocol.NS_AMP_ERRORS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE"
+ >nbxmpp.protocol.NS_ARCHIVE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_AUTO"
+ >nbxmpp.protocol.NS_ARCHIVE_AUTO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANAGE"
+ >nbxmpp.protocol.NS_ARCHIVE_MANAGE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANUAL"
+ >nbxmpp.protocol.NS_ARCHIVE_MANUAL</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_PREF"
+ >nbxmpp.protocol.NS_ARCHIVE_PREF</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ATOM"
+ >nbxmpp.protocol.NS_ATOM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ATTENTION"
+ >nbxmpp.protocol.NS_ATTENTION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AUTH"
+ >nbxmpp.protocol.NS_AUTH</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AVATAR"
+ >nbxmpp.protocol.NS_AVATAR</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BIND"
+ >nbxmpp.protocol.NS_BIND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BOB"
+ >nbxmpp.protocol.NS_BOB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BOOKMARKS"
+ >nbxmpp.protocol.NS_BOOKMARKS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BROWSE"
+ >nbxmpp.protocol.NS_BROWSE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BROWSING"
+ >nbxmpp.protocol.NS_BROWSING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BYTESTREAM"
+ >nbxmpp.protocol.NS_BYTESTREAM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CAPS"
+ >nbxmpp.protocol.NS_CAPS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CAPTCHA"
+ >nbxmpp.protocol.NS_CAPTCHA</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CARBONS"
+ >nbxmpp.protocol.NS_CARBONS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CHATSTATES"
+ >nbxmpp.protocol.NS_CHATSTATES</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CHATTING"
+ >nbxmpp.protocol.NS_CHATTING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CLIENT"
+ >nbxmpp.protocol.NS_CLIENT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMMANDS"
+ >nbxmpp.protocol.NS_COMMANDS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMPONENT_1"
+ >nbxmpp.protocol.NS_COMPONENT_1</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMPONENT_ACCEPT"
+ >nbxmpp.protocol.NS_COMPONENT_ACCEPT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMPRESS"
+ >nbxmpp.protocol.NS_COMPRESS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CONDITIONS"
+ >nbxmpp.protocol.NS_CONDITIONS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CONFERENCE"
+ >nbxmpp.protocol.NS_CONFERENCE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA"
+ >nbxmpp.protocol.NS_DATA</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA_LAYOUT"
+ >nbxmpp.protocol.NS_DATA_LAYOUT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA_MEDIA"
+ >nbxmpp.protocol.NS_DATA_MEDIA</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA_VALIDATE"
+ >nbxmpp.protocol.NS_DATA_VALIDATE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DELAY"
+ >nbxmpp.protocol.NS_DELAY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DELAY2"
+ >nbxmpp.protocol.NS_DELAY2</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DIALBACK"
+ >nbxmpp.protocol.NS_DIALBACK</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DISCO"
+ >nbxmpp.protocol.NS_DISCO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DISCO_INFO"
+ >nbxmpp.protocol.NS_DISCO_INFO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DISCO_ITEMS"
+ >nbxmpp.protocol.NS_DISCO_ITEMS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ENCRYPTED"
+ >nbxmpp.protocol.NS_ENCRYPTED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ESESSION"
+ >nbxmpp.protocol.NS_ESESSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ESESSION_INIT"
+ >nbxmpp.protocol.NS_ESESSION_INIT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_EVENT"
+ >nbxmpp.protocol.NS_EVENT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_FEATURE"
+ >nbxmpp.protocol.NS_FEATURE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_FILE"
+ >nbxmpp.protocol.NS_FILE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_FORWARD"
+ >nbxmpp.protocol.NS_FORWARD</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GAMING"
+ >nbxmpp.protocol.NS_GAMING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GATEWAY"
+ >nbxmpp.protocol.NS_GATEWAY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GEOLOC"
+ >nbxmpp.protocol.NS_GEOLOC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GMAILNOTIFY"
+ >nbxmpp.protocol.NS_GMAILNOTIFY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GROUPCHAT"
+ >nbxmpp.protocol.NS_GROUPCHAT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GTALKSETTING"
+ >nbxmpp.protocol.NS_GTALKSETTING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES"
+ >nbxmpp.protocol.NS_HASHES</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_MD5"
+ >nbxmpp.protocol.NS_HASHES_MD5</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_SHA1"
+ >nbxmpp.protocol.NS_HASHES_SHA1</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_SHA256"
+ >nbxmpp.protocol.NS_HASHES_SHA256</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_SHA512"
+ >nbxmpp.protocol.NS_HASHES_SHA512</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HTTP_AUTH"
+ >nbxmpp.protocol.NS_HTTP_AUTH</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HTTP_BIND"
+ >nbxmpp.protocol.NS_HTTP_BIND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_IBB"
+ >nbxmpp.protocol.NS_IBB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_INVISIBLE"
+ >nbxmpp.protocol.NS_INVISIBLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_IQ"
+ >nbxmpp.protocol.NS_IQ</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE"
+ >nbxmpp.protocol.NS_JINGLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_BYTESTREAM"
+ >nbxmpp.protocol.NS_JINGLE_BYTESTREAM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_ERRORS"
+ >nbxmpp.protocol.NS_JINGLE_ERRORS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_FILE_TRANSFER"
+ >nbxmpp.protocol.NS_JINGLE_FILE_TRANSFER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_IBB"
+ >nbxmpp.protocol.NS_JINGLE_IBB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_ICE_UDP"
+ >nbxmpp.protocol.NS_JINGLE_ICE_UDP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RAW_UDP"
+ >nbxmpp.protocol.NS_JINGLE_RAW_UDP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RTP"
+ >nbxmpp.protocol.NS_JINGLE_RTP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_AUDIO"
+ >nbxmpp.protocol.NS_JINGLE_RTP_AUDIO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_VIDEO"
+ >nbxmpp.protocol.NS_JINGLE_RTP_VIDEO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_XTLS"
+ >nbxmpp.protocol.NS_JINGLE_XTLS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_LAST"
+ >nbxmpp.protocol.NS_LAST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_LOCATION"
+ >nbxmpp.protocol.NS_LOCATION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MESSAGE"
+ >nbxmpp.protocol.NS_MESSAGE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MOOD"
+ >nbxmpp.protocol.NS_MOOD</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC"
+ >nbxmpp.protocol.NS_MUC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_ADMIN"
+ >nbxmpp.protocol.NS_MUC_ADMIN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_CONFIG"
+ >nbxmpp.protocol.NS_MUC_CONFIG</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_OWNER"
+ >nbxmpp.protocol.NS_MUC_OWNER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_UNIQUE"
+ >nbxmpp.protocol.NS_MUC_UNIQUE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_USER"
+ >nbxmpp.protocol.NS_MUC_USER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_NICK"
+ >nbxmpp.protocol.NS_NICK</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_OFFLINE"
+ >nbxmpp.protocol.NS_OFFLINE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PHYSLOC"
+ >nbxmpp.protocol.NS_PHYSLOC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PING"
+ >nbxmpp.protocol.NS_PING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PRESENCE"
+ >nbxmpp.protocol.NS_PRESENCE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PRIVACY"
+ >nbxmpp.protocol.NS_PRIVACY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PRIVATE"
+ >nbxmpp.protocol.NS_PRIVATE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PROFILE"
+ >nbxmpp.protocol.NS_PROFILE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBKEY_ATTEST"
+ >nbxmpp.protocol.NS_PUBKEY_ATTEST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBKEY_PUBKEY"
+ >nbxmpp.protocol.NS_PUBKEY_PUBKEY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBKEY_REVOKE"
+ >nbxmpp.protocol.NS_PUBKEY_REVOKE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB"
+ >nbxmpp.protocol.NS_PUBSUB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB_EVENT"
+ >nbxmpp.protocol.NS_PUBSUB_EVENT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB_OWNER"
+ >nbxmpp.protocol.NS_PUBSUB_OWNER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB_PUBLISH_OPTIONS"
+ >nbxmpp.protocol.NS_PUBSUB_PUBLISH_OPTIONS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_RECEIPTS"
+ >nbxmpp.protocol.NS_RECEIPTS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_REGISTER"
+ >nbxmpp.protocol.NS_REGISTER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTER"
+ >nbxmpp.protocol.NS_ROSTER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTERNOTES"
+ >nbxmpp.protocol.NS_ROSTERNOTES</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTERX"
+ >nbxmpp.protocol.NS_ROSTERX</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTER_VER"
+ >nbxmpp.protocol.NS_ROSTER_VER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_RPC"
+ >nbxmpp.protocol.NS_RPC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_RSM"
+ >nbxmpp.protocol.NS_RSM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SASL"
+ >nbxmpp.protocol.NS_SASL</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SEARCH"
+ >nbxmpp.protocol.NS_SEARCH</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SECLABEL"
+ >nbxmpp.protocol.NS_SECLABEL</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SECLABEL_CATALOG"
+ >nbxmpp.protocol.NS_SECLABEL_CATALOG</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SERVER"
+ >nbxmpp.protocol.NS_SERVER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SESSION"
+ >nbxmpp.protocol.NS_SESSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SI"
+ >nbxmpp.protocol.NS_SI</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SIGNED"
+ >nbxmpp.protocol.NS_SIGNED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SI_PUB"
+ >nbxmpp.protocol.NS_SI_PUB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SSN"
+ >nbxmpp.protocol.NS_SSN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STANZAS"
+ >nbxmpp.protocol.NS_STANZAS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STANZA_CRYPTO"
+ >nbxmpp.protocol.NS_STANZA_CRYPTO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STREAM"
+ >nbxmpp.protocol.NS_STREAM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STREAMS"
+ >nbxmpp.protocol.NS_STREAMS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STREAM_MGMT"
+ >nbxmpp.protocol.NS_STREAM_MGMT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TIME"
+ >nbxmpp.protocol.NS_TIME</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TIME_REVISED"
+ >nbxmpp.protocol.NS_TIME_REVISED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TLS"
+ >nbxmpp.protocol.NS_TLS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TUNE"
+ >nbxmpp.protocol.NS_TUNE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VACATION"
+ >nbxmpp.protocol.NS_VACATION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VCARD"
+ >nbxmpp.protocol.NS_VCARD</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VCARD_UPDATE"
+ >nbxmpp.protocol.NS_VCARD_UPDATE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VERSION"
+ >nbxmpp.protocol.NS_VERSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VIEWING"
+ >nbxmpp.protocol.NS_VIEWING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_WAITINGLIST"
+ >nbxmpp.protocol.NS_WAITINGLIST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_XHTML"
+ >nbxmpp.protocol.NS_XHTML</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_XHTML_IM"
+ >nbxmpp.protocol.NS_XHTML_IM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_XMPP_STREAMS"
+ >nbxmpp.protocol.NS_XMPP_STREAMS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_ABORTED"
+ >nbxmpp.protocol.SASL_ABORTED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_INCORRECT_ENCODING"
+ >nbxmpp.protocol.SASL_INCORRECT_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_INVALID_AUTHZID"
+ >nbxmpp.protocol.SASL_INVALID_AUTHZID</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_INVALID_MECHANISM"
+ >nbxmpp.protocol.SASL_INVALID_MECHANISM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_MECHANISM_TOO_WEAK"
+ >nbxmpp.protocol.SASL_MECHANISM_TOO_WEAK</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_NOT_AUTHORIZED"
+ >nbxmpp.protocol.SASL_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_TEMPORARY_AUTH_FAILURE"
+ >nbxmpp.protocol.SASL_TEMPORARY_AUTH_FAILURE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_BAD_FORMAT"
+ >nbxmpp.protocol.STREAM_BAD_FORMAT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_BAD_NAMESPACE_PREFIX"
+ >nbxmpp.protocol.STREAM_BAD_NAMESPACE_PREFIX</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_CONFLICT"
+ >nbxmpp.protocol.STREAM_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_CONNECTION_TIMEOUT"
+ >nbxmpp.protocol.STREAM_CONNECTION_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_HOST_GONE"
+ >nbxmpp.protocol.STREAM_HOST_GONE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_HOST_UNKNOWN"
+ >nbxmpp.protocol.STREAM_HOST_UNKNOWN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_IMPROPER_ADDRESSING"
+ >nbxmpp.protocol.STREAM_IMPROPER_ADDRESSING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INTERNAL_SERVER_ERROR"
+ >nbxmpp.protocol.STREAM_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_FROM"
+ >nbxmpp.protocol.STREAM_INVALID_FROM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_ID"
+ >nbxmpp.protocol.STREAM_INVALID_ID</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_NAMESPACE"
+ >nbxmpp.protocol.STREAM_INVALID_NAMESPACE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_XML"
+ >nbxmpp.protocol.STREAM_INVALID_XML</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_NOT_AUTHORIZED"
+ >nbxmpp.protocol.STREAM_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_POLICY_VIOLATION"
+ >nbxmpp.protocol.STREAM_POLICY_VIOLATION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_REMOTE_CONNECTION_FAILED"
+ >nbxmpp.protocol.STREAM_REMOTE_CONNECTION_FAILED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_RESOURCE_CONSTRAINT"
+ >nbxmpp.protocol.STREAM_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_RESTRICTED_XML"
+ >nbxmpp.protocol.STREAM_RESTRICTED_XML</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_SEE_OTHER_HOST"
+ >nbxmpp.protocol.STREAM_SEE_OTHER_HOST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_SYSTEM_SHUTDOWN"
+ >nbxmpp.protocol.STREAM_SYSTEM_SHUTDOWN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNDEFINED_CONDITION"
+ >nbxmpp.protocol.STREAM_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_ENCODING"
+ >nbxmpp.protocol.STREAM_UNSUPPORTED_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_STANZA_TYPE"
+ >nbxmpp.protocol.STREAM_UNSUPPORTED_STANZA_TYPE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_VERSION"
+ >nbxmpp.protocol.STREAM_UNSUPPORTED_VERSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_XML_NOT_WELL_FORMED"
+ >nbxmpp.protocol.STREAM_XML_NOT_WELL_FORMED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#__package__"
+ >nbxmpp.protocol.__package__</a><br /> <div class="private">
+ <a target="mainFrame" href="nbxmpp.protocol-module.html#_errorcodes"
+ >nbxmpp.protocol._errorcodes</a><br /> </div>
+ <a target="mainFrame" href="nbxmpp.protocol-module.html#name"
+ >nbxmpp.protocol.name</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#sasl_error_conditions"
+ >nbxmpp.protocol.sasl_error_conditions</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#stream_exceptions"
+ >nbxmpp.protocol.stream_exceptions</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#xmpp_stanza_error_conditions"
+ >nbxmpp.protocol.xmpp_stanza_error_conditions</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#xmpp_stream_error_conditions"
+ >nbxmpp.protocol.xmpp_stream_error_conditions</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors-module.html#__package__"
+ >nbxmpp.proxy_connectors.__package__</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors-module.html#log"
+ >nbxmpp.proxy_connectors.log</a><br /> <a target="mainFrame" href="nbxmpp.roster_nb-module.html#__package__"
+ >nbxmpp.roster_nb.__package__</a><br /> <a target="mainFrame" href="nbxmpp.roster_nb-module.html#log"
+ >nbxmpp.roster_nb.log</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#ENCODING"
+ >nbxmpp.simplexml.ENCODING</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#__package__"
+ >nbxmpp.simplexml.__package__</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#log"
+ >nbxmpp.simplexml.log</a><br /> <a target="mainFrame" href="nbxmpp.smacks-module.html#__package__"
+ >nbxmpp.smacks.__package__</a><br /> <a target="mainFrame" href="nbxmpp.smacks-module.html#log"
+ >nbxmpp.smacks.log</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#B_1"
+ >nbxmpp.stringprepare.B_1</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#B_2"
+ >nbxmpp.stringprepare.B_2</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_11"
+ >nbxmpp.stringprepare.C_11</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_12"
+ >nbxmpp.stringprepare.C_12</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_21"
+ >nbxmpp.stringprepare.C_21</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_22"
+ >nbxmpp.stringprepare.C_22</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_3"
+ >nbxmpp.stringprepare.C_3</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_4"
+ >nbxmpp.stringprepare.C_4</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_5"
+ >nbxmpp.stringprepare.C_5</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_6"
+ >nbxmpp.stringprepare.C_6</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_7"
+ >nbxmpp.stringprepare.C_7</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_8"
+ >nbxmpp.stringprepare.C_8</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_9"
+ >nbxmpp.stringprepare.C_9</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#__package__"
+ >nbxmpp.stringprepare.__package__</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#nameprep"
+ >nbxmpp.stringprepare.nameprep</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#nodeprep"
+ >nbxmpp.stringprepare.nodeprep</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#resourceprep"
+ >nbxmpp.stringprepare.resourceprep</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#PYOPENSSL"
+ >nbxmpp.tls_nb.PYOPENSSL</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#PYSTDLIB"
+ >nbxmpp.tls_nb.PYSTDLIB</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#USE_PYOPENSSL"
+ >nbxmpp.tls_nb.USE_PYOPENSSL</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#__package__"
+ >nbxmpp.tls_nb.__package__</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#log"
+ >nbxmpp.tls_nb.log</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#CONNECTED"
+ >nbxmpp.transports_nb.CONNECTED</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#CONNECTING"
+ >nbxmpp.transports_nb.CONNECTING</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#CONNECT_TIMEOUT_SECONDS"
+ >nbxmpp.transports_nb.CONNECT_TIMEOUT_SECONDS</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DATA_ERROR"
+ >nbxmpp.transports_nb.DATA_ERROR</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DATA_RECEIVED"
+ >nbxmpp.transports_nb.DATA_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DATA_SENT"
+ >nbxmpp.transports_nb.DATA_SENT</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DISCONNECTED"
+ >nbxmpp.transports_nb.DISCONNECTED</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DISCONNECTING"
+ >nbxmpp.transports_nb.DISCONNECTING</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DISCONNECT_TIMEOUT_SECONDS"
+ >nbxmpp.transports_nb.DISCONNECT_TIMEOUT_SECONDS</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#PROXY_CONNECTING"
+ >nbxmpp.transports_nb.PROXY_CONNECTING</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#RECV_BUFSIZE"
+ >nbxmpp.transports_nb.RECV_BUFSIZE</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#STATES"
+ >nbxmpp.transports_nb.STATES</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#__package__"
+ >nbxmpp.transports_nb.__package__</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#log"
+ >nbxmpp.transports_nb.log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp-module.html b/doc/apidocs/toc-nbxmpp-module.html
new file mode 100644
index 0000000..7063434
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp-module.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>nbxmpp</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module nbxmpp</h1>
+<hr />
+ <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp-module.html#ERRORS"
+ >ERRORS</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_BAD_REQUEST"
+ >ERR_BAD_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_CONFLICT"
+ >ERR_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_FEATURE_NOT_IMPLEMENTED"
+ >ERR_FEATURE_NOT_IMPLEMENTED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_FORBIDDEN"
+ >ERR_FORBIDDEN</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_GONE"
+ >ERR_GONE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_INTERNAL_SERVER_ERROR"
+ >ERR_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_ITEM_NOT_FOUND"
+ >ERR_ITEM_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_JID_MALFORMED"
+ >ERR_JID_MALFORMED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_NOT_ACCEPTABLE"
+ >ERR_NOT_ACCEPTABLE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_NOT_ALLOWED"
+ >ERR_NOT_ALLOWED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_NOT_AUTHORIZED"
+ >ERR_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_PAYMENT_REQUIRED"
+ >ERR_PAYMENT_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_RECIPIENT_UNAVAILABLE"
+ >ERR_RECIPIENT_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REDIRECT"
+ >ERR_REDIRECT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REGISTRATION_REQUIRED"
+ >ERR_REGISTRATION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REMOTE_SERVER_NOT_FOUND"
+ >ERR_REMOTE_SERVER_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_REMOTE_SERVER_TIMEOUT"
+ >ERR_REMOTE_SERVER_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_RESOURCE_CONSTRAINT"
+ >ERR_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_SERVICE_UNAVAILABLE"
+ >ERR_SERVICE_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_SUBSCRIPTION_REQUIRED"
+ >ERR_SUBSCRIPTION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_UNDEFINED_CONDITION"
+ >ERR_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#ERR_UNEXPECTED_REQUEST"
+ >ERR_UNEXPECTED_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_ABORTED"
+ >SASL_ABORTED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_INCORRECT_ENCODING"
+ >SASL_INCORRECT_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_INVALID_AUTHZID"
+ >SASL_INVALID_AUTHZID</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_INVALID_MECHANISM"
+ >SASL_INVALID_MECHANISM</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_MECHANISM_TOO_WEAK"
+ >SASL_MECHANISM_TOO_WEAK</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_NOT_AUTHORIZED"
+ >SASL_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#SASL_TEMPORARY_AUTH_FAILURE"
+ >SASL_TEMPORARY_AUTH_FAILURE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_BAD_FORMAT"
+ >STREAM_BAD_FORMAT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_BAD_NAMESPACE_PREFIX"
+ >STREAM_BAD_NAMESPACE_PREFIX</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_CONFLICT"
+ >STREAM_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_CONNECTION_TIMEOUT"
+ >STREAM_CONNECTION_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_HOST_GONE"
+ >STREAM_HOST_GONE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_HOST_UNKNOWN"
+ >STREAM_HOST_UNKNOWN</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_IMPROPER_ADDRESSING"
+ >STREAM_IMPROPER_ADDRESSING</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INTERNAL_SERVER_ERROR"
+ >STREAM_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_FROM"
+ >STREAM_INVALID_FROM</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_ID"
+ >STREAM_INVALID_ID</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_NAMESPACE"
+ >STREAM_INVALID_NAMESPACE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_INVALID_XML"
+ >STREAM_INVALID_XML</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_NOT_AUTHORIZED"
+ >STREAM_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_POLICY_VIOLATION"
+ >STREAM_POLICY_VIOLATION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_REMOTE_CONNECTION_FAILED"
+ >STREAM_REMOTE_CONNECTION_FAILED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_RESOURCE_CONSTRAINT"
+ >STREAM_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_RESTRICTED_XML"
+ >STREAM_RESTRICTED_XML</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_SEE_OTHER_HOST"
+ >STREAM_SEE_OTHER_HOST</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_SYSTEM_SHUTDOWN"
+ >STREAM_SYSTEM_SHUTDOWN</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNDEFINED_CONDITION"
+ >STREAM_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNSUPPORTED_ENCODING"
+ >STREAM_UNSUPPORTED_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNSUPPORTED_STANZA_TYPE"
+ >STREAM_UNSUPPORTED_STANZA_TYPE</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_UNSUPPORTED_VERSION"
+ >STREAM_UNSUPPORTED_VERSION</a><br /> <a target="mainFrame" href="nbxmpp-module.html#STREAM_XML_NOT_WELL_FORMED"
+ >STREAM_XML_NOT_WELL_FORMED</a><br /> <a target="mainFrame" href="nbxmpp-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp-module.html#name"
+ >name</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.auth_nb-module.html b/doc/apidocs/toc-nbxmpp.auth_nb-module.html
new file mode 100644
index 0000000..25e5a39
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.auth_nb-module.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>auth_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module auth_nb</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.auth_nb.NonBlockingBind-class.html"
+ >NonBlockingBind</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb.NonBlockingNonSASL-class.html"
+ >NonBlockingNonSASL</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb.SASL-class.html"
+ >SASL</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.auth_nb-module.html#C"
+ >C</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#H"
+ >H</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#HH"
+ >HH</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#challenge_splitter"
+ >challenge_splitter</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#scram_parse"
+ >scram_parse</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.auth_nb-module.html#GSS_STATE_STEP"
+ >GSS_STATE_STEP</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#GSS_STATE_WRAP"
+ >GSS_STATE_WRAP</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_FAILURE"
+ >SASL_FAILURE</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_FAILURE_IN_PROGRESS"
+ >SASL_FAILURE_IN_PROGRESS</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_IN_PROCESS"
+ >SASL_IN_PROCESS</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_SUCCESS"
+ >SASL_SUCCESS</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#SASL_UNSUPPORTED"
+ >SASL_UNSUPPORTED</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#have_kerberos"
+ >have_kerberos</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#kerberos"
+ >kerberos</a><br /> <a target="mainFrame" href="nbxmpp.auth_nb-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.bosh-module.html b/doc/apidocs/toc-nbxmpp.bosh-module.html
new file mode 100644
index 0000000..d3082e1
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.bosh-module.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>bosh</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module bosh</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.bosh.AckChecker-class.html"
+ >AckChecker</a><br /> <a target="mainFrame" href="nbxmpp.bosh.KeyStack-class.html"
+ >KeyStack</a><br /> <a target="mainFrame" href="nbxmpp.bosh.NonBlockingBOSH-class.html"
+ >NonBlockingBOSH</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.bosh-module.html#get_rand_number"
+ >get_rand_number</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.bosh-module.html#FAKE_DESCRIPTOR"
+ >FAKE_DESCRIPTOR</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#KEY_COUNT"
+ >KEY_COUNT</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#bosh_errors"
+ >bosh_errors</a><br /> <a target="mainFrame" href="nbxmpp.bosh-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.c14n-module.html b/doc/apidocs/toc-nbxmpp.c14n-module.html
new file mode 100644
index 0000000..d1286ad
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.c14n-module.html
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>c14n</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module c14n</h1>
+<hr />
+ <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.c14n-module.html#c14n"
+ >c14n</a><br /> <a target="mainFrame" href="nbxmpp.c14n-module.html#normalise_attr"
+ >normalise_attr</a><br /> <a target="mainFrame" href="nbxmpp.c14n-module.html#normalise_text"
+ >normalise_text</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.c14n-module.html#__package__"
+ >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.client_nb-module.html b/doc/apidocs/toc-nbxmpp.client_nb-module.html
new file mode 100644
index 0000000..8d881d2
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.client_nb-module.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>client_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module client_nb</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.client_nb.NonBlockingClient-class.html"
+ >NonBlockingClient</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.client_nb-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.client_nb-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.dispatcher_nb-module.html b/doc/apidocs/toc-nbxmpp.dispatcher_nb-module.html
new file mode 100644
index 0000000..ccc106a
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.dispatcher_nb-module.html
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>dispatcher_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module dispatcher_nb</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.dispatcher_nb.BOSHDispatcher-class.html"
+ >BOSHDispatcher</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb.Dispatcher-class.html"
+ >Dispatcher</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb.XMPPDispatcher-class.html"
+ >XMPPDispatcher</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#DEFAULT_TIMEOUT_SECONDS"
+ >DEFAULT_TIMEOUT_SECONDS</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#XML_DECLARATION"
+ >XML_DECLARATION</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#log"
+ >log</a><br /> <a target="mainFrame" href="nbxmpp.dispatcher_nb-module.html#outgoingID"
+ >outgoingID</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.features_nb-module.html b/doc/apidocs/toc-nbxmpp.features_nb-module.html
new file mode 100644
index 0000000..653ce80
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.features_nb-module.html
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>features_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module features_nb</h1>
+<hr />
+ <h2 class="toc">Functions</h2>
+ <div class="private">
+ <a target="mainFrame" href="nbxmpp.features_nb-module.html#_ReceivedRegInfo"
+ >_ReceivedRegInfo</a><br /> </div>
+ <div class="private">
+ <a target="mainFrame" href="nbxmpp.features_nb-module.html#_on_default_response"
+ >_on_default_response</a><br /> </div>
+ <a target="mainFrame" href="nbxmpp.features_nb-module.html#changePasswordTo"
+ >changePasswordTo</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#delPrivacyList"
+ >delPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getActiveAndDefaultPrivacyLists"
+ >getActiveAndDefaultPrivacyLists</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getPrivacyList"
+ >getPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getPrivacyLists"
+ >getPrivacyLists</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#getRegInfo"
+ >getRegInfo</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#register"
+ >register</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#setActivePrivacyList"
+ >setActivePrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#setDefaultPrivacyList"
+ >setDefaultPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#setPrivacyList"
+ >setPrivacyList</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#unregister"
+ >unregister</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_ACT_ALLOW"
+ >PL_ACT_ALLOW</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_ACT_DENY"
+ >PL_ACT_DENY</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_TYPE_GROUP"
+ >PL_TYPE_GROUP</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_TYPE_JID"
+ >PL_TYPE_JID</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PL_TYPE_SUBC"
+ >PL_TYPE_SUBC</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_ACTIVE_DEFAULT"
+ >PRIVACY_LISTS_ACTIVE_DEFAULT</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PRIVACY_LISTS_RECEIVED"
+ >PRIVACY_LISTS_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#PRIVACY_LIST_RECEIVED"
+ >PRIVACY_LIST_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#REGISTER_DATA_RECEIVED"
+ >REGISTER_DATA_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.features_nb-module.html#__package__"
+ >__package__</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.idlequeue-module.html b/doc/apidocs/toc-nbxmpp.idlequeue-module.html
new file mode 100644
index 0000000..74cdd48
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.idlequeue-module.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>idlequeue</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module idlequeue</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.idlequeue.GlibIdleQueue-class.html"
+ >GlibIdleQueue</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.IdleCommand-class.html"
+ >IdleCommand</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.IdleObject-class.html"
+ >IdleObject</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.IdleQueue-class.html"
+ >IdleQueue</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue.SelectIdleQueue-class.html"
+ >SelectIdleQueue</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.idlequeue-module.html#get_idlequeue"
+ >get_idlequeue</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_CLOSE"
+ >FLAG_CLOSE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_READ"
+ >FLAG_READ</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_READ_WRITE"
+ >FLAG_READ_WRITE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#FLAG_WRITE"
+ >FLAG_WRITE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#HAVE_GOBJECT"
+ >HAVE_GOBJECT</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#IS_CLOSED"
+ >IS_CLOSED</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#PENDING_READ"
+ >PENDING_READ</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#PENDING_WRITE"
+ >PENDING_WRITE</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.idlequeue-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.plugin-module.html b/doc/apidocs/toc-nbxmpp.plugin-module.html
new file mode 100644
index 0000000..5b0391b
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.plugin-module.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>plugin</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module plugin</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.plugin.PlugIn-class.html"
+ >PlugIn</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.plugin-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.plugin-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.protocol-module.html b/doc/apidocs/toc-nbxmpp.protocol-module.html
new file mode 100644
index 0000000..2290cd9
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.protocol-module.html
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>protocol</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module protocol</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.protocol.Acks-class.html"
+ >Acks</a><br /> <a target="mainFrame" href="nbxmpp.protocol.BOSHBody-class.html"
+ >BOSHBody</a><br /> <a target="mainFrame" href="nbxmpp.protocol.BadFormat-class.html"
+ >BadFormat</a><br /> <a target="mainFrame" href="nbxmpp.protocol.BadNamespacePrefix-class.html"
+ >BadNamespacePrefix</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Conflict-class.html"
+ >Conflict</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ConnectionTimeout-class.html"
+ >ConnectionTimeout</a><br /> <a target="mainFrame" href="nbxmpp.protocol.DataField-class.html"
+ >DataField</a><br /> <a target="mainFrame" href="nbxmpp.protocol.DataForm-class.html"
+ >DataForm</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Error-class.html"
+ >Error</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ErrorNode-class.html"
+ >ErrorNode</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Hashes-class.html"
+ >Hashes</a><br /> <a target="mainFrame" href="nbxmpp.protocol.HostGone-class.html"
+ >HostGone</a><br /> <a target="mainFrame" href="nbxmpp.protocol.HostUnknown-class.html"
+ >HostUnknown</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ImproperAddressing-class.html"
+ >ImproperAddressing</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InternalServerError-class.html"
+ >InternalServerError</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidFrom-class.html"
+ >InvalidFrom</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidID-class.html"
+ >InvalidID</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidNamespace-class.html"
+ >InvalidNamespace</a><br /> <a target="mainFrame" href="nbxmpp.protocol.InvalidXML-class.html"
+ >InvalidXML</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Iq-class.html"
+ >Iq</a><br /> <a target="mainFrame" href="nbxmpp.protocol.JID-class.html"
+ >JID</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Message-class.html"
+ >Message</a><br /> <a target="mainFrame" href="nbxmpp.protocol.NodeProcessed-class.html"
+ >NodeProcessed</a><br /> <a target="mainFrame" href="nbxmpp.protocol.NotAuthorized-class.html"
+ >NotAuthorized</a><br /> <a target="mainFrame" href="nbxmpp.protocol.PolicyViolation-class.html"
+ >PolicyViolation</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Presence-class.html"
+ >Presence</a><br /> <a target="mainFrame" href="nbxmpp.protocol.Protocol-class.html"
+ >Protocol</a><br /> <a target="mainFrame" href="nbxmpp.protocol.RemoteConnectionFailed-class.html"
+ >RemoteConnectionFailed</a><br /> <a target="mainFrame" href="nbxmpp.protocol.ResourceConstraint-class.html"
+ >ResourceConstraint</a><br /> <a target="mainFrame" href="nbxmpp.protocol.RestrictedXML-class.html"
+ >RestrictedXML</a><br /> <a target="mainFrame" href="nbxmpp.protocol.SeeOtherHost-class.html"
+ >SeeOtherHost</a><br /> <a target="mainFrame" href="nbxmpp.protocol.StreamError-class.html"
+ >StreamError</a><br /> <a target="mainFrame" href="nbxmpp.protocol.SystemShutdown-class.html"
+ >SystemShutdown</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UndefinedCondition-class.html"
+ >UndefinedCondition</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UnsupportedEncoding-class.html"
+ >UnsupportedEncoding</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UnsupportedStanzaType-class.html"
+ >UnsupportedStanzaType</a><br /> <a target="mainFrame" href="nbxmpp.protocol.UnsupportedVersion-class.html"
+ >UnsupportedVersion</a><br /> <a target="mainFrame" href="nbxmpp.protocol.XMLNotWellFormed-class.html"
+ >XMLNotWellFormed</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.protocol-module.html#ascii_upper"
+ >ascii_upper</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#isErrorNode"
+ >isErrorNode</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#isResultNode"
+ >isResultNode</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.protocol-module.html#ERRORS"
+ >ERRORS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_BAD_REQUEST"
+ >ERR_BAD_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_CONFLICT"
+ >ERR_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_FEATURE_NOT_IMPLEMENTED"
+ >ERR_FEATURE_NOT_IMPLEMENTED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_FORBIDDEN"
+ >ERR_FORBIDDEN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_GONE"
+ >ERR_GONE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_INTERNAL_SERVER_ERROR"
+ >ERR_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_ITEM_NOT_FOUND"
+ >ERR_ITEM_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_JID_MALFORMED"
+ >ERR_JID_MALFORMED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_NOT_ACCEPTABLE"
+ >ERR_NOT_ACCEPTABLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_NOT_ALLOWED"
+ >ERR_NOT_ALLOWED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_NOT_AUTHORIZED"
+ >ERR_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_PAYMENT_REQUIRED"
+ >ERR_PAYMENT_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_RECIPIENT_UNAVAILABLE"
+ >ERR_RECIPIENT_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REDIRECT"
+ >ERR_REDIRECT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REGISTRATION_REQUIRED"
+ >ERR_REGISTRATION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_NOT_FOUND"
+ >ERR_REMOTE_SERVER_NOT_FOUND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_REMOTE_SERVER_TIMEOUT"
+ >ERR_REMOTE_SERVER_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_RESOURCE_CONSTRAINT"
+ >ERR_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_SERVICE_UNAVAILABLE"
+ >ERR_SERVICE_UNAVAILABLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_SUBSCRIPTION_REQUIRED"
+ >ERR_SUBSCRIPTION_REQUIRED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_UNDEFINED_CONDITION"
+ >ERR_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#ERR_UNEXPECTED_REQUEST"
+ >ERR_UNEXPECTED_REQUEST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ACTIVITY"
+ >NS_ACTIVITY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ADDRESS"
+ >NS_ADDRESS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AGENTS"
+ >NS_AGENTS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AMP"
+ >NS_AMP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AMP_ERRORS"
+ >NS_AMP_ERRORS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE"
+ >NS_ARCHIVE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_AUTO"
+ >NS_ARCHIVE_AUTO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANAGE"
+ >NS_ARCHIVE_MANAGE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_MANUAL"
+ >NS_ARCHIVE_MANUAL</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ARCHIVE_PREF"
+ >NS_ARCHIVE_PREF</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ATOM"
+ >NS_ATOM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ATTENTION"
+ >NS_ATTENTION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AUTH"
+ >NS_AUTH</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_AVATAR"
+ >NS_AVATAR</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BIND"
+ >NS_BIND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BOB"
+ >NS_BOB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BOOKMARKS"
+ >NS_BOOKMARKS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BROWSE"
+ >NS_BROWSE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BROWSING"
+ >NS_BROWSING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_BYTESTREAM"
+ >NS_BYTESTREAM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CAPS"
+ >NS_CAPS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CAPTCHA"
+ >NS_CAPTCHA</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CARBONS"
+ >NS_CARBONS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CHATSTATES"
+ >NS_CHATSTATES</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CHATTING"
+ >NS_CHATTING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CLIENT"
+ >NS_CLIENT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMMANDS"
+ >NS_COMMANDS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMPONENT_1"
+ >NS_COMPONENT_1</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMPONENT_ACCEPT"
+ >NS_COMPONENT_ACCEPT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_COMPRESS"
+ >NS_COMPRESS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CONDITIONS"
+ >NS_CONDITIONS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_CONFERENCE"
+ >NS_CONFERENCE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA"
+ >NS_DATA</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA_LAYOUT"
+ >NS_DATA_LAYOUT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA_MEDIA"
+ >NS_DATA_MEDIA</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DATA_VALIDATE"
+ >NS_DATA_VALIDATE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DELAY"
+ >NS_DELAY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DELAY2"
+ >NS_DELAY2</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DIALBACK"
+ >NS_DIALBACK</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DISCO"
+ >NS_DISCO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DISCO_INFO"
+ >NS_DISCO_INFO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_DISCO_ITEMS"
+ >NS_DISCO_ITEMS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ENCRYPTED"
+ >NS_ENCRYPTED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ESESSION"
+ >NS_ESESSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ESESSION_INIT"
+ >NS_ESESSION_INIT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_EVENT"
+ >NS_EVENT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_FEATURE"
+ >NS_FEATURE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_FILE"
+ >NS_FILE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_FORWARD"
+ >NS_FORWARD</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GAMING"
+ >NS_GAMING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GATEWAY"
+ >NS_GATEWAY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GEOLOC"
+ >NS_GEOLOC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GMAILNOTIFY"
+ >NS_GMAILNOTIFY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GROUPCHAT"
+ >NS_GROUPCHAT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_GTALKSETTING"
+ >NS_GTALKSETTING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES"
+ >NS_HASHES</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_MD5"
+ >NS_HASHES_MD5</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_SHA1"
+ >NS_HASHES_SHA1</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_SHA256"
+ >NS_HASHES_SHA256</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HASHES_SHA512"
+ >NS_HASHES_SHA512</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HTTP_AUTH"
+ >NS_HTTP_AUTH</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_HTTP_BIND"
+ >NS_HTTP_BIND</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_IBB"
+ >NS_IBB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_INVISIBLE"
+ >NS_INVISIBLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_IQ"
+ >NS_IQ</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE"
+ >NS_JINGLE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_BYTESTREAM"
+ >NS_JINGLE_BYTESTREAM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_ERRORS"
+ >NS_JINGLE_ERRORS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_FILE_TRANSFER"
+ >NS_JINGLE_FILE_TRANSFER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_IBB"
+ >NS_JINGLE_IBB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_ICE_UDP"
+ >NS_JINGLE_ICE_UDP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RAW_UDP"
+ >NS_JINGLE_RAW_UDP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RTP"
+ >NS_JINGLE_RTP</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_AUDIO"
+ >NS_JINGLE_RTP_AUDIO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_RTP_VIDEO"
+ >NS_JINGLE_RTP_VIDEO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_JINGLE_XTLS"
+ >NS_JINGLE_XTLS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_LAST"
+ >NS_LAST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_LOCATION"
+ >NS_LOCATION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MESSAGE"
+ >NS_MESSAGE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MOOD"
+ >NS_MOOD</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC"
+ >NS_MUC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_ADMIN"
+ >NS_MUC_ADMIN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_CONFIG"
+ >NS_MUC_CONFIG</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_OWNER"
+ >NS_MUC_OWNER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_UNIQUE"
+ >NS_MUC_UNIQUE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_MUC_USER"
+ >NS_MUC_USER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_NICK"
+ >NS_NICK</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_OFFLINE"
+ >NS_OFFLINE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PHYSLOC"
+ >NS_PHYSLOC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PING"
+ >NS_PING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PRESENCE"
+ >NS_PRESENCE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PRIVACY"
+ >NS_PRIVACY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PRIVATE"
+ >NS_PRIVATE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PROFILE"
+ >NS_PROFILE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBKEY_ATTEST"
+ >NS_PUBKEY_ATTEST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBKEY_PUBKEY"
+ >NS_PUBKEY_PUBKEY</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBKEY_REVOKE"
+ >NS_PUBKEY_REVOKE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB"
+ >NS_PUBSUB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB_EVENT"
+ >NS_PUBSUB_EVENT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB_OWNER"
+ >NS_PUBSUB_OWNER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_PUBSUB_PUBLISH_OPTIONS"
+ >NS_PUBSUB_PUBLISH_OPTIONS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_RECEIPTS"
+ >NS_RECEIPTS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_REGISTER"
+ >NS_REGISTER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTER"
+ >NS_ROSTER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTERNOTES"
+ >NS_ROSTERNOTES</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTERX"
+ >NS_ROSTERX</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_ROSTER_VER"
+ >NS_ROSTER_VER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_RPC"
+ >NS_RPC</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_RSM"
+ >NS_RSM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SASL"
+ >NS_SASL</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SEARCH"
+ >NS_SEARCH</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SECLABEL"
+ >NS_SECLABEL</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SECLABEL_CATALOG"
+ >NS_SECLABEL_CATALOG</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SERVER"
+ >NS_SERVER</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SESSION"
+ >NS_SESSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SI"
+ >NS_SI</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SIGNED"
+ >NS_SIGNED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SI_PUB"
+ >NS_SI_PUB</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_SSN"
+ >NS_SSN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STANZAS"
+ >NS_STANZAS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STANZA_CRYPTO"
+ >NS_STANZA_CRYPTO</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STREAM"
+ >NS_STREAM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STREAMS"
+ >NS_STREAMS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_STREAM_MGMT"
+ >NS_STREAM_MGMT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TIME"
+ >NS_TIME</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TIME_REVISED"
+ >NS_TIME_REVISED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TLS"
+ >NS_TLS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_TUNE"
+ >NS_TUNE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VACATION"
+ >NS_VACATION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VCARD"
+ >NS_VCARD</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VCARD_UPDATE"
+ >NS_VCARD_UPDATE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VERSION"
+ >NS_VERSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_VIEWING"
+ >NS_VIEWING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_WAITINGLIST"
+ >NS_WAITINGLIST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_XHTML"
+ >NS_XHTML</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_XHTML_IM"
+ >NS_XHTML_IM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#NS_XMPP_STREAMS"
+ >NS_XMPP_STREAMS</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_ABORTED"
+ >SASL_ABORTED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_INCORRECT_ENCODING"
+ >SASL_INCORRECT_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_INVALID_AUTHZID"
+ >SASL_INVALID_AUTHZID</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_INVALID_MECHANISM"
+ >SASL_INVALID_MECHANISM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_MECHANISM_TOO_WEAK"
+ >SASL_MECHANISM_TOO_WEAK</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_NOT_AUTHORIZED"
+ >SASL_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#SASL_TEMPORARY_AUTH_FAILURE"
+ >SASL_TEMPORARY_AUTH_FAILURE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_BAD_FORMAT"
+ >STREAM_BAD_FORMAT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_BAD_NAMESPACE_PREFIX"
+ >STREAM_BAD_NAMESPACE_PREFIX</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_CONFLICT"
+ >STREAM_CONFLICT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_CONNECTION_TIMEOUT"
+ >STREAM_CONNECTION_TIMEOUT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_HOST_GONE"
+ >STREAM_HOST_GONE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_HOST_UNKNOWN"
+ >STREAM_HOST_UNKNOWN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_IMPROPER_ADDRESSING"
+ >STREAM_IMPROPER_ADDRESSING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INTERNAL_SERVER_ERROR"
+ >STREAM_INTERNAL_SERVER_ERROR</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_FROM"
+ >STREAM_INVALID_FROM</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_ID"
+ >STREAM_INVALID_ID</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_NAMESPACE"
+ >STREAM_INVALID_NAMESPACE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_INVALID_XML"
+ >STREAM_INVALID_XML</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_NOT_AUTHORIZED"
+ >STREAM_NOT_AUTHORIZED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_POLICY_VIOLATION"
+ >STREAM_POLICY_VIOLATION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_REMOTE_CONNECTION_FAILED"
+ >STREAM_REMOTE_CONNECTION_FAILED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_RESOURCE_CONSTRAINT"
+ >STREAM_RESOURCE_CONSTRAINT</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_RESTRICTED_XML"
+ >STREAM_RESTRICTED_XML</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_SEE_OTHER_HOST"
+ >STREAM_SEE_OTHER_HOST</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_SYSTEM_SHUTDOWN"
+ >STREAM_SYSTEM_SHUTDOWN</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNDEFINED_CONDITION"
+ >STREAM_UNDEFINED_CONDITION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_ENCODING"
+ >STREAM_UNSUPPORTED_ENCODING</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_STANZA_TYPE"
+ >STREAM_UNSUPPORTED_STANZA_TYPE</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_UNSUPPORTED_VERSION"
+ >STREAM_UNSUPPORTED_VERSION</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#STREAM_XML_NOT_WELL_FORMED"
+ >STREAM_XML_NOT_WELL_FORMED</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#__package__"
+ >__package__</a><br /> <div class="private">
+ <a target="mainFrame" href="nbxmpp.protocol-module.html#_errorcodes"
+ >_errorcodes</a><br /> </div>
+ <a target="mainFrame" href="nbxmpp.protocol-module.html#name"
+ >name</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#sasl_error_conditions"
+ >sasl_error_conditions</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#stream_exceptions"
+ >stream_exceptions</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#xmpp_stanza_error_conditions"
+ >xmpp_stanza_error_conditions</a><br /> <a target="mainFrame" href="nbxmpp.protocol-module.html#xmpp_stream_error_conditions"
+ >xmpp_stream_error_conditions</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.proxy_connectors-module.html b/doc/apidocs/toc-nbxmpp.proxy_connectors-module.html
new file mode 100644
index 0000000..42c829f
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.proxy_connectors-module.html
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>proxy_connectors</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module proxy_connectors</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.proxy_connectors.HTTPCONNECTConnector-class.html"
+ >HTTPCONNECTConnector</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors.ProxyConnector-class.html"
+ >ProxyConnector</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors.SOCKS5Connector-class.html"
+ >SOCKS5Connector</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.proxy_connectors-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.proxy_connectors-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.roster_nb-module.html b/doc/apidocs/toc-nbxmpp.roster_nb-module.html
new file mode 100644
index 0000000..ee127c9
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.roster_nb-module.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>roster_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module roster_nb</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.roster_nb.NonBlockingRoster-class.html"
+ >NonBlockingRoster</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.roster_nb-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.roster_nb-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.simplexml-module.html b/doc/apidocs/toc-nbxmpp.simplexml-module.html
new file mode 100644
index 0000000..ec58961
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.simplexml-module.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>simplexml</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module simplexml</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.simplexml.NT-class.html"
+ >NT</a><br /> <a target="mainFrame" href="nbxmpp.simplexml.Node-class.html"
+ >Node</a><br /> <a target="mainFrame" href="nbxmpp.simplexml.NodeBuilder-class.html"
+ >NodeBuilder</a><br /> <a target="mainFrame" href="nbxmpp.simplexml.T-class.html"
+ >T</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.simplexml-module.html#BadXML2Node"
+ >BadXML2Node</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#XML2Node"
+ >XML2Node</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#XMLescape"
+ >XMLescape</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#ustr"
+ >ustr</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.simplexml-module.html#ENCODING"
+ >ENCODING</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.simplexml-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.smacks-module.html b/doc/apidocs/toc-nbxmpp.smacks-module.html
new file mode 100644
index 0000000..e202485
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.smacks-module.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>smacks</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module smacks</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.smacks.Smacks-class.html"
+ >Smacks</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.smacks-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.smacks-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.stringprepare-module.html b/doc/apidocs/toc-nbxmpp.stringprepare-module.html
new file mode 100644
index 0000000..7a4a984
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.stringprepare-module.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>stringprepare</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module stringprepare</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.stringprepare.EmptyMappingTable-class.html"
+ >EmptyMappingTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.ILookupTable-class.html"
+ >ILookupTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.IMappingTable-class.html"
+ >IMappingTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.LookupTable-class.html"
+ >LookupTable</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.LookupTableFromFunction-class.html"
+ >LookupTableFromFunction</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.MappingTableFromFunction-class.html"
+ >MappingTableFromFunction</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.NamePrep-class.html"
+ >NamePrep</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare.Profile-class.html"
+ >Profile</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.stringprepare-module.html#B_1"
+ >B_1</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#B_2"
+ >B_2</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_11"
+ >C_11</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_12"
+ >C_12</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_21"
+ >C_21</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_22"
+ >C_22</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_3"
+ >C_3</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_4"
+ >C_4</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_5"
+ >C_5</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_6"
+ >C_6</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_7"
+ >C_7</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_8"
+ >C_8</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#C_9"
+ >C_9</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#nameprep"
+ >nameprep</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#nodeprep"
+ >nodeprep</a><br /> <a target="mainFrame" href="nbxmpp.stringprepare-module.html#resourceprep"
+ >resourceprep</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.tls_nb-module.html b/doc/apidocs/toc-nbxmpp.tls_nb-module.html
new file mode 100644
index 0000000..77402ba
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.tls_nb-module.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>tls_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module tls_nb</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.tls_nb.NonBlockingTLS-class.html"
+ >NonBlockingTLS</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.PyOpenSSLWrapper-class.html"
+ >PyOpenSSLWrapper</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.SSLWrapper-class.html"
+ >SSLWrapper</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb.StdlibSSLWrapper-class.html"
+ >StdlibSSLWrapper</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.tls_nb-module.html#gattr"
+ >gattr</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.tls_nb-module.html#PYOPENSSL"
+ >PYOPENSSL</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#PYSTDLIB"
+ >PYSTDLIB</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#USE_PYOPENSSL"
+ >USE_PYOPENSSL</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.tls_nb-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc-nbxmpp.transports_nb-module.html b/doc/apidocs/toc-nbxmpp.transports_nb-module.html
new file mode 100644
index 0000000..e4fd452
--- /dev/null
+++ b/doc/apidocs/toc-nbxmpp.transports_nb-module.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>transports_nb</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Module transports_nb</h1>
+<hr />
+ <h2 class="toc">Classes</h2>
+ <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingHTTP-class.html"
+ >NonBlockingHTTP</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingHTTPBOSH-class.html"
+ >NonBlockingHTTPBOSH</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingTCP-class.html"
+ >NonBlockingTCP</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb.NonBlockingTransport-class.html"
+ >NonBlockingTransport</a><br /> <h2 class="toc">Functions</h2>
+ <a target="mainFrame" href="nbxmpp.transports_nb-module.html#get_proxy_data_from_dict"
+ >get_proxy_data_from_dict</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#urisplit"
+ >urisplit</a><br /> <h2 class="toc">Variables</h2>
+ <a target="mainFrame" href="nbxmpp.transports_nb-module.html#CONNECTED"
+ >CONNECTED</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#CONNECTING"
+ >CONNECTING</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#CONNECT_TIMEOUT_SECONDS"
+ >CONNECT_TIMEOUT_SECONDS</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DATA_ERROR"
+ >DATA_ERROR</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DATA_RECEIVED"
+ >DATA_RECEIVED</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DATA_SENT"
+ >DATA_SENT</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DISCONNECTED"
+ >DISCONNECTED</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DISCONNECTING"
+ >DISCONNECTING</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#DISCONNECT_TIMEOUT_SECONDS"
+ >DISCONNECT_TIMEOUT_SECONDS</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#PROXY_CONNECTING"
+ >PROXY_CONNECTING</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#RECV_BUFSIZE"
+ >RECV_BUFSIZE</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#STATES"
+ >STATES</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#__package__"
+ >__package__</a><br /> <a target="mainFrame" href="nbxmpp.transports_nb-module.html#log"
+ >log</a><br /><hr />
+<span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/toc.html b/doc/apidocs/toc.html
new file mode 100644
index 0000000..85c1260
--- /dev/null
+++ b/doc/apidocs/toc.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Table of Contents</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<h1 class="toc">Table&nbsp;of&nbsp;Contents</h1>
+<hr />
+ <a target="moduleFrame" href="toc-everything.html">Everything</a>
+ <br />
+ <h2 class="toc">Modules</h2>
+ <a target="moduleFrame" href="toc-nbxmpp-module.html"
+ onclick="setFrame('toc-nbxmpp-module.html','nbxmpp-module.html');" >nbxmpp</a><br /> <a target="moduleFrame" href="toc-nbxmpp.auth_nb-module.html"
+ onclick="setFrame('toc-nbxmpp.auth_nb-module.html','nbxmpp.auth_nb-module.html');" >nbxmpp.auth_nb</a><br /> <a target="moduleFrame" href="toc-nbxmpp.bosh-module.html"
+ onclick="setFrame('toc-nbxmpp.bosh-module.html','nbxmpp.bosh-module.html');" >nbxmpp.bosh</a><br /> <a target="moduleFrame" href="toc-nbxmpp.c14n-module.html"
+ onclick="setFrame('toc-nbxmpp.c14n-module.html','nbxmpp.c14n-module.html');" >nbxmpp.c14n</a><br /> <a target="moduleFrame" href="toc-nbxmpp.client_nb-module.html"
+ onclick="setFrame('toc-nbxmpp.client_nb-module.html','nbxmpp.client_nb-module.html');" >nbxmpp.client_nb</a><br /> <a target="moduleFrame" href="toc-nbxmpp.dispatcher_nb-module.html"
+ onclick="setFrame('toc-nbxmpp.dispatcher_nb-module.html','nbxmpp.dispatcher_nb-module.html');" >nbxmpp.dispatcher_nb</a><br /> <a target="moduleFrame" href="toc-nbxmpp.features_nb-module.html"
+ onclick="setFrame('toc-nbxmpp.features_nb-module.html','nbxmpp.features_nb-module.html');" >nbxmpp.features_nb</a><br /> <a target="moduleFrame" href="toc-nbxmpp.idlequeue-module.html"
+ onclick="setFrame('toc-nbxmpp.idlequeue-module.html','nbxmpp.idlequeue-module.html');" >nbxmpp.idlequeue</a><br /> <a target="moduleFrame" href="toc-nbxmpp.plugin-module.html"
+ onclick="setFrame('toc-nbxmpp.plugin-module.html','nbxmpp.plugin-module.html');" >nbxmpp.plugin</a><br /> <a target="moduleFrame" href="toc-nbxmpp.protocol-module.html"
+ onclick="setFrame('toc-nbxmpp.protocol-module.html','nbxmpp.protocol-module.html');" >nbxmpp.protocol</a><br /> <a target="moduleFrame" href="toc-nbxmpp.proxy_connectors-module.html"
+ onclick="setFrame('toc-nbxmpp.proxy_connectors-module.html','nbxmpp.proxy_connectors-module.html');" >nbxmpp.proxy_connectors</a><br /> <a target="moduleFrame" href="toc-nbxmpp.roster_nb-module.html"
+ onclick="setFrame('toc-nbxmpp.roster_nb-module.html','nbxmpp.roster_nb-module.html');" >nbxmpp.roster_nb</a><br /> <a target="moduleFrame" href="toc-nbxmpp.simplexml-module.html"
+ onclick="setFrame('toc-nbxmpp.simplexml-module.html','nbxmpp.simplexml-module.html');" >nbxmpp.simplexml</a><br /> <a target="moduleFrame" href="toc-nbxmpp.smacks-module.html"
+ onclick="setFrame('toc-nbxmpp.smacks-module.html','nbxmpp.smacks-module.html');" >nbxmpp.smacks</a><br /> <a target="moduleFrame" href="toc-nbxmpp.stringprepare-module.html"
+ onclick="setFrame('toc-nbxmpp.stringprepare-module.html','nbxmpp.stringprepare-module.html');" >nbxmpp.stringprepare</a><br /> <a target="moduleFrame" href="toc-nbxmpp.tls_nb-module.html"
+ onclick="setFrame('toc-nbxmpp.tls_nb-module.html','nbxmpp.tls_nb-module.html');" >nbxmpp.tls_nb</a><br /> <a target="moduleFrame" href="toc-nbxmpp.transports_nb-module.html"
+ onclick="setFrame('toc-nbxmpp.transports_nb-module.html','nbxmpp.transports_nb-module.html');" >nbxmpp.transports_nb</a><br /><hr />
+ <span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_a.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_a.gif
new file mode 100644
index 0000000..6829821
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_a.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_a_2.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_a_2.gif
new file mode 100644
index 0000000..2e11581
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_a_2.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_a_3.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_a_3.gif
new file mode 100644
index 0000000..0288c22
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_a_3.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_b.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_b.gif
new file mode 100644
index 0000000..726f617
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_b.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_d.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_d.gif
new file mode 100644
index 0000000..daa5035
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_d.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_d_2.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_d_2.gif
new file mode 100644
index 0000000..36a71f8
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_d_2.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_i.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_i.gif
new file mode 100644
index 0000000..ec58645
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_i.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_i_2.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_2.gif
new file mode 100644
index 0000000..c997ecd
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_2.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_i_3.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_3.gif
new file mode 100644
index 0000000..e52fced
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_3.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_i_4.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_4.gif
new file mode 100644
index 0000000..ba36bf9
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_4.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_i_5.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_5.gif
new file mode 100644
index 0000000..61d36ae
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_i_5.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p.gif
new file mode 100644
index 0000000..d75f6be
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_10.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_10.gif
new file mode 100644
index 0000000..ae75407
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_10.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_11.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_11.gif
new file mode 100644
index 0000000..4a1a9ed
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_11.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_12.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_12.gif
new file mode 100644
index 0000000..ab6cca4
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_12.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_13.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_13.gif
new file mode 100644
index 0000000..9e759de
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_13.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_14.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_14.gif
new file mode 100644
index 0000000..368d5bc
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_14.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_15.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_15.gif
new file mode 100644
index 0000000..a68ec36
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_15.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_16.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_16.gif
new file mode 100644
index 0000000..47a8723
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_16.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_17.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_17.gif
new file mode 100644
index 0000000..258c512
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_17.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_18.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_18.gif
new file mode 100644
index 0000000..7fdb22f
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_18.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_19.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_19.gif
new file mode 100644
index 0000000..bb71e88
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_19.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_2.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_2.gif
new file mode 100644
index 0000000..ae8f529
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_2.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_20.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_20.gif
new file mode 100644
index 0000000..3ebd77e
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_20.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_21.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_21.gif
new file mode 100644
index 0000000..b376946
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_21.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_22.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_22.gif
new file mode 100644
index 0000000..dd3c363
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_22.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_23.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_23.gif
new file mode 100644
index 0000000..9f5cca3
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_23.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_24.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_24.gif
new file mode 100644
index 0000000..b3e0167
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_24.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_25.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_25.gif
new file mode 100644
index 0000000..8714d59
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_25.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_26.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_26.gif
new file mode 100644
index 0000000..17ac10f
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_26.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_27.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_27.gif
new file mode 100644
index 0000000..159f438
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_27.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_28.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_28.gif
new file mode 100644
index 0000000..31482b2
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_28.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_29.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_29.gif
new file mode 100644
index 0000000..e2c7fde
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_29.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_3.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_3.gif
new file mode 100644
index 0000000..6c3c2f4
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_3.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_30.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_30.gif
new file mode 100644
index 0000000..5753aae
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_30.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_31.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_31.gif
new file mode 100644
index 0000000..4695f4e
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_31.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_32.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_32.gif
new file mode 100644
index 0000000..6e89bc8
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_32.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_33.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_33.gif
new file mode 100644
index 0000000..7a6c51d
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_33.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_34.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_34.gif
new file mode 100644
index 0000000..160c180
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_34.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_35.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_35.gif
new file mode 100644
index 0000000..8c5a93a
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_35.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_36.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_36.gif
new file mode 100644
index 0000000..1c8ec90
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_36.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_37.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_37.gif
new file mode 100644
index 0000000..7906db3
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_37.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_38.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_38.gif
new file mode 100644
index 0000000..3e0ee91
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_38.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_39.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_39.gif
new file mode 100644
index 0000000..41c1650
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_39.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_4.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_4.gif
new file mode 100644
index 0000000..0b363d8
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_4.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_40.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_40.gif
new file mode 100644
index 0000000..8b57ba3
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_40.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_41.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_41.gif
new file mode 100644
index 0000000..796d631
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_41.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_5.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_5.gif
new file mode 100644
index 0000000..0deba65
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_5.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_6.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_6.gif
new file mode 100644
index 0000000..7f92db2
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_6.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_7.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_7.gif
new file mode 100644
index 0000000..84bd463
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_7.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_8.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_8.gif
new file mode 100644
index 0000000..fdfa191
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_8.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_p_9.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_9.gif
new file mode 100644
index 0000000..1bce560
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_p_9.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_r.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_r.gif
new file mode 100644
index 0000000..b795341
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_r.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_s.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_s.gif
new file mode 100644
index 0000000..5ce0479
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_s.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_s_2.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_s_2.gif
new file mode 100644
index 0000000..b24db74
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_s_2.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_s_3.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_s_3.gif
new file mode 100644
index 0000000..96c4795
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_s_3.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t.gif
new file mode 100644
index 0000000..b316d6e
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_2.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_2.gif
new file mode 100644
index 0000000..82b95d0
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_2.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_3.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_3.gif
new file mode 100644
index 0000000..9748f91
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_3.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_4.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_4.gif
new file mode 100644
index 0000000..5d70cf1
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_4.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_5.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_5.gif
new file mode 100644
index 0000000..af81e7a
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_5.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_6.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_6.gif
new file mode 100644
index 0000000..7b70e88
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_6.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_7.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_7.gif
new file mode 100644
index 0000000..affbd9b
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_7.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_8.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_8.gif
new file mode 100644
index 0000000..321a6ce
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_8.gif
Binary files differ
diff --git a/doc/apidocs/uml_class_diagram_for_nbxmpp_t_9.gif b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_9.gif
new file mode 100644
index 0000000..96c542e
--- /dev/null
+++ b/doc/apidocs/uml_class_diagram_for_nbxmpp_t_9.gif
Binary files differ
diff --git a/doc/epydoc.conf b/doc/epydoc.conf
new file mode 100644
index 0000000..018bffb
--- /dev/null
+++ b/doc/epydoc.conf
@@ -0,0 +1,26 @@
+[epydoc]
+
+# Information about the project.
+name: python-nbxmpp
+url: http://python-nbxmpp.gajim.org
+
+verbosity: 3
+imports: yes
+redundant-details: yes
+docformat: restructuredtext
+
+# The list of modules to document. Modules can be named using
+# dotted names, module filenames, or package directory names.
+# This option may be repeated.
+modules: nbxmpp/*
+
+# Write html output to the directory "apidocs"
+output: html
+target: doc/apidocs/
+
+# Include all automatically generated graphs. These graphs are
+# generated using Graphviz dot.
+graph: all
+dotpath: /usr/bin/dot
+graph-font: Sans
+graph-font-size: 10
diff --git a/doc/examples/xsend.py b/doc/examples/xsend.py
new file mode 100755
index 0000000..7b979c7
--- /dev/null
+++ b/doc/examples/xsend.py
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+
+import sys
+import os
+import nbxmpp
+import time
+import logging
+import gobject
+
+consoleloghandler = logging.StreamHandler()
+root_log = logging.getLogger('nbxmpp')
+#root_log.setLevel('DEBUG')
+root_log.addHandler(consoleloghandler)
+
+if len(sys.argv) < 2:
+ print "Syntax: xsend JID text"
+ sys.exit(0)
+
+to_jid = sys.argv[1]
+text = ' '.join(sys.argv[2:])
+
+jidparams = {}
+if os.access(os.environ['HOME'] + '/.xsend', os.R_OK):
+ for ln in open(os.environ['HOME'] + '/.xsend').readlines():
+ if not ln[0] in ('#', ';'):
+ key, val = ln.strip().split('=', 1)
+ jidparams[key.lower()] = val
+for mandatory in ['jid', 'password']:
+ if mandatory not in jidparams.keys():
+ open(os.environ['HOME']+'/.xsend','w').write('#Uncomment fields before use and type in correct credentials.\n#JID=romeo@montague.net/resource (/resource is optional)\n#PASSWORD=juliet\n')
+ print 'Please point ~/.xsend config file to valid JID for sending messages.'
+ sys.exit(0)
+
+class Connection:
+ def __init__(self):
+ self.jid = nbxmpp.protocol.JID(jidparams['jid'])
+ self.password = jidparams['password']
+
+ def on_auth(self, con, auth):
+ if not auth:
+ print 'could not authenticate!'
+ sys.exit()
+ print 'authenticated using', auth
+ self.send_message(to_jid, text)
+
+ def on_connected(self, con, con_type):
+ print 'connected with', con_type
+ auth = self.client.auth(self.jid.getNode(), self.password, resource=self.jid.getResource(), sasl=1, on_auth=self.on_auth)
+
+ def get_password(self, cb, mech):
+ cb(self.password)
+
+ def on_connection_failed(self):
+ print 'could not connect!'
+
+ def _event_dispatcher(self, realm, event, data):
+ pass
+
+ def connect(self):
+ idle_queue = nbxmpp.idlequeue.get_idlequeue()
+ self.client = nbxmpp.NonBlockingClient(self.jid.getDomain(), idle_queue, caller=self)
+ self.con = self.client.connect(self.on_connected, self.on_connection_failed, secure_tuple=('tls', '', ''))
+
+ def send_message(self, to_jid, text):
+ id_ = self.client.send(nbxmpp.protocol.Message(to_jid, text, typ='chat'))
+ print 'sent message with id', id_
+ gobject.timeout_add(1000, self.quit)
+
+ def quit(self):
+ self.disconnect()
+ ml.quit()
+
+ def disconnect(self):
+ self.client.start_disconnect()
+
+
+con = Connection()
+con.connect()
+ml = gobject.MainLoop()
+ml.run()
diff --git a/nbxmpp/__init__.py b/nbxmpp/__init__.py
new file mode 100644
index 0000000..f7a0ba5
--- /dev/null
+++ b/nbxmpp/__init__.py
@@ -0,0 +1,18 @@
+# $Id: __init__.py,v 1.9 2005/03/07 09:34:51 snakeru Exp $
+
+"""
+This is a fork of the xmpppy jabber python library. Most of the code is
+inherited but has been extended by implementation of non-blocking transports
+and new features like BOSH.
+
+Most of the xmpp classes are ancestors of PlugIn class to share a single set of methods in order to compile a featured and extensible XMPP client.
+
+Thanks and credits to the xmpppy developers. See: http://xmpppy.sourceforge.net/
+"""
+
+from protocol import *
+import simplexml, protocol, auth_nb, transports_nb, roster_nb
+import dispatcher_nb, features_nb, idlequeue, bosh, tls_nb, proxy_connectors
+from client_nb import NonBlockingClient
+from plugin import PlugIn
+from smacks import Smacks
diff --git a/nbxmpp/auth_nb.py b/nbxmpp/auth_nb.py
new file mode 100644
index 0000000..22f56b0
--- /dev/null
+++ b/nbxmpp/auth_nb.py
@@ -0,0 +1,724 @@
+## auth_nb.py
+## based on auth.py, changes backported up to revision 1.41
+##
+## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov
+## modified by Dimitur Kirov <dkirov@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+"""
+Provides plugs for SASL and NON-SASL authentication mechanisms.
+Can be used both for client and transport authentication
+
+See client_nb.py
+"""
+
+from protocol import NS_SASL, NS_SESSION, NS_STREAMS, NS_BIND, NS_AUTH
+from protocol import NS_STREAM_MGMT
+from protocol import Node, NodeProcessed, isResultNode, Iq, Protocol, JID
+from plugin import PlugIn
+from smacks import Smacks
+import base64
+import random
+import itertools
+import dispatcher_nb
+import hashlib
+import hmac
+import hashlib
+
+import logging
+log = logging.getLogger('nbxmpp.auth_nb')
+
+def HH(some): return hashlib.md5(some).hexdigest()
+def H(some): return hashlib.md5(some).digest()
+def C(some): return ':'.join(some)
+
+try:
+ kerberos = __import__('kerberos')
+ have_kerberos = True
+except ImportError:
+ have_kerberos = False
+
+GSS_STATE_STEP = 0
+GSS_STATE_WRAP = 1
+SASL_FAILURE_IN_PROGRESS = 'failure-in-process'
+SASL_FAILURE = 'failure'
+SASL_SUCCESS = 'success'
+SASL_UNSUPPORTED = 'not-supported'
+SASL_IN_PROCESS = 'in-process'
+
+def challenge_splitter(data):
+ """
+ Helper function that creates a dict from challenge string
+
+ Sample challenge string:
+ - username="example.org",realm="somerealm",
+ nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",
+ nc=00000001,qop="auth,auth-int,auth-conf",charset=utf-8
+
+ Expected result for challan:
+ - dict['qop'] = ('auth','auth-int','auth-conf')
+ - dict['realm'] = 'somerealm'
+ """
+ X_KEYWORD, X_VALUE, X_END = 0, 1, 2
+ quotes_open = False
+ keyword, value = '', ''
+ dict_ = {}
+ arr = None
+
+ expecting = X_KEYWORD
+ for iter_ in range(len(data) + 1):
+ end = False
+ if iter_ == len(data):
+ expecting = X_END
+ end = True
+ else:
+ char = data[iter_]
+ if expecting == X_KEYWORD:
+ if char == '=':
+ expecting = X_VALUE
+ elif char in (',', ' ', '\t'):
+ pass
+ else:
+ keyword = '%s%c' % (keyword, char)
+ elif expecting == X_VALUE:
+ if char == '"':
+ if quotes_open:
+ end = True
+ else:
+ quotes_open = True
+ elif char in (',', ' ', '\t'):
+ if quotes_open:
+ if not arr:
+ arr = [value]
+ else:
+ arr.append(value)
+ value = ""
+ else:
+ end = True
+ else:
+ value = '%s%c' % (value, char)
+ if end:
+ if arr:
+ arr.append(value)
+ dict_[keyword] = arr
+ arr = None
+ else:
+ dict_[keyword] = value
+ value, keyword = '', ''
+ expecting = X_KEYWORD
+ quotes_open = False
+ return dict_
+
+def scram_parse(chatter):
+ return dict(s.split('=', 1) for s in chatter.split(','))
+
+class SASL(PlugIn):
+ """
+ Implements SASL authentication. Can be plugged into NonBlockingClient
+ to start authentication
+ """
+
+ def __init__(self, username, password, on_sasl):
+ """
+ :param username: XMPP username
+ :param password: XMPP password
+ :param on_sasl: Callback, will be called after each SASL auth-step.
+ """
+ PlugIn.__init__(self)
+ self.username = username
+ self.password = password
+ self.on_sasl = on_sasl
+ self.realm = None
+
+ def plugin(self, owner):
+ if 'version' not in self._owner.Dispatcher.Stream._document_attrs:
+ self.startsasl = SASL_UNSUPPORTED
+ elif self._owner.Dispatcher.Stream.features:
+ try:
+ self.FeaturesHandler(self._owner.Dispatcher,
+ self._owner.Dispatcher.Stream.features)
+ except NodeProcessed:
+ pass
+ else:
+ self.startsasl = None
+
+ def plugout(self):
+ """
+ Remove SASL handlers from owner's dispatcher. Used internally
+ """
+ if 'features' in self._owner.__dict__:
+ self._owner.UnregisterHandler('features', self.FeaturesHandler,
+ xmlns=NS_STREAMS)
+ if 'challenge' in self._owner.__dict__:
+ self._owner.UnregisterHandler('challenge', self.SASLHandler,
+ xmlns=NS_SASL)
+ if 'failure' in self._owner.__dict__:
+ self._owner.UnregisterHandler('failure', self.SASLHandler,
+ xmlns=NS_SASL)
+ if 'success' in self._owner.__dict__:
+ self._owner.UnregisterHandler('success', self.SASLHandler,
+ xmlns=NS_SASL)
+
+ def auth(self):
+ """
+ Start authentication. Result can be obtained via "SASL.startsasl"
+ attribute and will be either SASL_SUCCESS or SASL_FAILURE
+
+ Note that successfull auth will take at least two Dispatcher.Process()
+ calls.
+ """
+ if self.startsasl:
+ pass
+ elif self._owner.Dispatcher.Stream.features:
+ try:
+ self.FeaturesHandler(self._owner.Dispatcher,
+ self._owner.Dispatcher.Stream.features)
+ except NodeProcessed:
+ pass
+ else:
+ self._owner.RegisterHandler('features',
+ self.FeaturesHandler, xmlns=NS_STREAMS)
+
+ def FeaturesHandler(self, conn, feats):
+ """
+ Used to determine if server supports SASL auth. Used internally
+ """
+ if not feats.getTag('mechanisms', namespace=NS_SASL):
+ self.startsasl='not-supported'
+ log.info('SASL not supported by server')
+ return
+ self.mecs = []
+ for mec in feats.getTag('mechanisms', namespace=NS_SASL).getTags(
+ 'mechanism'):
+ self.mecs.append(mec.getData())
+
+ self._owner.RegisterHandler('challenge', self.SASLHandler,
+ xmlns=NS_SASL)
+ self._owner.RegisterHandler('failure', self.SASLHandler, xmlns=NS_SASL)
+ self._owner.RegisterHandler('success', self.SASLHandler, xmlns=NS_SASL)
+ self.MechanismHandler()
+
+ def MechanismHandler(self):
+ if 'ANONYMOUS' in self.mecs and self.username is None:
+ self.mecs.remove('ANONYMOUS')
+ node = Node('auth', attrs={'xmlns': NS_SASL,
+ 'mechanism': 'ANONYMOUS'})
+ self.mechanism = 'ANONYMOUS'
+ self.startsasl = SASL_IN_PROCESS
+ self._owner.send(str(node))
+ raise NodeProcessed
+ if "EXTERNAL" in self.mecs:
+ self.mecs.remove('EXTERNAL')
+ sasl_data = u'%s@%s' % (self.username, self._owner.Server)
+ sasl_data = sasl_data.encode('utf-8').encode('base64').replace(
+ '\n', '')
+ node = Node('auth', attrs={'xmlns': NS_SASL,
+ 'mechanism': 'EXTERNAL'}, payload=[sasl_data])
+ self.mechanism = 'EXTERNAL'
+ self.startsasl = SASL_IN_PROCESS
+ self._owner.send(str(node))
+ raise NodeProcessed
+ if 'GSSAPI' in self.mecs and have_kerberos:
+ self.mecs.remove('GSSAPI')
+ try:
+ self.gss_vc = kerberos.authGSSClientInit('xmpp@' + \
+ self._owner.xmpp_hostname)[1]
+ kerberos.authGSSClientStep(self.gss_vc, '')
+ response = kerberos.authGSSClientResponse(self.gss_vc)
+ node=Node('auth', attrs={'xmlns': NS_SASL,
+ 'mechanism': 'GSSAPI'}, payload=(response or ''))
+ self.mechanism = 'GSSAPI'
+ self.gss_step = GSS_STATE_STEP
+ self.startsasl = SASL_IN_PROCESS
+ self._owner.send(str(node))
+ raise NodeProcessed
+ except kerberos.GSSError, e:
+ log.info('GSSAPI authentication failed: %s' % str(e))
+ if 'SCRAM-SHA-1' in self.mecs:
+ self.mecs.remove('SCRAM-SHA-1')
+ self.mechanism = 'SCRAM-SHA-1'
+ self._owner._caller.get_password(self.set_password, self.mechanism)
+ self.scram_step = 0
+ self.startsasl = SASL_IN_PROCESS
+ raise NodeProcessed
+ if 'DIGEST-MD5' in self.mecs:
+ self.mecs.remove('DIGEST-MD5')
+ node = Node('auth', attrs={'xmlns': NS_SASL,
+ 'mechanism': 'DIGEST-MD5'})
+ self.mechanism = 'DIGEST-MD5'
+ self.startsasl = SASL_IN_PROCESS
+ self._owner.send(str(node))
+ raise NodeProcessed
+ if 'PLAIN' in self.mecs:
+ self.mecs.remove('PLAIN')
+ self.mechanism = 'PLAIN'
+ self._owner._caller.get_password(self.set_password, self.mechanism)
+ self.startsasl = SASL_IN_PROCESS
+ raise NodeProcessed
+ if 'X-MESSENGER-OAUTH2' in self.mecs:
+ self.mecs.remove('X-MESSENGER-OAUTH2')
+ self.mechanism = 'X-MESSENGER-OAUTH2'
+ self._owner._caller.get_password(self.set_password, self.mechanism)
+ self.startsasl = SASL_IN_PROCESS
+ raise NodeProcessed
+ self.startsasl = SASL_FAILURE
+ log.info('I can only use EXTERNAL, SCRAM-SHA-1, DIGEST-MD5, GSSAPI and '
+ 'PLAIN mecanisms.')
+ if self.on_sasl:
+ self.on_sasl()
+ return
+
+ def SASLHandler(self, conn, challenge):
+ """
+ Perform next SASL auth step. Used internally
+ """
+ if challenge.getNamespace() != NS_SASL:
+ return
+
+ def scram_base64(s):
+ return ''.join(s.encode('base64').split('\n'))
+
+ incoming_data = challenge.getData()
+ data=base64.decodestring(incoming_data)
+ ### Handle Auth result
+ def on_auth_fail(reason):
+ log.info('Failed SASL authentification: %s' % reason)
+ self._owner.send(str(Node('abort', attrs={'xmlns': NS_SASL})))
+ if len(self.mecs) > 0:
+ # There are other mechanisms to test, but wait for <failure>
+ # answer from server
+ self.startsasl = SASL_FAILURE_IN_PROGRESS
+ raise NodeProcessed
+ if self.on_sasl:
+ self.on_sasl()
+ raise NodeProcessed
+
+ if challenge.getName() == 'failure':
+ if self.startsasl == SASL_FAILURE_IN_PROGRESS:
+ self.MechanismHandler()
+ raise NodeProcessed
+ self.startsasl = SASL_FAILURE
+ try:
+ reason = challenge.getChildren()[0]
+ except Exception:
+ reason = challenge
+ on_auth_fail(reason)
+ elif challenge.getName() == 'success':
+ if self.mechanism == 'SCRAM-SHA-1':
+ # check data-with-success
+ data = scram_parse(data)
+ if data['v'] != scram_base64(self.scram_ServerSignature):
+ on_auth_fail('ServerSignature is wrong')
+
+ self.startsasl = SASL_SUCCESS
+ log.info('Successfully authenticated with remote server.')
+ handlers = self._owner.Dispatcher.dumpHandlers()
+
+ # Bosh specific dispatcher replugging
+ # save old features. They will be used in case we won't get response
+ # on stream restart after SASL auth (happens with XMPP over BOSH
+ # with Openfire)
+ old_features = self._owner.Dispatcher.Stream.features
+ self._owner.Dispatcher.PlugOut()
+ dispatcher_nb.Dispatcher.get_instance().PlugIn(self._owner,
+ after_SASL=True, old_features=old_features)
+ self._owner.Dispatcher.restoreHandlers(handlers)
+ self._owner.User = self.username
+
+ if self.on_sasl:
+ self.on_sasl()
+ raise NodeProcessed
+
+ ### Perform auth step
+ log.info('Got challenge:' + data)
+
+ if self.mechanism == 'GSSAPI':
+ if self.gss_step == GSS_STATE_STEP:
+ rc = kerberos.authGSSClientStep(self.gss_vc, incoming_data)
+ if rc != kerberos.AUTH_GSS_CONTINUE:
+ self.gss_step = GSS_STATE_WRAP
+ elif self.gss_step == GSS_STATE_WRAP:
+ rc = kerberos.authGSSClientUnwrap(self.gss_vc, incoming_data)
+ response = kerberos.authGSSClientResponse(self.gss_vc)
+ rc = kerberos.authGSSClientWrap(self.gss_vc, response,
+ kerberos.authGSSClientUserName(self.gss_vc))
+ response = kerberos.authGSSClientResponse(self.gss_vc)
+ if not response:
+ response = ''
+ self._owner.send(Node('response', attrs={'xmlns': NS_SASL},
+ payload=response).__str__())
+ raise NodeProcessed
+ if self.mechanism == 'SCRAM-SHA-1':
+ hashfn = hashlib.sha1
+
+ def HMAC(k, s):
+ return hmac.HMAC(key=k, msg=s, digestmod=hashfn).digest()
+
+ def XOR(x, y):
+ r = (chr(ord(px) ^ ord(py)) for px, py in zip(x, y))
+ return ''.join(r)
+
+ def Hi(s, salt, iters):
+ ii = 1
+ try:
+ s = s.encode('utf-8')
+ except:
+ pass
+ ui_1 = HMAC(s, salt + '\0\0\0\01')
+ ui = ui_1
+ for i in range(iters - 1):
+ ii += 1
+ ui_1 = HMAC(s, ui_1)
+ ui = XOR(ui, ui_1)
+ return ui
+
+ def scram_H(s):
+ return hashfn(s).digest()
+
+ if self.scram_step == 0:
+ self.scram_step = 1
+ self.scram_soup += ',' + data + ','
+ data = scram_parse(data)
+ # TODO: Should check cnonce here.
+ # TODO: Channel binding data goes in here too.
+ r = 'c=' + scram_base64(self.scram_gs2)
+ r += ',r=' + data['r']
+ self.scram_soup += r
+ salt = data['s'].decode('base64')
+ iter = int(data['i'])
+ SaltedPassword = Hi(self.password, salt, iter)
+ # TODO: Could cache this, along with salt+iter.
+ ClientKey = HMAC(SaltedPassword, 'Client Key')
+ StoredKey = scram_H(ClientKey)
+ ClientSignature = HMAC(StoredKey, self.scram_soup)
+ ClientProof = XOR(ClientKey, ClientSignature)
+ r += ',p=' + scram_base64(ClientProof)
+ ServerKey = HMAC(SaltedPassword, 'Server Key')
+ self.scram_ServerSignature = HMAC(ServerKey, self.scram_soup)
+ sasl_data = scram_base64(r)
+ node = Node('response', attrs={'xmlns': NS_SASL},
+ payload=[sasl_data])
+ self._owner.send(str(node))
+ raise NodeProcessed
+
+ if self.scram_step == 1:
+ data = scram_parse(data)
+ if data['v'].decode('base64') != self.scram_ServerSignature:
+ # TODO: Not clear what to do here - need to abort.
+ raise Exception
+ node = Node('response', attrs={'xmlns': NS_SASL});
+ self._owner.send(str(node))
+ raise NodeProcessed
+
+ # magic foo...
+ chal = challenge_splitter(data)
+ if not self.realm and 'realm' in chal:
+ self.realm = chal['realm']
+ if 'qop' in chal and ((isinstance(chal['qop'], str) and \
+ chal['qop'] =='auth') or (isinstance(chal['qop'], list) and 'auth' in \
+ chal['qop'])):
+ self.resp = {}
+ self.resp['username'] = self.username
+ if self.realm:
+ self.resp['realm'] = self.realm
+ else:
+ self.resp['realm'] = self._owner.Server
+ self.resp['nonce'] = chal['nonce']
+ self.resp['cnonce'] = ''.join("%x" % randint(0, 2**28) for randint \
+ in itertools.repeat(random.randint, 7))
+ self.resp['nc'] = ('00000001')
+ self.resp['qop'] = 'auth'
+ self.resp['digest-uri'] = 'xmpp/' + self._owner.Server
+ self.resp['charset'] = 'utf-8'
+ # Password is now required
+ self._owner._caller.get_password(self.set_password, self.mechanism)
+ elif 'rspauth' in chal:
+ # Check rspauth value
+ if chal['rspauth'] != self.digest_rspauth:
+ on_auth_fail('rspauth is wrong')
+ self._owner.send(str(Node('response', attrs={'xmlns':NS_SASL})))
+ else:
+ self.startsasl = SASL_FAILURE
+ log.info('Failed SASL authentification: unknown challenge')
+ if self.on_sasl:
+ self.on_sasl()
+ raise NodeProcessed
+
+ @staticmethod
+ def _convert_to_iso88591(string):
+ try:
+ string = string.decode('utf-8').encode('iso-8859-1')
+ except UnicodeEncodeError:
+ pass
+ return string
+
+ def set_password(self, password):
+ self.password = '' if password is None else password
+ if self.mechanism == 'SCRAM-SHA-1':
+ nonce = ''.join('%x' % randint(0, 2 ** 28) for randint in \
+ itertools.repeat(random.randint, 7))
+ self.scram_soup = 'n=' + self.username + ',r=' + nonce
+ self.scram_gs2 = 'n,,' # No CB yet.
+ sasl_data = (self.scram_gs2 + self.scram_soup).encode('base64').\
+ replace('\n', '')
+ node = Node('auth', attrs={'xmlns': NS_SASL,
+ 'mechanism': self.mechanism}, payload=[sasl_data])
+ elif self.mechanism == 'DIGEST-MD5':
+ hash_username = self._convert_to_iso88591(self.resp['username'])
+ hash_realm = self._convert_to_iso88591(self.resp['realm'])
+ hash_password = self._convert_to_iso88591(self.password)
+ A1 = C([H(C([hash_username, hash_realm, hash_password])),
+ self.resp['nonce'], self.resp['cnonce']])
+ A2 = C(['AUTHENTICATE', self.resp['digest-uri']])
+ response = HH(C([HH(A1), self.resp['nonce'], self.resp['nc'],
+ self.resp['cnonce'], self.resp['qop'], HH(A2)]))
+ A2 = C(['', self.resp['digest-uri']])
+ self.digest_rspauth = HH(C([HH(A1), self.resp['nonce'],
+ self.resp['nc'], self.resp['cnonce'], self.resp['qop'],
+ HH(A2)]))
+ self.resp['response'] = response
+ sasl_data = u''
+ for key in ('charset', 'username', 'realm', 'nonce', 'nc', 'cnonce',
+ 'digest-uri', 'response', 'qop'):
+ if key in ('nc', 'qop', 'response', 'charset'):
+ sasl_data += u"%s=%s," % (key, self.resp[key])
+ else:
+ sasl_data += u'%s="%s",' % (key, self.resp[key])
+ sasl_data = sasl_data[:-1].encode('utf-8').encode('base64').replace(
+ '\r', '').replace('\n', '')
+ node = Node('response', attrs={'xmlns': NS_SASL},
+ payload=[sasl_data])
+ elif self.mechanism == 'PLAIN':
+ sasl_data = u'\x00%s\x00%s' % (self.username, self.password)
+ sasl_data = sasl_data.encode('utf-8').encode('base64').replace(
+ '\n', '')
+ node = Node('auth', attrs={'xmlns': NS_SASL, 'mechanism': 'PLAIN'},
+ payload=[sasl_data])
+ elif self.mechanism == 'X-MESSENGER-OAUTH2':
+ node = Node('auth', attrs={'xmlns': NS_SASL,
+ 'mechanism': 'X-MESSENGER-OAUTH2'})
+ node.addData(password)
+ self._owner.send(str(node))
+
+
+class NonBlockingNonSASL(PlugIn):
+ """
+ Implements old Non-SASL (JEP-0078) authentication used in jabberd1.4 and
+ transport authentication
+ """
+
+ def __init__(self, user, password, resource, on_auth):
+ """
+ Caches username, password and resource for auth
+ """
+ PlugIn.__init__(self)
+ self.user = user
+ if password is None:
+ self.password = ''
+ else:
+ self.password = password
+ self.resource = resource
+ self.on_auth = on_auth
+
+ def plugin(self, owner):
+ """
+ Determine the best auth method (digest/0k/plain) and use it for auth.
+ Returns used method name on success. Used internally
+ """
+ log.info('Querying server about possible auth methods')
+ self.owner = owner
+
+ owner.Dispatcher.SendAndWaitForResponse(
+ Iq('get', NS_AUTH, payload=[Node('username', payload=[self.user])]),
+ func=self._on_username)
+
+ def _on_username(self, resp):
+ if not isResultNode(resp):
+ log.info('No result node arrived! Aborting...')
+ return self.on_auth(None)
+
+ iq=Iq(typ='set', node=resp)
+ query = iq.getTag('query')
+ query.setTagData('username', self.user)
+ query.setTagData('resource', self.resource)
+
+ if query.getTag('digest'):
+ log.info("Performing digest authentication")
+ query.setTagData('digest',
+ hashlib.sha1(self.owner.Dispatcher.Stream._document_attrs['id']
+ + self.password).hexdigest())
+ if query.getTag('password'):
+ query.delChild('password')
+ self._method = 'digest'
+ elif query.getTag('token'):
+ token = query.getTagData('token')
+ seq = query.getTagData('sequence')
+ log.info("Performing zero-k authentication")
+
+ def hasher(s):
+ return hashlib.sha1(s).hexdigest()
+
+ def hash_n_times(s, count):
+ return count and hasher(hash_n_times(s, count-1)) or s
+
+ hash_ = hash_n_times(hasher(hasher(self.password) + token),
+ int(seq))
+ query.setTagData('hash', hash_)
+ self._method='0k'
+ else:
+ log.warn("Secure methods unsupported, performing plain text \
+ authentication")
+ self._method = 'plain'
+ self._owner._caller.get_password(self._on_password, self._method)
+ return
+ resp = self.owner.Dispatcher.SendAndWaitForResponse(iq,
+ func=self._on_auth)
+
+ def _on_password(self, password):
+ self.password = '' if password is None else password
+ iq=Iq('set', NS_AUTH)
+ query = iq.getTag('query')
+ query.setTagData('username', self.user)
+ query.setTagData('resource', self.resource)
+ query.setTagData('password', self.password)
+ resp = self.owner.Dispatcher.SendAndWaitForResponse(iq,
+ func=self._on_auth)
+
+ def _on_auth(self, resp):
+ if isResultNode(resp):
+ log.info('Sucessfully authenticated with remote host.')
+ self.owner.User = self.user
+ self.owner.Resource = self.resource
+ self.owner._registered_name = self.owner.User + '@' + \
+ self.owner.Server+ '/' + self.owner.Resource
+ return self.on_auth(self._method)
+ log.info('Authentication failed!')
+ return self.on_auth(None)
+
+
+class NonBlockingBind(PlugIn):
+ """
+ Bind some JID to the current connection to allow router know of our
+ location. Must be plugged after successful SASL auth
+ """
+
+ def __init__(self):
+ PlugIn.__init__(self)
+ self.bound = None
+ self.supports_sm = False
+ self.resuming = False
+
+ def plugin(self, owner):
+ ''' Start resource binding, if allowed at this time. Used internally. '''
+ if self._owner.Dispatcher.Stream.features:
+ try:
+ self.FeaturesHandler(self._owner.Dispatcher,
+ self._owner.Dispatcher.Stream.features)
+ except NodeProcessed:
+ pass
+ else:
+ self._owner.RegisterHandler('features', self.FeaturesHandler,
+ xmlns=NS_STREAMS)
+
+ def FeaturesHandler(self, conn, feats):
+ """
+ Determine if server supports resource binding and set some internal
+ attributes accordingly.
+
+ It also checks if server supports stream management
+ """
+
+ if feats.getTag('sm', namespace=NS_STREAM_MGMT):
+ self.supports_sm = True # server supports stream management
+ if self.resuming:
+ self._owner._caller.sm.resume_request()
+
+ if not feats.getTag('bind', namespace=NS_BIND):
+ log.info('Server does not requested binding.')
+ # we try to bind resource anyway
+ #self.bound='failure'
+ self.bound = []
+ return
+ if feats.getTag('session', namespace=NS_SESSION):
+ self.session = 1
+ else:
+ self.session = -1
+ self.bound = []
+
+ def plugout(self):
+ """
+ Remove Bind handler from owner's dispatcher. Used internally
+ """
+ self._owner.UnregisterHandler('features', self.FeaturesHandler,
+ xmlns=NS_STREAMS)
+
+ def NonBlockingBind(self, resource=None, on_bound=None):
+ """
+ Perform binding. Use provided resource name or random (if not provided).
+ """
+ if self.resuming: # We don't bind if we resume the stream
+ return
+ self.on_bound = on_bound
+ self._resource = resource
+ if self._resource:
+ self._resource = [Node('resource', payload=[self._resource])]
+ else:
+ self._resource = []
+
+ self._owner.onreceive(None)
+ self._owner.Dispatcher.SendAndWaitForResponse(
+ Protocol('iq', typ='set', payload=[Node('bind',
+ attrs={'xmlns': NS_BIND}, payload=self._resource)]),
+ func=self._on_bound)
+
+ def _on_bound(self, resp):
+ if isResultNode(resp):
+ if resp.getTag('bind') and resp.getTag('bind').getTagData('jid'):
+ self.bound.append(resp.getTag('bind').getTagData('jid'))
+ log.info('Successfully bound %s.' % self.bound[-1])
+ jid = JID(resp.getTag('bind').getTagData('jid'))
+ self._owner.User = jid.getNode()
+ self._owner.Resource = jid.getResource()
+ # Only negociate stream management after bounded
+ sm = self._owner._caller.sm
+ if self.supports_sm:
+ # starts negociation
+ sm.set_owner(self._owner)
+ sm.negociate()
+ self._owner.Dispatcher.sm = sm
+
+ if hasattr(self, 'session') and self.session == -1:
+ # Server don't want us to initialize a session
+ log.info('No session required.')
+ self.on_bound('ok')
+ else:
+ self._owner.SendAndWaitForResponse(Protocol('iq', typ='set',
+ payload=[Node('session', attrs={'xmlns':NS_SESSION})]),
+ func=self._on_session)
+ return
+ if resp:
+ log.info('Binding failed: %s.' % resp.getTag('error'))
+ self.on_bound(None)
+ else:
+ log.info('Binding failed: timeout expired.')
+ self.on_bound(None)
+
+ def _on_session(self, resp):
+ self._owner.onreceive(None)
+ if isResultNode(resp):
+ log.info('Successfully opened session.')
+ self.session = 1
+ self.on_bound('ok')
+ else:
+ log.error('Session open failed.')
+ self.session = 0
+ self.on_bound(None)
diff --git a/nbxmpp/bosh.py b/nbxmpp/bosh.py
new file mode 100644
index 0000000..01145cc
--- /dev/null
+++ b/nbxmpp/bosh.py
@@ -0,0 +1,581 @@
+## bosh.py
+##
+##
+## Copyright (C) 2008 Tomas Karasek <tom.to.the.k@gmail.com>
+##
+## This file is part of Gajim.
+##
+## Gajim is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published
+## by the Free Software Foundation; version 3 only.
+##
+## Gajim is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+
+
+import locale, random
+from hashlib import sha1
+from transports_nb import NonBlockingTransport, NonBlockingHTTPBOSH,\
+ CONNECTED, CONNECTING, DISCONNECTED, DISCONNECTING,\
+ urisplit, DISCONNECT_TIMEOUT_SECONDS
+from protocol import BOSHBody, Protocol, NS_CLIENT
+from simplexml import Node
+
+import logging
+log = logging.getLogger('nbxmpp.bosh')
+
+KEY_COUNT = 10
+
+# Fake file descriptor - it's used for setting read_timeout in idlequeue for
+# BOSH Transport. In TCP-derived transports this is file descriptor of socket.
+FAKE_DESCRIPTOR = -1337
+
+
+class NonBlockingBOSH(NonBlockingTransport):
+ def __init__(self, raise_event, on_disconnect, idlequeue, estabilish_tls, certs,
+ xmpp_server, domain, bosh_dict, proxy_creds):
+ NonBlockingTransport.__init__(self, raise_event, on_disconnect, idlequeue,
+ estabilish_tls, certs)
+
+ self.bosh_sid = None
+ if locale.getdefaultlocale()[0]:
+ self.bosh_xml_lang = locale.getdefaultlocale()[0].split('_')[0]
+ else:
+ self.bosh_xml_lang = 'en'
+
+ self.http_version = 'HTTP/1.1'
+ self.http_persistent = True
+ self.http_pipelining = bosh_dict['bosh_http_pipelining']
+ self.bosh_to = domain
+
+ self.route_host, self.route_port = xmpp_server
+
+ self.bosh_wait = bosh_dict['bosh_wait']
+ if not self.http_pipelining:
+ self.bosh_hold = 1
+ else:
+ self.bosh_hold = bosh_dict['bosh_hold']
+ self.bosh_requests = self.bosh_hold
+ self.bosh_uri = bosh_dict['bosh_uri']
+ self.bosh_content = bosh_dict['bosh_content']
+ self.over_proxy = bosh_dict['bosh_useproxy']
+ if estabilish_tls:
+ self.bosh_secure = 'true'
+ else:
+ self.bosh_secure = 'false'
+ self.use_proxy_auth = bosh_dict['useauth']
+ self.proxy_creds = proxy_creds
+ self.wait_cb_time = None
+ self.http_socks = []
+ self.stanza_buffer = []
+ self.prio_bosh_stanzas = []
+ self.current_recv_handler = None
+ self.current_recv_socket = None
+ self.key_stack = None
+ self.ack_checker = None
+ self.after_init = False
+ self.proxy_dict = {}
+ if self.over_proxy and self.estabilish_tls:
+ self.proxy_dict['type'] = 'http'
+ # with SSL over proxy, we do HTTP CONNECT to proxy to open a channel to
+ # BOSH Connection Manager
+ host, port = urisplit(self.bosh_uri)[1:3]
+ self.proxy_dict['xmpp_server'] = (host, port)
+ self.proxy_dict['credentials'] = self.proxy_creds
+
+
+ def connect(self, conn_5tuple, on_connect, on_connect_failure):
+ NonBlockingTransport.connect(self, conn_5tuple, on_connect, on_connect_failure)
+
+ global FAKE_DESCRIPTOR
+ FAKE_DESCRIPTOR = FAKE_DESCRIPTOR - 1
+ self.fd = FAKE_DESCRIPTOR
+
+ self.stanza_buffer = []
+ self.prio_bosh_stanzas = []
+
+ self.key_stack = KeyStack(KEY_COUNT)
+ self.ack_checker = AckChecker()
+ self.after_init = True
+
+ self.http_socks.append(self.get_new_http_socket())
+ self._tcp_connecting_started()
+
+ self.http_socks[0].connect(
+ conn_5tuple = conn_5tuple,
+ on_connect = self._on_connect,
+ on_connect_failure = self._on_connect_failure)
+
+ def _on_connect(self):
+ self.peerhost = self.http_socks[0].peerhost
+ self.ssl_lib = self.http_socks[0].ssl_lib
+ NonBlockingTransport._on_connect(self)
+
+
+
+ def set_timeout(self, timeout):
+ if self.get_state() != DISCONNECTED and self.fd != -1:
+ NonBlockingTransport.set_timeout(self, timeout)
+ else:
+ log.warn('set_timeout: TIMEOUT NOT SET: state is %s, fd is %s' % (self.get_state(), self.fd))
+
+ def on_http_request_possible(self):
+ """
+ Called when HTTP request it's possible to send a HTTP request. It can be when
+ socket is connected or when HTTP response arrived
+
+ There should be always one pending request to BOSH CM.
+ """
+ log.debug('on_http_req possible, state:\n%s' % self.get_current_state())
+ if self.get_state()==DISCONNECTED: return
+
+ #Hack for making the non-secure warning dialog work
+ if self._owner.got_features:
+ if (hasattr(self._owner, 'NonBlockingNonSASL') or hasattr(self._owner, 'SASL')):
+ self.send_BOSH(None)
+ else:
+ # If we already got features and no auth module was plugged yet, we are
+ # probably waiting for confirmation of the "not-secure-connection" dialog.
+ # We don't send HTTP request in that case.
+ # see http://lists.jabber.ru/pipermail/ejabberd/2008-August/004027.html
+ return
+ else:
+ self.send_BOSH(None)
+
+
+
+ def get_socket_in(self, state):
+ """
+ Get sockets in desired state
+ """
+ for s in self.http_socks:
+ if s.get_state()==state: return s
+ return None
+
+
+ def get_free_socket(self):
+ """
+ Select and returns socket eligible for sending a data to
+ """
+ if self.http_pipelining:
+ return self.get_socket_in(CONNECTED)
+ else:
+ last_recv_time, tmpsock = 0, None
+ for s in self.http_socks:
+ # we're interested only in CONNECTED socket with no requests pending
+ if s.get_state()==CONNECTED and s.pending_requests==0:
+ # if there's more of them, we want the one with the least recent data receive
+ # (lowest last_recv_time)
+ if (last_recv_time==0) or (s.last_recv_time < last_recv_time):
+ last_recv_time = s.last_recv_time
+ tmpsock = s
+ if tmpsock:
+ return tmpsock
+ else:
+ return None
+
+
+ def send_BOSH(self, payload):
+ """
+ Tries to send a stanza in payload by appeding it to a buffer and plugging a
+ free socket for writing.
+ """
+ total_pending_reqs = sum([s.pending_requests for s in self.http_socks])
+
+ # when called after HTTP response (Payload=None) and when there are already
+ # some pending requests and no data to send, or when the socket is
+ # disconnected, we do nothing
+ if payload is None and \
+ total_pending_reqs > 0 and \
+ self.stanza_buffer == [] and \
+ self.prio_bosh_stanzas == [] or \
+ self.get_state()==DISCONNECTED:
+ return
+
+ # Add xmlns to stanza to help ejabberd server
+ if payload and isinstance(payload, Protocol):
+ if not payload.getNamespace():
+ payload.setNamespace(NS_CLIENT)
+
+ # now the payload is put to buffer and will be sent at some point
+ self.append_stanza(payload)
+
+ # if we're about to make more requests than allowed, we don't send - stanzas will be
+ # sent after HTTP response from CM, exception is when we're disconnecting - then we
+ # send anyway
+ if total_pending_reqs >= self.bosh_requests and self.get_state()!=DISCONNECTING:
+ log.warn('attemp to make more requests than allowed by Connection Manager:\n%s' %
+ self.get_current_state())
+ return
+
+ # when there's free CONNECTED socket, we plug it for write and the data will
+ # be sent when write is possible
+ if self.get_free_socket():
+ self.plug_socket()
+ return
+
+ # if there is a connecting socket, we just wait for when it connects,
+ # payload will be sent in a sec when the socket connects
+ if self.get_socket_in(CONNECTING): return
+
+ # being here means there are either DISCONNECTED sockets or all sockets are
+ # CONNECTED with too many pending requests
+ s = self.get_socket_in(DISCONNECTED)
+
+ # if we have DISCONNECTED socket, lets connect it and plug for send
+ if s:
+ self.connect_and_flush(s)
+ else:
+ # otherwise create and connect a new one
+ ss = self.get_new_http_socket()
+ self.http_socks.append(ss)
+ self.connect_and_flush(ss)
+ return
+
+ def plug_socket(self):
+ stanza = None
+ s = self.get_free_socket()
+ if s:
+ s._plug_idle(writable=True, readable=True)
+ else:
+ log.error('=====!!!!!!!!====> Couldn\'t get free socket in plug_socket())')
+
+ def build_stanza(self, socket):
+ """
+ Build a BOSH body tag from data in buffers and adds key, rid and ack
+ attributes to it
+
+ This method is called from _do_send() of underlying transport. This is to
+ ensure rid and keys will be processed in correct order. If I generate
+ them before plugging a socket for write (and did it for two sockets/HTTP
+ connections) in parallel, they might be sent in wrong order, which
+ results in violating the BOSH session and server-side disconnect.
+ """
+ if self.prio_bosh_stanzas:
+ stanza, add_payload = self.prio_bosh_stanzas.pop(0)
+ if add_payload:
+ stanza.setPayload(self.stanza_buffer)
+ self.stanza_buffer = []
+ else:
+ stanza = self.boshify_stanzas(self.stanza_buffer)
+ self.stanza_buffer = []
+
+ stanza = self.ack_checker.backup_stanza(stanza, socket)
+
+ key, newkey = self.key_stack.get()
+ if key:
+ stanza.setAttr('key', key)
+ if newkey:
+ stanza.setAttr('newkey', newkey)
+
+
+ log.info('sending msg with rid=%s to sock %s' % (stanza.getAttr('rid'), id(socket)))
+ self.renew_bosh_wait_timeout(self.bosh_wait + 3)
+ return stanza
+
+
+ def on_bosh_wait_timeout(self):
+ log.error('Connection Manager didn\'t respond within %s + 3 seconds --> forcing disconnect' % self.bosh_wait)
+ self.disconnect()
+
+
+ def renew_bosh_wait_timeout(self, timeout):
+ if self.wait_cb_time is not None:
+ self.remove_bosh_wait_timeout()
+ sched_time = self.idlequeue.set_alarm(self.on_bosh_wait_timeout, timeout)
+ self.wait_cb_time = sched_time
+
+ def remove_bosh_wait_timeout(self):
+ self.idlequeue.remove_alarm(
+ self.on_bosh_wait_timeout,
+ self.wait_cb_time)
+
+ def on_persistent_fallback(self, socket):
+ """
+ Called from underlying transport when server closes TCP connection
+
+ :param socket: disconnected transport object
+ """
+ if socket.http_persistent:
+ log.warn('Fallback to nonpersistent HTTP (no pipelining as well)')
+ socket.http_persistent = False
+ self.http_persistent = False
+ self.http_pipelining = False
+ socket.disconnect(do_callback=False)
+ self.connect_and_flush(socket)
+ else:
+ socket.disconnect()
+
+
+
+ def handle_body_attrs(self, stanza_attrs):
+ """
+ Called for each incoming body stanza from dispatcher. Checks body
+ attributes.
+ """
+ self.remove_bosh_wait_timeout()
+
+ if self.after_init:
+ if stanza_attrs.has_key('sid'):
+ # session ID should be only in init response
+ self.bosh_sid = stanza_attrs['sid']
+
+ if stanza_attrs.has_key('requests'):
+ self.bosh_requests = int(stanza_attrs['requests'])
+
+ if stanza_attrs.has_key('wait'):
+ self.bosh_wait = int(stanza_attrs['wait'])
+ self.after_init = False
+
+ ack = None
+ if stanza_attrs.has_key('ack'):
+ ack = stanza_attrs['ack']
+ self.ack_checker.process_incoming_ack(ack=ack,
+ socket=self.current_recv_socket)
+
+ if stanza_attrs.has_key('type'):
+ if stanza_attrs['type'] in ['terminate', 'terminal']:
+ condition = 'n/a'
+ if stanza_attrs.has_key('condition'):
+ condition = stanza_attrs['condition']
+ if condition == 'n/a':
+ log.info('Received sesion-ending terminating stanza')
+ else:
+ log.error('Received terminating stanza: %s - %s' % (condition,
+ bosh_errors[condition]))
+ self.disconnect()
+ return
+
+ if stanza_attrs['type'] == 'error':
+ # recoverable error
+ pass
+ return
+
+
+ def append_stanza(self, stanza):
+ """
+ Append stanza to a buffer to send
+ """
+ if stanza:
+ if isinstance(stanza, tuple):
+ # stanza is tuple of BOSH stanza and bool value for whether to add payload
+ self.prio_bosh_stanzas.append(stanza)
+ else:
+ # stanza is XMPP stanza. Will be boshified before send.
+ self.stanza_buffer.append(stanza)
+
+
+ def send(self, stanza, now=False):
+ self.send_BOSH(stanza)
+
+
+
+ def get_current_state(self):
+ t = '------ SOCKET_ID\tSOCKET_STATE\tPENDING_REQS\n'
+ for s in self.http_socks:
+ t = '%s------ %s\t%s\t%s\n' % (t, id(s), s.get_state(), s.pending_requests)
+ t = '%s------ prio stanzas: %s, queued XMPP stanzas: %s, not_acked stanzas: %s' \
+ % (t, self.prio_bosh_stanzas, self.stanza_buffer,
+ self.ack_checker.get_not_acked_rids())
+ return t
+
+
+ def connect_and_flush(self, socket):
+ socket.connect(
+ conn_5tuple = self.conn_5tuple,
+ on_connect = self.on_http_request_possible,
+ on_connect_failure = self.disconnect)
+
+
+ def boshify_stanzas(self, stanzas=[], body_attrs=None):
+ """
+ Wraps zero to many stanzas by body tag with xmlns and sid
+ """
+ log.debug('boshify_staza - type is: %s, stanza is %s' % (type(stanzas), stanzas))
+ tag = BOSHBody(attrs={'sid': self.bosh_sid})
+ tag.setPayload(stanzas)
+ return tag
+
+
+ def send_init(self, after_SASL=False):
+ if after_SASL:
+ t = BOSHBody(
+ attrs={ 'to': self.bosh_to,
+ 'sid': self.bosh_sid,
+ 'xml:lang': self.bosh_xml_lang,
+ 'xmpp:restart': 'true',
+ 'secure': self.bosh_secure,
+ 'xmlns:xmpp': 'urn:xmpp:xbosh'})
+ else:
+ t = BOSHBody(
+ attrs={ 'content': self.bosh_content,
+ 'hold': str(self.bosh_hold),
+ 'route': 'xmpp:%s:%s' % (self.route_host, self.route_port),
+ 'to': self.bosh_to,
+ 'wait': str(self.bosh_wait),
+ 'xml:lang': self.bosh_xml_lang,
+ 'xmpp:version': '1.0',
+ 'ver': '1.6',
+ 'xmlns:xmpp': 'urn:xmpp:xbosh'})
+ self.send_BOSH((t, True))
+
+ def start_disconnect(self):
+ NonBlockingTransport.start_disconnect(self)
+ self.renew_bosh_wait_timeout(DISCONNECT_TIMEOUT_SECONDS)
+ self.send_BOSH(
+ (BOSHBody(attrs={'sid': self.bosh_sid, 'type': 'terminate'}), True))
+
+
+ def get_new_http_socket(self):
+ http_dict = {'http_uri': self.bosh_uri,
+ 'http_version': self.http_version,
+ 'http_persistent': self.http_persistent,
+ 'add_proxy_headers': self.over_proxy and not self.estabilish_tls}
+ if self.use_proxy_auth:
+ http_dict['proxy_user'], http_dict['proxy_pass'] = self.proxy_creds
+
+ s = NonBlockingHTTPBOSH(
+ raise_event=self.raise_event,
+ on_disconnect=self.disconnect,
+ idlequeue = self.idlequeue,
+ estabilish_tls = self.estabilish_tls,
+ certs = self.certs,
+ on_http_request_possible = self.on_http_request_possible,
+ http_dict = http_dict,
+ proxy_dict = self.proxy_dict,
+ on_persistent_fallback = self.on_persistent_fallback)
+
+ s.onreceive(self.on_received_http)
+ s.set_stanza_build_cb(self.build_stanza)
+ return s
+
+
+ def onreceive(self, recv_handler):
+ if recv_handler is None:
+ recv_handler = self._owner.Dispatcher.ProcessNonBlocking
+ self.current_recv_handler = recv_handler
+
+
+ def on_received_http(self, data, socket):
+ self.current_recv_socket = socket
+ self.current_recv_handler(data)
+
+
+ def disconnect(self, do_callback=True):
+ self.remove_bosh_wait_timeout()
+ if self.get_state() == DISCONNECTED: return
+ self.fd = -1
+ for s in self.http_socks:
+ s.disconnect(do_callback=False)
+ NonBlockingTransport.disconnect(self, do_callback)
+
+
+def get_rand_number():
+ # with 50-bit random initial rid, session would have to go up
+ # to 7881299347898368 messages to raise rid over 2**53
+ # (see http://www.xmpp.org/extensions/xep-0124.html#rids)
+ # it's also used for sequence key initialization
+ r = random.Random()
+ r.seed()
+ return r.getrandbits(50)
+
+
+
+class AckChecker():
+ """
+ Class for generating rids and generating and checking acknowledgements in
+ BOSH messages
+ """
+ def __init__(self):
+ self.rid = get_rand_number()
+ self.ack = 1
+ self.last_rids = {}
+ self.not_acked = []
+
+
+ def get_not_acked_rids(self): return [rid for rid, st in self.not_acked]
+
+ def backup_stanza(self, stanza, socket):
+ socket.pending_requests += 1
+ rid = self.get_rid()
+ self.not_acked.append((rid, stanza))
+ stanza.setAttr('rid', str(rid))
+ self.last_rids[socket]=rid
+
+ if self.rid != self.ack + 1:
+ stanza.setAttr('ack', str(self.ack))
+ return stanza
+
+ def process_incoming_ack(self, socket, ack=None):
+ socket.pending_requests -= 1
+ if ack:
+ ack = int(ack)
+ else:
+ ack = self.last_rids[socket]
+
+ i = len([rid for rid, st in self.not_acked if ack >= rid])
+ self.not_acked = self.not_acked[i:]
+
+ self.ack = ack
+
+
+ def get_rid(self):
+ self.rid = self.rid + 1
+ return self.rid
+
+
+
+
+
+class KeyStack():
+ """
+ Class implementing key sequences for BOSH messages
+ """
+ def __init__(self, count):
+ self.count = count
+ self.keys = []
+ self.reset()
+ self.first_call = True
+
+ def reset(self):
+ seed = str(get_rand_number())
+ self.keys = [sha1(seed).hexdigest()]
+ for i in range(self.count-1):
+ curr_seed = self.keys[i]
+ self.keys.append(sha1(curr_seed).hexdigest())
+
+ def get(self):
+ if self.first_call:
+ self.first_call = False
+ return (None, self.keys.pop())
+
+ if len(self.keys)>1:
+ return (self.keys.pop(), None)
+ else:
+ last_key = self.keys.pop()
+ self.reset()
+ new_key = self.keys.pop()
+ return (last_key, new_key)
+
+# http://www.xmpp.org/extensions/xep-0124.html#errorstatus-terminal
+bosh_errors = {
+ 'n/a': 'none or unknown condition in terminating body stanza',
+ 'bad-request': 'The format of an HTTP header or binding element received from the client is unacceptable (e.g., syntax error), or Script Syntax is not supported.',
+ 'host-gone': 'The target domain specified in the "to" attribute or the target host or port specified in the "route" attribute is no longer serviced by the connection manager.',
+ 'host-unknown': 'The target domain specified in the "to" attribute or the target host or port specified in the "route" attribute is unknown to the connection manager.',
+ 'improper-addressing': 'The initialization element lacks a "to" or "route" attribute (or the attribute has no value) but the connection manager requires one.',
+ 'internal-server-error': 'The connection manager has experienced an internal error that prevents it from servicing the request.',
+ 'item-not-found': '(1) "sid" is not valid, (2) "stream" is not valid, (3) "rid" is larger than the upper limit of the expected window, (4) connection manager is unable to resend response, (5) "key" sequence is invalid',
+ 'other-request': 'Another request being processed at the same time as this request caused the session to terminate.',
+ 'policy-violation': 'The client has broken the session rules (polling too frequently, requesting too frequently, too many simultaneous requests).',
+ 'remote-connection-failed': 'The connection manager was unable to connect to, or unable to connect securely to, or has lost its connection to, the server.',
+ 'remote-stream-error': 'Encapsulates an error in the protocol being transported.',
+ 'see-other-uri': 'The connection manager does not operate at this URI (e.g., the connection manager accepts only SSL or TLS connections at some https: URI rather than the http: URI requested by the client). The client may try POSTing to the URI in the content of the <uri/> child element.',
+ 'system-shutdown': 'The connection manager is being shut down. All active HTTP sessions are being terminated. No new sessions can be created.',
+ 'undefined-condition': 'The error is not one of those defined herein; the connection manager SHOULD include application-specific information in the content of the <body/> wrapper.'
+}
diff --git a/nbxmpp/c14n.py b/nbxmpp/c14n.py
new file mode 100644
index 0000000..0d318a3
--- /dev/null
+++ b/nbxmpp/c14n.py
@@ -0,0 +1,59 @@
+# -*- coding:utf-8 -*-
+## c14n.py
+##
+## Copyright (C) 2007-2008 Brendan Taylor <whateley AT gmail.com>
+##
+## This file is part of Gajim.
+##
+## Gajim is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published
+## by the Free Software Foundation; version 3 only.
+##
+## Gajim is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+##
+
+"""
+XML canonicalisation methods (for XEP-0116)
+"""
+
+from simplexml import ustr
+
+def c14n(node, is_buggy):
+ s = "<" + node.name
+ if node.namespace:
+ if not node.parent or node.parent.namespace != node.namespace:
+ s = s + ' xmlns="%s"' % node.namespace
+
+ sorted_attrs = sorted(node.attrs.keys())
+ for key in sorted_attrs:
+ if not is_buggy and key == 'xmlns':
+ continue
+ val = ustr(node.attrs[key])
+ # like XMLescape() but with whitespace and without &gt;
+ s = s + ' %s="%s"' % ( key, normalise_attr(val) )
+ s = s + ">"
+ cnt = 0
+ if node.kids:
+ for a in node.kids:
+ if (len(node.data)-1) >= cnt:
+ s = s + normalise_text(node.data[cnt])
+ s = s + c14n(a, is_buggy)
+ cnt=cnt+1
+ if (len(node.data)-1) >= cnt: s = s + normalise_text(node.data[cnt])
+ if not node.kids and s.endswith('>'):
+ s=s[:-1]+' />'
+ else:
+ s = s + "</" + node.name + ">"
+ return s.encode('utf-8')
+
+def normalise_attr(val):
+ return val.replace('&', '&amp;').replace('<', '&lt;').replace('"', '&quot;').replace('\t', '&#x9;').replace('\n', '&#xA;').replace('\r', '&#xD;')
+
+def normalise_text(val):
+ return val.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('\r', '&#xD;')
diff --git a/nbxmpp/client_nb.py b/nbxmpp/client_nb.py
new file mode 100644
index 0000000..0e64c41
--- /dev/null
+++ b/nbxmpp/client_nb.py
@@ -0,0 +1,614 @@
+## client_nb.py
+## based on client.py, changes backported up to revision 1.60
+##
+## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov
+## modified by Dimitur Kirov <dkirov@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+# $Id: client.py,v 1.52 2006/01/02 19:40:55 normanr Exp $
+
+"""
+Client class establishs connection to XMPP Server and handles authentication
+"""
+
+import socket
+import transports_nb, dispatcher_nb, auth_nb, roster_nb, protocol, bosh
+from protocol import NS_TLS
+
+import logging
+log = logging.getLogger('nbxmpp.client_nb')
+
+
+class NonBlockingClient:
+ """
+ Client class is XMPP connection mountpoint. Objects for authentication,
+ network communication, roster, xml parsing ... are plugged to client object.
+ Client implements the abstract behavior - mostly negotioation and callbacks
+ handling, whereas underlying modules take care of feature-specific logic
+ """
+
+ def __init__(self, domain, idlequeue, caller=None):
+ """
+ Caches connection data
+
+ :param domain: domain - for to: attribute (from account info)
+ :param idlequeue: processing idlequeue
+ :param caller: calling object - it has to implement methods
+ _event_dispatcher which is called from dispatcher instance
+ """
+ self.Namespace = protocol.NS_CLIENT
+ self.defaultNamespace = self.Namespace
+
+ self.idlequeue = idlequeue
+ self.disconnect_handlers = []
+
+ self.Server = domain
+ self.xmpp_hostname = None # FQDN hostname to connect to
+
+ # caller is who initiated this client, it is in needed to register
+ # the EventDispatcher
+ self._caller = caller
+ self._owner = self
+ self._registered_name = None # our full jid, set after successful auth
+ self.connected = ''
+ self.ip_addresses = []
+ self.socket = None
+ self.on_connect = None
+ self.on_proxy_failure = None
+ self.on_connect_failure = None
+ self.proxy = None
+ self.got_features = False
+ self.stream_started = False
+ self.disconnecting = False
+ self.protocol_type = 'XMPP'
+
+ def disconnect(self, message=''):
+ """
+ Called on disconnection - disconnect callback is picked based on state of
+ the client.
+ """
+ # to avoid recursive calls
+ if self.ip_addresses:
+ self._try_next_ip()
+ return
+ if self.disconnecting: return
+
+ log.info('Disconnecting NBClient: %s' % message)
+
+ if 'NonBlockingRoster' in self.__dict__:
+ self.NonBlockingRoster.PlugOut()
+ if 'NonBlockingBind' in self.__dict__:
+ self.NonBlockingBind.PlugOut()
+ if 'NonBlockingNonSASL' in self.__dict__:
+ self.NonBlockingNonSASL.PlugOut()
+ if 'SASL' in self.__dict__:
+ self.SASL.PlugOut()
+ if 'NonBlockingTCP' in self.__dict__:
+ self.NonBlockingTCP.PlugOut()
+ if 'NonBlockingHTTP' in self.__dict__:
+ self.NonBlockingHTTP.PlugOut()
+ if 'NonBlockingBOSH' in self.__dict__:
+ self.NonBlockingBOSH.PlugOut()
+ # FIXME: we never unplug dispatcher, only on next connect
+ # See _xmpp_connect_machine and SASLHandler
+
+ connected = self.connected
+ stream_started = self.stream_started
+
+ self.connected = ''
+ self.stream_started = False
+
+ self.disconnecting = True
+
+ log.debug('Client disconnected..')
+ if connected == '':
+ # if we're disconnecting before connection to XMPP sever is opened,
+ # we don't call disconnect handlers but on_connect_failure callback
+ if self.proxy:
+ # with proxy, we have different failure callback
+ log.debug('calling on_proxy_failure cb')
+ self.on_proxy_failure(reason=message)
+ else:
+ log.debug('calling on_connect_failure cb')
+ self.on_connect_failure()
+ else:
+ # we are connected to XMPP server
+ if not stream_started:
+ # if error occur before XML stream was opened, e.g. no response on
+ # init request, we call the on_connect_failure callback because
+ # proper connection is not established yet and it's not a proxy
+ # issue
+ log.debug('calling on_connect_failure cb')
+ self._caller.streamError = message
+ self.on_connect_failure()
+ else:
+ # with open connection, we are calling the disconnect handlers
+ for i in reversed(self.disconnect_handlers):
+ log.debug('Calling disconnect handler %s' % i)
+ i()
+ self.disconnecting = False
+
+ def connect(self, on_connect, on_connect_failure, hostname=None, port=5222,
+ on_proxy_failure=None, proxy=None, secure_tuple=('plain', None,
+ None)):
+ """
+ Open XMPP connection (open XML streams in both directions)
+
+ :param on_connect: called after stream is successfully opened
+ :param on_connect_failure: called when error occures during connection
+ :param hostname: hostname of XMPP server from SRV request
+ :param port: port number of XMPP server
+ :param on_proxy_failure: called if error occurres during TCP connection to
+ proxy server or during proxy connecting process
+ :param proxy: dictionary with proxy data. It should contain at least
+ values for keys 'host' and 'port' - connection details for proxy serve
+ and optionally keys 'user' and 'pass' as proxy credentials
+ :param secure_tuple: tuple of (desired connection type, cacerts, mycerts)
+ connection type can be 'ssl' - TLS established after TCP connection,
+ 'tls' - TLS established after negotiation with starttls, or 'plain'.
+ cacerts, mycerts - see tls_nb.NonBlockingTLS constructor for more
+ details
+ """
+ self.on_connect = on_connect
+ self.on_connect_failure=on_connect_failure
+ self.on_proxy_failure = on_proxy_failure
+ self.desired_security, self.cacerts, self.mycerts = secure_tuple
+ self.Connection = None
+ self.Port = port
+ self.proxy = proxy
+
+ if hostname:
+ self.xmpp_hostname = hostname
+ else:
+ self.xmpp_hostname = self.Server
+
+ # We only check for SSL here as for TLS we will first have to start a
+ # PLAIN connection and negotiate TLS afterwards.
+ # establish_tls will instruct transport to start secure connection
+ # directly
+ establish_tls = self.desired_security == 'ssl'
+ certs = (self.cacerts, self.mycerts)
+
+ proxy_dict = {}
+ tcp_host = self.xmpp_hostname
+ tcp_port = self.Port
+
+ if proxy:
+ # with proxies, client connects to proxy instead of directly to
+ # XMPP server ((hostname, port))
+ # tcp_host is hostname of machine used for socket connection
+ # (DNS request will be done for proxy or BOSH CM hostname)
+ tcp_host, tcp_port, proxy_user, proxy_pass = \
+ transports_nb.get_proxy_data_from_dict(proxy)
+
+ if proxy['type'] == 'bosh':
+ # Setup BOSH transport
+ self.socket = bosh.NonBlockingBOSH.get_instance(
+ on_disconnect=self.disconnect,
+ raise_event=self.raise_event,
+ idlequeue=self.idlequeue,
+ estabilish_tls=establish_tls,
+ certs=certs,
+ proxy_creds=(proxy_user, proxy_pass),
+ xmpp_server=(self.xmpp_hostname, self.Port),
+ domain=self.Server,
+ bosh_dict=proxy)
+ self.protocol_type = 'BOSH'
+ self.wait_for_restart_response = \
+ proxy['bosh_wait_for_restart_response']
+ else:
+ # http proxy
+ proxy_dict['type'] = proxy['type']
+ proxy_dict['xmpp_server'] = (self.xmpp_hostname, self.Port)
+ proxy_dict['credentials'] = (proxy_user, proxy_pass)
+
+ if not proxy or proxy['type'] != 'bosh':
+ # Setup ordinary TCP transport
+ self.socket = transports_nb.NonBlockingTCP.get_instance(
+ on_disconnect=self.disconnect,
+ raise_event=self.raise_event,
+ idlequeue=self.idlequeue,
+ estabilish_tls=establish_tls,
+ certs=certs,
+ proxy_dict=proxy_dict)
+
+ # plug transport into client as self.Connection
+ self.socket.PlugIn(self)
+
+ self._resolve_hostname(
+ hostname=tcp_host,
+ port=tcp_port,
+ on_success=self._try_next_ip)
+
+ def _resolve_hostname(self, hostname, port, on_success):
+ """
+ Wrapper for getaddinfo call
+
+ FIXME: getaddinfo blocks
+ """
+ try:
+ self.ip_addresses = socket.getaddrinfo(hostname, port,
+ socket.AF_UNSPEC, socket.SOCK_STREAM)
+ except socket.gaierror, (errnum, errstr):
+ self.disconnect(message='Lookup failure for %s:%s, hostname: %s - %s' %
+ (self.Server, self.Port, hostname, errstr))
+ else:
+ on_success()
+
+ def _try_next_ip(self, err_message=None):
+ """
+ Iterate over IP addresses tries to connect to it
+ """
+ if err_message:
+ log.debug('While looping over DNS A records: %s' % err_message)
+ if self.ip_addresses == []:
+ msg = 'Run out of hosts for name %s:%s.' % (self.Server, self.Port)
+ msg = msg + ' Error for last IP: %s' % err_message
+ self.disconnect(msg)
+ else:
+ self.current_ip = self.ip_addresses.pop(0)
+ self.socket.connect(
+ conn_5tuple=self.current_ip,
+ on_connect=lambda: self._xmpp_connect(),
+ on_connect_failure=self._try_next_ip)
+
+ def incoming_stream_version(self):
+ """
+ Get version of xml stream
+ """
+ if 'version' in self.Dispatcher.Stream._document_attrs:
+ return self.Dispatcher.Stream._document_attrs['version']
+ else:
+ return None
+
+ def _xmpp_connect(self, socket_type=None):
+ """
+ Start XMPP connecting process - open the XML stream. Is called after TCP
+ connection is established or after switch to TLS when successfully
+ negotiated with <starttls>.
+ """
+ # socket_type contains info which transport connection was established
+ if not socket_type:
+ if self.Connection.ssl_lib:
+ # When ssl_lib is set we connected via SSL
+ socket_type = 'ssl'
+ else:
+ # PLAIN is default
+ socket_type = 'plain'
+ self.connected = socket_type
+ self._xmpp_connect_machine()
+
+ def _xmpp_connect_machine(self, mode=None, data=None):
+ """
+ Finite automaton taking care of stream opening and features tag handling.
+ Calls _on_stream_start when stream is started, and disconnect() on
+ failure.
+ """
+ log.info('-------------xmpp_connect_machine() >> mode: %s, data: %s...' %
+ (mode, str(data)[:20]))
+
+ def on_next_receive(mode):
+ """
+ Set desired on_receive callback on transport based on the state of
+ connect_machine.
+ """
+ log.info('setting %s on next receive' % mode)
+ if mode is None:
+ self.onreceive(None) # switch to Dispatcher.ProcessNonBlocking
+ else:
+ self.onreceive(lambda _data:self._xmpp_connect_machine(mode, _data))
+
+ if not mode:
+ # starting state
+ if self.__dict__.has_key('Dispatcher'):
+ self.Dispatcher.PlugOut()
+ self.got_features = False
+ dispatcher_nb.Dispatcher.get_instance().PlugIn(self)
+ on_next_receive('RECEIVE_DOCUMENT_ATTRIBUTES')
+
+ elif mode == 'FAILURE':
+ self.disconnect('During XMPP connect: %s' % data)
+
+ elif mode == 'RECEIVE_DOCUMENT_ATTRIBUTES':
+ if data:
+ self.Dispatcher.ProcessNonBlocking(data)
+ self.ip_addresses = []
+ if not hasattr(self, 'Dispatcher') or \
+ self.Dispatcher.Stream._document_attrs is None:
+ self._xmpp_connect_machine(
+ mode='FAILURE',
+ data='Error on stream open')
+ return
+
+ # if terminating stanza was received after init request then client gets
+ # disconnected from bosh transport plugin and we have to end the stream
+ # negotiating process straight away.
+ # fixes #4657
+ if not self.connected: return
+
+ if self.incoming_stream_version() == '1.0':
+ if not self.got_features:
+ on_next_receive('RECEIVE_STREAM_FEATURES')
+ else:
+ log.info('got STREAM FEATURES in first recv')
+ self._xmpp_connect_machine(mode='STREAM_STARTED')
+ else:
+ log.info('incoming stream version less than 1.0')
+ self._xmpp_connect_machine(mode='STREAM_STARTED')
+
+ elif mode == 'RECEIVE_STREAM_FEATURES':
+ if data:
+ # sometimes <features> are received together with document
+ # attributes and sometimes on next receive...
+ self.Dispatcher.ProcessNonBlocking(data)
+ if not self.got_features:
+ self._xmpp_connect_machine(
+ mode='FAILURE',
+ data='Missing <features> in 1.0 stream')
+ else:
+ log.info('got STREAM FEATURES in second recv')
+ self._xmpp_connect_machine(mode='STREAM_STARTED')
+
+ elif mode == 'STREAM_STARTED':
+ self._on_stream_start()
+
+ def _on_stream_start(self):
+ """
+ Called after XMPP stream is opened. TLS negotiation may follow if
+ supported and desired.
+ """
+ self.stream_started = True
+ if not hasattr(self, 'onreceive'):
+ # we may already have been disconnected
+ return
+ self.onreceive(None)
+
+ if self.connected == 'plain':
+ if self.desired_security == 'plain':
+ # if we want and have plain connection, we're done now
+ self._on_connect()
+ else:
+ # try to negotiate TLS
+ if self.incoming_stream_version() != '1.0':
+ # if stream version is less than 1.0, we can't do more
+ log.info('While connecting with type = "tls": stream version ' +
+ 'is less than 1.0')
+ self._on_connect()
+ return
+ if self.Dispatcher.Stream.features.getTag('starttls'):
+ # Server advertises TLS support, start negotiation
+ self.stream_started = False
+ log.info('TLS supported by remote server. Requesting TLS start.')
+ self._tls_negotiation_handler()
+ else:
+ log.info('While connecting with type = "tls": TLS unsupported ' +
+ 'by remote server')
+ self._on_connect()
+
+ elif self.connected in ['ssl', 'tls']:
+ self._on_connect()
+ else:
+ assert False, 'Stream opened for unsupported connection'
+
+ def _tls_negotiation_handler(self, con=None, tag=None):
+ """
+ Take care of TLS negotioation with <starttls>
+ """
+ log.info('-------------tls_negotiaton_handler() >> tag: %s' % tag)
+ if not con and not tag:
+ # starting state when we send the <starttls>
+ self.RegisterHandlerOnce('proceed', self._tls_negotiation_handler,
+ xmlns=NS_TLS)
+ self.RegisterHandlerOnce('failure', self._tls_negotiation_handler,
+ xmlns=NS_TLS)
+ self.send('<starttls xmlns="%s"/>' % NS_TLS)
+ else:
+ # we got <proceed> or <failure>
+ if tag.getNamespace() != NS_TLS:
+ self.disconnect('Unknown namespace: %s' % tag.getNamespace())
+ return
+ tagname = tag.getName()
+ if tagname == 'failure':
+ self.disconnect('TLS <failure> received: %s' % tag)
+ return
+ log.info('Got starttls proceed response. Switching to TLS/SSL...')
+ # following call wouldn't work for BOSH transport but it doesn't matter
+ # because <starttls> negotiation with BOSH is forbidden
+ self.Connection.tls_init(
+ on_succ = lambda: self._xmpp_connect(socket_type='tls'),
+ on_fail = lambda: self.disconnect('error while etabilishing TLS'))
+
+ def _on_connect(self):
+ """
+ Preceed call of on_connect callback
+ """
+ self.onreceive(None)
+ self.on_connect(self, self.connected)
+
+ def raise_event(self, event_type, data):
+ """
+ Raise event to connection instance. DATA_SENT and DATA_RECIVED events
+ are used in XML console to show XMPP traffic
+ """
+ log.info('raising event from transport: :::::%s::::\n_____________\n%s\n_____________\n' % (event_type, data))
+ if hasattr(self, 'Dispatcher'):
+ self.Dispatcher.Event('', event_type, data)
+
+###############################################################################
+### follows code for authentication, resource bind, session and roster download
+###############################################################################
+
+ def auth(self, user, password, resource='', sasl=True, on_auth=None):
+ """
+ Authenticate connnection and bind resource. If resource is not provided
+ random one or library name used
+
+ :param user: XMPP username
+ :param password: XMPP password
+ :param resource: resource that shall be used for auth/connecting
+ :param sasl: Boolean indicating if SASL shall be used. (default: True)
+ :param on_auth: Callback, called after auth. On auth failure, argument
+ is None.
+ """
+ self._User, self._Password = user, password
+ self._Resource, self._sasl = resource, sasl
+ self.on_auth = on_auth
+ self._on_doc_attrs()
+ return
+
+ def _on_old_auth(self, res):
+ """
+ Callback used by NON-SASL auth. On auth failure, res is None
+ """
+ if res:
+ self.connected += '+old_auth'
+ self.on_auth(self, 'old_auth')
+ else:
+ self.on_auth(self, None)
+
+ def _on_sasl_auth(self, res):
+ """
+ Used internally. On auth failure, res is None
+ """
+ self.onreceive(None)
+ if res:
+ self.connected += '+sasl'
+ self.on_auth(self, 'sasl')
+ else:
+ self.on_auth(self, None)
+
+ def _on_doc_attrs(self):
+ """
+ Plug authentication objects and start auth
+ """
+ if self._sasl:
+ auth_nb.SASL.get_instance(self._User, self._Password,
+ self._on_start_sasl).PlugIn(self)
+ if not hasattr(self, 'SASL'):
+ return
+ if not self._sasl or self.SASL.startsasl == 'not-supported':
+ if not self._Resource:
+ self._Resource = 'xmpppy'
+ auth_nb.NonBlockingNonSASL.get_instance(self._User, self._Password,
+ self._Resource, self._on_old_auth).PlugIn(self)
+ return
+ self.SASL.auth()
+ return True
+
+ def _on_start_sasl(self, data=None):
+ """
+ Callback used by SASL, called on each auth step
+ """
+ if data:
+ self.Dispatcher.ProcessNonBlocking(data)
+ if not 'SASL' in self.__dict__:
+ # SASL is pluged out, possible disconnect
+ return
+ if self.SASL.startsasl == 'in-process':
+ return
+ self.onreceive(None)
+ if self.SASL.startsasl == 'failure':
+ # wrong user/pass, stop auth
+ if 'SASL' in self.__dict__:
+ self.SASL.PlugOut()
+ self.connected = None # FIXME: is this intended? We use ''elsewhere
+ self._on_sasl_auth(None)
+ elif self.SASL.startsasl == 'success':
+ nb_bind = auth_nb.NonBlockingBind.get_instance()
+ sm = self._caller.sm
+ if sm._owner and sm.resumption:
+ nb_bind.resuming = True
+ sm.set_owner(self)
+ self.Dispatcher.sm = sm
+ nb_bind.PlugIn(self)
+ self.on_auth(self, 'sasl')
+ return
+
+ nb_bind.PlugIn(self)
+ self.onreceive(self._on_auth_bind)
+ return True
+
+ def _on_auth_bind(self, data):
+ # FIXME: Why use this callback and not bind directly?
+ if data:
+ self.Dispatcher.ProcessNonBlocking(data)
+ if self.NonBlockingBind.bound is None:
+ return
+ self.NonBlockingBind.NonBlockingBind(self._Resource, self._on_sasl_auth)
+ return True
+
+ def initRoster(self, version=''):
+ """
+ Plug in the roster
+ """
+ if not self.__dict__.has_key('NonBlockingRoster'):
+ return roster_nb.NonBlockingRoster.get_instance(version=version).PlugIn(self)
+
+ def getRoster(self, on_ready=None, force=False):
+ """
+ Return the Roster instance, previously plugging it in and requesting
+ roster from server if needed
+ """
+ if self.__dict__.has_key('NonBlockingRoster'):
+ return self.NonBlockingRoster.getRoster(on_ready, force)
+ return None
+
+ def sendPresence(self, jid=None, typ=None, requestRoster=0):
+ """
+ Send some specific presence state. Can also request roster from server if
+ according agrument is set
+ """
+ if requestRoster:
+ # FIXME: used somewhere?
+ roster_nb.NonBlockingRoster.get_instance().PlugIn(self)
+ self.send(dispatcher_nb.Presence(to=jid, typ=typ))
+
+###############################################################################
+### following methods are moved from blocking client class of xmpppy
+###############################################################################
+
+ def RegisterDisconnectHandler(self, handler):
+ """
+ Register handler that will be called on disconnect
+ """
+ self.disconnect_handlers.append(handler)
+
+ def UnregisterDisconnectHandler(self, handler):
+ """
+ Unregister handler that is called on disconnect
+ """
+ self.disconnect_handlers.remove(handler)
+
+ def DisconnectHandler(self):
+ """
+ Default disconnect handler. Just raises an IOError. If you choosed to use
+ this class in your production client, override this method or at least
+ unregister it.
+ """
+ raise IOError('Disconnected from server.')
+
+ def get_connect_type(self):
+ """
+ Return connection state. F.e.: None / 'tls' / 'plain+non_sasl'
+ """
+ return self.connected
+
+ def get_peerhost(self):
+ """
+ Gets the ip address of the account, from which is made connection to the
+ server (e.g. IP and port of socket)
+
+ We will create listening socket on the same ip
+ """
+ # FIXME: tuple (ip, port) is expected (and checked for) but port num is
+ # useless
+ return self.socket.peerhost
diff --git a/nbxmpp/dispatcher_nb.py b/nbxmpp/dispatcher_nb.py
new file mode 100644
index 0000000..c29722d
--- /dev/null
+++ b/nbxmpp/dispatcher_nb.py
@@ -0,0 +1,636 @@
+## dispatcher_nb.py
+## based on dispatcher.py
+##
+## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov
+## modified by Dimitur Kirov <dkirov@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+
+"""
+Main xmpp decision making logic. Provides library with methods to assign
+different handlers to different XMPP stanzas and namespaces
+"""
+
+import simplexml, sys, locale
+import re
+from xml.parsers.expat import ExpatError
+from plugin import PlugIn
+from protocol import (NS_STREAMS, NS_XMPP_STREAMS, NS_HTTP_BIND, Iq, Presence,
+ Message, Protocol, Node, Error, ERR_FEATURE_NOT_IMPLEMENTED, StreamError)
+import logging
+log = logging.getLogger('nbxmpp.dispatcher_nb')
+
+#: default timeout to wait for response for our id
+DEFAULT_TIMEOUT_SECONDS = 25
+outgoingID = 0
+
+XML_DECLARATION = '<?xml version=\'1.0\'?>'
+
+# FIXME: ugly
+class Dispatcher():
+ """
+ Why is this here - I needed to redefine Dispatcher for BOSH and easiest way
+ was to inherit original Dispatcher (now renamed to XMPPDispatcher). Trouble
+ is that reference used to access dispatcher instance is in Client attribute
+ named by __class__.__name__ of the dispatcher instance .. long story short:
+
+ I wrote following to avoid changing each client.Dispatcher.whatever() in xmpp
+
+ If having two kinds of dispatcher will go well, I will rewrite the dispatcher
+ references in other scripts
+ """
+
+ def PlugIn(self, client_obj, after_SASL=False, old_features=None):
+ if client_obj.protocol_type == 'XMPP':
+ XMPPDispatcher().PlugIn(client_obj)
+ elif client_obj.protocol_type == 'BOSH':
+ BOSHDispatcher().PlugIn(client_obj, after_SASL, old_features)
+ else:
+ assert False # should never be reached
+
+ @classmethod
+ def get_instance(cls, *args, **kwargs):
+ """
+ Factory Method for object creation
+
+ Use this instead of directly initializing the class in order to make
+ unit testing much easier.
+ """
+ return cls(*args, **kwargs)
+
+
+class XMPPDispatcher(PlugIn):
+ """
+ Handles XMPP stream and is the first who takes control over a fresh stanza
+
+ Is plugged into NonBlockingClient but can be replugged to restart handled
+ stream headers (used by SASL f.e.).
+ """
+
+ def __init__(self):
+ PlugIn.__init__(self)
+ self.handlers = {}
+ self._expected = {}
+ self._defaultHandler = None
+ self._pendingExceptions = []
+ self._eventHandler = None
+ self._cycleHandlers = []
+ self._exported_methods=[self.RegisterHandler, self.RegisterDefaultHandler,
+ self.RegisterEventHandler, self.UnregisterCycleHandler,
+ self.RegisterCycleHandler, self.RegisterHandlerOnce,
+ self.UnregisterHandler, self.RegisterProtocol,
+ self.SendAndWaitForResponse, self.SendAndCallForResponse,
+ self.getAnID, self.Event, self.send]
+
+ # Let the dispatcher know if there is support for stream management
+ self.sm = None
+
+ # \ufddo -> \ufdef range
+ c = u'\ufdd0'
+ r = c.encode('utf8')
+ while (c < u'\ufdef'):
+ c = unichr(ord(c) + 1)
+ r += '|' + c.encode('utf8')
+
+ # \ufffe-\uffff, \u1fffe-\u1ffff, ..., \u10fffe-\u10ffff
+ c = u'\ufffe'
+ r += '|' + c.encode('utf8')
+ r += '|' + unichr(ord(c) + 1).encode('utf8')
+ while (c < u'\U0010fffe'):
+ c = unichr(ord(c) + 0x10000)
+ r += '|' + c.encode('utf8')
+ r += '|' + unichr(ord(c) + 1).encode('utf8')
+
+ self.invalid_chars_re = re.compile(r)
+
+ def getAnID(self):
+ global outgoingID
+ outgoingID += 1
+ return repr(outgoingID)
+
+ def dumpHandlers(self):
+ """
+ Return set of user-registered callbacks in it's internal format. Used
+ within the library to carry user handlers set over Dispatcher replugins
+ """
+ return self.handlers
+
+ def restoreHandlers(self, handlers):
+ """
+ Restore user-registered callbacks structure from dump previously obtained
+ via dumpHandlers. Used within the library to carry user handlers set over
+ Dispatcher replugins.
+ """
+ self.handlers = handlers
+
+ def _init(self):
+ """
+ Register default namespaces/protocols/handlers. Used internally
+ """
+ # FIXME: inject dependencies, do not rely that they are defined by our
+ # owner
+ self.RegisterNamespace('unknown')
+ self.RegisterNamespace(NS_STREAMS)
+ self.RegisterNamespace(self._owner.defaultNamespace)
+ self.RegisterProtocol('iq', Iq)
+ self.RegisterProtocol('presence', Presence)
+ self.RegisterProtocol('message', Message)
+ self.RegisterDefaultHandler(self.returnStanzaHandler)
+ self.RegisterEventHandler(self._owner._caller._event_dispatcher)
+ self.on_responses = {}
+
+ def plugin(self, owner):
+ """
+ Plug the Dispatcher instance into Client class instance and send initial
+ stream header. Used internally
+ """
+ self._init()
+ self._owner.lastErrNode = None
+ self._owner.lastErr = None
+ self._owner.lastErrCode = None
+ if hasattr(self._owner, 'StreamInit'):
+ self._owner.StreamInit()
+ else:
+ self.StreamInit()
+
+ def plugout(self):
+ """
+ Prepare instance to be destructed
+ """
+ self.Stream.dispatch = None
+ self.Stream.features = None
+ self.Stream.destroy()
+ self._owner = None
+ self.Stream = None
+
+ def StreamInit(self):
+ """
+ Send an initial stream header
+ """
+ self._owner.Connection.sendqueue = []
+ self.Stream = simplexml.NodeBuilder()
+ self.Stream.dispatch = self.dispatch
+ self.Stream._dispatch_depth = 2
+ self.Stream.stream_header_received = self._check_stream_start
+ self.Stream.features = None
+ self._metastream = Node('stream:stream')
+ self._metastream.setNamespace(self._owner.Namespace)
+ self._metastream.setAttr('version', '1.0')
+ self._metastream.setAttr('xmlns:stream', NS_STREAMS)
+ self._metastream.setAttr('to', self._owner.Server)
+ if locale.getdefaultlocale()[0]:
+ self._metastream.setAttr('xml:lang',
+ locale.getdefaultlocale()[0].split('_')[0])
+ self._owner.send("%s%s>" % (XML_DECLARATION, str(self._metastream)[:-2]))
+
+ def _check_stream_start(self, ns, tag, attrs):
+ if ns != NS_STREAMS or tag!='stream':
+ raise ValueError('Incorrect stream start: (%s,%s). Terminating.'
+ % (tag, ns))
+
+ def replace_non_character(self, data):
+ return re.sub(self.invalid_chars_re, u'\ufffd'.encode('utf-8'), data)
+
+ def ProcessNonBlocking(self, data):
+ """
+ Check incoming stream for data waiting
+
+ :param data: data received from transports/IO sockets
+ :return:
+ 1) length of processed data if some data were processed;
+ 2) '0' string if no data were processed but link is alive;
+ 3) 0 (zero) if underlying connection is closed.
+ """
+ # FIXME:
+ # When an error occurs we disconnect the transport directly. Client's
+ # disconnect method will never be called.
+ # Is this intended?
+ # also look at transports start_disconnect()
+ data = self.replace_non_character(data)
+ for handler in self._cycleHandlers:
+ handler(self)
+ if len(self._pendingExceptions) > 0:
+ _pendingException = self._pendingExceptions.pop()
+ raise _pendingException[0], _pendingException[1], _pendingException[2]
+ try:
+ self.Stream.Parse(data)
+ # end stream:stream tag received
+ if self.Stream and self.Stream.has_received_endtag():
+ self._owner.disconnect(self.Stream.streamError)
+ return 0
+ except ExpatError:
+ log.error('Invalid XML received from server. Forcing disconnect.')
+ self._owner.Connection.disconnect()
+ return 0
+ except ValueError, e:
+ log.debug('ValueError: %s' % str(e))
+ self._owner.Connection.pollend()
+ return 0
+ if len(self._pendingExceptions) > 0:
+ _pendingException = self._pendingExceptions.pop()
+ raise _pendingException[0], _pendingException[1], _pendingException[2]
+ if len(data) == 0:
+ return '0'
+ return len(data)
+
+ def RegisterNamespace(self, xmlns, order='info'):
+ """
+ Create internal structures for newly registered namespace
+
+ You can register handlers for this namespace afterwards. By default
+ one namespace is already registered
+ (jabber:client or jabber:component:accept depending on context.
+ """
+ log.debug('Registering namespace "%s"' % xmlns)
+ self.handlers[xmlns] = {}
+ self.RegisterProtocol('unknown', Protocol, xmlns=xmlns)
+ self.RegisterProtocol('default', Protocol, xmlns=xmlns)
+
+ def RegisterProtocol(self, tag_name, Proto, xmlns=None, order='info'):
+ """
+ Used to declare some top-level stanza name to dispatcher
+
+ Needed to start registering handlers for such stanzas. Iq, message and
+ presence protocols are registered by default.
+ """
+ if not xmlns:
+ xmlns=self._owner.defaultNamespace
+ log.debug('Registering protocol "%s" as %s(%s)' %(tag_name, Proto, xmlns))
+ self.handlers[xmlns][tag_name] = {type:Proto, 'default':[]}
+
+ def RegisterNamespaceHandler(self, xmlns, handler, typ='', ns='',
+ makefirst=0, system=0):
+ """
+ Register handler for processing all stanzas for specified namespace
+ """
+ self.RegisterHandler('default', handler, typ, ns, xmlns, makefirst,
+ system)
+
+ def RegisterHandler(self, name, handler, typ='', ns='', xmlns=None,
+ makefirst=False, system=False):
+ """
+ Register user callback as stanzas handler of declared type
+
+ Callback arguments:
+ dispatcher instance (for replying), incoming return of previous handlers.
+ The callback must raise xmpp.NodeProcessed just before return if it wants
+ to prevent other callbacks to be called with the same stanza as argument
+ _and_, more importantly library from returning stanza to sender with error set.
+
+ :param name: name of stanza. F.e. "iq".
+ :param handler: user callback.
+ :param typ: value of stanza's "type" attribute. If not specified any
+ value will match
+ :param ns: namespace of child that stanza must contain.
+ :param makefirst: insert handler in the beginning of handlers list instead
+ of adding it to the end. Note that more common handlers i.e. w/o "typ"
+ and " will be called first nevertheless.
+ :param system: call handler even if NodeProcessed Exception were raised
+ already.
+ """
+ if not xmlns:
+ xmlns=self._owner.defaultNamespace
+ log.debug('Registering handler %s for "%s" type->%s ns->%s(%s)' %
+ (handler, name, typ, ns, xmlns))
+ if not typ and not ns:
+ typ='default'
+ if xmlns not in self.handlers:
+ self.RegisterNamespace(xmlns, 'warn')
+ if name not in self.handlers[xmlns]:
+ self.RegisterProtocol(name, Protocol, xmlns, 'warn')
+ if typ+ns not in self.handlers[xmlns][name]:
+ self.handlers[xmlns][name][typ+ns]=[]
+ if makefirst:
+ self.handlers[xmlns][name][typ+ns].insert(0, {'func':handler,
+ 'system':system})
+ else:
+ self.handlers[xmlns][name][typ+ns].append({'func':handler,
+ 'system':system})
+
+ def RegisterHandlerOnce(self, name, handler, typ='', ns='', xmlns=None,
+ makefirst=0, system=0):
+ """
+ Unregister handler after first call (not implemented yet)
+ """
+ # FIXME Drop or implement
+ if not xmlns:
+ xmlns = self._owner.defaultNamespace
+ self.RegisterHandler(name, handler, typ, ns, xmlns, makefirst, system)
+
+ def UnregisterHandler(self, name, handler, typ='', ns='', xmlns=None):
+ """
+ Unregister handler. "typ" and "ns" must be specified exactly the same as
+ with registering.
+ """
+ if not xmlns:
+ xmlns = self._owner.defaultNamespace
+ if not typ and not ns:
+ typ='default'
+ if xmlns not in self.handlers:
+ return
+ if name not in self.handlers[xmlns]:
+ return
+ if typ+ns not in self.handlers[xmlns][name]:
+ return
+ for pack in self.handlers[xmlns][name][typ+ns]:
+ if pack['func'] == handler:
+ try:
+ self.handlers[xmlns][name][typ+ns].remove(pack)
+ except ValueError:
+ pass
+
+ def RegisterDefaultHandler(self, handler):
+ """
+ Specify the handler that will be used if no NodeProcessed exception were
+ raised. This is returnStanzaHandler by default.
+ """
+ self._defaultHandler = handler
+
+ def RegisterEventHandler(self, handler):
+ """
+ Register handler that will process events. F.e. "FILERECEIVED" event. See
+ common/connection: _event_dispatcher()
+ """
+ self._eventHandler = handler
+
+ def returnStanzaHandler(self, conn, stanza):
+ """
+ Return stanza back to the sender with <feature-not-implemented/> error
+ set
+ """
+ if stanza.getType() in ('get', 'set'):
+ conn._owner.send(Error(stanza, ERR_FEATURE_NOT_IMPLEMENTED))
+
+ def RegisterCycleHandler(self, handler):
+ """
+ Register handler that will be called on every Dispatcher.Process() call
+ """
+ if handler not in self._cycleHandlers:
+ self._cycleHandlers.append(handler)
+
+ def UnregisterCycleHandler(self, handler):
+ """
+ Unregister handler that will is called on every Dispatcher.Process() call
+ """
+ if handler in self._cycleHandlers:
+ self._cycleHandlers.remove(handler)
+
+ def Event(self, realm, event, data):
+ """
+ Raise some event
+
+ :param realm: scope of event. Usually a namespace.
+ :param event: the event itself. F.e. "SUCCESSFUL SEND".
+ :param data: data that comes along with event. Depends on event.
+ """
+ if self._eventHandler:
+ self._eventHandler(realm, event, data)
+ else:
+ log.warning('Received unhandled event: %s' % event)
+
+ def dispatch(self, stanza, session=None, direct=0):
+ """
+ Main procedure that performs XMPP stanza recognition and calling
+ apppropriate handlers for it. Called by simplexml
+ """
+ # FIXME: Where do we set session and direct. Why? What are those intended
+ # to do?
+
+ #log.info('dispatch called: stanza = %s, session = %s, direct= %s'
+ # % (stanza, session, direct))
+ if not session:
+ session = self
+ session.Stream._mini_dom = None
+ name = stanza.getName()
+
+ if name == 'features':
+ self._owner.got_features = True
+ session.Stream.features = stanza
+
+ xmlns = stanza.getNamespace()
+
+ # log.info('in dispatch, getting ns for %s, and the ns is %s'
+ # % (stanza, xmlns))
+ if xmlns not in self.handlers:
+ log.warn("Unknown namespace: " + xmlns)
+ xmlns = 'unknown'
+ # features stanza has been handled before
+ if name not in self.handlers[xmlns]:
+ if name != 'features':
+ log.warn("Unknown stanza: " + name)
+ else:
+ log.debug("Got %s/%s stanza" % (xmlns, name))
+ name='unknown'
+ else:
+ log.debug("Got %s/%s stanza" % (xmlns, name))
+
+ if stanza.__class__.__name__ == 'Node':
+ # FIXME: this cannot work
+ stanza=self.handlers[xmlns][name][type](node=stanza)
+
+ typ = stanza.getType()
+ if not typ:
+ typ = ''
+ stanza.props = stanza.getProperties()
+ ID = stanza.getID()
+
+ # If server supports stream management
+ if self.sm and self.sm.enabled and (stanza.getName() != 'r' and
+ stanza.getName() != 'a' and stanza.getName() != 'enabled' and
+ stanza.getName() != 'resumed'):
+ # increments the number of stanzas that has been handled
+ self.sm.in_h = self.sm.in_h + 1
+ list_ = ['default'] # we will use all handlers:
+ if typ in self.handlers[xmlns][name]:
+ list_.append(typ) # from very common...
+ for prop in stanza.props:
+ if prop in self.handlers[xmlns][name]:
+ list_.append(prop)
+ if typ and typ+prop in self.handlers[xmlns][name]:
+ list_.append(typ+prop) # ...to very particular
+
+ chain = self.handlers[xmlns]['default']['default']
+ for key in list_:
+ if key:
+ chain = chain + self.handlers[xmlns][name][key]
+
+ if ID in session._expected:
+ user = 0
+ if isinstance(session._expected[ID], tuple):
+ cb, args = session._expected[ID]
+ log.debug("Expected stanza arrived. Callback %s(%s) found!" %
+ (cb, args))
+ try:
+ cb(session,stanza,**args)
+ except Exception, typ:
+ if typ.__class__.__name__ != 'NodeProcessed':
+ raise
+ else:
+ log.debug("Expected stanza arrived!")
+ session._expected[ID] = stanza
+ else:
+ user = 1
+ for handler in chain:
+ if user or handler['system']:
+ try:
+ handler['func'](session, stanza)
+ except Exception, typ:
+ if typ.__class__.__name__ != 'NodeProcessed':
+ self._pendingExceptions.insert(0, sys.exc_info())
+ return
+ user=0
+ if user and self._defaultHandler:
+ self._defaultHandler(session, stanza)
+
+ def _WaitForData(self, data):
+ """
+ Internal wrapper around ProcessNonBlocking. Will check for
+ """
+ if data is None:
+ return
+ res = self.ProcessNonBlocking(data)
+ # 0 result indicates that we have closed the connection, e.g.
+ # we have released dispatcher, so self._owner has no methods
+ if not res:
+ return
+ for (_id, _iq) in self._expected.items():
+ if _iq is None:
+ # If the expected Stanza would have arrived, ProcessNonBlocking
+ # would have placed the reply stanza in there
+ continue
+ if _id in self.on_responses:
+ if len(self._expected) == 1:
+ self._owner.onreceive(None)
+ resp, args = self.on_responses[_id]
+ del self.on_responses[_id]
+ if args is None:
+ resp(_iq)
+ else:
+ resp(self._owner, _iq, **args)
+ del self._expected[_id]
+
+ def SendAndWaitForResponse(self, stanza, timeout=None, func=None, args=None):
+ """
+ Send stanza and wait for recipient's response to it. Will call transports
+ on_timeout callback if response is not retrieved in time
+
+ Be aware: Only timeout of latest call of SendAndWait is active.
+ """
+ if timeout is None:
+ timeout = DEFAULT_TIMEOUT_SECONDS
+ _waitid = self.send(stanza)
+ if func:
+ self.on_responses[_waitid] = (func, args)
+ if timeout:
+ self._owner.set_timeout(timeout)
+ self._owner.onreceive(self._WaitForData)
+ self._expected[_waitid] = None
+ return _waitid
+
+ def SendAndCallForResponse(self, stanza, func=None, args=None):
+ """
+ Put stanza on the wire and call back when recipient replies. Additional
+ callback arguments can be specified in args
+ """
+ self.SendAndWaitForResponse(stanza, 0, func, args)
+
+ def send(self, stanza, now=False):
+ """
+ Wrap transports send method when plugged into NonBlockingClient. Makes
+ sure stanzas get ID and from tag.
+ """
+ ID = None
+ if type(stanza) not in [type(''), type(u'')]:
+ if isinstance(stanza, Protocol):
+ ID = stanza.getID()
+ if ID is None:
+ stanza.setID(self.getAnID())
+ ID = stanza.getID()
+ if self._owner._registered_name and not stanza.getAttr('from'):
+ stanza.setAttr('from', self._owner._registered_name)
+
+ # If no ID then it is a whitespace
+ if self.sm and self.sm.enabled and ID:
+ self.sm.uqueue.append(stanza)
+ self.sm.out_h = self.sm.out_h + 1
+ if len(self.sm.uqueue) > self.sm.max_queue:
+ self.sm.request_ack()
+
+ self._owner.Connection.send(stanza, now)
+ return ID
+
+
+class BOSHDispatcher(XMPPDispatcher):
+
+ def PlugIn(self, owner, after_SASL=False, old_features=None):
+ self.old_features = old_features
+ self.after_SASL = after_SASL
+ XMPPDispatcher.PlugIn(self, owner)
+
+ def StreamInit(self):
+ """
+ Send an initial stream header
+ """
+ self.Stream = simplexml.NodeBuilder()
+ self.Stream.dispatch = self.dispatch
+ self.Stream._dispatch_depth = 2
+ self.Stream.stream_header_received = self._check_stream_start
+ self.Stream.features = self.old_features
+
+ self._metastream = Node('stream:stream')
+ self._metastream.setNamespace(self._owner.Namespace)
+ self._metastream.setAttr('version', '1.0')
+ self._metastream.setAttr('xmlns:stream', NS_STREAMS)
+ self._metastream.setAttr('to', self._owner.Server)
+ if locale.getdefaultlocale()[0]:
+ self._metastream.setAttr('xml:lang',
+ locale.getdefaultlocale()[0].split('_')[0])
+
+ self.restart = True
+ self._owner.Connection.send_init(after_SASL=self.after_SASL)
+
+ def StreamTerminate(self):
+ """
+ Send a stream terminator
+ """
+ self._owner.Connection.send_terminator()
+
+ def ProcessNonBlocking(self, data=None):
+ if self.restart:
+ fromstream = self._metastream
+ fromstream.setAttr('from', fromstream.getAttr('to'))
+ fromstream.delAttr('to')
+ data = '%s%s>%s' % (XML_DECLARATION, str(fromstream)[:-2], data)
+ self.restart = False
+ return XMPPDispatcher.ProcessNonBlocking(self, data)
+
+ def dispatch(self, stanza, session=None, direct=0):
+ if stanza.getName() == 'body' and stanza.getNamespace() == NS_HTTP_BIND:
+
+ stanza_attrs = stanza.getAttrs()
+ if 'authid' in stanza_attrs:
+ # should be only in init response
+ # auth module expects id of stream in document attributes
+ self.Stream._document_attrs['id'] = stanza_attrs['authid']
+ self._owner.Connection.handle_body_attrs(stanza_attrs)
+
+ children = stanza.getChildren()
+ if children:
+ for child in children:
+ # if child doesn't have any ns specified, simplexml (or expat)
+ # thinks it's of parent's (BOSH body) namespace, so we have to
+ # rewrite it to jabber:client
+ if child.getNamespace() == NS_HTTP_BIND:
+ child.setNamespace(self._owner.defaultNamespace)
+ XMPPDispatcher.dispatch(self, child, session, direct)
+ else:
+ XMPPDispatcher.dispatch(self, stanza, session, direct)
diff --git a/nbxmpp/features_nb.py b/nbxmpp/features_nb.py
new file mode 100644
index 0000000..9dd3908
--- /dev/null
+++ b/nbxmpp/features_nb.py
@@ -0,0 +1,218 @@
+## features.py
+##
+## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov
+## Copyright (C) 2007 Julien Pivotto <roidelapluie@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+# $Id: features.py,v 1.22 2005/09/30 20:13:04 mikealbon Exp $
+
+"""
+Different stuff that wasn't worth separating it into modules
+(Registration, Privacy Lists, ...)
+"""
+
+from protocol import NS_REGISTER, NS_PRIVACY, NS_DATA, Iq, isResultNode, Node
+
+def _on_default_response(disp, iq, cb):
+ def _on_response(resp):
+ if isResultNode(resp):
+ if cb:
+ cb(True)
+ elif cb:
+ cb(False)
+ disp.SendAndCallForResponse(iq, _on_response)
+
+###############################################################################
+### Registration
+###############################################################################
+
+REGISTER_DATA_RECEIVED = 'REGISTER DATA RECEIVED'
+
+def getRegInfo(disp, host, info={}, sync=True):
+ """
+ Get registration form from remote host. Info dict can be prefilled
+ :param disp: plugged dispatcher instance
+ :param info: dict, like {'username':'joey'}.
+
+ See JEP-0077 for details.
+ """
+ iq=Iq('get', NS_REGISTER, to=host)
+ for i in info.keys():
+ iq.setTagData(i, info[i])
+ if sync:
+ disp.SendAndCallForResponse(iq, lambda resp:
+ _ReceivedRegInfo(disp.Dispatcher, resp, host))
+ else:
+ disp.SendAndCallForResponse(iq, _ReceivedRegInfo, {'agent': host })
+
+def _ReceivedRegInfo(con, resp, agent):
+ Iq('get', NS_REGISTER, to=agent)
+ if not isResultNode(resp):
+ error_msg = resp.getErrorMsg()
+ con.Event(NS_REGISTER, REGISTER_DATA_RECEIVED, (agent, None, False, error_msg, ''))
+ return
+ tag=resp.getTag('query', namespace=NS_REGISTER)
+ if not tag:
+ error_msg = resp.getErrorMsg()
+ con.Event(NS_REGISTER, REGISTER_DATA_RECEIVED, (agent, None, False, error_msg, ''))
+ return
+ df=tag.getTag('x', namespace=NS_DATA)
+ if df:
+ con.Event(NS_REGISTER, REGISTER_DATA_RECEIVED, (agent, df, True, '',
+ tag))
+ return
+ df={}
+ for i in resp.getQueryPayload():
+ if not isinstance(i, Node):
+ continue
+ df[i.getName()] = i.getData()
+ con.Event(NS_REGISTER, REGISTER_DATA_RECEIVED, (agent, df, False, '', ''))
+
+def register(disp, host, info, cb, args=None):
+ """
+ Perform registration on remote server with provided info
+
+ If registration fails you can get additional info from the dispatcher's
+ owner attributes lastErrNode, lastErr and lastErrCode.
+ """
+ iq=Iq('set', NS_REGISTER, to=host)
+ if not isinstance(info, dict):
+ info=info.asDict()
+ for i in info.keys():
+ iq.setTag('query').setTagData(i, info[i])
+ disp.SendAndCallForResponse(iq, cb, args)
+
+def unregister(disp, host, cb):
+ """
+ Unregisters with host (permanently removes account). Returns true on success
+ """
+ iq = Iq('set', NS_REGISTER, to=host, payload=[Node('remove')])
+ _on_default_response(disp, iq, cb)
+
+def changePasswordTo(disp, newpassword, host=None, cb = None):
+ """
+ Changes password on specified or current (if not specified) server. Returns
+ true on success.
+ """
+ if not host:
+ host = disp._owner.Server
+ iq = Iq('set', NS_REGISTER, to=host, payload=[Node('username',
+ payload=[disp._owner.Server]), Node('password', payload=[newpassword])])
+ _on_default_response(disp, iq, cb)
+
+###############################################################################
+### Privacy List
+###############################################################################
+
+PL_TYPE_JID = 'jid'
+PL_TYPE_GROUP = 'group'
+PL_TYPE_SUBC = 'subscription'
+PL_ACT_ALLOW = 'allow'
+PL_ACT_DENY = 'deny'
+
+PRIVACY_LISTS_RECEIVED = 'PRIVACY LISTS RECEIVED'
+PRIVACY_LIST_RECEIVED = 'PRIVACY LIST RECEIVED'
+PRIVACY_LISTS_ACTIVE_DEFAULT = 'PRIVACY LISTS ACTIVE DEFAULT'
+
+def getPrivacyLists(disp):
+ """
+ Request privacy lists from connected server. Returns dictionary of existing
+ lists on success.
+ """
+ iq = Iq('get', NS_PRIVACY)
+ def _on_response(resp):
+ dict_ = {'lists': []}
+ if not isResultNode(resp):
+ disp.Event(NS_PRIVACY, PRIVACY_LISTS_RECEIVED, (False))
+ return
+ for list_ in resp.getQueryPayload():
+ if list_.getName()=='list':
+ dict_['lists'].append(list_.getAttr('name'))
+ else:
+ dict_[list_.getName()]=list_.getAttr('name')
+ disp.Event(NS_PRIVACY, PRIVACY_LISTS_RECEIVED, (dict_))
+ disp.SendAndCallForResponse(iq, _on_response)
+
+def getActiveAndDefaultPrivacyLists(disp):
+ iq = Iq('get', NS_PRIVACY)
+ def _on_response(resp):
+ dict_ = {'active': '', 'default': ''}
+ if not isResultNode(resp):
+ disp.Event(NS_PRIVACY, PRIVACY_LISTS_ACTIVE_DEFAULT, (False))
+ return
+ for list_ in resp.getQueryPayload():
+ if list_.getName() == 'active':
+ dict_['active'] = list_.getAttr('name')
+ elif list_.getName() == 'default':
+ dict_['default'] = list_.getAttr('name')
+ disp.Event(NS_PRIVACY, PRIVACY_LISTS_ACTIVE_DEFAULT, (dict_))
+ disp.SendAndCallForResponse(iq, _on_response)
+
+def getPrivacyList(disp, listname):
+ """
+ Request specific privacy list listname. Returns list of XML nodes (rules)
+ taken from the server responce.
+ """
+ def _on_response(resp):
+ if not isResultNode(resp):
+ disp.Event(NS_PRIVACY, PRIVACY_LIST_RECEIVED, (False))
+ return
+ disp.Event(NS_PRIVACY, PRIVACY_LIST_RECEIVED, (resp))
+ iq = Iq('get', NS_PRIVACY, payload=[Node('list', {'name': listname})])
+ disp.SendAndCallForResponse(iq, _on_response)
+
+def setActivePrivacyList(disp, listname=None, typ='active', cb=None):
+ """
+ Switch privacy list 'listname' to specified type. By default the type is
+ 'active'. Returns true on success.
+ """
+ if listname:
+ attrs={'name':listname}
+ else:
+ attrs={}
+ iq = Iq('set', NS_PRIVACY, payload=[Node(typ, attrs)])
+ _on_default_response(disp, iq, cb)
+
+def setDefaultPrivacyList(disp, listname=None):
+ """
+ Set the default privacy list as 'listname'. Returns true on success
+ """
+ return setActivePrivacyList(disp, listname, 'default')
+
+def setPrivacyList(disp, listname, tags):
+ """
+ Set the ruleset
+
+ 'list' should be the simpleXML node formatted according to RFC 3921
+ (XMPP-IM) I.e. Node('list',{'name':listname},payload=[...]).
+
+ Returns true on success.
+ """
+ iq = Iq('set', NS_PRIVACY, xmlns = '')
+ list_query = iq.getTag('query').setTag('list', {'name': listname})
+ for item in tags:
+ if 'type' in item and 'value' in item:
+ item_tag = list_query.setTag('item', {'action': item['action'],
+ 'order': item['order'], 'type': item['type'],
+ 'value': item['value']})
+ else:
+ item_tag = list_query.setTag('item', {'action': item['action'],
+ 'order': item['order']})
+ if 'child' in item:
+ for child_tag in item['child']:
+ item_tag.setTag(child_tag)
+ _on_default_response(disp, iq, None)
+
+def delPrivacyList(disp, listname, cb=None):
+ ''' Deletes privacy list 'listname'. Returns true on success. '''
+ iq = Iq('set', NS_PRIVACY, payload=[Node('list', {'name':listname})])
+ _on_default_response(disp, iq, cb)
diff --git a/nbxmpp/idlequeue.py b/nbxmpp/idlequeue.py
new file mode 100644
index 0000000..e9ca125
--- /dev/null
+++ b/nbxmpp/idlequeue.py
@@ -0,0 +1,551 @@
+## idlequeue.py
+##
+## Copyright (C) 2006 Dimitur Kirov <dkirov@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+
+"""
+Idlequeues are Gajim's network heartbeat. Transports can be plugged as idle
+objects and be informed about possible IO
+"""
+
+import os
+import select
+import logging
+log = logging.getLogger('nbxmpp.idlequeue')
+
+# needed for get_idleqeue
+try:
+ import gobject
+ HAVE_GOBJECT = True
+except ImportError:
+ HAVE_GOBJECT = False
+
+# needed for idlecommand
+if os.name == 'nt':
+ from subprocess import * # python24 only. we ask this for Windows
+elif os.name == 'posix':
+ import fcntl
+
+FLAG_WRITE = 20 # write only
+FLAG_READ = 19 # read only
+FLAG_READ_WRITE = 23 # read and write
+FLAG_CLOSE = 16 # wait for close
+
+PENDING_READ = 3 # waiting read event
+PENDING_WRITE = 4 # waiting write event
+IS_CLOSED = 16 # channel closed
+
+
+def get_idlequeue():
+ """
+ Get an appropriate idlequeue
+ """
+ if os.name == 'nt':
+ # gobject.io_add_watch does not work on windows
+ return SelectIdleQueue()
+ else:
+ if HAVE_GOBJECT:
+ # Gajim's default Idlequeue
+ return GlibIdleQueue()
+ else:
+ # GUI less implementation
+ return SelectIdleQueue()
+
+
+class IdleObject:
+ """
+ Idle listener interface. Listed methods are called by IdleQueue.
+ """
+
+ def __init__(self):
+ self.fd = -1 #: filedescriptor, must be unique for each IdleObject
+
+ def pollend(self):
+ """
+ Called on stream failure
+ """
+ pass
+
+ def pollin(self):
+ """
+ Called on new read event
+ """
+ pass
+
+ def pollout(self):
+ """
+ Called on new write event (connect in sockets is a pollout)
+ """
+ pass
+
+ def read_timeout(self):
+ """
+ Called when timeout happened
+ """
+ pass
+
+
+class IdleCommand(IdleObject):
+ """
+ Can be subclassed to execute commands asynchronously by the idlequeue.
+ Result will be optained via file descriptor of created pipe
+ """
+
+ def __init__(self, on_result):
+ IdleObject.__init__(self)
+ # how long (sec.) to wait for result ( 0 - forever )
+ # it is a class var, instead of a constant and we can override it.
+ self.commandtimeout = 0
+ # when we have some kind of result (valid, ot not) we call this handler
+ self.result_handler = on_result
+ # if it is True, we can safetely execute the command
+ self.canexecute = True
+ self.idlequeue = None
+ self.result =''
+
+ def set_idlequeue(self, idlequeue):
+ self.idlequeue = idlequeue
+
+ def _return_result(self):
+ if self.result_handler:
+ self.result_handler(self.result)
+ self.result_handler = None
+
+ def _compose_command_args(self):
+ return ['echo', 'da']
+
+ def _compose_command_line(self):
+ """
+ Return one line representation of command and its arguments
+ """
+ return reduce(lambda left, right: left + ' ' + right,
+ self._compose_command_args())
+
+ def wait_child(self):
+ if self.pipe.poll() is None:
+ # result timeout
+ if self.endtime < self.idlequeue.current_time():
+ self._return_result()
+ self.pipe.stdout.close()
+ self.pipe.stdin.close()
+ else:
+ # child is still active, continue to wait
+ self.idlequeue.set_alarm(self.wait_child, 0.1)
+ else:
+ # child has quit
+ self.result = self.pipe.stdout.read()
+ self._return_result()
+ self.pipe.stdout.close()
+ self.pipe.stdin.close()
+
+ def start(self):
+ if not self.canexecute:
+ self.result = ''
+ self._return_result()
+ return
+ if os.name == 'nt':
+ self._start_nt()
+ elif os.name == 'posix':
+ self._start_posix()
+
+ def _start_nt(self):
+ # if program is started from noninteraactive shells stdin is closed and
+ # cannot be forwarded, so we have to keep it open
+ self.pipe = Popen(self._compose_command_args(), stdout=PIPE,
+ bufsize = 1024, shell = True, stderr = STDOUT, stdin = PIPE)
+ if self.commandtimeout >= 0:
+ self.endtime = self.idlequeue.current_time() + self.commandtimeout
+ self.idlequeue.set_alarm(self.wait_child, 0.1)
+
+ def _start_posix(self):
+ self.pipe = os.popen(self._compose_command_line())
+ self.fd = self.pipe.fileno()
+ fcntl.fcntl(self.pipe, fcntl.F_SETFL, os.O_NONBLOCK)
+ self.idlequeue.plug_idle(self, False, True)
+ if self.commandtimeout >= 0:
+ self.idlequeue.set_read_timeout(self.fd, self.commandtimeout)
+
+ def end(self):
+ self.idlequeue.unplug_idle(self.fd)
+ try:
+ self.pipe.close()
+ except:
+ pass
+
+ def pollend(self):
+ self.idlequeue.remove_timeout(self.fd)
+ self.end()
+ self._return_result()
+
+ def pollin(self):
+ try:
+ res = self.pipe.read()
+ except Exception, e:
+ res = ''
+ if res == '':
+ return self.pollend()
+ else:
+ self.result += res
+
+ def read_timeout(self):
+ self.end()
+ self._return_result()
+
+
+class IdleQueue:
+ """
+ IdleQueue provide three distinct time based features. Uses select.poll()
+
+ 1. Alarm timeout: Execute a callback after foo seconds
+ 2. Timeout event: Call read_timeout() of an plugged object if a timeout
+ has been set, but not removed in time.
+ 3. Check file descriptor of plugged objects for read, write and error
+ events
+
+ """
+
+ # (timeout, boolean)
+ # Boolean is True if timeout is specified in seconds, False means miliseconds
+ PROCESS_TIMEOUT = (100, False)
+
+ def __init__(self):
+ self.queue = {}
+
+ # when there is a timeout it executes obj.read_timeout()
+ # timeout is not removed automatically!
+ # {fd1: {timeout1: func1, timeout2: func2}}
+ # timout are unique (timeout1 must be != timeout2)
+ # If func1 is None, read_time function is called
+ self.read_timeouts = {}
+
+ # cb, which are executed after XX sec., alarms are removed automatically
+ self.alarms = {}
+ self._init_idle()
+
+ def _init_idle(self):
+ """
+ Hook method for subclassed. Will be called by __init__
+ """
+ self.selector = select.poll()
+
+ def set_alarm(self, alarm_cb, seconds):
+ """
+ Set up a new alarm. alarm_cb will be called after specified seconds.
+ """
+ alarm_time = self.current_time() + seconds
+ # almost impossible, but in case we have another alarm_cb at this time
+ if alarm_time in self.alarms:
+ self.alarms[alarm_time].append(alarm_cb)
+ else:
+ self.alarms[alarm_time] = [alarm_cb]
+ return alarm_time
+
+ def remove_alarm(self, alarm_cb, alarm_time):
+ """
+ Remove alarm callback alarm_cb scheduled on alarm_time. Returns True if
+ it was removed sucessfully, otherwise False
+ """
+ if not alarm_time in self.alarms:
+ return False
+ i = -1
+ for i in range(len(self.alarms[alarm_time])):
+ # let's not modify the list inside the loop
+ if self.alarms[alarm_time][i] is alarm_cb:
+ break
+ if i != -1:
+ del self.alarms[alarm_time][i]
+ if self.alarms[alarm_time] == []:
+ del self.alarms[alarm_time]
+ return True
+ else:
+ return False
+
+ def remove_timeout(self, fd, timeout=None):
+ """
+ Remove the read timeout
+ """
+ log.info('read timeout removed for fd %s' % fd)
+ if fd in self.read_timeouts:
+ if timeout:
+ if timeout in self.read_timeouts[fd]:
+ del(self.read_timeouts[fd][timeout])
+ if len(self.read_timeouts[fd]) == 0:
+ del(self.read_timeouts[fd])
+ else:
+ del(self.read_timeouts[fd])
+
+ def set_read_timeout(self, fd, seconds, func=None):
+ """
+ Seta a new timeout. If it is not removed after specified seconds,
+ func or obj.read_timeout() will be called
+
+ A filedescriptor fd can have several timeouts.
+ """
+ log_txt = 'read timeout set for fd %s on %s seconds' % (fd, seconds)
+ if func:
+ log_txt += ' with function ' + str(func)
+ log.info(log_txt)
+ timeout = self.current_time() + seconds
+ if fd in self.read_timeouts:
+ self.read_timeouts[fd][timeout] = func
+ else:
+ self.read_timeouts[fd] = {timeout: func}
+
+ def _check_time_events(self):
+ """
+ Execute and remove alarm callbacks and execute func() or read_timeout()
+ for plugged objects if specified time has ellapsed
+ """
+ current_time = self.current_time()
+
+ for fd, timeouts in self.read_timeouts.items():
+ if fd not in self.queue:
+ self.remove_timeout(fd)
+ continue
+ for timeout, func in timeouts.items():
+ if timeout > current_time:
+ continue
+ if func:
+ log.debug('Calling %s for fd %s' % (func, fd))
+ func()
+ else:
+ log.debug('Calling read_timeout for fd %s' % fd)
+ self.queue[fd].read_timeout()
+ self.remove_timeout(fd, timeout)
+
+ times = self.alarms.keys()
+ for alarm_time in times:
+ if alarm_time > current_time:
+ continue
+ if alarm_time in self.alarms:
+ for callback in self.alarms[alarm_time]:
+ callback()
+ if alarm_time in self.alarms:
+ del(self.alarms[alarm_time])
+
+ def plug_idle(self, obj, writable=True, readable=True):
+ """
+ Plug an IdleObject into idlequeue. Filedescriptor fd must be set
+
+ :param obj: the IdleObject
+ :param writable: True if obj has data to sent
+ :param readable: True if obj expects data to be reiceived
+ """
+ if obj.fd == -1:
+ return
+ if obj.fd in self.queue:
+ self.unplug_idle(obj.fd)
+ self.queue[obj.fd] = obj
+ if writable:
+ if not readable:
+ flags = FLAG_WRITE
+ else:
+ flags = FLAG_READ_WRITE
+ else:
+ if readable:
+ flags = FLAG_READ
+ else:
+ # when we paused a FT, we expect only a close event
+ flags = FLAG_CLOSE
+ self._add_idle(obj.fd, flags)
+
+ def _add_idle(self, fd, flags):
+ """
+ Hook method for subclasses, called by plug_idle
+ """
+ self.selector.register(fd, flags)
+
+ def unplug_idle(self, fd):
+ """
+ Remove plugged IdleObject, specified by filedescriptor fd
+ """
+ if fd in self.queue:
+ del(self.queue[fd])
+ self._remove_idle(fd)
+
+ def current_time(self):
+ from time import time
+ return time()
+
+ def _remove_idle(self, fd):
+ """
+ Hook method for subclassed, called by unplug_idle
+ """
+ self.selector.unregister(fd)
+
+ def _process_events(self, fd, flags):
+ obj = self.queue.get(fd)
+ if obj is None:
+ self.unplug_idle(fd)
+ return False
+
+ read_write = False
+ if flags & PENDING_READ:
+ #print 'waiting read on %d, flags are %d' % (fd, flags)
+ obj.pollin()
+ read_write = True
+
+ elif flags & PENDING_WRITE and not flags & IS_CLOSED:
+ obj.pollout()
+ read_write = True
+
+ if flags & IS_CLOSED:
+ # io error, don't expect more events
+ self.remove_timeout(obj.fd)
+ self.unplug_idle(obj.fd)
+ obj.pollend()
+ return False
+
+ if read_write:
+ return True
+ return False
+
+ def process(self):
+ """
+ Process idlequeue. Check for any pending timeout or alarm events. Call
+ IdleObjects on possible and requested read, write and error events on
+ their file descriptors
+
+ Call this in regular intervals.
+ """
+ if not self.queue:
+ # check for timeouts/alert also when there are no active fds
+ self._check_time_events()
+ return True
+ try:
+ waiting_descriptors = self.selector.poll(0)
+ except select.error, e:
+ waiting_descriptors = []
+ if e[0] != 4: # interrupt
+ raise
+ for fd, flags in waiting_descriptors:
+ self._process_events(fd, flags)
+ self._check_time_events()
+ return True
+
+
+class SelectIdleQueue(IdleQueue):
+ """
+ Extends IdleQueue to use select.select() for polling
+
+ This class exisists for the sake of gtk2.8 on windows, which doesn't seem to
+ support io_add_watch properly (yet)
+ """
+
+ def _init_idle(self):
+ """
+ Create a dict, which maps file/pipe/sock descriptor to glib event id
+ """
+ self.read_fds = {}
+ self.write_fds = {}
+ self.error_fds = {}
+
+ def _add_idle(self, fd, flags):
+ """
+ This method is called when we plug a new idle object. Remove descriptor
+ to read/write/error lists, according flags
+ """
+ if flags & 3:
+ self.read_fds[fd] = fd
+ if flags & 4:
+ self.write_fds[fd] = fd
+ self.error_fds[fd] = fd
+
+ def _remove_idle(self, fd):
+ """
+ This method is called when we unplug a new idle object. Remove descriptor
+ from read/write/error lists
+ """
+ if fd in self.read_fds:
+ del(self.read_fds[fd])
+ if fd in self.write_fds:
+ del(self.write_fds[fd])
+ if fd in self.error_fds:
+ del(self.error_fds[fd])
+
+ def process(self):
+ if not self.write_fds and not self.read_fds:
+ self._check_time_events()
+ return True
+ try:
+ waiting_descriptors = select.select(self.read_fds.keys(),
+ self.write_fds.keys(), self.error_fds.keys(), 0)
+ except select.error, e:
+ waiting_descriptors = ((), (), ())
+ if e[0] != 4: # interrupt
+ raise
+ for fd in waiting_descriptors[0]:
+ q = self.queue.get(fd)
+ if q:
+ q.pollin()
+ for fd in waiting_descriptors[1]:
+ q = self.queue.get(fd)
+ if q:
+ q.pollout()
+ for fd in waiting_descriptors[2]:
+ q = self.queue.get(fd)
+ if q:
+ q.pollend()
+ self._check_time_events()
+ return True
+
+
+class GlibIdleQueue(IdleQueue):
+ """
+ Extends IdleQueue to use glib io_add_wath, instead of select/poll In another
+ 'non gui' implementation of Gajim IdleQueue can be used safetly
+ """
+
+ # (timeout, boolean)
+ # Boolean is True if timeout is specified in seconds, False means miliseconds
+ PROCESS_TIMEOUT = (2, True)
+
+ def _init_idle(self):
+ """
+ Creates a dict, which maps file/pipe/sock descriptor to glib event id
+ """
+ self.events = {}
+ # time() is already called in glib, we just get the last value
+ # overrides IdleQueue.current_time()
+ self.current_time = gobject.get_current_time
+
+ def _add_idle(self, fd, flags):
+ """
+ This method is called when we plug a new idle object. Start listening for
+ events from fd
+ """
+ res = gobject.io_add_watch(fd, flags, self._process_events,
+ priority=gobject.PRIORITY_LOW)
+ # store the id of the watch, so that we can remove it on unplug
+ self.events[fd] = res
+
+ def _process_events(self, fd, flags):
+ try:
+ return IdleQueue._process_events(self, fd, flags)
+ except Exception:
+ self._remove_idle(fd)
+ self._add_idle(fd, flags)
+ raise
+
+ def _remove_idle(self, fd):
+ """
+ This method is called when we unplug a new idle object. Stop listening
+ for events from fd
+ """
+ if not fd in self.events:
+ return
+ gobject.source_remove(self.events[fd])
+ del(self.events[fd])
+
+ def process(self):
+ self._check_time_events()
diff --git a/nbxmpp/plugin.py b/nbxmpp/plugin.py
new file mode 100644
index 0000000..9fa5903
--- /dev/null
+++ b/nbxmpp/plugin.py
@@ -0,0 +1,96 @@
+## plugin.py
+##
+## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+# $Id: client.py,v 1.52 2006/01/02 19:40:55 normanr Exp $
+
+"""
+Provides PlugIn class functionality to develop extentions for xmpppy
+"""
+
+import logging
+log = logging.getLogger('nbxmpp.plugin')
+
+class PlugIn:
+ """
+ Abstract xmpppy plugin infrastructure code, providing plugging in/out and
+ debugging functionality
+
+ Inherit to develop pluggable objects. No code change on the owner class
+ required (the object where we plug into)
+
+ For every instance of PlugIn class the 'owner' is the class in what the plug
+ was plugged.
+ """
+
+ def __init__(self):
+ self._exported_methods=[]
+
+ def PlugIn(self, owner):
+ """
+ Attach to owner and register ourself and our _exported_methods in it.
+ If defined by a subclass, call self.plugin(owner) to execute hook
+ code after plugging
+ """
+ self._owner=owner
+ log.info('Plugging %s __INTO__ %s' % (self, self._owner))
+ if self.__class__.__name__ in owner.__dict__:
+ log.debug('Plugging ignored: another instance already plugged.')
+ return
+ self._old_owners_methods=[]
+ for method in self._exported_methods:
+ if method.__name__ in owner.__dict__:
+ self._old_owners_methods.append(owner.__dict__[method.__name__])
+ owner.__dict__[method.__name__]=method
+ if self.__class__.__name__.endswith('Dispatcher'):
+ # FIXME: I need BOSHDispatcher or XMPPDispatcher on .Dispatcher
+ # there must be a better way..
+ owner.__dict__['Dispatcher']=self
+ else:
+ owner.__dict__[self.__class__.__name__]=self
+
+ # Execute hook
+ if hasattr(self, 'plugin'):
+ return self.plugin(owner)
+
+ def PlugOut(self):
+ """
+ Unregister our _exported_methods from owner and detach from it.
+ If defined by a subclass, call self.plugout() after unplugging to execute
+ hook code
+ """
+ log.info('Plugging %s __OUT__ of %s.' % (self, self._owner))
+ for method in self._exported_methods:
+ del self._owner.__dict__[method.__name__]
+ for method in self._old_owners_methods:
+ self._owner.__dict__[method.__name__]=method
+ # FIXME: Dispatcher workaround
+ if self.__class__.__name__.endswith('Dispatcher'):
+ del self._owner.__dict__['Dispatcher']
+ else:
+ del self._owner.__dict__[self.__class__.__name__]
+ # Execute hook
+ if hasattr(self, 'plugout'):
+ return self.plugout()
+ del self._owner
+
+ @classmethod
+ def get_instance(cls, *args, **kwargs):
+ """
+ Factory Method for object creation
+
+ Use this instead of directly initializing the class in order to make
+ unit testing easier. For testing, this method can be patched to inject
+ mock objects.
+ """
+ return cls(*args, **kwargs)
diff --git a/nbxmpp/protocol.py b/nbxmpp/protocol.py
new file mode 100644
index 0000000..e0bd794
--- /dev/null
+++ b/nbxmpp/protocol.py
@@ -0,0 +1,1494 @@
+## protocol.py
+##
+## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+# $Id: protocol.py,v 1.52 2006/01/09 22:08:57 normanr Exp $
+
+"""
+Protocol module contains tools that are needed for processing of xmpp-related
+data structures, including jabber-objects like JID or different stanzas and
+sub- stanzas) handling routines
+"""
+
+from simplexml import Node, NodeBuilder
+import time
+import string
+import hashlib
+
+def ascii_upper(s):
+ trans_table = string.maketrans(string.ascii_lowercase,
+ string.ascii_uppercase)
+ return s.translate(trans_table)
+
+NS_ACTIVITY = 'http://jabber.org/protocol/activity' # XEP-0108
+NS_ADDRESS = 'http://jabber.org/protocol/address' # XEP-0033
+NS_AGENTS = 'jabber:iq:agents'
+NS_AMP = 'http://jabber.org/protocol/amp'
+NS_AMP_ERRORS = NS_AMP + '#errors'
+NS_ARCHIVE = 'urn:xmpp:archive' # XEP-0136
+NS_ARCHIVE_AUTO = NS_ARCHIVE + ':auto' # XEP-0136
+NS_ARCHIVE_MANAGE = NS_ARCHIVE + ':manage' # XEP-0136
+NS_ARCHIVE_MANUAL = NS_ARCHIVE + ':manual' # XEP-0136
+NS_ARCHIVE_PREF = NS_ARCHIVE + ':pref'
+NS_ATOM = 'http://www.w3.org/2005/Atom'
+NS_ATTENTION = 'urn:xmpp:attention:0' # XEP-0224
+NS_AUTH = 'jabber:iq:auth'
+NS_AVATAR = 'http://www.xmpp.org/extensions/xep-0084.html#ns-metadata'
+NS_BIND = 'urn:ietf:params:xml:ns:xmpp-bind'
+NS_BOB = 'urn:xmpp:bob' # XEP-0231
+NS_BOOKMARKS = 'storage:bookmarks' # XEP-0048
+NS_BROWSE = 'jabber:iq:browse'
+NS_BROWSING = 'http://jabber.org/protocol/browsing' # XEP-0195
+NS_BYTESTREAM = 'http://jabber.org/protocol/bytestreams' # XEP-0065
+NS_CAPS = 'http://jabber.org/protocol/caps' # XEP-0115
+NS_CAPTCHA = 'urn:xmpp:captcha' # XEP-0158
+NS_CARBONS = 'urn:xmpp:carbons:1' # XEP-0280
+NS_CHATSTATES = 'http://jabber.org/protocol/chatstates' # XEP-0085
+NS_CHATTING = 'http://jabber.org/protocol/chatting' # XEP-0194
+NS_CLIENT = 'jabber:client'
+NS_CONDITIONS = 'urn:xmpp:muc:conditions:0' # XEP-0306
+NS_COMMANDS = 'http://jabber.org/protocol/commands'
+NS_COMPONENT_ACCEPT = 'jabber:component:accept'
+NS_COMPONENT_1 = 'http://jabberd.jabberstudio.org/ns/component/1.0'
+NS_COMPRESS = 'http://jabber.org/protocol/compress' # XEP-0138
+NS_CONFERENCE = 'jabber:x:conference'
+NS_DATA = 'jabber:x:data' # XEP-0004
+NS_DATA_MEDIA = 'urn:xmpp:media-element' # XEP-0221
+NS_DELAY = 'jabber:x:delay'
+NS_DELAY2 = 'urn:xmpp:delay'
+NS_DIALBACK = 'jabber:server:dialback'
+NS_DISCO = 'http://jabber.org/protocol/disco'
+NS_DISCO_INFO = NS_DISCO + '#info'
+NS_DISCO_ITEMS = NS_DISCO + '#items'
+NS_ENCRYPTED = 'jabber:x:encrypted' # XEP-0027
+NS_ESESSION = 'http://www.xmpp.org/extensions/xep-0116.html#ns'
+NS_ESESSION_INIT = 'http://www.xmpp.org/extensions/xep-0116.html#ns-init' # XEP-0116
+NS_EVENT = 'jabber:x:event' # XEP-0022
+NS_FEATURE = 'http://jabber.org/protocol/feature-neg'
+NS_FILE = 'http://jabber.org/protocol/si/profile/file-transfer' # XEP-0096
+NS_FORWARD = 'urn:xmpp:forward:0' # XEP-0297
+NS_GAMING = 'http://jabber.org/protocol/gaming' # XEP-0196
+NS_GATEWAY = 'jabber:iq:gateway' # XEP-0100
+NS_GEOLOC = 'http://jabber.org/protocol/geoloc' # XEP-0080
+NS_GROUPCHAT = 'gc-1.0'
+NS_HTTP_AUTH = 'http://jabber.org/protocol/http-auth' # XEP-0070
+NS_HTTP_BIND = 'http://jabber.org/protocol/httpbind' # XEP-0124
+NS_IBB = 'http://jabber.org/protocol/ibb'
+NS_INVISIBLE = 'presence-invisible' # Jabberd2
+NS_IQ = 'iq' # Jabberd2
+NS_JINGLE ='urn:xmpp:jingle:1' # XEP-0166
+NS_JINGLE_ERRORS = 'urn:xmpp:jingle:errors:1' # XEP-0166
+NS_JINGLE_RTP = 'urn:xmpp:jingle:apps:rtp:1' # XEP-0167
+NS_JINGLE_RTP_AUDIO = 'urn:xmpp:jingle:apps:rtp:audio' # XEP-0167
+NS_JINGLE_RTP_VIDEO = 'urn:xmpp:jingle:apps:rtp:video' # XEP-0167
+NS_JINGLE_FILE_TRANSFER ='urn:xmpp:jingle:apps:file-transfer:3' # XEP-0234
+NS_JINGLE_XTLS='urn:xmpp:jingle:security:xtls:0' # XTLS: EXPERIMENTAL security layer of jingle
+NS_JINGLE_RAW_UDP = 'urn:xmpp:jingle:transports:raw-udp:1' # XEP-0177
+NS_JINGLE_ICE_UDP = 'urn:xmpp:jingle:transports:ice-udp:1' # XEP-0176
+NS_JINGLE_BYTESTREAM ='urn:xmpp:jingle:transports:s5b:1' # XEP-0260
+NS_JINGLE_IBB = 'urn:xmpp:jingle:transports:ibb:1' # XEP-0261
+NS_LAST = 'jabber:iq:last'
+NS_LOCATION = 'http://jabber.org/protocol/geoloc' # XEP-0080
+NS_MESSAGE = 'message' # Jabberd2
+NS_MOOD = 'http://jabber.org/protocol/mood' # XEP-0107
+NS_MUC = 'http://jabber.org/protocol/muc'
+NS_MUC_USER = NS_MUC + '#user'
+NS_MUC_ADMIN = NS_MUC + '#admin'
+NS_MUC_OWNER = NS_MUC + '#owner'
+NS_MUC_UNIQUE = NS_MUC + '#unique'
+NS_MUC_CONFIG = NS_MUC + '#roomconfig'
+NS_NICK = 'http://jabber.org/protocol/nick' # XEP-0172
+NS_OFFLINE = 'http://www.jabber.org/jeps/jep-0030.html' # XEP-0013
+NS_PHYSLOC = 'http://jabber.org/protocol/physloc' # XEP-0112
+NS_PING = 'urn:xmpp:ping' # XEP-0199
+NS_PRESENCE = 'presence' # Jabberd2
+NS_PRIVACY = 'jabber:iq:privacy'
+NS_PRIVATE = 'jabber:iq:private'
+NS_PROFILE = 'http://jabber.org/protocol/profile' # XEP-0154
+NS_PUBSUB = 'http://jabber.org/protocol/pubsub' # XEP-0060
+NS_PUBSUB_EVENT = 'http://jabber.org/protocol/pubsub#event'
+NS_PUBSUB_PUBLISH_OPTIONS = NS_PUBSUB + '#publish-options' # XEP-0060
+NS_PUBSUB_OWNER = 'http://jabber.org/protocol/pubsub#owner' # XEP-0060
+NS_REGISTER = 'jabber:iq:register'
+NS_ROSTER = 'jabber:iq:roster'
+NS_ROSTERNOTES = 'storage:rosternotes'
+NS_ROSTERX = 'http://jabber.org/protocol/rosterx' # XEP-0144
+NS_ROSTER_VER = 'urn:xmpp:features:rosterver' # XEP-0273
+NS_RPC = 'jabber:iq:rpc' # XEP-0009
+NS_RSM = 'http://jabber.org/protocol/rsm'
+NS_SASL = 'urn:ietf:params:xml:ns:xmpp-sasl'
+NS_SECLABEL = 'urn:xmpp:sec-label:0'
+NS_SECLABEL_CATALOG = 'urn:xmpp:sec-label:catalog:2'
+NS_SEARCH = 'jabber:iq:search'
+NS_SERVER = 'jabber:server'
+NS_SESSION = 'urn:ietf:params:xml:ns:xmpp-session'
+NS_SI = 'http://jabber.org/protocol/si' # XEP-0096
+NS_SI_PUB = 'http://jabber.org/protocol/sipub' # XEP-0137
+NS_SIGNED = 'jabber:x:signed' # XEP-0027
+NS_SSN = 'urn:xmpp:ssn' # XEP-0155
+NS_STANZA_CRYPTO = 'http://www.xmpp.org/extensions/xep-0200.html#ns' # XEP-0200
+NS_STANZAS = 'urn:ietf:params:xml:ns:xmpp-stanzas'
+NS_STREAM = 'http://affinix.com/jabber/stream'
+NS_STREAMS = 'http://etherx.jabber.org/streams'
+NS_TIME = 'jabber:iq:time' # XEP-0900
+NS_TIME_REVISED = 'urn:xmpp:time' # XEP-0202
+NS_TLS = 'urn:ietf:params:xml:ns:xmpp-tls'
+NS_TUNE = 'http://jabber.org/protocol/tune' # XEP-0118
+NS_VACATION = 'http://jabber.org/protocol/vacation'
+NS_VCARD = 'vcard-temp'
+NS_GMAILNOTIFY = 'google:mail:notify'
+NS_GTALKSETTING = 'google:setting'
+NS_VCARD_UPDATE = NS_VCARD + ':x:update'
+NS_VERSION = 'jabber:iq:version'
+NS_VIEWING = 'http://jabber.org/protocol/viewing' # XEP--197
+NS_WAITINGLIST = 'http://jabber.org/protocol/waitinglist' # XEP-0130
+NS_XHTML_IM = 'http://jabber.org/protocol/xhtml-im' # XEP-0071
+NS_XHTML = 'http://www.w3.org/1999/xhtml' # "
+NS_DATA_LAYOUT = 'http://jabber.org/protocol/xdata-layout' # XEP-0141
+NS_DATA_VALIDATE = 'http://jabber.org/protocol/xdata-validate' # XEP-0122
+NS_XMPP_STREAMS = 'urn:ietf:params:xml:ns:xmpp-streams'
+NS_RECEIPTS = 'urn:xmpp:receipts'
+NS_PUBKEY_PUBKEY = 'urn:xmpp:pubkey:2' # XEP-0189
+NS_PUBKEY_REVOKE = 'urn:xmpp:revoke:2'
+NS_PUBKEY_ATTEST = 'urn:xmpp:attest:2'
+NS_STREAM_MGMT = 'urn:xmpp:sm:2' # XEP-198
+NS_HASHES = 'urn:xmpp:hashes:0' # XEP-300
+NS_HASHES_MD5 = 'urn:xmpp:hash-function-textual-names:md5'
+NS_HASHES_SHA1 = 'urn:xmpp:hash-function-textual-names:sha-1'
+NS_HASHES_SHA256 = 'urn:xmpp:hash-function-textual-names:sha-256'
+NS_HASHES_SHA512 = 'urn:xmpp:hash-function-textual-names:sha-512'
+
+xmpp_stream_error_conditions = '''
+bad-format -- -- -- The entity has sent XML that cannot be processed.
+bad-namespace-prefix -- -- -- The entity has sent a namespace prefix that is unsupported, or has sent no namespace prefix on an element that requires such a prefix.
+conflict -- -- -- The server is closing the active stream for this entity because a new stream has been initiated that conflicts with the existing stream.
+connection-timeout -- -- -- The entity has not generated any traffic over the stream for some period of time.
+host-gone -- -- -- The value of the 'to' attribute provided by the initiating entity in the stream header corresponds to a hostname that is no longer hosted by the server.
+host-unknown -- -- -- The value of the 'to' attribute provided by the initiating entity in the stream header does not correspond to a hostname that is hosted by the server.
+improper-addressing -- -- -- A stanza sent between two servers lacks a 'to' or 'from' attribute (or the attribute has no value).
+internal-server-error -- -- -- The server has experienced a misconfiguration or an otherwise-undefined internal error that prevents it from servicing the stream.
+invalid-from -- cancel -- -- The JID or hostname provided in a 'from' address does not match an authorized JID or validated domain negotiated between servers via SASL or dialback, or between a client and a server via authentication and resource authorization.
+invalid-id -- -- -- The stream ID or dialback ID is invalid or does not match an ID previously provided.
+invalid-namespace -- -- -- The streams namespace name is something other than "http://etherx.jabber.org/streams" or the dialback namespace name is something other than "jabber:server:dialback".
+invalid-xml -- -- -- The entity has sent invalid XML over the stream to a server that performs validation.
+not-authorized -- -- -- The entity has attempted to send data before the stream has been authenticated, or otherwise is not authorized to perform an action related to stream negotiation.
+policy-violation -- -- -- The entity has violated some local service policy.
+remote-connection-failed -- -- -- The server is unable to properly connect to a remote resource that is required for authentication or authorization.
+resource-constraint -- -- -- The server lacks the system resources necessary to service the stream.
+restricted-xml -- -- -- The entity has attempted to send restricted XML features such as a comment, processing instruction, DTD, entity reference, or unescaped character.
+see-other-host -- -- -- The server will not provide service to the initiating entity but is redirecting traffic to another host.
+system-shutdown -- -- -- The server is being shut down and all active streams are being closed.
+undefined-condition -- -- -- The error condition is not one of those defined by the other conditions in this list.
+unsupported-encoding -- -- -- The initiating entity has encoded the stream in an encoding that is not supported by the server.
+unsupported-stanza-type -- -- -- The initiating entity has sent a first-level child of the stream that is not supported by the server.
+unsupported-version -- -- -- The value of the 'version' attribute provided by the initiating entity in the stream header specifies a version of XMPP that is not supported by the server.
+xml-not-well-formed -- -- -- The initiating entity has sent XML that is not well-formed.'''
+
+xmpp_stanza_error_conditions = '''
+bad-request -- 400 -- modify -- The sender has sent XML that is malformed or that cannot be processed.
+conflict -- 409 -- cancel -- Access cannot be granted because an existing resource or session exists with the same name or address.
+feature-not-implemented -- 501 -- cancel -- The feature requested is not implemented by the recipient or server and therefore cannot be processed.
+forbidden -- 403 -- auth -- The requesting entity does not possess the required permissions to perform the action.
+gone -- 302 -- modify -- The recipient or server can no longer be contacted at this address.
+internal-server-error -- 500 -- wait -- The server could not process the stanza because of a misconfiguration or an otherwise-undefined internal server error.
+item-not-found -- 404 -- cancel -- The addressed JID or item requested cannot be found.
+jid-malformed -- 400 -- modify -- The value of the 'to' attribute in the sender's stanza does not adhere to the syntax defined in Addressing Scheme.
+not-acceptable -- 406 -- cancel -- The recipient or server understands the request but is refusing to process it because it does not meet criteria defined by the recipient or server.
+not-allowed -- 405 -- cancel -- The recipient or server does not allow any entity to perform the action.
+not-authorized -- 401 -- auth -- The sender must provide proper credentials before being allowed to perform the action, or has provided improper credentials.
+payment-required -- 402 -- auth -- The requesting entity is not authorized to access the requested service because payment is required.
+recipient-unavailable -- 404 -- wait -- The intended recipient is temporarily unavailable.
+redirect -- 302 -- modify -- The recipient or server is redirecting requests for this information to another entity.
+registration-required -- 407 -- auth -- The requesting entity is not authorized to access the requested service because registration is required.
+remote-server-not-found -- 404 -- cancel -- A remote server or service specified as part or all of the JID of the intended recipient does not exist.
+remote-server-timeout -- 504 -- wait -- A remote server or service specified as part or all of the JID of the intended recipient could not be contacted within a reasonable amount of time.
+resource-constraint -- 500 -- wait -- The server or recipient lacks the system resources necessary to service the request.
+service-unavailable -- 503 -- cancel -- The server or recipient does not currently provide the requested service.
+subscription-required -- 407 -- auth -- The requesting entity is not authorized to access the requested service because a subscription is required.
+undefined-condition -- 500 -- -- Undefined Condition
+unexpected-request -- 400 -- wait -- The recipient or server understood the request but was not expecting it at this time (e.g., the request was out of order).'''
+
+sasl_error_conditions = '''
+aborted -- -- -- The receiving entity acknowledges an <abort/> element sent by the initiating entity; sent in reply to the <abort/> element.
+incorrect-encoding -- -- -- The data provided by the initiating entity could not be processed because the [BASE64]Josefsson, S., The Base16, Base32, and Base64 Data Encodings, July 2003. encoding is incorrect (e.g., because the encoding does not adhere to the definition in Section 3 of [BASE64]Josefsson, S., The Base16, Base32, and Base64 Data Encodings, July 2003.); sent in reply to a <response/> element or an <auth/> element with initial response data.
+invalid-authzid -- -- -- The authzid provided by the initiating entity is invalid, either because it is incorrectly formatted or because the initiating entity does not have permissions to authorize that ID; sent in reply to a <response/> element or an <auth/> element with initial response data.
+invalid-mechanism -- -- -- The initiating entity did not provide a mechanism or requested a mechanism that is not supported by the receiving entity; sent in reply to an <auth/> element.
+mechanism-too-weak -- -- -- The mechanism requested by the initiating entity is weaker than server policy permits for that initiating entity; sent in reply to a <response/> element or an <auth/> element with initial response data.
+not-authorized -- -- -- The authentication failed because the initiating entity did not provide valid credentials (this includes but is not limited to the case of an unknown username); sent in reply to a <response/> element or an <auth/> element with initial response data.
+temporary-auth-failure -- -- -- The authentication failed because of a temporary error condition within the receiving entity; sent in reply to an <auth/> element or <response/> element.'''
+
+ERRORS, _errorcodes = {}, {}
+for ns, errname, errpool in ((NS_XMPP_STREAMS, 'STREAM',
+xmpp_stream_error_conditions), (NS_STANZAS, 'ERR', xmpp_stanza_error_conditions),
+(NS_SASL, 'SASL', sasl_error_conditions)):
+ for err in errpool.split('\n')[1:]:
+ cond, code, typ, text = err.split(' -- ')
+ name = errname + '_' + ascii_upper(cond).replace('-', '_')
+ locals()[name] = ns + ' ' + cond
+ ERRORS[ns + ' ' + cond] = [code, typ, text]
+ if code:
+ _errorcodes[code] = cond
+del ns, errname, errpool, err, cond, code, typ, text
+
+def isResultNode(node):
+ """
+ Return true if the node is a positive reply
+ """
+ return node and node.getType() == 'result'
+
+def isErrorNode(node):
+ """
+ Return true if the node is a negative reply
+ """
+ return node and node.getType() == 'error'
+
+class NodeProcessed(Exception):
+ """
+ Exception that should be raised by handler when the handling should be
+ stopped
+ """
+ pass
+
+class StreamError(Exception):
+ """
+ Base exception class for stream errors
+ """
+ pass
+
+class BadFormat(StreamError):
+ pass
+
+class BadNamespacePrefix(StreamError):
+ pass
+
+class Conflict(StreamError):
+ pass
+
+class ConnectionTimeout(StreamError):
+ pass
+
+class HostGone(StreamError):
+ pass
+
+class HostUnknown(StreamError):
+ pass
+
+class ImproperAddressing(StreamError):
+ pass
+
+class InternalServerError(StreamError):
+ pass
+
+class InvalidFrom(StreamError):
+ pass
+
+class InvalidID(StreamError):
+ pass
+
+class InvalidNamespace(StreamError):
+ pass
+
+class InvalidXML(StreamError):
+ pass
+
+class NotAuthorized(StreamError):
+ pass
+
+class PolicyViolation(StreamError):
+ pass
+
+class RemoteConnectionFailed(StreamError):
+ pass
+
+class ResourceConstraint(StreamError):
+ pass
+
+class RestrictedXML(StreamError):
+ pass
+
+class SeeOtherHost(StreamError):
+ pass
+
+class SystemShutdown(StreamError):
+ pass
+
+class UndefinedCondition(StreamError):
+ pass
+
+class UnsupportedEncoding(StreamError):
+ pass
+
+class UnsupportedStanzaType(StreamError):
+ pass
+
+class UnsupportedVersion(StreamError):
+ pass
+
+class XMLNotWellFormed(StreamError):
+ pass
+
+stream_exceptions = {'bad-format': BadFormat,
+ 'bad-namespace-prefix': BadNamespacePrefix,
+ 'conflict': Conflict,
+ 'connection-timeout': ConnectionTimeout,
+ 'host-gone': HostGone,
+ 'host-unknown': HostUnknown,
+ 'improper-addressing': ImproperAddressing,
+ 'internal-server-error': InternalServerError,
+ 'invalid-from': InvalidFrom,
+ 'invalid-id': InvalidID,
+ 'invalid-namespace': InvalidNamespace,
+ 'invalid-xml': InvalidXML,
+ 'not-authorized': NotAuthorized,
+ 'policy-violation': PolicyViolation,
+ 'remote-connection-failed': RemoteConnectionFailed,
+ 'resource-constraint': ResourceConstraint,
+ 'restricted-xml': RestrictedXML,
+ 'see-other-host': SeeOtherHost,
+ 'system-shutdown': SystemShutdown,
+ 'undefined-condition': UndefinedCondition,
+ 'unsupported-encoding': UnsupportedEncoding,
+ 'unsupported-stanza-type': UnsupportedStanzaType,
+ 'unsupported-version': UnsupportedVersion,
+ 'xml-not-well-formed': XMLNotWellFormed}
+
+class JID:
+ """
+ JID can be built from string, modified, compared, serialised into string
+ """
+
+ def __init__(self, jid=None, node='', domain='', resource=''):
+ """
+ JID can be specified as string (jid argument) or as separate parts
+
+ Examples:
+ JID('node@domain/resource')
+ JID(node='node',domain='domain.org')
+ """
+ if not jid and not domain:
+ raise ValueError('JID must contain at least domain name')
+ elif type(jid) == type(self):
+ self.node, self.domain = jid.node, jid.domain
+ self.resource = jid.resource
+ elif domain:
+ self.node, self.domain, self.resource = node, domain, resource
+ else:
+ if jid.find('@') + 1:
+ self.node, jid = jid.split('@', 1)
+ else:
+ self.node = ''
+ if jid.find('/')+1:
+ self.domain, self.resource = jid.split('/', 1)
+ else:
+ self.domain, self.resource = jid, ''
+
+ def getNode(self):
+ """
+ Return the node part of the JID
+ """
+ return self.node
+
+ def setNode(self, node):
+ """
+ Set the node part of the JID to new value. Specify None to remove
+ the node part
+ """
+ self.node = node.lower()
+
+ def getDomain(self):
+ """
+ Return the domain part of the JID
+ """
+ return self.domain
+
+ def setDomain(self, domain):
+ """
+ Set the domain part of the JID to new value
+ """
+ self.domain = domain.lower()
+
+ def getResource(self):
+ """
+ Return the resource part of the JID
+ """
+ return self.resource
+
+ def setResource(self, resource):
+ """
+ Set the resource part of the JID to new value. Specify None to remove the
+ resource part
+ """
+ self.resource = resource
+
+ def getStripped(self):
+ """
+ Return the bare representation of JID. I.e. string value w/o resource
+ """
+ return self.__str__(0)
+
+ def __eq__(self, other):
+ """
+ Compare the JID to another instance or to string for equality
+ """
+ try:
+ other = JID(other)
+ except ValueError:
+ return 0
+ return self.resource == other.resource and \
+ self.__str__(0) == other.__str__(0)
+
+ def __ne__(self, other):
+ """
+ Compare the JID to another instance or to string for non-equality
+ """
+ return not self.__eq__(other)
+
+ def bareMatch(self, other):
+ """
+ Compare the node and domain parts of the JID's for equality
+ """
+ return self.__str__(0) == JID(other).__str__(0)
+
+ def __str__(self, wresource=1):
+ """
+ Serialise JID into string
+ """
+ if self.node:
+ jid = self.node + '@' + self.domain
+ else:
+ jid = self.domain
+ if wresource and self.resource:
+ return jid + '/' + self.resource
+ return jid
+
+ def __hash__(self):
+ """
+ Produce hash of the JID, Allows to use JID objects as keys of the
+ dictionary
+ """
+ return hash(str(self))
+
+class BOSHBody(Node):
+ """
+ <body> tag that wraps usual XMPP stanzas in XMPP over BOSH
+ """
+
+ def __init__(self, attrs={}, payload=[], node=None):
+ Node.__init__(self, tag='body', attrs=attrs, payload=payload, node=node)
+ self.setNamespace(NS_HTTP_BIND)
+
+
+class Protocol(Node):
+ """
+ A "stanza" object class. Contains methods that are common for presences, iqs
+ and messages
+ """
+
+ def __init__(self, name=None, to=None, typ=None, frm=None, attrs={},
+ payload=[], timestamp=None, xmlns=None, node=None):
+ """
+ Constructor, name is the name of the stanza
+ i.e. 'message' or 'presence'or 'iq'
+
+ to is the value of 'to' attribure, 'typ' - 'type' attribute
+ frn - from attribure, attrs - other attributes mapping,
+ payload - same meaning as for simplexml payload definition
+ timestamp - the time value that needs to be stamped over stanza
+ xmlns - namespace of top stanza node
+ node - parsed or unparsed stana to be taken as prototype.
+ """
+ if not attrs:
+ attrs = {}
+ if to:
+ attrs['to'] = to
+ if frm:
+ attrs['from'] = frm
+ if typ:
+ attrs['type'] = typ
+ Node.__init__(self, tag=name, attrs=attrs, payload=payload, node=node)
+ if not node and xmlns:
+ self.setNamespace(xmlns)
+ if self['to']:
+ self.setTo(self['to'])
+ if self['from']:
+ self.setFrom(self['from'])
+ if node and type(self) == type(node) and \
+ self.__class__ == node.__class__ and self.attrs.has_key('id'):
+ del self.attrs['id']
+ self.timestamp = None
+ for d in self.getTags('delay', namespace=NS_DELAY2):
+ try:
+ if d.getAttr('stamp') < self.getTimestamp2():
+ self.setTimestamp(d.getAttr('stamp'))
+ except Exception:
+ pass
+ if not self.timestamp:
+ for x in self.getTags('x', namespace=NS_DELAY):
+ try:
+ if x.getAttr('stamp') < self.getTimestamp():
+ self.setTimestamp(x.getAttr('stamp'))
+ except Exception:
+ pass
+ if timestamp is not None:
+ self.setTimestamp(timestamp) # To auto-timestamp stanza just pass timestamp=''
+
+ def getTo(self):
+ """
+ Return value of the 'to' attribute
+ """
+ try:
+ return self['to']
+ except:
+ return None
+
+ def getFrom(self):
+ """
+ Return value of the 'from' attribute
+ """
+ try:
+ return self['from']
+ except:
+ return None
+
+ def getTimestamp(self):
+ """
+ Return the timestamp in the 'yyyymmddThhmmss' format
+ """
+ if self.timestamp:
+ return self.timestamp
+ return time.strftime('%Y%m%dT%H:%M:%S', time.gmtime())
+
+ def getTimestamp2(self):
+ """
+ Return the timestamp in the 'yyyymmddThhmmss' format
+ """
+ if self.timestamp:
+ return self.timestamp
+ return time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime())
+
+ def getID(self):
+ """
+ Return the value of the 'id' attribute
+ """
+ return self.getAttr('id')
+
+ def setTo(self, val):
+ """
+ Set the value of the 'to' attribute
+ """
+ self.setAttr('to', JID(val))
+
+ def getType(self):
+ """
+ Return the value of the 'type' attribute
+ """
+ return self.getAttr('type')
+
+ def setFrom(self, val):
+ """
+ Set the value of the 'from' attribute
+ """
+ self.setAttr('from', JID(val))
+
+ def setType(self, val):
+ """
+ Set the value of the 'type' attribute
+ """
+ self.setAttr('type', val)
+
+ def setID(self, val):
+ """
+ Set the value of the 'id' attribute
+ """
+ self.setAttr('id', val)
+
+ def getError(self):
+ """
+ Return the error-condition (if present) or the textual description
+ of the error (otherwise)
+ """
+ errtag = self.getTag('error')
+ if errtag:
+ for tag in errtag.getChildren():
+ if tag.getName() != 'text':
+ return tag.getName()
+ return errtag.getData()
+
+ def getErrorMsg(self):
+ """
+ Return the textual description of the error (if present)
+ or the error condition
+ """
+ errtag = self.getTag('error')
+ if errtag:
+ for tag in errtag.getChildren():
+ if tag.getName() == 'text':
+ return tag.getData()
+ return self.getError()
+
+ def getErrorCode(self):
+ """
+ Return the error code. Obsolete.
+ """
+ return self.getTagAttr('error', 'code')
+
+ def getStatusConditions(self):
+ """
+ Return the status conditions list as defined in XEP-0306.
+ """
+ conds = []
+ condtag = self.getTag('conditions', namespace=NS_CONDITIONS)
+ if condtag:
+ for tag in condtag.getChildren():
+ conds.append(tag.getName())
+ return conds
+
+ def setError(self, error, code=None):
+ """
+ Set the error code. Obsolete. Use error-conditions instead
+ """
+ if code:
+ if str(code) in _errorcodes.keys():
+ error = ErrorNode(_errorcodes[str(code)], text=error)
+ else:
+ error = ErrorNode(ERR_UNDEFINED_CONDITION, code=code,
+ typ='cancel', text=error)
+ elif type(error) in [type(''), type(u'')]:
+ error=ErrorNode(error)
+ self.setType('error')
+ self.addChild(node=error)
+
+ def setTimestamp(self, val=None):
+ """
+ Set the timestamp. timestamp should be the yyyymmddThhmmss string
+ """
+ if not val:
+ val = time.strftime('%Y%m%dT%H:%M:%S', time.gmtime())
+ self.timestamp=val
+ self.setTag('x', {'stamp': self.timestamp}, namespace=NS_DELAY)
+
+ def getProperties(self):
+ """
+ Return the list of namespaces to which belongs the direct childs of element
+ """
+ props = []
+ for child in self.getChildren():
+ prop = child.getNamespace()
+ if prop not in props:
+ props.append(prop)
+ return props
+
+ def __setitem__(self, item, val):
+ """
+ Set the item 'item' to the value 'val'
+ """
+ if item in ['to', 'from']:
+ val = JID(val)
+ return self.setAttr(item, val)
+
+
+class Message(Protocol):
+ """
+ XMPP Message stanza - "push" mechanism
+ """
+
+ def __init__(self, to=None, body=None, xhtml=None, typ=None, subject=None,
+ attrs={}, frm=None, payload=[], timestamp=None, xmlns=NS_CLIENT,
+ node=None):
+ """
+ You can specify recipient, text of message, type of message any
+ additional attributes, sender of the message, any additional payload
+ (f.e. jabber:x:delay element) and namespace in one go.
+
+ Alternatively you can pass in the other XML object as the 'node'
+ parameted to replicate it as message
+ """
+ Protocol.__init__(self, 'message', to=to, typ=typ, attrs=attrs, frm=frm,
+ payload=payload, timestamp=timestamp, xmlns=xmlns, node=node)
+ if body:
+ self.setBody(body)
+ if xhtml:
+ self.setXHTML(xhtml)
+ if subject is not None:
+ self.setSubject(subject)
+
+ def getBody(self):
+ """
+ Return text of the message
+ """
+ return self.getTagData('body')
+
+ def getXHTML(self, xmllang=None):
+ """
+ Return serialized xhtml-im element text of the message
+
+ TODO: Returning a DOM could make rendering faster.
+ """
+ xhtml = self.getTag('html')
+ if xhtml:
+ if xmllang:
+ body = xhtml.getTag('body', attrs={'xml:lang': xmllang})
+ else:
+ body = xhtml.getTag('body')
+ return str(body)
+ return None
+
+ def getSubject(self):
+ """
+ Return subject of the message
+ """
+ return self.getTagData('subject')
+
+ def getThread(self):
+ """
+ Return thread of the message
+ """
+ return self.getTagData('thread')
+
+ def setBody(self, val):
+ """
+ Set the text of the message"""
+ self.setTagData('body', val)
+
+ def setXHTML(self, val, xmllang=None):
+ """
+ Sets the xhtml text of the message (XEP-0071). The parameter is the
+ "inner html" to the body.
+ """
+ try:
+ if xmllang:
+ dom = NodeBuilder('<body xmlns="%s" xml:lang="%s">%s</body>' \
+ % (NS_XHTML, xmllang, val)).getDom()
+ else:
+ dom = NodeBuilder('<body xmlns="%s">%s</body>' % (NS_XHTML,
+ val), 0).getDom()
+ if self.getTag('html'):
+ self.getTag('html').addChild(node=dom)
+ else:
+ self.setTag('html', namespace=NS_XHTML_IM).addChild(node=dom)
+ except Exception, e:
+ print "Error", e
+ # FIXME: log. we could not set xhtml (parse error, whatever)
+
+ def setSubject(self, val):
+ """
+ Set the subject of the message
+ """
+ self.setTagData('subject', val)
+
+ def setThread(self, val):
+ """
+ Set the thread of the message
+ """
+ self.setTagData('thread', val)
+
+ def buildReply(self, text=None):
+ """
+ Builds and returns another message object with specified text. The to,
+ from, thread and type properties of new message are pre-set as reply to
+ this message
+ """
+ m = Message(to=self.getFrom(), frm=self.getTo(), body=text,
+ typ=self.getType())
+ th = self.getThread()
+ if th:
+ m.setThread(th)
+ return m
+
+ def getStatusCode(self):
+ """
+ Return the status code of the message (for groupchat config change)
+ """
+ attrs = []
+ for xtag in self.getTags('x'):
+ for child in xtag.getTags('status'):
+ attrs.append(child.getAttr('code'))
+ return attrs
+
+class Presence(Protocol):
+
+ def __init__(self, to=None, typ=None, priority=None, show=None, status=None,
+ attrs={}, frm=None, timestamp=None, payload=[], xmlns=NS_CLIENT,
+ node=None):
+ """
+ You can specify recipient, type of message, priority, show and status
+ values any additional attributes, sender of the presence, timestamp, any
+ additional payload (f.e. jabber:x:delay element) and namespace in one go.
+ Alternatively you can pass in the other XML object as the 'node'
+ parameted to replicate it as presence
+ """
+ Protocol.__init__(self, 'presence', to=to, typ=typ, attrs=attrs, frm=frm,
+ payload=payload, timestamp=timestamp, xmlns=xmlns, node=node)
+ if priority:
+ self.setPriority(priority)
+ if show:
+ self.setShow(show)
+ if status:
+ self.setStatus(status)
+
+ def getPriority(self):
+ """
+ Return the priority of the message
+ """
+ return self.getTagData('priority')
+
+ def getShow(self):
+ """
+ Return the show value of the message
+ """
+ return self.getTagData('show')
+
+ def getStatus(self):
+ """
+ Return the status string of the message
+ """
+ return self.getTagData('status')
+
+ def setPriority(self, val):
+ """
+ Set the priority of the message
+ """
+ self.setTagData('priority', val)
+
+ def setShow(self, val):
+ """
+ Set the show value of the message
+ """
+ self.setTagData('show', val)
+
+ def setStatus(self, val):
+ """
+ Set the status string of the message
+ """
+ self.setTagData('status', val)
+
+ def _muc_getItemAttr(self, tag, attr):
+ for xtag in self.getTags('x'):
+ if xtag.getNamespace() not in (NS_MUC_USER, NS_MUC_ADMIN):
+ continue
+ for child in xtag.getTags(tag):
+ return child.getAttr(attr)
+
+ def _muc_getSubTagDataAttr(self, tag, attr):
+ for xtag in self.getTags('x'):
+ if xtag.getNamespace() not in (NS_MUC_USER, NS_MUC_ADMIN):
+ continue
+ for child in xtag.getTags('item'):
+ for cchild in child.getTags(tag):
+ return cchild.getData(), cchild.getAttr(attr)
+ return None, None
+
+ def getRole(self):
+ """
+ Return the presence role (for groupchat)
+ """
+ return self._muc_getItemAttr('item', 'role')
+
+ def getAffiliation(self):
+ """
+ Return the presence affiliation (for groupchat)
+ """
+ return self._muc_getItemAttr('item', 'affiliation')
+
+ def getNewNick(self):
+ """
+ Return the status code of the presence (for groupchat)
+ """
+ return self._muc_getItemAttr('item', 'nick')
+
+ def getJid(self):
+ """
+ Return the presence jid (for groupchat)
+ """
+ return self._muc_getItemAttr('item', 'jid')
+
+ def getReason(self):
+ """
+ Returns the reason of the presence (for groupchat)
+ """
+ return self._muc_getSubTagDataAttr('reason', '')[0]
+
+ def getActor(self):
+ """
+ Return the reason of the presence (for groupchat)
+ """
+ return self._muc_getSubTagDataAttr('actor', 'jid')[1]
+
+ def getStatusCode(self):
+ """
+ Return the status code of the presence (for groupchat)
+ """
+ attrs = []
+ for xtag in self.getTags('x'):
+ for child in xtag.getTags('status'):
+ attrs.append(child.getAttr('code'))
+ return attrs
+
+class Iq(Protocol):
+ """
+ XMPP Iq object - get/set dialog mechanism
+ """
+
+ def __init__(self, typ=None, queryNS=None, attrs={}, to=None, frm=None,
+ payload=[], xmlns=NS_CLIENT, node=None):
+ """
+ You can specify type, query namespace any additional attributes,
+ recipient of the iq, sender of the iq, any additional payload (f.e.
+ jabber:x:data node) and namespace in one go.
+
+ Alternatively you can pass in the other XML object as the 'node'
+ parameted to replicate it as an iq
+ """
+ Protocol.__init__(self, 'iq', to=to, typ=typ, attrs=attrs, frm=frm,
+ xmlns=xmlns, node=node)
+ if payload:
+ self.setQueryPayload(payload)
+ if queryNS:
+ self.setQueryNS(queryNS)
+
+ def getQuery(self):
+ """
+ Return the IQ's child element if it exists, None otherwise.
+ """
+ children = self.getChildren()
+ if children and self.getType() != 'error' and \
+ children[0].getName() != 'error':
+ return children[0]
+
+ def getQueryNS(self):
+ """
+ Return the namespace of the 'query' child element
+ """
+ tag = self.getQuery()
+ if tag:
+ return tag.getNamespace()
+
+ def getQuerynode(self):
+ """
+ Return the 'node' attribute value of the 'query' child element
+ """
+ tag = self.getQuery()
+ if tag:
+ return tag.getAttr('node')
+
+ def getQueryPayload(self):
+ """
+ Return the 'query' child element payload
+ """
+ tag = self.getQuery()
+ if tag:
+ return tag.getPayload()
+
+ def getQueryChildren(self):
+ """
+ Return the 'query' child element child nodes
+ """
+ tag = self.getQuery()
+ if tag:
+ return tag.getChildren()
+
+ def setQuery(self, name=None):
+ """
+ Change the name of the query node, creating it if needed. Keep the
+ existing name if none is given (use 'query' if it's a creation).
+ Return the query node.
+ """
+ query = self.getQuery()
+ if query is None:
+ query = self.addChild('query')
+ if name is not None:
+ query.setName(name)
+ return query
+
+ def setQueryNS(self, namespace):
+ """
+ Set the namespace of the 'query' child element
+ """
+ self.setQuery().setNamespace(namespace)
+
+ def setQueryPayload(self, payload):
+ """
+ Set the 'query' child element payload
+ """
+ self.setQuery().setPayload(payload)
+
+ def setQuerynode(self, node):
+ """
+ Set the 'node' attribute value of the 'query' child element
+ """
+ self.setQuery().setAttr('node', node)
+
+ def buildReply(self, typ):
+ """
+ Build and return another Iq object of specified type. The to, from and
+ query child node of new Iq are pre-set as reply to this Iq.
+ """
+ iq = Iq(typ, to=self.getFrom(), frm=self.getTo(),
+ attrs={'id': self.getID()})
+ iq.setQuery(self.getQuery().getName()).setNamespace(self.getQueryNS())
+ return iq
+
+class Hashes(Node):
+ """
+ Hash elements for various XEPs as defined in XEP-300
+ """
+
+ """
+ RECOMENDED HASH USE:
+ Algorithm Support
+ MD2 MUST NOT
+ MD4 MUST NOT
+ MD5 MAY
+ SHA-1 MUST
+ SHA-256 MUST
+ SHA-512 SHOULD
+ """
+
+ supported = ('md5', 'sha-1', 'sha-256', 'sha-512')
+
+ def __init__(self, nsp=NS_HASHES):
+ Node.__init__(self, None, {}, [], None, None,False, None)
+ self.setNamespace(nsp)
+ self.setName('hashes')
+
+ def calculateHash(self, algo, file_string):
+ """
+ Calculate the hash and add it. It is preferable doing it here
+ instead of doing it all over the place in Gajim.
+ """
+ hl = None
+ hash_ = None
+ # file_string can be a string or a file
+ if type(file_string) == str: # if it is a string
+ if algo == 'md5':
+ hl = hashlib.md5()
+ elif algo == 'sha-1':
+ hl = hashlib.sha1()
+ elif algo == 'sha-256':
+ hl = hashlib.sha256()
+ elif algo == 'sha-512':
+ hl = hashlib.sha512()
+
+ if hl:
+ hl.update(file_string)
+ hash_ = hl.hexdigest()
+ else: # if it is a file
+
+ if algo == 'md5':
+ hl = hashlib.md5()
+ elif algo == 'sha-1':
+ hl = hashlib.sha1()
+ elif algo == 'sha-256':
+ hl = hashlib.sha256()
+ elif algo == 'sha-512':
+ hl = hashlib.sha512()
+
+ if hl:
+ for line in file_string:
+ hl.update(line)
+ hash_ = hl.hexdigest()
+
+ return hash_
+
+ def addHash(self, hash_, algo):
+ """
+ More than one hash can be added. Although it is permitted, it should
+ not be done for big files because it could slow down Gajim.
+ """
+ attrs = {}
+ attrs['algo'] = algo
+ self.addChild('hash', attrs, [hash_])
+
+class Acks(Node):
+ """
+ Acknowledgement elements for Stream Management
+ """
+ def __init__(self, nsp=NS_STREAM_MGMT):
+ Node.__init__(self, None, {}, [], None, None, False, None)
+ self.setNamespace(nsp)
+
+ def buildAnswer(self, handled):
+ """
+ handled is the number of stanzas handled
+ """
+ self.setName('a')
+ self.setAttr('h', handled)
+
+ def buildRequest(self):
+ self.setName('r')
+
+ def buildEnable(self, resume=False):
+ self.setName('enable')
+ if resume:
+ self.setAttr('resume', 'true')
+
+ def buildResume(self, handled, previd):
+ self.setName('resume')
+ self.setAttr('h', handled)
+ self.setAttr('previd', previd)
+
+class ErrorNode(Node):
+ """
+ XMPP-style error element
+
+ In the case of stanza error should be attached to XMPP stanza.
+ In the case of stream-level errors should be used separately.
+ """
+
+ def __init__(self, name, code=None, typ=None, text=None):
+ """
+ Mandatory parameter: name - name of error condition.
+ Optional parameters: code, typ, text.
+ Used for backwards compartibility with older jabber protocol.
+ """
+ if name in ERRORS:
+ cod, type_, txt = ERRORS[name]
+ ns = name.split()[0]
+ else:
+ cod, ns, type_, txt = '500', NS_STANZAS, 'cancel', ''
+ if typ:
+ type_ = typ
+ if code:
+ cod = code
+ if text:
+ txt = text
+ Node.__init__(self, 'error', {}, [Node(name)])
+ if type_:
+ self.setAttr('type', type_)
+ if not cod:
+ self.setName('stream:error')
+ if txt:
+ self.addChild(node=Node(ns + ' text', {}, [txt]))
+ if cod:
+ self.setAttr('code', cod)
+
+class Error(Protocol):
+ """
+ Used to quickly transform received stanza into error reply
+ """
+
+ def __init__(self, node, error, reply=1):
+ """
+ Create error reply basing on the received 'node' stanza and the 'error'
+ error condition
+
+ If the 'node' is not the received stanza but locally created ('to' and
+ 'from' fields needs not swapping) specify the 'reply' argument as false.
+ """
+ if reply:
+ Protocol.__init__(self, to=node.getFrom(), frm=node.getTo(), node=node)
+ else:
+ Protocol.__init__(self, node=node)
+ self.setError(error)
+ if node.getType() == 'error':
+ self.__str__ = self.__dupstr__
+
+ def __dupstr__(self, dup1=None, dup2=None):
+ """
+ Dummy function used as preventor of creating error node in reply to error
+ node. I.e. you will not be able to serialise "double" error into string.
+ """
+ return ''
+
+class DataField(Node):
+ """
+ This class is used in the DataForm class to describe the single data item
+
+ If you are working with jabber:x:data (XEP-0004, XEP-0068, XEP-0122) then
+ you will need to work with instances of this class.
+ """
+
+ def __init__(self, name=None, value=None, typ=None, required=0, desc=None,
+ options=[], node=None):
+ """
+ Create new data field of specified name,value and type
+
+ Also 'required','desc' and 'options' fields can be set. Alternatively
+ other XML object can be passed in as the 'node' parameted
+ to replicate it as a new datafiled.
+ """
+ Node.__init__(self, 'field', node=node)
+ if name:
+ self.setVar(name)
+ if isinstance(value, (list, tuple)):
+ self.setValues(value)
+ elif value:
+ self.setValue(value)
+ if typ:
+ self.setType(typ)
+ elif not typ and not node:
+ self.setType('text-single')
+ if required:
+ self.setRequired(required)
+ if desc:
+ self.setDesc(desc)
+ if options:
+ self.setOptions(options)
+
+ def setRequired(self, req=1):
+ """
+ Change the state of the 'required' flag
+ """
+ if req:
+ self.setTag('required')
+ else:
+ try:
+ self.delChild('required')
+ except ValueError:
+ return
+
+ def isRequired(self):
+ """
+ Return in this field a required one
+ """
+ return self.getTag('required')
+
+ def setDesc(self, desc):
+ """
+ Set the description of this field
+ """
+ self.setTagData('desc', desc)
+
+ def getDesc(self):
+ """
+ Return the description of this field
+ """
+ return self.getTagData('desc')
+
+ def setValue(self, val):
+ """
+ Set the value of this field
+ """
+ self.setTagData('value', val)
+
+ def getValue(self):
+ return self.getTagData('value')
+
+ def setValues(self, lst):
+ """
+ Set the values of this field as values-list. Replaces all previous filed
+ values! If you need to just add a value - use addValue method
+ """
+ while self.getTag('value'):
+ self.delChild('value')
+ for val in lst:
+ self.addValue(val)
+
+ def addValue(self, val):
+ """
+ Add one more value to this field. Used in 'get' iq's or such
+ """
+ self.addChild('value', {}, [val])
+
+ def getValues(self):
+ """
+ Return the list of values associated with this field
+ """
+ ret = []
+ for tag in self.getTags('value'):
+ ret.append(tag.getData())
+ return ret
+
+ def getOptions(self):
+ """
+ Return label-option pairs list associated with this field
+ """
+ ret = []
+ for tag in self.getTags('option'):
+ ret.append([tag.getAttr('label'), tag.getTagData('value')])
+ return ret
+
+ def setOptions(self, lst):
+ """
+ Set label-option pairs list associated with this field
+ """
+ while self.getTag('option'):
+ self.delChild('option')
+ for opt in lst:
+ self.addOption(opt)
+
+ def addOption(self, opt):
+ """
+ Add one more label-option pair to this field
+ """
+ if isinstance(opt, basestring):
+ self.addChild('option').setTagData('value', opt)
+ else:
+ self.addChild('option', {'label': opt[0]}).setTagData('value',
+ opt[1])
+
+ def getType(self):
+ """
+ Get type of this field
+ """
+ return self.getAttr('type')
+
+ def setType(self, val):
+ """
+ Set type of this field
+ """
+ return self.setAttr('type', val)
+
+ def getVar(self):
+ """
+ Get 'var' attribute value of this field
+ """
+ return self.getAttr('var')
+
+ def setVar(self, val):
+ """
+ Set 'var' attribute value of this field
+ """
+ return self.setAttr('var', val)
+
+class DataForm(Node):
+ """
+ Used for manipulating dataforms in XMPP
+
+ Relevant XEPs: 0004, 0068, 0122. Can be used in disco, pub-sub and many
+ other applications.
+ """
+ def __init__(self, typ=None, data=[], title=None, node=None):
+ """
+ Create new dataform of type 'typ'. 'data' is the list of DataField
+ instances that this dataform contains, 'title' - the title string. You
+ can specify the 'node' argument as the other node to be used as base for
+ constructing this dataform
+
+ title and instructions is optional and SHOULD NOT contain newlines.
+ Several instructions MAY be present.
+ 'typ' can be one of ('form' | 'submit' | 'cancel' | 'result' )
+ 'typ' of reply iq can be ( 'result' | 'set' | 'set' | 'result' ) respectively.
+ 'cancel' form can not contain any fields. All other forms contains AT LEAST one field.
+ 'title' MAY be included in forms of type "form" and "result"
+ """
+ Node.__init__(self, 'x', node=node)
+ if node:
+ newkids = []
+ for n in self.getChildren():
+ if n.getName() == 'field':
+ newkids.append(DataField(node=n))
+ else:
+ newkids.append(n)
+ self.kids = newkids
+ if typ:
+ self.setType(typ)
+ self.setNamespace(NS_DATA)
+ if title:
+ self.setTitle(title)
+ if isinstance(data, dict):
+ newdata = []
+ for name in data.keys():
+ newdata.append(DataField(name, data[name]))
+ data = newdata
+ for child in data:
+ if isinstance(child, basestring):
+ self.addInstructions(child)
+ elif child.__class__.__name__ == 'DataField':
+ self.kids.append(child)
+ else:
+ self.kids.append(DataField(node=child))
+
+ def getType(self):
+ """
+ Return the type of dataform
+ """
+ return self.getAttr('type')
+
+ def setType(self, typ):
+ """
+ Set the type of dataform
+ """
+ self.setAttr('type', typ)
+
+ def getTitle(self):
+ """
+ Return the title of dataform
+ """
+ return self.getTagData('title')
+
+ def setTitle(self, text):
+ """
+ Set the title of dataform
+ """
+ self.setTagData('title', text)
+
+ def getInstructions(self):
+ """
+ Return the instructions of dataform
+ """
+ return self.getTagData('instructions')
+
+ def setInstructions(self, text):
+ """
+ Set the instructions of dataform
+ """
+ self.setTagData('instructions', text)
+
+ def addInstructions(self, text):
+ """
+ Add one more instruction to the dataform
+ """
+ self.addChild('instructions', {}, [text])
+
+ def getField(self, name):
+ """
+ Return the datafield object with name 'name' (if exists)
+ """
+ return self.getTag('field', attrs={'var': name})
+
+ def setField(self, name):
+ """
+ Create if nessessary or get the existing datafield object with name
+ 'name' and return it
+ """
+ f = self.getField(name)
+ if f:
+ return f
+ return self.addChild(node=DataField(name))
+
+ def asDict(self):
+ """
+ Represent dataform as simple dictionary mapping of datafield names to
+ their values
+ """
+ ret = {}
+ for field in self.getTags('field'):
+ name = field.getAttr('var')
+ typ = field.getType()
+ if isinstance(typ, basestring) and typ.endswith('-multi'):
+ val = []
+ for i in field.getTags('value'):
+ val.append(i.getData())
+ else:
+ val = field.getTagData('value')
+ ret[name] = val
+ if self.getTag('instructions'):
+ ret['instructions'] = self.getInstructions()
+ return ret
+
+ def __getitem__(self, name):
+ """
+ Simple dictionary interface for getting datafields values by their names
+ """
+ item = self.getField(name)
+ if item:
+ return item.getValue()
+ raise IndexError('No such field')
+
+ def __setitem__(self, name, val):
+ """
+ Simple dictionary interface for setting datafields values by their names
+ """
+ return self.setField(name).setValue(val)
+
diff --git a/nbxmpp/proxy_connectors.py b/nbxmpp/proxy_connectors.py
new file mode 100644
index 0000000..504ba93
--- /dev/null
+++ b/nbxmpp/proxy_connectors.py
@@ -0,0 +1,238 @@
+## proxy_connectors.py
+## based on transports_nb.py
+##
+## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov
+## modified by Dimitur Kirov <dkirov@gmail.com>
+## modified by Tomas Karasek <tom.to.the.k@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+"""
+Module containing classes for proxy connecting. So far its HTTP CONNECT and
+SOCKS5 proxy
+
+Authentication to NTLM (Microsoft implementation) proxies can be next.
+"""
+
+import struct, socket, base64
+import logging
+log = logging.getLogger('nbxmpp.proxy_connectors')
+
+class ProxyConnector:
+ """
+ Interface for proxy-connecting object - when tunnneling XMPP over proxies,
+ some connecting process usually has to be done before opening stream. Proxy
+ connectors are used right after TCP connection is estabilished
+ """
+
+ def __init__(self, send_method, onreceive, old_on_receive, on_success,
+ on_failure, xmpp_server, proxy_creds=(None, None)):
+ """
+ Creates proxy connector, starts connecting immediately and gives control
+ back to transport afterwards
+
+ :param send_method: transport send method
+ :param onreceive: method to set on_receive callbacks
+ :param old_on_receive: on_receive callback that should be set when
+ proxy connection was successful
+ :param on_success: called after proxy connection was successfully opened
+ :param on_failure: called when errors occured while connecting
+ :param xmpp_server: tuple of (hostname, port)
+ :param proxy_creds: tuple of (proxy_user, proxy_credentials)
+ """
+ self.send = send_method
+ self.onreceive = onreceive
+ self.old_on_receive = old_on_receive
+ self.on_success = on_success
+ self.on_failure = on_failure
+ self.xmpp_server = xmpp_server
+ self.proxy_user, self.proxy_pass = proxy_creds
+ self.old_on_receive = old_on_receive
+
+ self.start_connecting()
+
+ @classmethod
+ def get_instance(cls, *args, **kwargs):
+ """
+ Factory Method for object creation
+
+ Use this instead of directly initializing the class in order to make unit
+ testing much easier.
+ """
+ return cls(*args, **kwargs)
+
+ def start_connecting(self):
+ raise NotImplementedError
+
+ def connecting_over(self):
+ self.onreceive(self.old_on_receive)
+ self.on_success()
+
+class HTTPCONNECTConnector(ProxyConnector):
+ def start_connecting(self):
+ """
+ Connect to a proxy, supply login and password to it (if were specified
+ while creating instance). Instruct proxy to make connection to the target
+ server.
+ """
+ log.info('Proxy server contacted, performing authentification')
+ connector = ['CONNECT %s:%s HTTP/1.1' % self.xmpp_server,
+ 'Proxy-Connection: Keep-Alive',
+ 'Pragma: no-cache',
+ 'Host: %s:%s' % self.xmpp_server,
+ 'User-Agent: Gajim']
+ if self.proxy_user and self.proxy_pass:
+ credentials = '%s:%s' % (self.proxy_user, self.proxy_pass)
+ credentials = base64.encodestring(credentials).strip()
+ connector.append('Proxy-Authorization: Basic '+credentials)
+ connector.append('\r\n')
+ self.onreceive(self._on_headers_sent)
+ self.send('\r\n'.join(connector))
+
+ def _on_headers_sent(self, reply):
+ if reply is None:
+ return
+ self.reply = reply.replace('\r', '')
+ try:
+ proto, code, desc = reply.split('\n')[0].split(' ', 2)
+ except:
+ log.error("_on_headers_sent:", exc_info=True)
+ #traceback.print_exc()
+ self.on_failure('Invalid proxy reply')
+ return
+ if code <> '200':
+ log.error('Invalid proxy reply: %s %s %s' % (proto, code, desc))
+ self.on_failure('Invalid proxy reply')
+ return
+ if len(reply) != 2:
+ pass
+ self.connecting_over()
+
+
+class SOCKS5Connector(ProxyConnector):
+ """
+ SOCKS5 proxy connection class. Allows to use SOCKS5 proxies with
+ (optionally) simple authentication (only USERNAME/PASSWORD auth)
+ """
+
+ def start_connecting(self):
+ log.info('Proxy server contacted, performing authentification')
+ if self.proxy_user and self.proxy_pass:
+ to_send = '\x05\x02\x00\x02'
+ else:
+ to_send = '\x05\x01\x00'
+ self.onreceive(self._on_greeting_sent)
+ self.send(to_send)
+
+ def _on_greeting_sent(self, reply):
+ if reply is None:
+ return
+ if len(reply) != 2:
+ self.on_failure('Invalid proxy reply')
+ return
+ if reply[0] != '\x05':
+ log.info('Invalid proxy reply')
+ self.on_failure('Invalid proxy reply')
+ return
+ if reply[1] == '\x00':
+ return self._on_proxy_auth('\x01\x00')
+ elif reply[1] == '\x02':
+ to_send = '\x01' + chr(len(self.proxy_user)) + self.proxy_user +\
+ chr(len(self.proxy_pass)) + self.proxy_pass
+ self.onreceive(self._on_proxy_auth)
+ self.send(to_send)
+ else:
+ if reply[1] == '\xff':
+ log.error('Authentification to proxy impossible: no acceptable '
+ 'auth method')
+ self.on_failure('Authentification to proxy impossible: no '
+ 'acceptable authentification method')
+ return
+ log.error('Invalid proxy reply')
+ self.on_failure('Invalid proxy reply')
+ return
+
+ def _on_proxy_auth(self, reply):
+ if reply is None:
+ return
+ if len(reply) != 2:
+ log.error('Invalid proxy reply')
+ self.on_failure('Invalid proxy reply')
+ return
+ if reply[0] != '\x01':
+ log.error('Invalid proxy reply')
+ self.on_failure('Invalid proxy reply')
+ return
+ if reply[1] != '\x00':
+ log.error('Authentification to proxy failed')
+ self.on_failure('Authentification to proxy failed')
+ return
+ log.info('Authentification successfull. Jabber server contacted.')
+ # Request connection
+ req = "\x05\x01\x00"
+ # If the given destination address is an IP address, we'll
+ # use the IPv4 address request even if remote resolving was specified.
+ try:
+ self.ipaddr = socket.inet_aton(self.xmpp_server[0])
+ req = req + "\x01" + self.ipaddr
+ except socket.error:
+ # Well it's not an IP number, so it's probably a DNS name.
+# if self.__proxy[3]==True:
+ # Resolve remotely
+ self.ipaddr = None
+ req = req + "\x03" + chr(len(self.xmpp_server[0])) + self.xmpp_server[0]
+# else:
+# # Resolve locally
+# self.ipaddr = socket.inet_aton(socket.gethostbyname(self.xmpp_server[0]))
+# req = req + "\x01" + ipaddr
+ req = req + struct.pack(">H", self.xmpp_server[1])
+ self.onreceive(self._on_req_sent)
+ self.send(req)
+
+ def _on_req_sent(self, reply):
+ if reply is None:
+ return
+ if len(reply) < 10:
+ log.error('Invalid proxy reply')
+ self.on_failure('Invalid proxy reply')
+ return
+ if reply[0] != '\x05':
+ log.error('Invalid proxy reply')
+ self.on_failure('Invalid proxy reply')
+ return
+ if reply[1] != "\x00":
+ # Connection failed
+ if ord(reply[1])<9:
+ errors = ['general SOCKS server failure',
+ 'connection not allowed by ruleset',
+ 'Network unreachable',
+ 'Host unreachable',
+ 'Connection refused',
+ 'TTL expired',
+ 'Command not supported',
+ 'Address type not supported'
+ ]
+ txt = errors[ord(reply[1])-1]
+ else:
+ txt = 'Invalid proxy reply'
+ log.error(txt)
+ self.on_failure(txt)
+ return
+ # Get the bound address/port
+ elif reply[3] == "\x01":
+ begin, end = 3, 7
+ elif reply[3] == "\x03":
+ begin, end = 4, 4 + reply[4]
+ else:
+ log.error('Invalid proxy reply')
+ self.on_failure('Invalid proxy reply')
+ return
+ self.connecting_over()
diff --git a/nbxmpp/roster_nb.py b/nbxmpp/roster_nb.py
new file mode 100644
index 0000000..c07fa25
--- /dev/null
+++ b/nbxmpp/roster_nb.py
@@ -0,0 +1,368 @@
+## roster_nb.py
+## based on roster.py
+##
+## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov
+## modified by Dimitur Kirov <dkirov@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+# $Id: roster.py,v 1.17 2005/05/02 08:38:49 snakeru Exp $
+
+
+"""
+Simple roster implementation. Can be used though for different tasks like
+mass-renaming of contacts.
+"""
+
+from protocol import JID, Iq, Presence, Node, NodeProcessed, NS_MUC_USER, NS_ROSTER
+from plugin import PlugIn
+
+import logging
+log = logging.getLogger('nbxmpp.roster_nb')
+
+
+class NonBlockingRoster(PlugIn):
+ """
+ Defines a plenty of methods that will allow you to manage roster. Also
+ automatically track presences from remote JIDs taking into account that
+ every JID can have multiple resources connected. Does not currently support
+ 'error' presences. You can also use mapping interface for access to the
+ internal representation of contacts in roster
+ """
+
+ def __init__(self, version=None):
+ """
+ Init internal variables
+ """
+ PlugIn.__init__(self)
+ self.version = version
+ self._data = {}
+ self._set=None
+ self._exported_methods=[self.getRoster]
+ self.received_from_server = False
+
+ def Request(self, force=0):
+ """
+ Request roster from server if it were not yet requested (or if the
+ 'force' argument is set)
+ """
+ if self._set is None:
+ self._set = 0
+ elif not force:
+ return
+
+ iq = Iq('get', NS_ROSTER)
+ if self.version is not None:
+ iq.setTagAttr('query', 'ver', self.version)
+ id_ = self._owner.getAnID()
+ iq.setID(id_)
+ self._owner.send(iq)
+ log.info('Roster requested from server')
+ return id_
+
+ def RosterIqHandler(self, dis, stanza):
+ """
+ Subscription tracker. Used internally for setting items state in internal
+ roster representation
+ """
+ sender = stanza.getAttr('from')
+ if not sender is None and not sender.bareMatch(
+ self._owner.User + '@' + self._owner.Server):
+ return
+ query = stanza.getTag('query')
+ if query:
+ self.received_from_server = True
+ self.version = stanza.getTagAttr('query', 'ver')
+ if self.version is None:
+ self.version = ''
+ for item in query.getTags('item'):
+ jid=item.getAttr('jid')
+ if item.getAttr('subscription')=='remove':
+ if self._data.has_key(jid): del self._data[jid]
+ # Looks like we have a workaround
+ # raise NodeProcessed # a MUST
+ log.info('Setting roster item %s...' % jid)
+ if not self._data.has_key(jid): self._data[jid]={}
+ self._data[jid]['name']=item.getAttr('name')
+ self._data[jid]['ask']=item.getAttr('ask')
+ self._data[jid]['subscription']=item.getAttr('subscription')
+ self._data[jid]['groups']=[]
+ if not self._data[jid].has_key('resources'): self._data[jid]['resources']={}
+ for group in item.getTags('group'):
+ if group.getData() not in self._data[jid]['groups']:
+ self._data[jid]['groups'].append(group.getData())
+ self._data[self._owner.User+'@'+self._owner.Server]={'resources': {}, 'name': None, 'ask': None, 'subscription': None, 'groups': None,}
+ self._set=1
+ # Looks like we have a workaround
+ # raise NodeProcessed # a MUST. Otherwise you'll get back an <iq type='error'/>
+
+ def PresenceHandler(self, dis, pres):
+ """
+ Presence tracker. Used internally for setting items' resources state in
+ internal roster representation
+ """
+ if pres.getTag('x', namespace=NS_MUC_USER):
+ return
+ jid=pres.getFrom()
+ if not jid:
+ # If no from attribue, it's from server
+ jid=self._owner.Server
+ jid=JID(jid)
+ if not self._data.has_key(jid.getStripped()): self._data[jid.getStripped()]={'name':None,'ask':None,'subscription':'none','groups':['Not in roster'],'resources':{}}
+ if type(self._data[jid.getStripped()]['resources'])!=type(dict()):
+ self._data[jid.getStripped()]['resources']={}
+ item=self._data[jid.getStripped()]
+ typ=pres.getType()
+
+ if not typ:
+ log.info('Setting roster item %s for resource %s...'%(jid.getStripped(), jid.getResource()))
+ item['resources'][jid.getResource()]=res={'show':None,'status':None,'priority':'0','timestamp':None}
+ if pres.getTag('show'): res['show']=pres.getShow()
+ if pres.getTag('status'): res['status']=pres.getStatus()
+ if pres.getTag('priority'): res['priority']=pres.getPriority()
+ if not pres.getTimestamp(): pres.setTimestamp()
+ res['timestamp']=pres.getTimestamp()
+ elif typ=='unavailable' and item['resources'].has_key(jid.getResource()): del item['resources'][jid.getResource()]
+ # Need to handle type='error' also
+
+ def _getItemData(self, jid, dataname):
+ """
+ Return specific jid's representation in internal format. Used internally
+ """
+ jid = jid[:(jid+'/').find('/')]
+ return self._data[jid][dataname]
+
+ def _getResourceData(self, jid, dataname):
+ """
+ Return specific jid's resource representation in internal format. Used
+ internally
+ """
+ if jid.find('/') + 1:
+ jid, resource = jid.split('/', 1)
+ if self._data[jid]['resources'].has_key(resource):
+ return self._data[jid]['resources'][resource][dataname]
+ elif self._data[jid]['resources'].keys():
+ lastpri = -129
+ for r in self._data[jid]['resources'].keys():
+ if int(self._data[jid]['resources'][r]['priority']) > lastpri:
+ resource, lastpri=r, int(self._data[jid]['resources'][r]['priority'])
+ return self._data[jid]['resources'][resource][dataname]
+
+ def delItem(self, jid):
+ """
+ Delete contact 'jid' from roster
+ """
+ self._owner.send(Iq('set', NS_ROSTER, payload=[Node('item', {'jid': jid, 'subscription': 'remove'})]))
+
+ def getAsk(self, jid):
+ """
+ Return 'ask' value of contact 'jid'
+ """
+ return self._getItemData(jid, 'ask')
+
+ def getGroups(self, jid):
+ """
+ Return groups list that contact 'jid' belongs to
+ """
+ return self._getItemData(jid, 'groups')
+
+ def getName(self, jid):
+ """
+ Return name of contact 'jid'
+ """
+ return self._getItemData(jid, 'name')
+
+ def getPriority(self, jid):
+ """
+ Return priority of contact 'jid'. 'jid' should be a full (not bare) JID
+ """
+ return self._getResourceData(jid, 'priority')
+
+ def getRawRoster(self):
+ """
+ Return roster representation in internal format
+ """
+ return self._data
+
+ def getRawItem(self, jid):
+ """
+ Return roster item 'jid' representation in internal format
+ """
+ return self._data[jid[:(jid+'/').find('/')]]
+
+ def getShow(self, jid):
+ """
+ Return 'show' value of contact 'jid'. 'jid' should be a full (not bare)
+ JID
+ """
+ return self._getResourceData(jid, 'show')
+
+ def getStatus(self, jid):
+ """
+ Return 'status' value of contact 'jid'. 'jid' should be a full (not bare)
+ JID
+ """
+ return self._getResourceData(jid, 'status')
+
+ def getSubscription(self, jid):
+ """
+ Return 'subscription' value of contact 'jid'
+ """
+ return self._getItemData(jid, 'subscription')
+
+ def getResources(self, jid):
+ """
+ Return list of connected resources of contact 'jid'
+ """
+ return self._data[jid[:(jid+'/').find('/')]]['resources'].keys()
+
+ def setItem(self, jid, name=None, groups=[]):
+ """
+ Rename contact 'jid' and sets the groups list that it now belongs to
+ """
+ iq = Iq('set', NS_ROSTER)
+ query = iq.getTag('query')
+ attrs = {'jid': jid}
+ if name:
+ attrs['name'] = name
+ item = query.setTag('item', attrs)
+ for group in groups:
+ item.addChild(node=Node('group', payload=[group]))
+ self._owner.send(iq)
+
+ def setItemMulti(self, items):
+ """
+ Rename multiple contacts and sets their group lists
+ """
+ iq = Iq('set', NS_ROSTER)
+ query = iq.getTag('query')
+ for i in items:
+ attrs = {'jid': i['jid']}
+ if i['name']:
+ attrs['name'] = i['name']
+ item = query.setTag('item', attrs)
+ for group in i['groups']:
+ item.addChild(node=Node('group', payload=[group]))
+ self._owner.send(iq)
+
+ def getItems(self):
+ """
+ Return list of all [bare] JIDs that the roster is currently tracks
+ """
+ return self._data.keys()
+
+ def keys(self):
+ """
+ Same as getItems. Provided for the sake of dictionary interface
+ """
+ return self._data.keys()
+
+ def __getitem__(self, item):
+ """
+ Get the contact in the internal format. Raises KeyError if JID 'item' is
+ not in roster
+ """
+ return self._data[item]
+
+ def getItem(self, item):
+ """
+ Get the contact in the internal format (or None if JID 'item' is not in
+ roster)
+ """
+ if self._data.has_key(item):
+ return self._data[item]
+
+ def Subscribe(self, jid):
+ """
+ Send subscription request to JID 'jid'
+ """
+ self._owner.send(Presence(jid, 'subscribe'))
+
+ def Unsubscribe(self, jid):
+ """
+ Ask for removing our subscription for JID 'jid'
+ """
+ self._owner.send(Presence(jid, 'unsubscribe'))
+
+ def Authorize(self, jid):
+ """
+ Authorize JID 'jid'. Works only if these JID requested auth previously
+ """
+ self._owner.send(Presence(jid, 'subscribed'))
+
+ def Unauthorize(self, jid):
+ """
+ Unauthorise JID 'jid'. Use for declining authorisation request or for
+ removing existing authorization
+ """
+ self._owner.send(Presence(jid, 'unsubscribed'))
+
+ def getRaw(self):
+ """
+ Return the internal data representation of the roster
+ """
+ return self._data
+
+ def setRaw(self, data):
+ """
+ Return the internal data representation of the roster
+ """
+ self._data = data
+ self._data[self._owner.User + '@' + self._owner.Server] = {
+ 'resources': {},
+ 'name': None,
+ 'ask': None,
+ 'subscription': None,
+ 'groups': None
+ }
+ self._set = 1
+
+ def plugin(self, owner, request=1):
+ """
+ Register presence and subscription trackers in the owner's dispatcher.
+ Also request roster from server if the 'request' argument is set. Used
+ internally
+ """
+ self._owner.RegisterHandler('iq', self.RosterIqHandler, 'result', NS_ROSTER, makefirst = 1)
+ self._owner.RegisterHandler('iq', self.RosterIqHandler, 'set', NS_ROSTER)
+ self._owner.RegisterHandler('presence', self.PresenceHandler)
+ if request:
+ return self.Request()
+
+ def _on_roster_set(self, data):
+ if data:
+ self._owner.Dispatcher.ProcessNonBlocking(data)
+ if not self._set:
+ return
+ if not hasattr(self, '_owner') or not self._owner:
+ # Connection has been closed by receiving a <stream:error> for ex,
+ return
+ self._owner.onreceive(None)
+ if self.on_ready:
+ self.on_ready(self)
+ self.on_ready = None
+ return True
+
+ def getRoster(self, on_ready=None, force=False):
+ """
+ Request roster from server if neccessary and returns self
+ """
+ return_self = True
+ if not self._set:
+ self.on_ready = on_ready
+ self._owner.onreceive(self._on_roster_set)
+ return_self = False
+ elif on_ready:
+ on_ready(self)
+ return_self = False
+ if return_self or force:
+ return self
+ return None
diff --git a/nbxmpp/simplexml.py b/nbxmpp/simplexml.py
new file mode 100644
index 0000000..ad907be
--- /dev/null
+++ b/nbxmpp/simplexml.py
@@ -0,0 +1,693 @@
+## simplexml.py based on Mattew Allum's xmlstream.py
+##
+## Copyright (C) 2003-2005 Alexey "Snake" Nezhdanov
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+# $Id: simplexml.py,v 1.27 2005/04/30 07:20:27 snakeru Exp $
+
+"""
+Simplexml module provides xmpppy library with all needed tools to handle XML
+nodes and XML streams. I'm personally using it in many other separate
+projects. It is designed to be as standalone as possible
+"""
+
+import xml.parsers.expat
+import logging
+log = logging.getLogger('nbxmpp.simplexml')
+
+def XMLescape(txt):
+ """
+ Return provided string with symbols & < > " replaced by their respective XML
+ entities
+ """
+ # replace also FORM FEED and ESC, because they are not valid XML chars
+ return txt.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace('"', "&quot;").replace(u'\x0C', "").replace(u'\x1B', "")
+
+ENCODING='utf-8'
+
+def ustr(what):
+ """
+ Converts object "what" to unicode string using it's own __str__ method if
+ accessible or unicode method otherwise
+ """
+ if isinstance(what, unicode):
+ return what
+ try:
+ r = what.__str__()
+ except AttributeError:
+ r = str(what)
+ if not isinstance(r, unicode):
+ return unicode(r, ENCODING)
+ return r
+
+class Node(object):
+ """
+ Node class describes syntax of separate XML Node. It have a constructor that
+ permits node creation from set of "namespace name", attributes and payload
+ of text strings and other nodes. It does not natively support building node
+ from text string and uses NodeBuilder class for that purpose. After
+ creation node can be mangled in many ways so it can be completely changed.
+ Also node can be serialised into string in one of two modes: default (where
+ the textual representation of node describes it exactly) and "fancy" - with
+ whitespace added to make indentation and thus make result more readable by
+ human.
+
+ Node class have attribute FORCE_NODE_RECREATION that is defaults to False
+ thus enabling fast node replication from the some other node. The drawback
+ of the fast way is that new node shares some info with the "original" node
+ that is changing the one node may influence the other. Though it is rarely
+ needed (in xmpppy it is never needed at all since I'm usually never using
+ original node after replication (and using replication only to move upwards
+ on the classes tree).
+ """
+
+ FORCE_NODE_RECREATION = 0
+
+ def __init__(self, tag=None, attrs={}, payload=[], parent=None, nsp=None,
+ node_built=False, node=None):
+ """
+ Takes "tag" argument as the name of node (prepended by namespace, if
+ needed and separated from it by a space), attrs dictionary as the set of
+ arguments, payload list as the set of textual strings and child nodes
+ that this node carries within itself and "parent" argument that is
+ another node that this one will be the child of. Also the __init__ can be
+ provided with "node" argument that is either a text string containing
+ exactly one node or another Node instance to begin with. If both "node"
+ and other arguments is provided then the node initially created as
+ replica of "node" provided and then modified to be compliant with other
+ arguments.
+ """
+ if node:
+ if self.FORCE_NODE_RECREATION and isinstance(node, Node):
+ node = str(node)
+ if not isinstance(node, Node):
+ node = NodeBuilder(node, self)
+ node_built = True
+ else:
+ self.name, self.namespace, self.attrs, self.data, self.kids, self.parent, self.nsd = node.name, node.namespace, {}, [], [], node.parent, {}
+ for key in node.attrs.keys():
+ self.attrs[key] = node.attrs[key]
+ for data in node.data:
+ self.data.append(data)
+ for kid in node.kids:
+ self.kids.append(kid)
+ for k, v in node.nsd.items():
+ self.nsd[k] = v
+ else:
+ self.name, self.namespace, self.attrs, self.data, self.kids, self.parent, self.nsd = 'tag', '', {}, [], [], None, {}
+ if parent:
+ self.parent = parent
+ self.nsp_cache = {}
+ if nsp:
+ for k, v in nsp.items(): self.nsp_cache[k] = v
+ for attr, val in attrs.items():
+ if attr == 'xmlns':
+ self.nsd[u''] = val
+ elif attr.startswith('xmlns:'):
+ self.nsd[attr[6:]] = val
+ self.attrs[attr]=attrs[attr]
+ if tag:
+ if node_built:
+ pfx, self.name = (['']+tag.split(':'))[-2:]
+ self.namespace = self.lookup_nsp(pfx)
+ else:
+ if ' ' in tag:
+ self.namespace, self.name = tag.split()
+ else:
+ self.name = tag
+ if isinstance(payload, basestring): payload=[payload]
+ for i in payload:
+ if isinstance(i, Node):
+ self.addChild(node=i)
+ else:
+ self.data.append(ustr(i))
+
+ def lookup_nsp(self, pfx=''):
+ ns = self.nsd.get(pfx, None)
+ if ns is None:
+ ns = self.nsp_cache.get(pfx, None)
+ if ns is None:
+ if self.parent:
+ ns = self.parent.lookup_nsp(pfx)
+ self.nsp_cache[pfx] = ns
+ else:
+ return 'http://www.gajim.org/xmlns/undeclared'
+ return ns
+
+ def __str__(self, fancy=0):
+ """
+ Method used to dump node into textual representation. If "fancy" argument
+ is set to True produces indented output for readability
+ """
+ s = (fancy-1) * 2 * ' ' + "<" + self.name
+ if self.namespace:
+ if not self.parent or self.parent.namespace!=self.namespace:
+ if 'xmlns' not in self.attrs:
+ s = s + ' xmlns="%s"'%self.namespace
+ for key in self.attrs.keys():
+ val = ustr(self.attrs[key])
+ s = s + ' %s="%s"' % ( key, XMLescape(val) )
+ s = s + ">"
+ cnt = 0
+ if self.kids:
+ if fancy: s = s + "\n"
+ for a in self.kids:
+ if not fancy and (len(self.data)-1)>=cnt: s=s+XMLescape(self.data[cnt])
+ elif (len(self.data)-1)>=cnt: s=s+XMLescape(self.data[cnt].strip())
+ if isinstance(a, str) or isinstance(a, unicode):
+ s = s + a.__str__()
+ else:
+ s = s + a.__str__(fancy and fancy+1)
+ cnt=cnt+1
+ if not fancy and (len(self.data)-1) >= cnt: s = s + XMLescape(self.data[cnt])
+ elif (len(self.data)-1) >= cnt: s = s + XMLescape(self.data[cnt].strip())
+ if not self.kids and s.endswith('>'):
+ s=s[:-1]+' />'
+ if fancy: s = s + "\n"
+ else:
+ if fancy and not self.data: s = s + (fancy-1) * 2 * ' '
+ s = s + "</" + self.name + ">"
+ if fancy: s = s + "\n"
+ return s
+
+ def addChild(self, name=None, attrs={}, payload=[], namespace=None, node=None):
+ """
+ If "node" argument is provided, adds it as child node. Else creates new
+ node from the other arguments' values and adds it as well
+ """
+ if 'xmlns' in attrs:
+ raise AttributeError("Use namespace=x instead of attrs={'xmlns':x}")
+ if node:
+ newnode=node
+ node.parent = self
+ else: newnode=Node(tag=name, parent=self, attrs=attrs, payload=payload)
+ if namespace:
+ newnode.setNamespace(namespace)
+ self.kids.append(newnode)
+ return newnode
+
+ def addData(self, data):
+ """
+ Add some CDATA to node
+ """
+ self.data.append(ustr(data))
+
+ def clearData(self):
+ """
+ Remove all CDATA from the node
+ """
+ self.data = []
+
+ def delAttr(self, key):
+ """
+ Delete an attribute "key"
+ """
+ del self.attrs[key]
+
+ def delChild(self, node, attrs={}):
+ """
+ Delete the "node" from the node's childs list, if "node" is an instance.
+ Else delete the first node that have specified name and (optionally)
+ attributes
+ """
+ if not isinstance(node, Node):
+ node = self.getTag(node, attrs)
+ self.kids.remove(node)
+ return node
+
+ def getAttrs(self):
+ """
+ Return all node's attributes as dictionary
+ """
+ return self.attrs
+
+ def getAttr(self, key):
+ """
+ Return value of specified attribute
+ """
+ return self.attrs.get(key)
+
+ def getChildren(self):
+ """
+ Return all node's child nodes as list
+ """
+ return self.kids
+
+ def getData(self):
+ """
+ Return all node CDATA as string (concatenated)
+ """
+ return ''.join(self.data)
+
+ def getName(self):
+ """
+ Return the name of node
+ """
+ return self.name
+
+ def getNamespace(self):
+ """
+ Return the namespace of node
+ """
+ return self.namespace
+
+ def getParent(self):
+ """
+ Returns the parent of node (if present)
+ """
+ return self.parent
+
+ def getPayload(self):
+ """
+ Return the payload of node i.e. list of child nodes and CDATA entries.
+ F.e. for "<node>text1<nodea/><nodeb/> text2</node>" will be returned
+ list: ['text1', <nodea instance>, <nodeb instance>, ' text2']
+ """
+ ret = []
+ for i in range(len(self.kids)+len(self.data)+1):
+ try:
+ if self.data[i]:
+ ret.append(self.data[i])
+ except IndexError:
+ pass
+ try:
+ ret.append(self.kids[i])
+ except IndexError:
+ pass
+ return ret
+
+ def getTag(self, name, attrs={}, namespace=None):
+ """
+ Filter all child nodes using specified arguments as filter. Return the
+ first found or None if not found
+ """
+ return self.getTags(name, attrs, namespace, one=1)
+
+ def getTagAttr(self, tag, attr):
+ """
+ Return attribute value of the child with specified name (or None if no
+ such attribute)
+ """
+ try:
+ return self.getTag(tag).attrs[attr]
+ except:
+ return None
+
+ def getTagData(self, tag):
+ """
+ Return cocatenated CDATA of the child with specified name
+ """
+ try:
+ return self.getTag(tag).getData()
+ except Exception:
+ return None
+
+ def getTags(self, name, attrs={}, namespace=None, one=0):
+ """
+ Filter all child nodes using specified arguments as filter. Returns the
+ list of nodes found
+ """
+ nodes = []
+ for node in self.kids:
+ if namespace and namespace != node.getNamespace():
+ continue
+ if node.getName() == name:
+ for key in attrs.keys():
+ if key not in node.attrs or node.attrs[key]!=attrs[key]:
+ break
+ else:
+ nodes.append(node)
+ if one and nodes:
+ return nodes[0]
+ if not one:
+ return nodes
+
+ def iterTags(self, name, attrs={}, namespace=None):
+ """
+ Iterate over all children using specified arguments as filter
+ """
+ for node in self.kids:
+ if namespace is not None and namespace != node.getNamespace():
+ continue
+ if node.getName() == name:
+ for key in attrs.keys():
+ if key not in node.attrs or \
+ node.attrs[key]!=attrs[key]:
+ break
+ else:
+ yield node
+
+ def setAttr(self, key, val):
+ """
+ Set attribute "key" with the value "val"
+ """
+ self.attrs[key] = val
+
+ def setData(self, data):
+ """
+ Set node's CDATA to provided string. Resets all previous CDATA!
+ """
+ self.data = [ustr(data)]
+
+ def setName(self, val):
+ """
+ Change the node name
+ """
+ self.name = val
+
+ def setNamespace(self, namespace):
+ """
+ Changes the node namespace
+ """
+ self.namespace = namespace
+
+ def setParent(self, node):
+ """
+ Set node's parent to "node". WARNING: do not checks if the parent already
+ present and not removes the node from the list of childs of previous
+ parent
+ """
+ self.parent = node
+
+ def setPayload(self, payload, add=0):
+ """
+ Set node payload according to the list specified. WARNING: completely
+ replaces all node's previous content. If you wish just to add child or
+ CDATA - use addData or addChild methods
+ """
+ if isinstance(payload, basestring):
+ payload = [payload]
+ if add:
+ self.kids += payload
+ else:
+ self.kids = payload
+
+ def setTag(self, name, attrs={}, namespace=None):
+ """
+ Same as getTag but if the node with specified namespace/attributes not
+ found, creates such node and returns it
+ """
+ node = self.getTags(name, attrs, namespace=namespace, one=1)
+ if node:
+ return node
+ else:
+ return self.addChild(name, attrs, namespace=namespace)
+
+ def setTagAttr(self, tag, attr, val):
+ """
+ Create new node (if not already present) with name "tag" and set it's
+ attribute "attr" to value "val"
+ """
+ try:
+ self.getTag(tag).attrs[attr] = val
+ except Exception:
+ self.addChild(tag, attrs={attr: val})
+
+ def setTagData(self, tag, val, attrs={}):
+ """
+ Creates new node (if not already present) with name "tag" and
+ (optionally) attributes "attrs" and sets it's CDATA to string "val"
+ """
+ try:
+ self.getTag(tag, attrs).setData(ustr(val))
+ except Exception:
+ self.addChild(tag, attrs, payload = [ustr(val)])
+
+ def has_attr(self, key):
+ """
+ Check if node have attribute "key"
+ """
+ return key in self.attrs
+
+ def __getitem__(self, item):
+ """
+ Return node's attribute "item" value
+ """
+ return self.getAttr(item)
+
+ def __setitem__(self, item, val):
+ """
+ Set node's attribute "item" value
+ """
+ return self.setAttr(item, val)
+
+ def __delitem__(self, item):
+ """
+ Delete node's attribute "item"
+ """
+ return self.delAttr(item)
+
+ def __contains__(self, item):
+ """
+ Check if node has attribute "item"
+ """
+ return self.has_attr(item)
+
+ def __getattr__(self, attr):
+ """
+ Reduce memory usage caused by T/NT classes - use memory only when needed
+ """
+ if attr == 'T':
+ self.T = T(self)
+ return self.T
+ if attr == 'NT':
+ self.NT = NT(self)
+ return self.NT
+ raise AttributeError
+
+class T:
+ """
+ Auxiliary class used to quick access to node's child nodes
+ """
+
+ def __init__(self, node):
+ self.__dict__['node'] = node
+
+ def __getattr__(self, attr):
+ return self.node.setTag(attr)
+
+ def __setattr__(self, attr, val):
+ if isinstance(val, Node):
+ Node.__init__(self.node.setTag(attr), node=val)
+ else:
+ return self.node.setTagData(attr, val)
+
+ def __delattr__(self, attr):
+ return self.node.delChild(attr)
+
+class NT(T):
+ """
+ Auxiliary class used to quick create node's child nodes
+ """
+
+ def __getattr__(self, attr):
+ return self.node.addChild(attr)
+
+ def __setattr__(self, attr, val):
+ if isinstance(val, Node):
+ self.node.addChild(attr, node=val)
+ else:
+ return self.node.addChild(attr, payload=[val])
+
+class NodeBuilder:
+ """
+ Builds a Node class minidom from data parsed to it. This class used for two
+ purposes:
+
+ 1. Creation an XML Node from a textual representation. F.e. reading a
+ config file. See an XML2Node method.
+ 2. Handling an incoming XML stream. This is done by mangling the
+ __dispatch_depth parameter and redefining the dispatch method.
+
+ You do not need to use this class directly if you do not designing your own
+ XML handler
+ """
+
+ def __init__(self, data=None, initial_node=None):
+ """
+ Take two optional parameters: "data" and "initial_node"
+
+ By default class initialised with empty Node class instance. Though, if
+ "initial_node" is provided it used as "starting point". You can think
+ about it as of "node upgrade". "data" (if provided) feeded to parser
+ immidiatedly after instance init.
+ """
+ log.debug("Preparing to handle incoming XML stream.")
+ self._parser = xml.parsers.expat.ParserCreate()
+ self._parser.StartElementHandler = self.starttag
+ self._parser.EndElementHandler = self.endtag
+ self._parser.StartNamespaceDeclHandler = self.handle_namespace_start
+ self._parser.CharacterDataHandler = self.handle_cdata
+ self._parser.buffer_text = True
+ self.Parse = self._parser.Parse
+
+ self.__depth = 0
+ self.__last_depth = 0
+ self.__max_depth = 0
+ self._dispatch_depth = 1
+ self._document_attrs = None
+ self._document_nsp = None
+ self._mini_dom=initial_node
+ self.last_is_data = 1
+ self._ptr=None
+ self.data_buffer = None
+ self.streamError = ''
+ if data:
+ self._parser.Parse(data, 1)
+
+ def check_data_buffer(self):
+ if self.data_buffer:
+ self._ptr.data.append(''.join(self.data_buffer))
+ del self.data_buffer[:]
+ self.data_buffer = None
+
+ def destroy(self):
+ """
+ Method used to allow class instance to be garbage-collected
+ """
+ self.check_data_buffer()
+ self._parser.StartElementHandler = None
+ self._parser.EndElementHandler = None
+ self._parser.CharacterDataHandler = None
+ self._parser.StartNamespaceDeclHandler = None
+
+ def starttag(self, tag, attrs):
+ """
+ XML Parser callback. Used internally
+ """
+ self.check_data_buffer()
+ self._inc_depth()
+ log.info("STARTTAG.. DEPTH -> %i , tag -> %s, attrs -> %s" % (self.__depth, tag, `attrs`))
+ if self.__depth == self._dispatch_depth:
+ if not self._mini_dom :
+ self._mini_dom = Node(tag=tag, attrs=attrs, nsp = self._document_nsp, node_built=True)
+ else:
+ Node.__init__(self._mini_dom, tag=tag, attrs=attrs, nsp = self._document_nsp, node_built=True)
+ self._ptr = self._mini_dom
+ elif self.__depth > self._dispatch_depth:
+ self._ptr.kids.append(Node(tag=tag, parent=self._ptr, attrs=attrs, node_built=True))
+ self._ptr = self._ptr.kids[-1]
+ if self.__depth == 1:
+ self._document_attrs = {}
+ self._document_nsp = {}
+ nsp, name = (['']+tag.split(':'))[-2:]
+ for attr, val in attrs.items():
+ if attr == 'xmlns':
+ self._document_nsp[u''] = val
+ elif attr.startswith('xmlns:'):
+ self._document_nsp[attr[6:]] = val
+ else:
+ self._document_attrs[attr] = val
+ ns = self._document_nsp.get(nsp, 'http://www.gajim.org/xmlns/undeclared-root')
+ try:
+ self.stream_header_received(ns, name, attrs)
+ except ValueError, e:
+ self._document_attrs = None
+ raise ValueError(str(e))
+ if not self.last_is_data and self._ptr.parent:
+ self._ptr.parent.data.append('')
+ self.last_is_data = 0
+
+ def endtag(self, tag ):
+ """
+ XML Parser callback. Used internally
+ """
+ log.info("DEPTH -> %i , tag -> %s" % (self.__depth, tag))
+ self.check_data_buffer()
+ if self.__depth == self._dispatch_depth:
+ if self._mini_dom.getName() == 'error':
+ children = self._mini_dom.getChildren()
+ if children:
+ self.streamError = children[0].getName()
+ else:
+ self.streamError = self._mini_dom.getData()
+ self.dispatch(self._mini_dom)
+ elif self.__depth > self._dispatch_depth:
+ self._ptr = self._ptr.parent
+ else:
+ log.info("Got higher than dispatch level. Stream terminated?")
+ self._dec_depth()
+ self.last_is_data = 0
+ if self.__depth == 0: self.stream_footer_received()
+
+ def handle_cdata(self, data):
+ if self.last_is_data:
+ if self.data_buffer:
+ self.data_buffer.append(data)
+ elif self._ptr:
+ self.data_buffer = [data]
+ self.last_is_data = 1
+
+ def handle_namespace_start(self, prefix, uri):
+ """
+ XML Parser callback. Used internally
+ """
+ self.check_data_buffer()
+
+ def getDom(self):
+ """
+ Return just built Node
+ """
+ self.check_data_buffer()
+ return self._mini_dom
+
+ def dispatch(self, stanza):
+ """
+ Get called when the NodeBuilder reaches some level of depth on it's way
+ up with the built node as argument. Can be redefined to convert incoming
+ XML stanzas to program events
+ """
+ pass
+
+ def stream_header_received(self, ns, tag, attrs):
+ """
+ Method called when stream just opened
+ """
+ self.check_data_buffer()
+
+ def stream_footer_received(self):
+ """
+ Method called when stream just closed
+ """
+ self.check_data_buffer()
+
+ def has_received_endtag(self, level=0):
+ """
+ Return True if at least one end tag was seen (at level)
+ """
+ return self.__depth <= level and self.__max_depth > level
+
+ def _inc_depth(self):
+ self.__last_depth = self.__depth
+ self.__depth += 1
+ self.__max_depth = max(self.__depth, self.__max_depth)
+
+ def _dec_depth(self):
+ self.__last_depth = self.__depth
+ self.__depth -= 1
+
+def XML2Node(xml):
+ """
+ Convert supplied textual string into XML node. Handy f.e. for reading
+ configuration file. Raises xml.parser.expat.parsererror if provided string
+ is not well-formed XML
+ """
+ return NodeBuilder(xml).getDom()
+
+def BadXML2Node(xml):
+ """
+ Convert supplied textual string into XML node. Survives if xml data is
+ cutted half way round. I.e. "<html>some text <br>some more text". Will raise
+ xml.parser.expat.parsererror on misplaced tags though. F.e. "<b>some text
+ <br>some more text</b>" will not work
+ """
+ return NodeBuilder(xml).getDom()
diff --git a/nbxmpp/smacks.py b/nbxmpp/smacks.py
new file mode 100644
index 0000000..d97b04b
--- /dev/null
+++ b/nbxmpp/smacks.py
@@ -0,0 +1,132 @@
+from protocol import Acks
+from protocol import NS_STREAM_MGMT
+import logging
+log = logging.getLogger('nbxmpp.smacks')
+
+class Smacks():
+ '''
+ This is Smacks is the Stream Management class. It takes care of requesting
+ and sending acks. Also, it keeps track of the unhandled outgoing stanzas.
+
+ The dispatcher has to be able to access this class to increment the
+ number of handled stanzas
+ '''
+
+ def __init__(self, con):
+ self.con = con # Connection object
+ self.out_h = 0 # Outgoing stanzas handled
+ self.in_h = 0 # Incoming stanzas handled
+ self.uqueue = [] # Unhandled stanzas queue
+ self.session_id = None
+ self.resumption = False # If server supports resume
+ # Max number of stanzas in queue before making a request
+ self.max_queue = 5
+ self._owner = None
+ self.resuming = False
+ self.enabled = False # If SM is enabled
+ self.location = None
+
+ def set_owner(self, owner):
+ self._owner = owner
+
+ # Register handlers
+ owner.Dispatcher.RegisterNamespace(NS_STREAM_MGMT)
+ owner.Dispatcher.RegisterHandler('enabled', self._neg_response,
+ xmlns=NS_STREAM_MGMT)
+ owner.Dispatcher.RegisterHandler('r', self.send_ack,
+ xmlns=NS_STREAM_MGMT)
+ owner.Dispatcher.RegisterHandler('a', self.check_ack,
+ xmlns=NS_STREAM_MGMT)
+ owner.Dispatcher.RegisterHandler('resumed', self.check_ack,
+ xmlns=NS_STREAM_MGMT)
+ owner.Dispatcher.RegisterHandler('failed', self.error_handling,
+ xmlns=NS_STREAM_MGMT)
+
+ def _neg_response(self, disp, stanza):
+ r = stanza.getAttr('resume')
+ if r == 'true' or r == 'True' or r == '1':
+ self.resumption = True
+ self.session_id = stanza.getAttr('id')
+
+ if r == 'false' or r == 'False' or r == '0':
+ self.negociate(False)
+
+ l = stanza.getAttr('location')
+ if l:
+ self.location = l
+
+ def negociate(self, resume=True):
+ # Every time we attempt to negociate, we must erase all previous info
+ # about any previous session
+ self.uqueue = []
+ self.in_h = 0
+ self.out_h = 0
+ self.session_id = None
+ self.enabled = True
+
+ stanza = Acks()
+ stanza.buildEnable(resume)
+ self._owner.Connection.send(stanza, now=True)
+
+ def resume_request(self):
+ if not self.session_id:
+ self.resuming = False
+ log.error('Attempted to resume without a valid session id ')
+ return
+ resume = Acks()
+ resume.buildResume(self.in_h, self.session_id)
+ self._owner.Connection.send(resume, False)
+
+ def send_ack(self, disp, stanza):
+ ack = Acks()
+ ack.buildAnswer(self.in_h)
+ self._owner.Connection.send(ack, False)
+
+ def request_ack(self):
+ r = Acks()
+ r.buildRequest()
+ self._owner.Connection.send(r, False)
+
+ def check_ack(self, disp, stanza):
+ '''
+ Checks if the number of stanzas sent are the same as the
+ number of stanzas received by the server. Pops stanzas that were
+ handled by the server from the queue.
+ '''
+ h = int(stanza.getAttr('h'))
+ diff = self.out_h - h
+
+ if len(self.uqueue) < diff or diff < 0:
+ log.error('Server and client number of stanzas handled mismatch ')
+ else:
+ while (len(self.uqueue) > diff):
+ self.uqueue.pop(0)
+
+ if stanza.getName() == 'resumed':
+ self.enabled = True
+ self.resuming = True
+ self.con.set_oldst()
+ if self.uqueue != []:
+ for i in self.uqueue:
+ self._owner.Connection.send(i, False)
+
+ def error_handling(self, disp, stanza):
+ # If the server doesn't recognize previd, forget about resuming
+ # Ask for service discovery, etc..
+ if stanza.getTag('item-not-found'):
+ self.resuming = False
+ self.enabled = False
+ # we need to bind a resource
+ self._owner.NonBlockingBind.resuming = False
+ self._owner._on_auth_bind(None)
+ return
+
+ # Doesn't support resumption
+ if stanza.getTag('feature-not-implemented'):
+ self.negociate(False)
+ return
+
+ if stanza.getTag('unexpected-request'):
+ self.enabled = False
+ log.error('Gajim failed to negociate Stream Management')
+ return
diff --git a/nbxmpp/stringprepare.py b/nbxmpp/stringprepare.py
new file mode 100644
index 0000000..5e3d343
--- /dev/null
+++ b/nbxmpp/stringprepare.py
@@ -0,0 +1,238 @@
+# -*- coding:utf-8 -*-
+## src/common/xmpp/stringprepare.py
+##
+## Copyright (C) 2001-2005 Twisted Matrix Laboratories
+## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org>
+## Copyright (C) 2006 Stefan Bethge <stefan AT lanpartei.de>
+## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org>
+##
+## This file is part of Gajim.
+##
+## Gajim is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published
+## by the Free Software Foundation; version 3 only.
+##
+## Gajim is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+##
+
+import stringprep
+import unicodedata
+from encodings import idna
+
+class ILookupTable:
+ """
+ Interface for character lookup classes
+ """
+
+ def lookup(self, c):
+ """
+ Return whether character is in this table
+ """
+ pass
+
+class IMappingTable:
+ """
+ Interface for character mapping classes
+ """
+
+ def map(self, c):
+ """
+ Return mapping for character
+ """
+ pass
+
+class LookupTableFromFunction:
+
+ __implements__ = ILookupTable
+
+ def __init__(self, in_table_function):
+ self.lookup = in_table_function
+
+class LookupTable:
+
+ __implements__ = ILookupTable
+
+ def __init__(self, table):
+ self._table = table
+
+ def lookup(self, c):
+ return c in self._table
+
+class MappingTableFromFunction:
+
+ __implements__ = IMappingTable
+
+ def __init__(self, map_table_function):
+ self.map = map_table_function
+
+class EmptyMappingTable:
+
+ __implements__ = IMappingTable
+
+ def __init__(self, in_table_function):
+ self._in_table_function = in_table_function
+
+ def map(self, c):
+ if self._in_table_function(c):
+ return None
+ else:
+ return c
+
+class Profile:
+ def __init__(self, mappings=[], normalize=True, prohibiteds=[],
+ check_unassigneds=True, check_bidi=True):
+ self.mappings = mappings
+ self.normalize = normalize
+ self.prohibiteds = prohibiteds
+ self.do_check_unassigneds = check_unassigneds
+ self.do_check_bidi = check_bidi
+
+ def prepare(self, string):
+ result = self.map(string)
+ if self.normalize:
+ result = unicodedata.normalize("NFKC", result)
+ self.check_prohibiteds(result)
+ if self.do_check_unassigneds:
+ self.check_unassigneds(result)
+ if self.do_check_bidi:
+ self.check_bidirectionals(result)
+ return result
+
+ def map(self, string):
+ result = []
+
+ for c in string:
+ result_c = c
+
+ for mapping in self.mappings:
+ result_c = mapping.map(c)
+ if result_c != c:
+ break
+
+ if result_c is not None:
+ result.append(result_c)
+
+ return u"".join(result)
+
+ def check_prohibiteds(self, string):
+ for c in string:
+ for table in self.prohibiteds:
+ if table.lookup(c):
+ raise UnicodeError, "Invalid character %s" % repr(c)
+
+ def check_unassigneds(self, string):
+ for c in string:
+ if stringprep.in_table_a1(c):
+ raise UnicodeError, "Unassigned code point %s" % repr(c)
+
+ def check_bidirectionals(self, string):
+ found_LCat = False
+ found_RandALCat = False
+
+ for c in string:
+ if stringprep.in_table_d1(c):
+ found_RandALCat = True
+ if stringprep.in_table_d2(c):
+ found_LCat = True
+
+ if found_LCat and found_RandALCat:
+ raise UnicodeError, "Violation of BIDI Requirement 2"
+
+ if found_RandALCat and not (stringprep.in_table_d1(string[0]) and
+ stringprep.in_table_d1(string[-1])):
+ raise UnicodeError, "Violation of BIDI Requirement 3"
+
+
+class NamePrep:
+ """
+ Implements preparation of internationalized domain names
+
+ This class implements preparing internationalized domain names using the
+ rules defined in RFC 3491, section 4 (Conversion operations).
+
+ We do not perform step 4 since we deal with unicode representations of
+ domain names and do not convert from or to ASCII representations using
+ punycode encoding. When such a conversion is needed, the L{idna} standard
+ library provides the C{ToUnicode()} and C{ToASCII()} functions. Note that
+ L{idna} itself assumes UseSTD3ASCIIRules to be false.
+
+ The following steps are performed by C{prepare()}:
+
+ * Split the domain name in labels at the dots (RFC 3490, 3.1)
+ * Apply nameprep proper on each label (RFC 3491)
+ * Enforce the restrictions on ASCII characters in host names by
+ assuming STD3ASCIIRules to be true. (STD 3)
+ * Rejoin the labels using the label separator U+002E (full stop).
+ """
+
+ # Prohibited characters.
+ prohibiteds = [unichr(n) for n in range(0x00, 0x2c + 1) +
+ range(0x2e, 0x2f + 1) +
+ range(0x3a, 0x40 + 1) +
+ range(0x5b, 0x60 + 1) +
+ range(0x7b, 0x7f + 1) ]
+
+ def prepare(self, string):
+ result = []
+
+ labels = idna.dots.split(string)
+
+ if labels and len(labels[-1]) == 0:
+ trailing_dot = '.'
+ del labels[-1]
+ else:
+ trailing_dot = ''
+
+ for label in labels:
+ result.append(self.nameprep(label))
+
+ return ".".join(result)+trailing_dot
+
+ def check_prohibiteds(self, string):
+ for c in string:
+ if c in self.prohibiteds:
+ raise UnicodeError, "Invalid character %s" % repr(c)
+
+ def nameprep(self, label):
+ label = idna.nameprep(label)
+ self.check_prohibiteds(label)
+ if len(label) == 0:
+ raise UnicodeError, "Invalid empty name"
+ if label[0] == '-':
+ raise UnicodeError, "Invalid leading hyphen-minus"
+ if label[-1] == '-':
+ raise UnicodeError, "Invalid trailing hyphen-minus"
+ return label
+
+C_11 = LookupTableFromFunction(stringprep.in_table_c11)
+C_12 = LookupTableFromFunction(stringprep.in_table_c12)
+C_21 = LookupTableFromFunction(stringprep.in_table_c21)
+C_22 = LookupTableFromFunction(stringprep.in_table_c22)
+C_3 = LookupTableFromFunction(stringprep.in_table_c3)
+C_4 = LookupTableFromFunction(stringprep.in_table_c4)
+C_5 = LookupTableFromFunction(stringprep.in_table_c5)
+C_6 = LookupTableFromFunction(stringprep.in_table_c6)
+C_7 = LookupTableFromFunction(stringprep.in_table_c7)
+C_8 = LookupTableFromFunction(stringprep.in_table_c8)
+C_9 = LookupTableFromFunction(stringprep.in_table_c9)
+
+B_1 = EmptyMappingTable(stringprep.in_table_b1)
+B_2 = MappingTableFromFunction(stringprep.map_table_b2)
+
+nodeprep = Profile(mappings=[B_1, B_2],
+ prohibiteds=[C_11, C_12, C_21, C_22,
+ C_3, C_4, C_5, C_6, C_7, C_8, C_9,
+ LookupTable([u'"', u'&', u"'", u'/',
+ u':', u'<', u'>', u'@'])])
+
+resourceprep = Profile(mappings=[B_1,],
+ prohibiteds=[C_12, C_21, C_22,
+ C_3, C_4, C_5, C_6, C_7, C_8, C_9])
+
+nameprep = NamePrep()
diff --git a/nbxmpp/tls_nb.py b/nbxmpp/tls_nb.py
new file mode 100644
index 0000000..cba4243
--- /dev/null
+++ b/nbxmpp/tls_nb.py
@@ -0,0 +1,461 @@
+## tls_nb.py
+## based on transports_nb.py
+##
+## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov
+## modified by Dimitur Kirov <dkirov@gmail.com>
+## modified by Tomas Karasek <tom.to.the.k@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+import socket
+from plugin import PlugIn
+
+import sys
+import os
+import time
+
+import traceback
+
+import logging
+log = logging.getLogger('nbxmpp.tls_nb')
+
+USE_PYOPENSSL = False
+
+PYOPENSSL = 'PYOPENSSL'
+PYSTDLIB = 'PYSTDLIB'
+
+try:
+ #raise ImportError("Manually disabled PyOpenSSL")
+ import OpenSSL.SSL
+ import OpenSSL.crypto
+ USE_PYOPENSSL = True
+ log.info("PyOpenSSL loaded")
+except ImportError:
+ log.debug("Import of PyOpenSSL failed:", exc_info=True)
+
+ # FIXME: Remove these prints before release, replace with a warning dialog.
+ print >> sys.stderr, "=" * 79
+ print >> sys.stderr, "PyOpenSSL not found, falling back to Python builtin SSL objects (insecure)."
+ print >> sys.stderr, "=" * 79
+
+def gattr(obj, attr, default=None):
+ try:
+ return getattr(obj, attr)
+ except AttributeError:
+ return default
+
+
+class SSLWrapper:
+ """
+ Abstract SSLWrapper base class
+ """
+
+ class Error(IOError):
+ """
+ Generic SSL Error Wrapper
+ """
+
+ def __init__(self, sock=None, exc=None, errno=None, strerror=None,
+ peer=None):
+ self.parent = IOError
+
+ errno = errno or gattr(exc, 'errno') or exc[0]
+ strerror = strerror or gattr(exc, 'strerror') or gattr(exc, 'args')
+ if not isinstance(strerror, basestring):
+ strerror = repr(strerror)
+
+ self.sock = sock
+ self.exc = exc
+ self.peer = peer
+ self.exc_name = None
+ self.exc_args = None
+ self.exc_str = None
+ self.exc_repr = None
+
+ if self.exc is not None:
+ self.exc_name = str(self.exc.__class__)
+ self.exc_args = gattr(self.exc, 'args')
+ self.exc_str = str(self.exc)
+ self.exc_repr = repr(self.exc)
+ if not errno:
+ try:
+ if isinstance(exc, OpenSSL.SSL.SysCallError):
+ if self.exc_args[0] > 0:
+ errno = self.exc_args[0]
+ strerror = self.exc_args[1]
+ except: pass
+
+ self.parent.__init__(self, errno, strerror)
+
+ if self.peer is None and sock is not None:
+ try:
+ ppeer = self.sock.getpeername()
+ if len(ppeer) == 2 and isinstance(ppeer[0], basestring) \
+ and isinstance(ppeer[1], int):
+ self.peer = ppeer
+ except:
+ pass
+
+ def __str__(self):
+ s = str(self.__class__)
+ if self.peer:
+ s += " for %s:%d" % self.peer
+ if self.errno is not None:
+ s += ": [Errno: %d]" % self.errno
+ if self.strerror:
+ s += " (%s)" % self.strerror
+ if self.exc_name:
+ s += ", Caused by %s" % self.exc_name
+ if self.exc_str:
+ if self.strerror:
+ s += "(%s)" % self.exc_str
+ else: s += "(%s)" % str(self.exc_args)
+ return s
+
+ def __init__(self, sslobj, sock=None):
+ self.sslobj = sslobj
+ self.sock = sock
+ log.debug("%s.__init__ called with %s", self.__class__, sslobj)
+
+ def recv(self, data, flags=None):
+ """
+ Receive wrapper for SSL object
+
+ We can return None out of this function to signal that no data is
+ available right now. Better than an exception, which differs
+ depending on which SSL lib we're using. Unfortunately returning ''
+ can indicate that the socket has been closed, so to be sure, we avoid
+ this by returning None.
+ """
+ raise NotImplementedError
+
+ def send(self, data, flags=None, now=False):
+ """
+ Send wrapper for SSL object
+ """
+ raise NotImplementedError
+
+
+class PyOpenSSLWrapper(SSLWrapper):
+ """
+ Wrapper class for PyOpenSSL's recv() and send() methods
+ """
+
+ def __init__(self, *args):
+ self.parent = SSLWrapper
+ self.parent.__init__(self, *args)
+
+ def is_numtoolarge(self, e):
+ ''' Magic methods don't need documentation '''
+ t = ('asn1 encoding routines', 'a2d_ASN1_OBJECT', 'first num too large')
+ return (isinstance(e.args, (list, tuple)) and len(e.args) == 1 and
+ isinstance(e.args[0], (list, tuple)) and len(e.args[0]) == 2 and
+ e.args[0][0] == e.args[0][1] == t)
+
+ def recv(self, bufsize, flags=None):
+ retval = None
+ try:
+ if flags is None:
+ retval = self.sslobj.recv(bufsize)
+ else:
+ retval = self.sslobj.recv(bufsize, flags)
+ except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError), e:
+ log.debug("Recv: Want-error: " + repr(e))
+ except OpenSSL.SSL.SysCallError, e:
+ log.debug("Recv: Got OpenSSL.SSL.SysCallError: " + repr(e),
+ exc_info=True)
+ raise SSLWrapper.Error(self.sock or self.sslobj, e)
+ except OpenSSL.SSL.ZeroReturnError, e:
+ # end-of-connection raises ZeroReturnError instead of having the
+ # connection's .recv() method return a zero-sized result.
+ raise SSLWrapper.Error(self.sock or self.sslobj, e, -1)
+ except OpenSSL.SSL.Error, e:
+ if self.is_numtoolarge(e):
+ # warn, but ignore this exception
+ log.warning("Recv: OpenSSL: asn1enc: first num too large (ignored)")
+ else:
+ log.debug("Recv: Caught OpenSSL.SSL.Error:", exc_info=True)
+ raise SSLWrapper.Error(self.sock or self.sslobj, e)
+ return retval
+
+ def send(self, data, flags=None, now=False):
+ try:
+ if flags is None:
+ return self.sslobj.send(data)
+ else:
+ return self.sslobj.send(data, flags)
+ except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError), e:
+ #log.debug("Send: " + repr(e))
+ time.sleep(0.1) # prevent 100% CPU usage
+ except OpenSSL.SSL.SysCallError, e:
+ log.error("Send: Got OpenSSL.SSL.SysCallError: " + repr(e),
+ exc_info=True)
+ raise SSLWrapper.Error(self.sock or self.sslobj, e)
+ except OpenSSL.SSL.Error, e:
+ if self.is_numtoolarge(e):
+ # warn, but ignore this exception
+ log.warning("Send: OpenSSL: asn1enc: first num too large (ignored)")
+ else:
+ log.error("Send: Caught OpenSSL.SSL.Error:", exc_info=True)
+ raise SSLWrapper.Error(self.sock or self.sslobj, e)
+ return 0
+
+
+class StdlibSSLWrapper(SSLWrapper):
+ """
+ Wrapper class for Python socket.ssl read() and write() methods
+ """
+
+ def __init__(self, *args):
+ self.parent = SSLWrapper
+ self.parent.__init__(self, *args)
+
+ def recv(self, bufsize, flags=None):
+ # we simply ignore flags since ssl object doesn't support it
+ try:
+ return self.sslobj.read(bufsize)
+ except socket.sslerror, e:
+ log.debug("Recv: Caught socket.sslerror: " + repr(e), exc_info=True)
+ if e.args[0] not in (socket.SSL_ERROR_WANT_READ, socket.SSL_ERROR_WANT_WRITE):
+ raise SSLWrapper.Error(self.sock or self.sslobj, e)
+ return None
+
+ def send(self, data, flags=None, now=False):
+ # we simply ignore flags since ssl object doesn't support it
+ try:
+ return self.sslobj.write(data)
+ except socket.sslerror, e:
+ log.debug("Send: Caught socket.sslerror:", exc_info=True)
+ if e.args[0] not in (socket.SSL_ERROR_WANT_READ, socket.SSL_ERROR_WANT_WRITE):
+ raise SSLWrapper.Error(self.sock or self.sslobj, e)
+ return 0
+
+
+class NonBlockingTLS(PlugIn):
+ """
+ TLS connection used to encrypts already estabilished tcp connection
+
+ Can be plugged into NonBlockingTCP and will make use of StdlibSSLWrapper or
+ PyOpenSSLWrapper.
+ """
+
+ def __init__(self, cacerts, mycerts):
+ """
+ :param cacerts: path to pem file with certificates of known XMPP servers
+ :param mycerts: path to pem file with certificates of user trusted servers
+ """
+ PlugIn.__init__(self)
+ self.cacerts = cacerts
+ self.mycerts = mycerts
+
+ # from ssl.h (partial extract)
+ ssl_h_bits = { "SSL_ST_CONNECT": 0x1000, "SSL_ST_ACCEPT": 0x2000,
+ "SSL_CB_LOOP": 0x01, "SSL_CB_EXIT": 0x02,
+ "SSL_CB_READ": 0x04, "SSL_CB_WRITE": 0x08,
+ "SSL_CB_ALERT": 0x4000,
+ "SSL_CB_HANDSHAKE_START": 0x10, "SSL_CB_HANDSHAKE_DONE": 0x20}
+
+ def plugin(self, owner):
+ """
+ Use to PlugIn TLS into transport and start establishing immediately.
+ Returns True if TLS/SSL was established correctly, otherwise False
+ """
+ log.info('Starting TLS estabilishing')
+ try:
+ res = self._startSSL()
+ except Exception, e:
+ log.error("PlugIn: while trying _startSSL():", exc_info=True)
+ return False
+ return res
+
+ def _dumpX509(self, cert, stream=sys.stderr):
+ print >> stream, "Digest (SHA-1):", cert.digest("sha1")
+ print >> stream, "Digest (MD5):", cert.digest("md5")
+ print >> stream, "Serial #:", cert.get_serial_number()
+ print >> stream, "Version:", cert.get_version()
+ print >> stream, "Expired:", ("Yes" if cert.has_expired() else "No")
+ print >> stream, "Subject:"
+ self._dumpX509Name(cert.get_subject(), stream)
+ print >> stream, "Issuer:"
+ self._dumpX509Name(cert.get_issuer(), stream)
+ self._dumpPKey(cert.get_pubkey(), stream)
+
+ def _dumpX509Name(self, name, stream=sys.stderr):
+ print >> stream, "X509Name:", str(name)
+
+ def _dumpPKey(self, pkey, stream=sys.stderr):
+ typedict = {OpenSSL.crypto.TYPE_RSA: "RSA",
+ OpenSSL.crypto.TYPE_DSA: "DSA"}
+ print >> stream, "PKey bits:", pkey.bits()
+ print >> stream, "PKey type: %s (%d)" % (typedict.get(pkey.type(),
+ "Unknown"), pkey.type())
+
+ def _startSSL(self):
+ """
+ Immediatedly switch socket to TLS mode. Used internally
+ """
+ log.debug("_startSSL called")
+
+ if USE_PYOPENSSL:
+ result = self._startSSL_pyOpenSSL()
+ else:
+ result = self._startSSL_stdlib()
+
+ if result:
+ log.debug('Synchronous handshake completed')
+ return True
+ else:
+ return False
+
+ def _load_cert_file(self, cert_path, cert_store, logg=True):
+ if not os.path.isfile(cert_path):
+ return
+ try:
+ f = open(cert_path)
+ except IOError, e:
+ log.warning('Unable to open certificate file %s: %s' % \
+ (cert_path, str(e)))
+ return
+ lines = f.readlines()
+ i = 0
+ begin = -1
+ for line in lines:
+ if 'BEGIN CERTIFICATE' in line:
+ begin = i
+ elif 'END CERTIFICATE' in line and begin > -1:
+ cert = ''.join(lines[begin:i+2])
+ try:
+ x509cert = OpenSSL.crypto.load_certificate(
+ OpenSSL.crypto.FILETYPE_PEM, cert)
+ cert_store.add_cert(x509cert)
+ except OpenSSL.crypto.Error, exception_obj:
+ if logg:
+ log.warning('Unable to load a certificate from file %s: %s' %\
+ (cert_path, exception_obj.args[0][0][2]))
+ except:
+ log.warning('Unknown error while loading certificate from file '
+ '%s' % cert_path)
+ begin = -1
+ i += 1
+
+ def _startSSL_pyOpenSSL(self):
+ log.debug("_startSSL_pyOpenSSL called")
+ tcpsock = self._owner
+ # NonBlockingHTTPBOSH instance has no attribute _owner
+ if hasattr(tcpsock, '_owner') and tcpsock._owner._caller.client_cert \
+ and os.path.exists(tcpsock._owner._caller.client_cert):
+ conn = tcpsock._owner._caller
+ # FIXME make a checkbox for Client Cert / SSLv23 / TLSv1
+ # If we are going to use a client cert/key pair for authentication,
+ # we choose TLSv1 method.
+ tcpsock._sslContext = OpenSSL.SSL.Context(OpenSSL.SSL.TLSv1_METHOD)
+ log.debug('Using client cert and key from %s' % conn.client_cert)
+ try:
+ p12 = OpenSSL.crypto.load_pkcs12(open(conn.client_cert).read(),
+ conn.client_cert_passphrase)
+ except OpenSSL.crypto.Error, exception_obj:
+ log.warning('Unable to load client pkcs12 certificate from '
+ 'file %s: %s ... Is it a valid PKCS12 cert?' % \
+ (conn.client_cert, exception_obj.args))
+ except:
+ log.warning('Unknown error while loading certificate from file '
+ '%s' % conn.client_cert)
+ else:
+ log.info('PKCS12 Client cert loaded OK')
+ try:
+ tcpsock._sslContext.use_certificate(p12.get_certificate())
+ tcpsock._sslContext.use_privatekey(p12.get_privatekey())
+ log.info('p12 cert and key loaded')
+ except OpenSSL.crypto.Error, exception_obj:
+ log.warning('Unable to extract client certificate from '
+ 'file %s' % conn.client_cert)
+ except Exception, msg:
+ log.warning('Unknown error extracting client certificate '
+ 'from file %s: %s' % (conn.client_cert, msg))
+ else:
+ log.info('client cert and key loaded OK')
+ else:
+ # See http://docs.python.org/dev/library/ssl.html
+ tcpsock._sslContext = OpenSSL.SSL.Context(OpenSSL.SSL.SSLv23_METHOD)
+ flags = OpenSSL.SSL.OP_NO_SSLv2
+ try:
+ flags |= OpenSSL.SSL.OP_NO_TICKET
+ except AttributeError, e:
+ # py-OpenSSL < 0.9 or old OpenSSL
+ flags |= 16384
+ tcpsock._sslContext.set_options(flags)
+
+ tcpsock.ssl_errnum = 0
+ tcpsock._sslContext.set_verify(OpenSSL.SSL.VERIFY_PEER,
+ self._ssl_verify_callback)
+ try:
+ tcpsock._sslContext.load_verify_locations(self.cacerts)
+ except:
+ log.warning('Unable to load SSL certificates from file %s' % \
+ os.path.abspath(self.cacerts))
+ store = tcpsock._sslContext.get_cert_store()
+ self._load_cert_file(self.mycerts, store)
+ if os.path.isdir('/etc/ssl/certs'):
+ for f in os.listdir('/etc/ssl/certs'):
+ # We don't logg because there is a lot a duplicated certs in this
+ # folder
+ self._load_cert_file(os.path.join('/etc/ssl/certs', f), store,
+ logg=False)
+
+ tcpsock._sslObj = OpenSSL.SSL.Connection(tcpsock._sslContext,
+ tcpsock._sock)
+ tcpsock._sslObj.set_connect_state() # set to client mode
+ wrapper = PyOpenSSLWrapper(tcpsock._sslObj)
+ tcpsock._recv = wrapper.recv
+ tcpsock._send = wrapper.send
+
+ log.debug("Initiating handshake...")
+ tcpsock._sslObj.setblocking(True)
+ try:
+ tcpsock._sslObj.do_handshake()
+ except:
+ log.error('Error while TLS handshake: ', exc_info=True)
+ return False
+ tcpsock._sslObj.setblocking(False)
+ self._owner.ssl_lib = PYOPENSSL
+ return True
+
+ def _startSSL_stdlib(self):
+ log.debug("_startSSL_stdlib called")
+ tcpsock=self._owner
+ try:
+ tcpsock._sock.setblocking(True)
+ tcpsock._sslObj = socket.ssl(tcpsock._sock, None, None)
+ tcpsock._sock.setblocking(False)
+ tcpsock._sslIssuer = tcpsock._sslObj.issuer()
+ tcpsock._sslServer = tcpsock._sslObj.server()
+ wrapper = StdlibSSLWrapper(tcpsock._sslObj, tcpsock._sock)
+ tcpsock._recv = wrapper.recv
+ tcpsock._send = wrapper.send
+ except:
+ log.error("Exception caught in _startSSL_stdlib:", exc_info=True)
+ return False
+ self._owner.ssl_lib = PYSTDLIB
+ return True
+
+ def _ssl_verify_callback(self, sslconn, cert, errnum, depth, ok):
+ # Exceptions can't propagate up through this callback, so print them here.
+ try:
+ self._owner.ssl_fingerprint_sha1 = cert.digest('sha1')
+ self._owner.ssl_certificate = cert
+ self._owner.ssl_errnum = errnum
+ self._owner.ssl_cert_pem = OpenSSL.crypto.dump_certificate(
+ OpenSSL.crypto.FILETYPE_PEM, cert)
+ return True
+ except:
+ log.error("Exception caught in _ssl_info_callback:", exc_info=True)
+ # Make sure something is printed, even if log is disabled.
+ traceback.print_exc()
diff --git a/nbxmpp/transports_nb.py b/nbxmpp/transports_nb.py
new file mode 100644
index 0000000..2c17a39
--- /dev/null
+++ b/nbxmpp/transports_nb.py
@@ -0,0 +1,785 @@
+## transports_nb.py
+## based on transports.py
+##
+## Copyright (C) 2003-2004 Alexey "Snake" Nezhdanov
+## modified by Dimitur Kirov <dkirov@gmail.com>
+## modified by Tomas Karasek <tom.to.the.k@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+
+"""
+Transports are objects responsible for connecting to XMPP server and putting
+data to wrapped sockets in in desired form (SSL, TLS, TCP, for HTTP proxy,
+for SOCKS5 proxy...)
+
+Transports are not aware of XMPP stanzas and only responsible for low-level
+connection handling.
+"""
+
+from simplexml import ustr
+from plugin import PlugIn
+from idlequeue import IdleObject
+import proxy_connectors
+import tls_nb
+
+import socket
+import errno
+import time
+import traceback
+import base64
+import urlparse
+
+import logging
+log = logging.getLogger('nbxmpp.transports_nb')
+
+def urisplit(uri):
+ """
+ Function for splitting URI string to tuple (protocol, host, port, path).
+ e.g. urisplit('http://httpcm.jabber.org:123/webclient') returns ('http',
+ 'httpcm.jabber.org', 123, '/webclient') return 443 as default port if proto
+ is https else 80
+ """
+ splitted = urlparse.urlsplit(uri)
+ proto, host, path = splitted.scheme, splitted.hostname, splitted.path
+ try:
+ port = splitted.port
+ except ValueError:
+ log.warn('port cannot be extracted from BOSH URL %s, using default port' \
+ % uri)
+ port = ''
+ if not port:
+ if proto == 'https':
+ port = 443
+ else:
+ port = 80
+ return proto, host, port, path
+
+def get_proxy_data_from_dict(proxy):
+ tcp_host, tcp_port, proxy_user, proxy_pass = None, None, None, None
+ proxy_type = proxy['type']
+ if proxy_type == 'bosh' and not proxy['bosh_useproxy']:
+ # with BOSH not over proxy we have to parse the hostname from BOSH URI
+ proto, tcp_host, tcp_port, path = urisplit(proxy['bosh_uri'])
+ else:
+ # with proxy!=bosh or with bosh over HTTP proxy we're connecting to proxy
+ # machine
+ tcp_host, tcp_port = proxy['host'], proxy['port']
+ if proxy.get('useauth', False):
+ proxy_user, proxy_pass = proxy['user'], proxy['pass']
+ return tcp_host, tcp_port, proxy_user, proxy_pass
+
+#: timeout to connect to the server socket, it doesn't include auth
+CONNECT_TIMEOUT_SECONDS = 30
+
+#: how long to wait for a disconnect to complete
+DISCONNECT_TIMEOUT_SECONDS = 5
+
+#: size of the buffer which reads data from server
+# if lower, more stanzas will be fragmented and processed twice
+RECV_BUFSIZE = 32768 # 2x maximum size of ssl packet, should be plenty
+# it's inefficient but should work. Problem is that connect machine makes wrong
+# assumptions and that we only check for pending data in sockets but not in SSL
+# buffer...
+
+DATA_RECEIVED = 'DATA RECEIVED'
+DATA_SENT = 'DATA SENT'
+DATA_ERROR = 'DATA ERROR'
+
+DISCONNECTED = 'DISCONNECTED'
+DISCONNECTING = 'DISCONNECTING'
+CONNECTING = 'CONNECTING'
+PROXY_CONNECTING = 'PROXY_CONNECTING'
+CONNECTED = 'CONNECTED'
+STATES = (DISCONNECTED, CONNECTING, PROXY_CONNECTING, CONNECTED, DISCONNECTING)
+
+class NonBlockingTransport(PlugIn):
+ """
+ Abstract class representing a transport
+
+ Subclasses CAN have different constructor signature but connect method SHOULD
+ be the same.
+ """
+
+ def __init__(self, raise_event, on_disconnect, idlequeue, estabilish_tls,
+ certs):
+ """
+ Each trasport class can have different constructor but it has to have at
+ least all the arguments of NonBlockingTransport constructor
+
+ :param raise_event: callback for monitoring of sent and received data
+ :param on_disconnect: callback called on disconnection during runtime
+ :param idlequeue: processing idlequeue
+ :param estabilish_tls: boolean whether to estabilish TLS connection after
+ TCP connection is done
+ :param certs: tuple of (cacerts, mycerts) see constructor of
+ tls_nb.NonBlockingTLS for more details
+ """
+ PlugIn.__init__(self)
+ self.raise_event = raise_event
+ self.on_disconnect = on_disconnect
+ self.on_connect = None
+ self.on_connect_failure = None
+ self.idlequeue = idlequeue
+ self.on_receive = None
+ self.server = None
+ self.port = None
+ self.conn_5tuple = None
+ self.set_state(DISCONNECTED)
+ self.estabilish_tls = estabilish_tls
+ self.certs = certs
+ # type of used ssl lib (if any) will be assigned to this member var
+ self.ssl_lib = None
+ self._exported_methods=[self.onreceive, self.set_send_timeout,
+ self.set_send_timeout2, self.set_timeout, self.remove_timeout,
+ self.start_disconnect]
+
+ # time to wait for SOME stanza to come and then send keepalive
+ self.sendtimeout = 0
+
+ # in case we want to something different than sending keepalives
+ self.on_timeout = None
+ self.on_timeout2 = None
+
+ def plugin(self, owner):
+ owner.Connection = self
+
+ def plugout(self):
+ self._owner.Connection = None
+ self._owner = None
+ self.disconnect(do_callback=False)
+
+ def connect(self, conn_5tuple, on_connect, on_connect_failure):
+ """
+ Creates and connects transport to server and port defined in conn_5tuple
+ which should be item from list returned from getaddrinfo
+
+ :param conn_5tuple: 5-tuple returned from getaddrinfo
+ :param on_connect: callback called on successful connect to the server
+ :param on_connect_failure: callback called on failure when connecting
+ """
+ self.on_connect = on_connect
+ self.on_connect_failure = on_connect_failure
+ self.server, self.port = conn_5tuple[4][:2]
+ self.conn_5tuple = conn_5tuple
+
+ def set_state(self, newstate):
+ assert(newstate in STATES)
+ self.state = newstate
+
+ def get_state(self):
+ return self.state
+
+ def _on_connect(self):
+ """
+ Preceeds call of on_connect callback
+ """
+ # data is reference to socket wrapper instance. We don't need it in client
+ # because
+ self.set_state(CONNECTED)
+ self.on_connect()
+
+ def _on_connect_failure(self, err_message):
+ """
+ Preceeds call of on_connect_failure callback
+ """
+ # In case of error while connecting we need to disconnect transport
+ # but we don't want to call DisconnectHandlers from client,
+ # thus the do_callback=False
+ self.disconnect(do_callback=False)
+ self.on_connect_failure(err_message=err_message)
+
+ def send(self, raw_data, now=False):
+ if self.get_state() == DISCONNECTED:
+ log.error('Unable to send %s \n because state is %s.' %
+ (raw_data, self.get_state()))
+
+ def disconnect(self, do_callback=True):
+ self.set_state(DISCONNECTED)
+ if do_callback:
+ # invoke callback given in __init__
+ self.on_disconnect()
+
+ def onreceive(self, recv_handler):
+ """
+ Set the on_receive callback.
+
+ onreceive(None) sets callback to Dispatcher.ProcessNonBlocking which is
+ the default one that will decide what to do with received stanza based on
+ its tag name and namespace.
+
+ Do not confuse it with on_receive() method, which is the callback
+ itself.
+ """
+ if not recv_handler:
+ if hasattr(self, '_owner') and hasattr(self._owner, 'Dispatcher'):
+ self.on_receive = self._owner.Dispatcher.ProcessNonBlocking
+ else:
+ log.warn('No Dispatcher plugged. Received data will not be processed')
+ self.on_receive = None
+ return
+ self.on_receive = recv_handler
+
+ def _tcp_connecting_started(self):
+ self.set_state(CONNECTING)
+
+ def read_timeout(self):
+ """
+ Called when there's no response from server in defined timeout
+ """
+ if self.on_timeout:
+ self.on_timeout()
+ self.renew_send_timeout()
+
+ def read_timeout2(self):
+ """
+ called when there's no response from server in defined timeout
+ """
+ if self.on_timeout2:
+ self.on_timeout2()
+ self.renew_send_timeout2()
+
+ def renew_send_timeout(self):
+ if self.on_timeout and self.sendtimeout > 0:
+ self.set_timeout(self.sendtimeout)
+
+ def renew_send_timeout2(self):
+ if self.on_timeout2 and self.sendtimeout2 > 0:
+ self.set_timeout2(self.sendtimeout2)
+
+ def set_timeout(self, timeout):
+ self.idlequeue.set_read_timeout(self.fd, timeout)
+
+ def set_timeout2(self, timeout2):
+ self.idlequeue.set_read_timeout(self.fd, timeout2, self.read_timeout2)
+
+ def get_fd(self):
+ pass
+
+ def remove_timeout(self):
+ self.idlequeue.remove_timeout(self.fd)
+
+ def set_send_timeout(self, timeout, on_timeout):
+ self.sendtimeout = timeout
+ if self.sendtimeout > 0:
+ self.on_timeout = on_timeout
+ else:
+ self.on_timeout = None
+
+ def set_send_timeout2(self, timeout2, on_timeout2):
+ self.sendtimeout2 = timeout2
+ if self.sendtimeout2 > 0:
+ self.on_timeout2 = on_timeout2
+ else:
+ self.on_timeout2 = None
+
+ # FIXME: where and why does this need to be called
+ def start_disconnect(self):
+ self.set_state(DISCONNECTING)
+
+
+class NonBlockingTCP(NonBlockingTransport, IdleObject):
+ """
+ Non-blocking TCP socket wrapper
+
+ It is used for simple XMPP connection. Can be connected via proxy and can
+ estabilish TLS connection.
+ """
+ def __init__(self, raise_event, on_disconnect, idlequeue, estabilish_tls,
+ certs, proxy_dict=None):
+ """
+ :param proxy_dict: dictionary with proxy data as loaded from config file
+ """
+ NonBlockingTransport.__init__(self, raise_event, on_disconnect, idlequeue,
+ estabilish_tls, certs)
+ IdleObject.__init__(self)
+
+ # queue with messages to be send
+ self.sendqueue = []
+
+ # bytes remained from the last send message
+ self.sendbuff = ''
+
+ self.proxy_dict = proxy_dict
+ self.on_remote_disconnect = self.disconnect
+
+ # FIXME: transport should not be aware xmpp
+ def start_disconnect(self):
+ NonBlockingTransport.start_disconnect(self)
+ self.send('</stream:stream>', now=True)
+ self.disconnect()
+
+ def connect(self, conn_5tuple, on_connect, on_connect_failure):
+ NonBlockingTransport.connect(self, conn_5tuple, on_connect,
+ on_connect_failure)
+ log.info('NonBlockingTCP Connect :: About to connect to %s:%s' %
+ (self.server, self.port))
+
+ try:
+ self._sock = socket.socket(*conn_5tuple[:3])
+ except socket.error, (errnum, errstr):
+ self._on_connect_failure('NonBlockingTCP Connect: Error while creating\
+ socket: %s %s' % (errnum, errstr))
+ return
+
+ self._send = self._sock.send
+ self._recv = self._sock.recv
+ self.fd = self._sock.fileno()
+
+ # we want to be notified when send is possible to connected socket because
+ # it means the TCP connection is estabilished
+ self._plug_idle(writable=True, readable=False)
+ self.peerhost = None
+
+ # variable for errno symbol that will be found from exception raised
+ # from connect()
+ errnum = 0
+ errstr = str()
+
+ # set timeout for TCP connecting - if nonblocking connect() fails, pollend
+ # is called. If if succeeds pollout is called.
+ self.idlequeue.set_read_timeout(self.fd, CONNECT_TIMEOUT_SECONDS)
+
+ try:
+ self._sock.setblocking(False)
+ self._sock.connect((self.server, self.port))
+ except Exception, exc:
+ errnum, errstr = exc.args
+
+ if errnum in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK):
+ # connecting in progress
+ log.info('After NB connect() of %s. "%s" raised => CONNECTING' %
+ (id(self), errstr))
+ self._tcp_connecting_started()
+ return
+
+ # if there was some other exception, call failure callback and unplug
+ # transport which will also remove read_timeouts for descriptor
+ self._on_connect_failure('Exception while connecting to %s:%s - %s %s' %
+ (self.server, self.port, errnum, errstr))
+
+ def _connect_to_proxy(self):
+ self.set_state(PROXY_CONNECTING)
+ if self.proxy_dict['type'] == 'socks5':
+ proxyclass = proxy_connectors.SOCKS5Connector
+ elif self.proxy_dict['type'] == 'http' :
+ proxyclass = proxy_connectors.HTTPCONNECTConnector
+ proxyclass.get_instance(
+ send_method=self.send,
+ onreceive=self.onreceive,
+ old_on_receive=self.on_receive,
+ on_success=self._on_connect,
+ on_failure=self._on_connect_failure,
+ xmpp_server=self.proxy_dict['xmpp_server'],
+ proxy_creds=self.proxy_dict['credentials'])
+
+ def _on_connect(self):
+ """
+ Preceed invoking of on_connect callback. TCP connection is already
+ estabilished by this time
+ """
+ if self.estabilish_tls:
+ self.tls_init(
+ on_succ = lambda: NonBlockingTransport._on_connect(self),
+ on_fail = lambda: self._on_connect_failure(
+ 'error while estabilishing TLS'))
+ else:
+ NonBlockingTransport._on_connect(self)
+
+ def tls_init(self, on_succ, on_fail):
+ """
+ Estabilishes TLS/SSL using this TCP connection by plugging a
+ NonBlockingTLS module
+ """
+ cacerts, mycerts = self.certs
+ result = tls_nb.NonBlockingTLS.get_instance(cacerts, mycerts).PlugIn(self)
+ if result:
+ on_succ()
+ else:
+ on_fail()
+
+ def pollin(self):
+ """
+ Called by idlequeu when receive on plugged socket is possible
+ """
+ log.info('pollin called, state == %s' % self.get_state())
+ self._do_receive()
+
+ def pollout(self):
+ """
+ Called by idlequeu when send to plugged socket is possible
+ """
+ log.info('pollout called, state == %s' % self.get_state())
+
+ if self.get_state() == CONNECTING:
+ log.info('%s socket wrapper connected' % id(self))
+ self.idlequeue.remove_timeout(self.fd)
+ self._plug_idle(writable=False, readable=False)
+ self.peerhost = self._sock.getsockname()
+ if self.proxy_dict:
+ self._connect_to_proxy()
+ else:
+ self._on_connect()
+ else:
+ self._do_send()
+
+ def pollend(self):
+ """
+ Called by idlequeue on TCP connection errors
+ """
+ log.info('pollend called, state == %s' % self.get_state())
+
+ if self.get_state() == CONNECTING:
+ self._on_connect_failure('Error during connect to %s:%s' %
+ (self.server, self.port))
+ else:
+ self.disconnect()
+
+ def disconnect(self, do_callback=True):
+ if self.get_state() == DISCONNECTED:
+ return
+ self.set_state(DISCONNECTED)
+ self.idlequeue.unplug_idle(self.fd)
+ if 'NonBlockingTLS' in self.__dict__:
+ self.NonBlockingTLS.PlugOut()
+ try:
+ self._sock.shutdown(socket.SHUT_RDWR)
+ self._sock.close()
+ except socket.error, (errnum, errstr):
+ log.info('Error while disconnecting socket: %s' % errstr)
+ self.fd = -1
+ NonBlockingTransport.disconnect(self, do_callback)
+
+ def read_timeout(self):
+ log.info('read_timeout called, state == %s' % self.get_state())
+ if self.get_state() == CONNECTING:
+ # if read_timeout is called during connecting, connect() didn't end yet
+ # thus we have to call the tcp failure callback
+ self._on_connect_failure('Error during connect to %s:%s' %
+ (self.server, self.port))
+ else:
+ NonBlockingTransport.read_timeout(self)
+
+ def set_timeout(self, timeout):
+ if self.get_state() != DISCONNECTED and self.fd != -1:
+ NonBlockingTransport.set_timeout(self, timeout)
+ else:
+ log.warn('set_timeout: TIMEOUT NOT SET: state is %s, fd is %s' %
+ (self.get_state(), self.fd))
+
+ def remove_timeout(self):
+ if self.fd:
+ NonBlockingTransport.remove_timeout(self)
+ else:
+ log.warn('remove_timeout: no self.fd state is %s' % self.get_state())
+
+ def send(self, raw_data, now=False):
+ """
+ Append raw_data to the queue of messages to be send. If supplied data is
+ unicode string, encode it to utf-8.
+ """
+ NonBlockingTransport.send(self, raw_data, now)
+
+ r = self.encode_stanza(raw_data)
+
+ if now:
+ self.sendqueue.insert(0, r)
+ self._do_send()
+ else:
+ self.sendqueue.append(r)
+
+ self._plug_idle(writable=True, readable=True)
+
+ def encode_stanza(self, stanza):
+ """
+ Encode str or unicode to utf-8
+ """
+ if isinstance(stanza, unicode):
+ stanza = stanza.encode('utf-8')
+ elif not isinstance(stanza, str):
+ stanza = ustr(stanza).encode('utf-8')
+ return stanza
+
+ def _plug_idle(self, writable, readable):
+ """
+ Plug file descriptor of socket to Idlequeue
+
+ Plugged socket will be watched for "send possible" or/and "recv possible"
+ events. pollin() callback is invoked on "recv possible", pollout() on
+ "send_possible".
+
+ Plugged socket will always be watched for "error" event - in that case,
+ pollend() is called.
+ """
+ log.info('Plugging fd %d, W:%s, R:%s' % (self.fd, writable, readable))
+ self.idlequeue.plug_idle(self, writable, readable)
+
+ def _do_send(self):
+ """
+ Called when send() to connected socket is possible. First message from
+ sendqueue will be sent
+ """
+ if not self.sendbuff:
+ if not self.sendqueue:
+ log.warn('calling send on empty buffer and queue')
+ self._plug_idle(writable=False, readable=True)
+ return None
+ self.sendbuff = self.sendqueue.pop(0)
+ try:
+ send_count = self._send(self.sendbuff)
+ if send_count:
+ sent_data = self.sendbuff[:send_count]
+ self.sendbuff = self.sendbuff[send_count:]
+ self._plug_idle(
+ writable=((self.sendqueue!=[]) or (self.sendbuff!='')),
+ readable=True)
+ self.raise_event(DATA_SENT, sent_data)
+
+ except Exception:
+ log.error('_do_send:', exc_info=True)
+ traceback.print_exc()
+ self.disconnect()
+
+ def _do_receive(self):
+ """
+ Reads all pending incoming data. Will call owner's disconnected() method
+ if appropriate
+ """
+ received = None
+ errnum = 0
+ errstr = 'No Error Set'
+
+ try:
+ # get as many bites, as possible, but not more than RECV_BUFSIZE
+ received = self._recv(RECV_BUFSIZE)
+ except socket.error, (errnum, errstr):
+ log.info("_do_receive: got %s:" % received, exc_info=True)
+ except tls_nb.SSLWrapper.Error, e:
+ log.info("_do_receive, caught SSL error, got %s:" % received,
+ exc_info=True)
+ errnum, errstr = e.errno, e.strerror
+
+ if received == '':
+ errstr = 'zero bytes on recv'
+
+ if (self.ssl_lib is None and received == '') or \
+ (self.ssl_lib == tls_nb.PYSTDLIB and errnum == 8 ) or \
+ (self.ssl_lib == tls_nb.PYOPENSSL and errnum == -1 ):
+ # 8 in stdlib: errstr == EOF occured in violation of protocol
+ # -1 in pyopenssl: errstr == Unexpected EOF
+ log.info("Disconnected by remote server: #%s, %s" % (errnum, errstr))
+ self.on_remote_disconnect()
+ return
+
+ if errnum:
+ log.info("Connection to %s:%s lost: %s %s" % (self.server, self.port,
+ errnum, errstr), exc_info=True)
+ self.disconnect()
+ return
+
+ # this branch is for case of non-fatal SSL errors - None is returned from
+ # recv() but no errnum is set
+ if received is None:
+ return
+
+ # we have received some bytes, stop the timeout!
+ self.remove_timeout()
+ self.renew_send_timeout()
+ self.renew_send_timeout2()
+ # pass received data to owner
+ if self.on_receive:
+ self.raise_event(DATA_RECEIVED, received)
+ self._on_receive(received)
+ else:
+ # This should never happen, so we need the debug.
+ # (If there is no handler on receive specified, data is passed to
+ # Dispatcher.ProcessNonBlocking)
+ log.error('SOCKET %s Unhandled data received: %s' % (id(self),
+ received))
+ self.disconnect()
+
+ def _on_receive(self, data):
+ """
+ Preceeds on_receive callback. It peels off and checks HTTP headers in
+ HTTP classes, in here it just calls the callback
+ """
+ self.on_receive(data)
+
+
+class NonBlockingHTTP(NonBlockingTCP):
+ """
+ Socket wrapper that creates HTTP message out of sent data and peels-off HTTP
+ headers from incoming messages
+ """
+
+ def __init__(self, raise_event, on_disconnect, idlequeue, estabilish_tls,
+ certs, on_http_request_possible, on_persistent_fallback, http_dict,
+ proxy_dict=None):
+ """
+ :param on_http_request_possible: method to call when HTTP request to
+ socket owned by transport is possible.
+ :param on_persistent_fallback: callback called when server ends TCP
+ connection. It doesn't have to be fatal for HTTP session.
+ :param http_dict: dictionary with data for HTTP request and headers
+ """
+ NonBlockingTCP.__init__(self, raise_event, on_disconnect, idlequeue,
+ estabilish_tls, certs, proxy_dict)
+
+ self.http_protocol, self.http_host, self.http_port, self.http_path = \
+ urisplit(http_dict['http_uri'])
+ self.http_protocol = self.http_protocol or 'http'
+ self.http_path = self.http_path or '/'
+ self.http_version = http_dict['http_version']
+ self.http_persistent = http_dict['http_persistent']
+ self.add_proxy_headers = http_dict['add_proxy_headers']
+
+ if 'proxy_user' in http_dict and 'proxy_pass' in http_dict:
+ self.proxy_user, self.proxy_pass = http_dict['proxy_user'], http_dict[
+ 'proxy_pass']
+ else:
+ self.proxy_user, self.proxy_pass = None, None
+
+ # buffer for partial responses
+ self.recvbuff = ''
+ self.expected_length = 0
+ self.pending_requests = 0
+ self.on_http_request_possible = on_http_request_possible
+ self.last_recv_time = 0
+ self.close_current_connection = False
+ self.on_remote_disconnect = lambda: on_persistent_fallback(self)
+
+ def http_send(self, raw_data, now=False):
+ self.send(self.build_http_message(raw_data), now)
+
+ def _on_receive(self, data):
+ """
+ Preceeds passing received data to owner class. Gets rid of HTTP headers
+ and checks them.
+ """
+ if self.get_state() == PROXY_CONNECTING:
+ NonBlockingTCP._on_receive(self, data)
+ return
+
+ # append currently received data to HTTP msg in buffer
+ self.recvbuff = '%s%s' % (self.recvbuff or '', data)
+ statusline, headers, httpbody, buffer_rest = self.parse_http_message(
+ self.recvbuff)
+
+ if not (statusline and headers and httpbody):
+ log.debug('Received incomplete HTTP response')
+ return
+
+ if statusline[1] != '200':
+ log.error('HTTP Error: %s %s' % (statusline[1], statusline[2]))
+ self.disconnect()
+ return
+ self.expected_length = int(headers['Content-Length'])
+ if 'Connection' in headers and headers['Connection'].strip()=='close':
+ self.close_current_connection = True
+
+ if self.expected_length > len(httpbody):
+ # If we haven't received the whole HTTP mess yet, let's end the thread.
+ # It will be finnished from one of following recvs on plugged socket.
+ log.info('not enough bytes in HTTP response - %d expected, got %d' %
+ (self.expected_length, len(httpbody)))
+ else:
+ # First part of buffer has been extraced and is going to be handled,
+ # remove it from buffer
+ self.recvbuff = buffer_rest
+
+ # everything was received
+ self.expected_length = 0
+
+ if not self.http_persistent or self.close_current_connection:
+ # not-persistent connections disconnect after response
+ self.disconnect(do_callback=False)
+ self.close_current_connection = False
+ self.last_recv_time = time.time()
+ self.on_receive(data=httpbody, socket=self)
+ self.on_http_request_possible()
+
+ def build_http_message(self, httpbody, method='POST'):
+ """
+ Builds http message with given body. Values for headers and status line
+ fields are taken from class variables
+ """
+ absolute_uri = '%s://%s:%s%s' % (self.http_protocol, self.http_host,
+ self.http_port, self.http_path)
+ headers = ['%s %s %s' % (method, absolute_uri, self.http_version),
+ 'Host: %s:%s' % (self.http_host, self.http_port),
+ 'User-Agent: Gajim',
+ 'Content-Type: text/xml; charset=utf-8',
+ 'Content-Length: %s' % len(str(httpbody))]
+ if self.add_proxy_headers:
+ headers.append('Proxy-Connection: keep-alive')
+ headers.append('Pragma: no-cache')
+ if self.proxy_user and self.proxy_pass:
+ credentials = '%s:%s' % (self.proxy_user, self.proxy_pass)
+ credentials = base64.encodestring(credentials).strip()
+ headers.append('Proxy-Authorization: Basic %s' % credentials)
+ else:
+ headers.append('Connection: Keep-Alive')
+ headers.append('\r\n')
+ headers = '\r\n'.join(headers)
+ return('%s%s' % (headers, httpbody))
+
+ def parse_http_message(self, message):
+ """
+ Split http message into a tuple:
+ - (statusline - list of e.g. ['HTTP/1.1', '200', 'OK'],
+ - headers - dictionary of headers e.g. {'Content-Length': '604',
+ 'Content-Type': 'text/xml; charset=utf-8'},
+ - httpbody - string with http body)
+ - http_rest - what is left in the message after a full HTTP header + body
+ """
+ splitted = message.split('\r\n\r\n')
+ if len(splitted) < 2:
+ # no complete http message. Keep filling the buffer until we find one
+ buffer_rest = message
+ return ('', '', '', buffer_rest)
+ else:
+ (header, httpbody) = splitted[:2]
+ header = header.replace('\r', '')
+ header = header.lstrip('\n')
+ header = header.split('\n')
+ statusline = header[0].split(' ', 2)
+ header = header[1:]
+ headers = {}
+ for dummy in header:
+ row = dummy.split(' ', 1)
+ headers[row[0][:-1]] = row[1]
+ body_size = headers['Content-Length']
+ rest_splitted = splitted[2:]
+ while (len(httpbody) < body_size) and rest_splitted:
+ # Complete httpbody until it has the announced size
+ httpbody = '\n\n'.join([httpbody, rest_splitted.pop(0)])
+ buffer_rest = "\n\n".join(rest_splitted)
+ return (statusline, headers, httpbody, buffer_rest)
+
+
+class NonBlockingHTTPBOSH(NonBlockingHTTP):
+ """
+ Class for BOSH HTTP connections. Slightly redefines HTTP transport by
+ calling bosh bodytag generating callback before putting data on wire
+ """
+
+ def set_stanza_build_cb(self, build_cb):
+ self.build_cb = build_cb
+
+ def _do_send(self):
+ if self.state == PROXY_CONNECTING:
+ NonBlockingTCP._do_send(self)
+ return
+ if not self.sendbuff:
+ stanza = self.build_cb(socket=self)
+ stanza = self.encode_stanza(stanza)
+ stanza = self.build_http_message(httpbody=stanza)
+ self.sendbuff = stanza
+ NonBlockingTCP._do_send(self)
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..e735504
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,12 @@
+#!/usr/bin/env python
+
+from distutils.core import setup
+
+setup(name='nbxmpp',
+ version='0.1',
+ description='Non blocking Jabber/XMPP module',
+ author='Yann Leboulanger',
+ author_email='asterix@lagaule.org',
+ url='http://python-nbxmpp.gajim.org',
+ packages=['nbxmpp'],
+)