4 from slixmpp
.util
import bytes
5 from slixmpp
.exceptions
import XMPPError
6 from slixmpp
.xmlstream
import ElementBase
9 VALID_B64
= re
.compile(r
'[A-Za-z0-9\+\/]*=*')
13 return bytes(base64
.b64encode(bytes(data
))).decode('utf-8')
17 return bytes(base64
.b64decode(bytes(data
)))
20 class Open(ElementBase
):
22 namespace
= 'http://jabber.org/protocol/ibb'
23 plugin_attrib
= 'ibb_open'
24 interfaces
= set(('block_size', 'sid', 'stanza'))
26 def get_block_size(self
):
27 return int(self
._get
_attr
('block-size'))
29 def set_block_size(self
, value
):
30 self
._set
_attr
('block-size', str(value
))
32 def del_block_size(self
):
33 self
._del
_attr
('block-size')
36 class Data(ElementBase
):
38 namespace
= 'http://jabber.org/protocol/ibb'
39 plugin_attrib
= 'ibb_data'
40 interfaces
= set(('seq', 'sid', 'data'))
41 sub_interfaces
= set(['data'])
44 return int(self
._get
_attr
('seq', '0'))
46 def set_seq(self
, value
):
47 self
._set
_attr
('seq', str(value
))
50 b64_data
= self
.xml
.text
.strip()
51 if VALID_B64
.match(b64_data
).group() == b64_data
:
52 return from_b64(b64_data
)
54 raise XMPPError('not-acceptable')
56 def set_data(self
, value
):
57 self
.xml
.text
= to_b64(value
)
63 class Close(ElementBase
):
65 namespace
= 'http://jabber.org/protocol/ibb'
66 plugin_attrib
= 'ibb_close'
67 interfaces
= set(['sid'])