Esempio n. 1
0
File: mms.py Progetto: achiang/wader
def dbus_data_to_mms(headers, data_parts):
    """Returns a `MMSMessage` out of ``dbus_data``"""
    mms = MMSMessage()
    content_type = ''

    for key, val in headers.items():
        if key == 'Content-Type':
            content_type = val
        else:
            mms.headers[key] = val

    mms.content_type = content_type

    # add data parts
    for data_part in data_parts:
        content_type = data_part['Content-Type']
        data = array("B", data_part['data'])
        parameters = data_part.get('parameters', {})

        dp = DataPart()
        dp.set_data(data, content_type, parameters)
        # XXX: MMS message with no SMIL support

        # Content-Type: application/vnd.wap.multipart.mixed
        mms.add_data_part(dp)

    return mms
Esempio n. 2
0
    def test_encoding_m_sendnotifyresp_ind(self):
        message = MMSMessage()
        message.headers['Transaction-Id'] = 'NOK5AIdhfTMYSG4JeIgAAsHtp72AGAAAAAAAA'
        message.headers['Message-Type'] = 'm-notifyresp-ind'
        message.headers['Status'] = 'Retrieved'
        data = [
            140, 131, 152, 78, 79, 75, 53, 65, 73, 100, 104, 102, 84, 77,
            89, 83, 71, 52, 74, 101, 73, 103, 65, 65, 115, 72, 116, 112,
            55, 50, 65, 71, 65, 65, 65, 65, 65, 65, 65, 65, 0, 141, 144,
            149, 129, 132, 163, 1, 35, 129]

        self.assertEqual(list(message.encode()[:50]), data)
Esempio n. 3
0
 def test_decoding_TOMSLOT_mms(self):
     path = os.path.join(DATA_DIR, 'TOMSLOT.MMS')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': '*****@*****.**', 'Transaction-Id': '1234',
         'MMS-Version': '1.0', 'Message-Type': 'm-retrieve-conf',
         'Date': datetime.datetime(2003, 2, 16, 3, 48, 33),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<tomslot.smil>', 'Type': 'application/smil'}),
         'Subject': 'Tom Slot Band',
     }
     smil_data = '<smil>\r\n\t<head>\r\n\t\t<meta name="title" content="smil"/>\r\n\t\t<meta name="author" content="PANASONIC"/>\r\n\t\t<layout>\r\n\t\t\t<root-layout background-color="#FFFFFF" width="132" height="176"/>\r\n\t\t\t<region id="Image" width="132" height="100" left="0" top="0" fit="meet"/>\r\n\t\t\t<region id="Text" width="132" height="34" left="0" top="100" fit="scroll"/>\r\n\t\t</layout>\r\n\t</head>\r\n\t<body>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img00.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img01.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img02.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img03.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="22000ms">\r\n\t\t\t<img src="img04.jpg" region="Image"/>\r\n\t\t\t<text src="txt04.txt" region="Text">\r\n\t\t\t\t<param name="foreground-color" value="#0000F8"/>\r\n\t\t\t</text>\r\n\t\t\t<audio src="aud04.amr"/>\r\n\t\t</par>\r\n\t</body>\r\n</smil>\r\n'
     text_data = 'Presented by NowMMS\r\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 8)
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[2].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[3].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[4].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[5].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[6].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[6].data, text_data)
     self.assertEqual(mms.data_parts[7].content_type, 'audio/amr')
Esempio n. 4
0
 def test_decoding_BTMMS_mms(self):
     path = os.path.join(DATA_DIR, 'BTMMS.MMS')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Transaction-Id':
         '1234',
         'MMS-Version':
         '1.0',
         'Message-Type':
         'm-retrieve-conf',
         'Date':
         datetime.datetime(2003, 1, 21, 1, 57, 4),
         'Content-Type': ('application/vnd.wap.multipart.related', {
             'Start': '<btmms.smil>',
             'Type': 'application/smil'
         }),
         'Subject':
         'BT Ignite MMS',
     }
     smil_data = '<smil><head><layout><root-layout/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="6825ms"><img src="btlogo.gif" region="Image"></img>\r\n<audio src="catchy_g.amr" begin="350ms" end="6350ms"></audio>\r\n</par>\r\n<par dur="3000ms"><text src="btmms.txt" region="Text"><param name="foreground-color" value="#000000"/>\r\n</text>\r\n</par>\r\n</body>\r\n</smil>\r\n\r\n'
     text_data = 'BT Ignite\r\n\r\nMMS Services'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 4)
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/gif')
     self.assertEqual(mms.data_parts[2].content_type, 'audio/amr')
     self.assertEqual(mms.data_parts[3].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[3].data, text_data)
