You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
917 B
38 lines
917 B
# See LICENSE
|
|
|
|
from array import array
|
|
|
|
from messaging.mms.mms_pdu import MMSDecoder
|
|
|
|
|
|
def is_a_wap_push_notification(s):
|
|
if not isinstance(s, str):
|
|
raise TypeError("data must be an array.array serialised to string")
|
|
|
|
data = array("B", s)
|
|
|
|
try:
|
|
return data[1] == 0x06
|
|
except IndexError:
|
|
return False
|
|
|
|
|
|
def extract_push_notification(s):
|
|
data = array("B", s)
|
|
|
|
wap_push, offset = data[1:3]
|
|
assert wap_push == 0x06
|
|
|
|
offset += 3
|
|
data = data[offset:]
|
|
|
|
# XXX: Not all WAP pushes are MMS
|
|
return MMSDecoder().decode_data(data)
|
|
|
|
|
|
def is_mms_notification(push):
|
|
# XXX: Pretty poor, but until we decode generic WAP pushes
|
|
# it will have to suffice. Ideally we would read the
|
|
# content-type from the WAP push header and test
|
|
return (push.headers.get('From') is not None and
|
|
push.headers.get('Content-Location') is not None)
|