Lines 20-26
Link Here
|
20 |
different handlers to different XMPP stanzas and namespaces |
20 |
different handlers to different XMPP stanzas and namespaces |
21 |
""" |
21 |
""" |
22 |
|
22 |
|
23 |
import simplexml, sys, locale |
23 |
import re, simplexml, sys, locale |
24 |
from xml.parsers.expat import ExpatError |
24 |
from xml.parsers.expat import ExpatError |
25 |
from plugin import PlugIn |
25 |
from plugin import PlugIn |
26 |
from protocol import (NS_STREAMS, NS_XMPP_STREAMS, NS_HTTP_BIND, Iq, Presence, |
26 |
from protocol import (NS_STREAMS, NS_XMPP_STREAMS, NS_HTTP_BIND, Iq, Presence, |
Lines 89-94
Link Here
|
89 |
self.UnregisterHandler, self.RegisterProtocol, |
89 |
self.UnregisterHandler, self.RegisterProtocol, |
90 |
self.SendAndWaitForResponse, self.SendAndCallForResponse, |
90 |
self.SendAndWaitForResponse, self.SendAndCallForResponse, |
91 |
self.getAnID, self.Event, self.send] |
91 |
self.getAnID, self.Event, self.send] |
|
|
92 |
|
93 |
# \ufddo -> \ufdef range |
94 |
c = u'\ufdd0' |
95 |
r = c.encode('utf8') |
96 |
while (c < u'\ufdef'): |
97 |
c = unichr(ord(c) + 1) |
98 |
r += '|' + c.encode('utf8') |
99 |
|
100 |
# \ufffe-\uffff, \u1fffe-\u1ffff, ..., \u10fffe-\u10ffff |
101 |
c = u'\ufffe' |
102 |
r += '|' + c.encode('utf8') |
103 |
r += '|' + unichr(ord(c) + 1).encode('utf8') |
104 |
while (c < u'\U0010fffe'): |
105 |
c = unichr(ord(c) + 0x10000) |
106 |
r += '|' + c.encode('utf8') |
107 |
r += '|' + unichr(ord(c) + 1).encode('utf8') |
108 |
|
109 |
self.invalid_chars_re = re.compile(r) |
92 |
|
110 |
|
93 |
def getAnID(self): |
111 |
def getAnID(self): |
94 |
global outgoingID |
112 |
global outgoingID |
Lines 174-179
Link Here
|
174 |
raise ValueError('Incorrect stream start: (%s,%s). Terminating.' |
192 |
raise ValueError('Incorrect stream start: (%s,%s). Terminating.' |
175 |
% (tag, ns)) |
193 |
% (tag, ns)) |
176 |
|
194 |
|
|
|
195 |
def replace_non_character(self, data): |
196 |
return re.sub(self.invalid_chars_re, u'\ufffd'.encode('utf-8'), data) |
197 |
|
177 |
def ProcessNonBlocking(self, data): |
198 |
def ProcessNonBlocking(self, data): |
178 |
""" |
199 |
""" |
179 |
Check incoming stream for data waiting |
200 |
Check incoming stream for data waiting |
Lines 189-194
Link Here
|
189 |
# disconnect method will never be called. |
210 |
# disconnect method will never be called. |
190 |
# Is this intended? |
211 |
# Is this intended? |
191 |
# also look at transports start_disconnect() |
212 |
# also look at transports start_disconnect() |
|
|
213 |
data = self.replace_non_character(data) |
192 |
for handler in self._cycleHandlers: |
214 |
for handler in self._cycleHandlers: |
193 |
handler(self) |
215 |
handler(self) |
194 |
if len(self._pendingExceptions) > 0: |
216 |
if len(self._pendingExceptions) > 0: |