Esempio n. 5
0
 def test_decoding_gallery2test_mms(self):
     path = os.path.join(DATA_DIR, 'gallery2test.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': binascii.unhexlify(b'2b31363530353535303030302f545950453d504c4d4e').decode(),
         'Message-Class': 'Personal',
         'Transaction-Id': '1118775337', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': 'Jg', 'Delivery-Report': False,
         'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<smil_0>', 'Type': 'application/smil'}),
         'Subject': 'Jgj',
     }
     text_data = b'Jgj'
     smil_data = b'<smil>\n  <head>\n    <layout>\n      <root-layout width="100%" height="100%" />\n      <region id="Text" left="0%" top="0%" width="100%" height="50%" />\n      <region id="Image" left="0%" top="50%" width="100%" height="50%" />\n    </layout>\n  </head>\n  <body>\n    <par dur="30000ms">\n      <img src="cid:image_0" region="Image" alt="gnu-head" />\n      <text src="cid:text_0" region="Text" />\n    </par>\n  </body>\n</smil>\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 3)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[1].data, text_data)
     self.assertEqual(mms.data_parts[2].content_type, 'image/jpeg')
     # XXX: Shouldn't it be 'Name' instead ?
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'name': 'gnu-head.jpg'})
Esempio n. 6
0
 def test_decoding_SonyEricssonT310_R201_mms(self):
     path = os.path.join(DATA_DIR, 'SonyEricssonT310-R201.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show', 'From': '<not inserted>',
         'Read-Reply': False, 'Message-Class': 'Personal',
         'Transaction-Id': '1-8db', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '55225/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Date': datetime.datetime(2004, 3, 18, 7, 30, 34),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<AAAA>', 'Type': 'application/smil'}),
     }
     text_data = b'Hej hopp'
     smil_data = b'<smil><head><layout><root-layout height="240px" width="160px"/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="2000ms"><img src="Tony.gif" region="Image"></img>\r\n<text src="mms.txt" region="Text"></text>\r\n<audio src="OldhPhone.mid"></audio>\r\n</par>\r\n</body>\r\n</smil>\r\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 4)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'image/gif')
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Name': 'Tony.gif'})
     self.assertEqual(mms.data_parts[1].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[1].data, text_data)
     self.assertEqual(mms.data_parts[2].content_type, 'audio/midi')
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Name': 'OldhPhone.mid'})
     self.assertEqual(mms.data_parts[3].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[3].data, smil_data)
