Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ee41075

Browse files
author
Ben Weaver
committed
Switch to chunked XML parsing after initial stream negotiation is done.
1 parent a3c7a2e commit ee41075

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

xmpp/core.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ def listen(self):
5757

5858
return self
5959

60+
def activate(self):
61+
"""Default plugin activation is done after basic Features have
62+
been negotiated."""
63+
64+
self.parser.stop_tokenizing()
65+
self.state.activate()
66+
return self
67+
6068
def on_stream_secured(self, tls):
6169
self.secured = True
6270

@@ -390,7 +398,6 @@ def __init__(self, **options):
390398
not options.get('server_side')
391399
or (options.get('keyfile') and options.get('certfile'))
392400
)
393-
print 'active?', options, self._active
394401

395402
def active(self):
396403
return self._active and self.use_tls()
@@ -612,7 +619,7 @@ def handle_open_stream(self, attr):
612619
self.state.trigger(ReceivedOpenStream).run(self._opened)
613620

614621
def _opened(self):
615-
self.state.one(SessionStarted, thunk(self.state.activate))
622+
self.state.one(SessionStarted, thunk(self.activate))
616623
self.wait_for_features()
617624

618625
### ---------- Outgoing Stream ----------
@@ -637,7 +644,7 @@ def handle_open_stream(self, attr):
637644
def _opened(self):
638645
self.open_stream()
639646
if not self.send_features():
640-
self.state.activate()
647+
self.activate()
641648

642649
def handle_stanza(self, elem):
643650
if self.authJID:

xmpp/xml.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def __init__(self, target, **kwargs):
5151
self.target = target
5252
self.parser = etree.XMLParser(target=target, **kwargs)
5353
self.rb = ''
54+
self.feed = self.feed_tokens
5455
self.stop = False
5556
self.more = False
5657

@@ -67,14 +68,11 @@ def reset(self):
6768
return self
6869

6970
def stop_tokenizing(self):
70-
if self.rb is not None:
71-
if self.rb:
72-
self.parser.feed(self.rb)
73-
self.rb = None
71+
if self.feed == self.feed_tokens:
7472
self.feed = self.parser.feed
7573
return self
7674

77-
def feed(self, data):
75+
def feed_tokens(self, data):
7876
## This method buffers data and carefully feeds tokens from
7977
## the buffer into the parser. The parser target may reset
8078
## the parser while a particular token is being handled, so if

0 commit comments

Comments
 (0)