Esempio n. 7
0
 def test_decoding_projekt_exempel_mms(self):
     path = os.path.join(DATA_DIR, 'projekt_exempel.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show', 'From': '<not inserted>',
         'Read-Reply': False, 'Message-Class': 'Personal',
         'Transaction-Id': '4-fc60', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '12345/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Date': datetime.datetime(2004, 5, 23, 15, 13, 40),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<AAAA>', 'Type': 'application/smil'}),
         'Subject': 'Hej',
     }
     smil_data = b'<smil><head><layout><root-layout height="240px" width="160px"/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="2000ms"><text src="mms.txt" region="Text"></text>\r\n<img src="SonyhEr.gif" region="Image"></img>\r\n</par>\r\n</body>\r\n</smil>\r\n'
     text_data = b'Jonatan \xc3\xa4r en GNU'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 3)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/gif')
     self.assertEqual(mms.data_parts[2].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[2].data, smil_data)
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Charset': 'utf-8', 'Name': 'mms.smil'})
Esempio n. 8
0
 def test_decoding_27d0a048cd79555de05283a22372b0eb_mms(self):
     path = os.path.join(DATA_DIR, '27d0a048cd79555de05283a22372b0eb.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show', 'From': '<not inserted>',
         'Read-Reply': False, 'Message-Class': 'Personal',
         'Transaction-Id': '3-31cb', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '123/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Date': datetime.datetime(2004, 5, 23, 14, 14, 58),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<AAAA>', 'Type': 'application/smil'}),
         'Subject': 'Angående art-tillhörighet',
         #'Subject': 'Ang\xc3\xa5ende art-tillh\xc3\xb6righet',
     }
     smil_data = '<smil><head><layout><root-layout height="240px" width="160px"/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="2000ms"><img src="Rain.wbmp" region="Image"></img>\r\n<text src="mms.txt" region="Text"></text>\r\n</par>\r\n</body>\r\n</smil>\r\n'
     text_data = 'Jonatan \xc3\xa4r en gnu.'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 3)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'image/vnd.wap.wbmp')
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                     {'Name': 'Rain.wbmp'})
     self.assertEqual(mms.data_parts[1].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[1].data, text_data)
     self.assertEqual(mms.data_parts[1].content_type_parameters,
                      {'Charset': 'utf-8', 'Name': 'mms.txt'})
     self.assertEqual(mms.data_parts[2].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[2].data, smil_data)
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Charset': 'utf-8', 'Name': 'mms.smil'})
Esempio n. 9
0
 def test_decoding_gallery2test_mms(self):
     path = os.path.join(DATA_DIR, 'gallery2test.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': '+16505550000/TYPE=PLMN', 'Message-Class': 'Personal',
         'Transaction-Id': '1118775337', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': 'Jg', 'Delivery-Report': False,
         'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<smil_0>', 'Type': 'application/smil'}),
         'Subject': 'Jgj',
     }
     text_data = 'Jgj'
     smil_data = '<smil>\n  <head>\n    <layout>\n      <root-layout width="100%" height="100%" />\n      <region id="Text" left="0%" top="0%" width="100%" height="50%" />\n      <region id="Image" left="0%" top="50%" width="100%" height="50%" />\n    </layout>\n  </head>\n  <body>\n    <par dur="30000ms">\n      <img src="cid:image_0" region="Image" alt="gnu-head" />\n      <text src="cid:text_0" region="Text" />\n    </par>\n  </body>\n</smil>\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 3)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[1].data, text_data)
     self.assertEqual(mms.data_parts[2].content_type, 'image/jpeg')
     # XXX: Shouldn't it be 'Name' instead ?
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'name': 'gnu-head.jpg'})
Esempio n. 10
0
 def test_decoding_projekt_exempel_mms(self):
     path = os.path.join(DATA_DIR, 'projekt_exempel.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show', 'From': '<not inserted>',
         'Read-Reply': False, 'Message-Class': 'Personal',
         'Transaction-Id': '4-fc60', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '12345/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Date': datetime.datetime(2004, 5, 23, 15, 13, 40),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<AAAA>', 'Type': 'application/smil'}),
         'Subject': 'Hej',
     }
     smil_data = '<smil><head><layout><root-layout height="240px" width="160px"/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="2000ms"><text src="mms.txt" region="Text"></text>\r\n<img src="SonyhEr.gif" region="Image"></img>\r\n</par>\r\n</body>\r\n</smil>\r\n'
     text_data = 'Jonatan \xc3\xa4r en GNU'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 3)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/gif')
     self.assertEqual(mms.data_parts[2].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[2].data, smil_data)
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Charset': 'utf-8', 'Name': 'mms.smil'})
Esempio n. 11
0
 def test_decoding_SonyEricssonT310_R201_mms(self):
     path = os.path.join(DATA_DIR, 'SonyEricssonT310-R201.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show', 'From': '<not inserted>',
         'Read-Reply': False, 'Message-Class': 'Personal',
         'Transaction-Id': '1-8db', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '55225/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Date': datetime.datetime(2004, 3, 18, 7, 30, 34),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<AAAA>', 'Type': 'application/smil'}),
     }
     text_data = 'Hej hopp'
     smil_data = '<smil><head><layout><root-layout height="240px" width="160px"/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="2000ms"><img src="Tony.gif" region="Image"></img>\r\n<text src="mms.txt" region="Text"></text>\r\n<audio src="OldhPhone.mid"></audio>\r\n</par>\r\n</body>\r\n</smil>\r\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 4)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'image/gif')
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Name': 'Tony.gif'})
     self.assertEqual(mms.data_parts[1].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[1].data, text_data)
     self.assertEqual(mms.data_parts[2].content_type, 'audio/midi')
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Name': 'OldhPhone.mid'})
     self.assertEqual(mms.data_parts[3].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[3].data, smil_data)
Esempio n. 12
0
 def test_decoding_27d0a048cd79555de05283a22372b0eb_mms(self):
     path = os.path.join(DATA_DIR, '27d0a048cd79555de05283a22372b0eb.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show', 'From': '<not inserted>',
         'Read-Reply': False, 'Message-Class': 'Personal',
         'Transaction-Id': '3-31cb', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '123/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Date': datetime.datetime(2004, 5, 23, 14, 14, 58),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<AAAA>', 'Type': 'application/smil'}),
         'Subject': 'Angående art-tillhörighet',
         # 'Subject': 'Ang\xc3\xa5ende art-tillh\xc3\xb6righet',
     }
     smil_data = b'<smil><head><layout><root-layout height="240px" width="160px"/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="2000ms"><img src="Rain.wbmp" region="Image"></img>\r\n<text src="mms.txt" region="Text"></text>\r\n</par>\r\n</body>\r\n</smil>\r\n'
     text_data = b'Jonatan \xc3\xa4r en gnu.'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 3)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'image/vnd.wap.wbmp')
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                     {'Name': 'Rain.wbmp'})
     self.assertEqual(mms.data_parts[1].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[1].data, text_data)
     self.assertEqual(mms.data_parts[1].content_type_parameters,
                      {'Charset': 'utf-8', 'Name': 'mms.txt'})
     self.assertEqual(mms.data_parts[2].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[2].data, smil_data)
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Charset': 'utf-8', 'Name': 'mms.smil'})
Esempio n. 13
0
 def test_decoding_TOMSLOT_mms(self):
     path = os.path.join(DATA_DIR, 'TOMSLOT.MMS')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': binascii.unhexlify(b'616c6c616e40746f6d736c6f742e636f6d').decode(),
         'Transaction-Id': '1234',
         'MMS-Version': '1.0', 'Message-Type': 'm-retrieve-conf',
         'Date': datetime.datetime(2003, 2, 16, 3, 48, 33),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<tomslot.smil>', 'Type': 'application/smil'}),
         'Subject': 'Tom Slot Band',
     }
     smil_data = b'<smil>\r\n\t<head>\r\n\t\t<meta name="title" content="smil"/>\r\n\t\t<meta name="author" content="PANASONIC"/>\r\n\t\t<layout>\r\n\t\t\t<root-layout background-color="#FFFFFF" width="132" height="176"/>\r\n\t\t\t<region id="Image" width="132" height="100" left="0" top="0" fit="meet"/>\r\n\t\t\t<region id="Text" width="132" height="34" left="0" top="100" fit="scroll"/>\r\n\t\t</layout>\r\n\t</head>\r\n\t<body>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img00.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img01.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img02.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="1000ms">\r\n\t\t\t<img src="img03.jpg" region="Image"/>\r\n\t\t</par>\r\n\t\t<par dur="22000ms">\r\n\t\t\t<img src="img04.jpg" region="Image"/>\r\n\t\t\t<text src="txt04.txt" region="Text">\r\n\t\t\t\t<param name="foreground-color" value="#0000F8"/>\r\n\t\t\t</text>\r\n\t\t\t<audio src="aud04.amr"/>\r\n\t\t</par>\r\n\t</body>\r\n</smil>\r\n'
     text_data = b'Presented by NowMMS\r\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 8)
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[2].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[3].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[4].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[5].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[6].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[6].data, text_data)
     self.assertEqual(mms.data_parts[7].content_type, 'audio/amr')
Esempio n. 14
0
 def test_decoding_iPhone_mms(self):
     path = os.path.join(DATA_DIR, 'iPhone.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From':
         '<not inserted>',
         'Transaction-Id':
         '1262957356-3',
         'MMS-Version':
         '1.2',
         'To':
         '1337/TYPE=PLMN',
         'Message-Type':
         'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {
             'Start': '0.smil',
             'Type': 'application/smil'
         }),
     }
     smil_data = '<smil>\n<head>\n<layout>\n <root-layout/>\n<region id="Text" top="70%" left="0%" height="30%" width="100%" fit="scroll"/>\n<region id="Image" top="0%" left="0%" height="70%" width="100%" fit="meet"/>\n</layout>\n</head>\n<body>\n<par dur="10s">\n<img src="IMG_6807.jpg" region="Image"/>\n</par>\n</body>\n</smil>\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 2)
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[1].content_type_parameters,
                      {'Name': 'IMG_6807.jpg'})
Esempio n. 15
0
 def test_decoding_SEC_SGHS300M(self):
     path = os.path.join(DATA_DIR, 'SEC-SGHS300M.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show',
         'From': '<not inserted>',
         'Read-Reply': False,
         'Message-Class': 'Personal',
         'Transaction-Id': '31887',
         'MMS-Version': '1.0',
         'To': '303733383334353636342f545950453d504c4d4e'.decode('hex'),
         'Delivery-Report': False,
         'Message-Type': 'm-send-req',
         'Subject': 'IL',
         'Content-Type': ('application/vnd.wap.multipart.mixed', {}),
     }
     text_data = 'HV'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 1)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.mixed')
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data)
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Charset': 'utf-8'})
Esempio n. 16
0
 def test_decoding_m_mms(self):
     path = os.path.join(DATA_DIR, 'm.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': codecs.decode(b'676f6c64706f737440686f746d61696c2e636f6d', 'hex').decode(),
         'Transaction-Id': '0000000001',
         'MMS-Version': '1.0', 'Message-Type': 'm-retrieve-conf',
         'Date': datetime.datetime(2002, 8, 9, 13, 8, 2),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<A0>', 'Type': 'application/smil'}),
         'Subject': 'GOLD',
     }
     text_data1 = b'Audio'
     text_data2 = b'Text +'
     text_data3 = b'tagtag.com/gold\r\n'
     text_data4 = b'globalisierunglobalisierunglobalisierunglobalisierunglobalisierunglobalisierunglobalisierungnureisilabolg'
     text_data5 = b'KLONE\r\nKLONE\r\n'
     text_data6 = b'pr\xe4sentiert..'
     text_data7 = b'GOLD'
     smil_data = b'<smil><head><layout><root-layout background-color="#000000"/>\r\n<region id="text" top="0" left="0" height="100%" width="100%"/>\r\n</layout>\r\n</head>\r\n<body>\r\n<par dur="3000ms">\r\n<text src="Text0000.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="large"/>\r\n</text>\r\n</par>\r\n<par dur="2000ms">\r\n<text src="Text0001.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="small"/>\r\n</text>\r\n</par>\r\n<par dur="2000ms">\r\n<text src="Text0007.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n<par dur="6000ms">\r\n<text src="Text0008.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n<audio src="gold102.amr" start="1000ms"/>\r\n</par>\r\n<seq repeatcount="4">\r\n<par dur="1500ms">\r\n<text src="Text0002.txt" region="text">\r\n <param name="foreground-color" value="#ff0080"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n<par dur="1500ms">\r\n<text src="Text0003.txt" region="text">\r\n <param name="foreground-color" value="#00ff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n</seq>\r\n<par dur="10000ms">\r\n<text src="Text0006.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n</body></smil>'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 9)
     self.assertEqual(mms.content_type, 'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data1)
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[1].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[1].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[2].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[2].data, text_data2)
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[3].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[3].data, text_data3)
     self.assertEqual(mms.data_parts[3].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[4].content_type, 'audio/amr')
     self.assertEqual(mms.data_parts[5].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[5].data, text_data4)
     self.assertEqual(mms.data_parts[5].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[6].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[6].data, text_data5)
     self.assertEqual(mms.data_parts[6].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[7].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[7].data, text_data6)
     self.assertEqual(mms.data_parts[7].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[8].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[8].data, text_data7)
     self.assertEqual(mms.data_parts[8].content_type_parameters,
                      {'Charset': 'us-ascii'})
Esempio n. 17
0
 def test_decoding_m_mms(self):
     path = os.path.join(DATA_DIR, 'm.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': binascii.unhexlify(b'676f6c64706f737440686f746d61696c2e636f6d').decode(),
         'Transaction-Id': '0000000001',
         'MMS-Version': '1.0', 'Message-Type': 'm-retrieve-conf',
         'Date': datetime.datetime(2002, 8, 9, 13, 8, 2),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<A0>', 'Type': 'application/smil'}),
         'Subject': 'GOLD',
     }
     text_data1 = b'Audio'
     text_data2 = b'Text +'
     text_data3 = b'tagtag.com/gold\r\n'
     text_data4 = b'globalisierunglobalisierunglobalisierunglobalisierunglobalisierunglobalisierunglobalisierungnureisilabolg'
     text_data5 = b'KLONE\r\nKLONE\r\n'
     text_data6 = b'pr\xe4sentiert..'
     text_data7 = b'GOLD'
     smil_data = b'<smil><head><layout><root-layout background-color="#000000"/>\r\n<region id="text" top="0" left="0" height="100%" width="100%"/>\r\n</layout>\r\n</head>\r\n<body>\r\n<par dur="3000ms">\r\n<text src="Text0000.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="large"/>\r\n</text>\r\n</par>\r\n<par dur="2000ms">\r\n<text src="Text0001.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="small"/>\r\n</text>\r\n</par>\r\n<par dur="2000ms">\r\n<text src="Text0007.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n<par dur="6000ms">\r\n<text src="Text0008.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n<audio src="gold102.amr" start="1000ms"/>\r\n</par>\r\n<seq repeatcount="4">\r\n<par dur="1500ms">\r\n<text src="Text0002.txt" region="text">\r\n <param name="foreground-color" value="#ff0080"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n<par dur="1500ms">\r\n<text src="Text0003.txt" region="text">\r\n <param name="foreground-color" value="#00ff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n</seq>\r\n<par dur="10000ms">\r\n<text src="Text0006.txt" region="text">\r\n <param name="foreground-color" value="#ffff00"/>\r\n <param name="textsize" value="normal"/>\r\n</text>\r\n</par>\r\n</body></smil>'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 9)
     self.assertEqual(mms.content_type, 'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data1)
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[1].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[1].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[2].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[2].data, text_data2)
     self.assertEqual(mms.data_parts[2].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[3].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[3].data, text_data3)
     self.assertEqual(mms.data_parts[3].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[4].content_type, 'audio/amr')
     self.assertEqual(mms.data_parts[5].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[5].data, text_data4)
     self.assertEqual(mms.data_parts[5].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[6].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[6].data, text_data5)
     self.assertEqual(mms.data_parts[6].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[7].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[7].data, text_data6)
     self.assertEqual(mms.data_parts[7].content_type_parameters,
                      {'Charset': 'us-ascii'})
     self.assertEqual(mms.data_parts[8].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[8].data, text_data7)
     self.assertEqual(mms.data_parts[8].content_type_parameters,
                      {'Charset': 'us-ascii'})
Esempio n. 18
0
File: mms.py Progetto: achiang/wader
def send_m_notifyresp_ind(extra_info, tx_id):
    mms = MMSMessage()
    mms.headers['Transaction-Id'] = tx_id
    mms.headers['Message-Type'] = 'm-notifyresp-ind'
    mms.headers['Status'] = 'Retrieved'

    def process_response(data):
        if data.startswith("HTTP/1.0 404"):
            # notification has expired
            try:
                text = data.split('\r\n')[0][13:]
            except IndexError:
                text = "Message not found in MMSC"

            raise ExpiredNotification(text)

    d = post_payload(extra_info, mms.encode())
    d.addCallback(process_response)
    return d
Esempio n. 19
0
 def test_decoding_from_data(self):
     path = os.path.join(DATA_DIR, 'iPhone.mms')
     data = array("B", open(path, 'rb').read())
     mms = MMSMessage.from_data(data)
     headers = {
         'From': '<not inserted>', 'Transaction-Id': '1262957356-3',
         'MMS-Version': '1.2', 'To': '1337/TYPE=PLMN',
         'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '0.smil', 'Type': 'application/smil'}),
     }
     self.assertEqual(mms.headers, headers)
Esempio n. 20
0
 def test_decoding_from_data(self):
     path = os.path.join(DATA_DIR, 'iPhone.mms')
     data = array("B", open(path, 'rb').read())
     mms = MMSMessage.from_data(data)
     headers = {
         'From': '<not inserted>', 'Transaction-Id': '1262957356-3',
         'MMS-Version': '1.2', 'To': '1337/TYPE=PLMN',
         'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '0.smil', 'Type': 'application/smil'}),
     }
     self.assertEqual(mms.headers, headers)
Esempio n. 21
0
    def test_encoding_m_sendnotifyresp_ind(self):
        message = MMSMessage()
        message.headers['Transaction-Id'] = 'NOK5AIdhfTMYSG4JeIgAAsHtp72AGAAAAAAAA'
        message.headers['Message-Type'] = 'm-notifyresp-ind'
        message.headers['Status'] = 'Retrieved'
        data = [
            140, 131, 152, 78, 79, 75, 53, 65, 73, 100, 104, 102, 84, 77,
            89, 83, 71, 52, 74, 101, 73, 103, 65, 65, 115, 72, 116, 112,
            55, 50, 65, 71, 65, 65, 65, 65, 65, 65, 65, 65, 0, 141, 144,
            149, 129, 132, 163, 1, 35, 129]

        self.assertEqual(list(message.encode()[:50]), data)
Esempio n. 22
0
 def test_decoding_SIMPLE_mms(self):
     path = os.path.join(DATA_DIR, 'SIMPLE.MMS')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Transaction-Id': '1234', 'MMS-Version': '1.0',
         'Message-Type': 'm-retrieve-conf',
         'Date': datetime.datetime(2002, 12, 20, 21, 26, 56),
         'Content-Type': ('application/vnd.wap.multipart.related', {}),
         'Subject': 'Simple message',
     }
     text_data = b"This is a simple MMS message with a single text body part."
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 1)
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data)
Esempio n. 23
0
 def test_decoding_SIMPLE_mms(self):
     path = os.path.join(DATA_DIR, 'SIMPLE.MMS')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Transaction-Id': '1234', 'MMS-Version': '1.0',
         'Message-Type': 'm-retrieve-conf',
         'Date': datetime.datetime(2002, 12, 20, 21, 26, 56),
         'Content-Type': ('application/vnd.wap.multipart.related', {}),
         'Subject': 'Simple message',
     }
     text_data = "This is a simple MMS message with a single text body part."
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 1)
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data)
Esempio n. 24
0
 def test_decoding_iPhone_mms(self):
     path = os.path.join(DATA_DIR, 'iPhone.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': '<not inserted>', 'Transaction-Id': '1262957356-3',
         'MMS-Version': '1.2', 'To': '1337/TYPE=PLMN',
         'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '0.smil', 'Type': 'application/smil'}),
     }
     smil_data = '<smil>\n<head>\n<layout>\n <root-layout/>\n<region id="Text" top="70%" left="0%" height="30%" width="100%" fit="scroll"/>\n<region id="Image" top="0%" left="0%" height="70%" width="100%" fit="meet"/>\n</layout>\n</head>\n<body>\n<par dur="10s">\n<img src="IMG_6807.jpg" region="Image"/>\n</par>\n</body>\n</smil>\n'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 2)
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[1].content_type_parameters,
                      {'Name': 'IMG_6807.jpg'})
Esempio n. 25
0
 def test_decoding_SEC_SGHS300M(self):
     path = os.path.join(DATA_DIR, 'SEC-SGHS300M.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Sender-Visibility': 'Show', 'From': '<not inserted>',
         'Read-Reply': False, 'Message-Class': 'Personal',
         'Transaction-Id': '31887', 'MMS-Version': '1.0',
         'To': '0738345664/TYPE=PLMN', 'Delivery-Report': False,
         'Message-Type': 'm-send-req', 'Subject': 'IL',
         'Content-Type': ('application/vnd.wap.multipart.mixed', {}),
     }
     text_data = 'HV'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 1)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.mixed')
     self.assertEqual(mms.data_parts[0].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[0].data, text_data)
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Charset': 'utf-8'})
Esempio n. 26
0
def send_message():

    now = datetime.now()
    dt_string = now.strftime("%d/%m/%Y %H:%M:%S")

    mms = MMSMessage()
    mms.headers['To'] = telephone + '/TYPE=PLMN'
    mms.headers['Message-Type'] = 'm-send-req'
    mms.headers['Subject'] = 'Image Alarm'

    slide1 = MMSMessagePage()
    slide1.add_image(tmp_image)
    slide1.add_text('Image Alarm.' + dt_string)

    mms.add_page(slide1)

    payload = mms.encode()

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((MMSC, 80))
    s.send("POST / HTTP/1.0\r\n")
    s.send("Content-Type: application/vnd.wap.mms-message\r\n")
    s.send("Content-Length: %d\r\n\r\n" % len(payload))

    s.sendall(payload)

    buf = StringIO()

    while True:
        data = s.recv(4096)
        if not data:
            break

        buf.write(data)

    s.close()
    data = buf.getvalue()
    buf.close()
Esempio n. 27
0
 def test_decoding_openwave_mms(self):
     path = os.path.join(DATA_DIR, 'openwave.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': '+16505550000/TYPE=PLMN', 'Message-Class': 'Personal',
         'Transaction-Id': '1067263672', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '112/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<smil_0>', 'Type': 'application/smil'}),
         'Subject': 'rubrik',
     }
     smil_data = '<smil>\n  <head>\n    <layout>\n      <root-layout width="100%" height="100%" />\n      <region id="Text" left="0%" top="0%" width="100%" height="50%" />\n      <region id="Image" left="0%" top="50%" width="100%" height="50%" />\n    </layout>\n  </head>\n  <body>\n    <par dur="30000ms">\n      <text src="cid:text_0" region="Text" />\n    </par>\n  </body>\n</smil>\n'
     text_data = 'rubrik'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 2)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].data, text_data)
Esempio n. 28
0
 def test_decoding_images_are_cut_off_debug_mms(self):
     path = os.path.join(DATA_DIR, 'images_are_cut_off_debug.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': '<not inserted>', 'Read-Reply': False,
         'Transaction-Id': '2112410527', 'MMS-Version': '1.0',
         'To': '*****@*****.**', 'Delivery-Report': False,
         'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<SMIL.TXT>', 'Type': 'application/smil'}),
         'Subject': 'Picture3',
     }
     smil_data = '<smil><head><layout><root-layout height="160px" width="128px"/><region id="Top" top="0"  left="0" height="50%" width="100%" /><region id="Bottom" top="50%" left="0" height="50%" width="100%" /></layout></head><body><par dur="5s"><img src="cid:Picture3.jpg" region="Top" begin="0s" end="5s"></img></par></body></smil>'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 2)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Name': 'Picture3.jpg'})
     self.assertEqual(mms.data_parts[1].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[1].data, smil_data)
Esempio n. 29
0
 def test_decoding_openwave_mms(self):
     path = os.path.join(DATA_DIR, 'openwave.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': binascii.unhexlify(b'2b31363530353535303030302f545950453d504c4d4e').decode(),
         'Message-Class': 'Personal',
         'Transaction-Id': '1067263672', 'MMS-Version': '1.0',
         'Priority': 'Normal', 'To': '112/TYPE=PLMN',
         'Delivery-Report': False, 'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<smil_0>', 'Type': 'application/smil'}),
         'Subject': 'rubrik',
     }
     smil_data = b'<smil>\n  <head>\n    <layout>\n      <root-layout width="100%" height="100%" />\n      <region id="Text" left="0%" top="0%" width="100%" height="50%" />\n      <region id="Image" left="0%" top="50%" width="100%" height="50%" />\n    </layout>\n  </head>\n  <body>\n    <par dur="30000ms">\n      <text src="cid:text_0" region="Text" />\n    </par>\n  </body>\n</smil>\n'
     text_data = b'rubrik'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 2)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].data, text_data)
Esempio n. 30
0
 def test_decoding_images_are_cut_off_debug_mms(self):
     path = os.path.join(DATA_DIR, 'images_are_cut_off_debug.mms')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'From': '<not inserted>', 'Read-Reply': False,
         'Transaction-Id': '2112410527', 'MMS-Version': '1.0',
         'To': binascii.unhexlify(b'7464707440616a616a672e63646d').decode(),
         'Delivery-Report': False,
         'Message-Type': 'm-send-req',
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<SMIL.TXT>', 'Type': 'application/smil'}),
         'Subject': 'Picture3',
     }
     smil_data = b'<smil><head><layout><root-layout height="160px" width="128px"/><region id="Top" top="0"  left="0" height="50%" width="100%" /><region id="Bottom" top="50%" left="0" height="50%" width="100%" /></layout></head><body><par dur="5s"><img src="cid:Picture3.jpg" region="Top" begin="0s" end="5s"></img></par></body></smil>'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(len(mms.data_parts), 2)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(mms.data_parts[0].content_type, 'image/jpeg')
     self.assertEqual(mms.data_parts[0].content_type_parameters,
                      {'Name': 'Picture3.jpg'})
     self.assertEqual(mms.data_parts[1].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[1].data, smil_data)
Esempio n. 31
0
 def test_decoding_BTMMS_mms(self):
     path = os.path.join(DATA_DIR, 'BTMMS.MMS')
     mms = MMSMessage.from_file(path)
     self.assertTrue(isinstance(mms, MMSMessage))
     headers = {
         'Transaction-Id': '1234', 'MMS-Version': '1.0',
         'Message-Type': 'm-retrieve-conf',
         'Date': datetime.datetime(2003, 1, 21, 1, 57, 4),
         'Content-Type': ('application/vnd.wap.multipart.related', {'Start': '<btmms.smil>', 'Type': 'application/smil'}),
         'Subject': 'BT Ignite MMS',
     }
     smil_data = '<smil><head><layout><root-layout/>\r\n<region id="Image" top="0" left="0" height="50%" width="100%" fit="hidden"/>\r\n<region id="Text" top="50%" left="0" height="50%" width="100%" fit="hidden"/>\r\n</layout>\r\n</head>\r\n<body><par dur="6825ms"><img src="btlogo.gif" region="Image"></img>\r\n<audio src="catchy_g.amr" begin="350ms" end="6350ms"></audio>\r\n</par>\r\n<par dur="3000ms"><text src="btmms.txt" region="Text"><param name="foreground-color" value="#000000"/>\r\n</text>\r\n</par>\r\n</body>\r\n</smil>\r\n\r\n'
     text_data = 'BT Ignite\r\n\r\nMMS Services'
     self.assertEqual(mms.headers, headers)
     self.assertEqual(mms.content_type,
                      'application/vnd.wap.multipart.related')
     self.assertEqual(len(mms.data_parts), 4)
     self.assertEqual(mms.data_parts[0].content_type, 'application/smil')
     self.assertEqual(mms.data_parts[0].data, smil_data)
     self.assertEqual(mms.data_parts[1].content_type, 'image/gif')
     self.assertEqual(mms.data_parts[2].content_type, 'audio/amr')
     self.assertEqual(mms.data_parts[3].content_type, 'text/plain')
     self.assertEqual(mms.data_parts[3].data, text_data)
Esempio n. 32
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: anchen
# @Date:   2016-11-28 16:53:42
# @Last Modified by:   anchen
# @Last Modified time: 2016-11-28 18:20:53
from messaging.mms.message import MMSMessage, MMSMessagePage

text = ''
mms = MMSMessage()
slide1 = MMSMessagePage()
with open('data/text.txt', 'r') as f:
    text = f.read()
slide1.add_text(text)
mms.add_page(slide1)
mms.to_file("data/mms_body.mms")
Esempio n. 33
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: anchen
# @Date:   2016-11-28 16:08:32
# @Last Modified by:   anchen
# @Last Modified time: 2016-11-28 16:08:50
from messaging.mms.message import MMSMessage, MMSMessagePage
mms = MMSMessage()
slide1 = MMSMessagePage()
slide1.add_text('hello world')
mms.add_page(slide1)
mms.to_file('mms_body.mms')