python-messaging
python-messaging copied to clipboard
MMS text attachment
According to SMIL, src attribute value should contain attachment name not the text itself. Please fix. :)
Thanks for the report will have a look On Dec 16, 2011 6:50 PM, "Vitaly Greck" < [email protected]> wrote:
According to SMIL, src attribute value should contain attachment name not the text itself. Please fix. :)
Reply to this email directly or view it on GitHub: https://github.com/pmarti/python-messaging/issues/21
Real message sniffed by tshark on Samsung Galaxy S II (text message)
Hypertext Transfer Protocol
POST http://mmsc HTTP/1.1\r\n
[Expert Info (Chat/Sequence): POST http://mmsc HTTP/1.1\r\n]
[Message: POST http://mmsc HTTP/1.1\r\n]
[Severity level: Chat]
[Group: Sequence]
Request Method: POST
Request URI: http://mmsc
Request Version: HTTP/1.1
Accept: */*, application/vnd.wap.mms-message, application/vnd.wap.sic\r\n
x-wap-profile: http://wap.samsungmobile.com/uaprof/GT-I9100.xml\r\n
Accept-Language: ru-RU, en-US\r\n
Content-Length: 449\r\n
[Content length: 449]
Content-Type: application/vnd.wap.mms-message\r\n
Host: mmsc\r\n
Connection: Keep-Alive\r\n
User-Agent: SAMSUNG-GT-I9100-Mms/2.0\r\n
\r\n
MMS Message Encapsulation, Type: m-send-req
X-Mms-Message-Type: m-send-req (0x80)
X-Mms-Transaction-ID: T134439908ce
X-Mms-MMS-Version: 1.2
From: <insert address>
To: +375296637480/TYPE=PLMN
Subject: \177\320\242\320\265\320\272\321\201\321\202
X-Mms-Delivery-Report: Yes (0x80)
X-Mms-Read-Report: Yes (0x80)
Content-Type: application/vnd.wap.multipart.related; start=<smil>; type=application/smil
Start: <smil>
Type: application/smil
Data (Post)
Multipart body
Part: 1, content-type: application/smil
Content-Type: application/smil; name=smil.xml
Name: smil.xml
Headers
Content-Id: "<smil>"
Content-Location: smil.xml
Synchronized Multimedia Integration Language
<smil>
<head>
<layout>
<root-layout/>
width="320px"
height="480px"
<region/>
id="Text"
left="0"
top="320"
width="320px"
height="160px"
fit="meet"
</layout>
</head>
<body>
<par>
dur="5000ms"
<text/>
src="cid:text_0.txt"
region="Text"
</par>
</body>
</smil>
Part: 2, content-type: text/plain
Content-Type: text/plain; name=cid:text_0.txt; charset=utf-8
Name: cid:text_0.txt
Charset: utf-8
Headers
Content-Id: "<text_0.txt>"
Content-Location: text_0.txt
Line-based text data: text/plain
\320\242\320\265\320\272\321\201\321\202
Also, it's good idea to change mms/message.py
areas = (('Image', '0', '0', '176', '144'),
('Text', '176', '144', '176', '76'))
for methods with allow to change the smil layout, as some MMSCs do not accept layouts with empty content.
Also, if I use
@staticmethod
def encode_content_general_form(media_type, parameters):
to pass parameters (I modified the lib to conform W3C SMIL 2.0 spec), I get
Traceback (most recent call last):
File "test_mms.py", line 20, in <module>
payload = mms.encode().tostring()
File "/usr/local/lib/python2.7/dist-packages/python_messaging-0.5.10-py2.7.egg/messaging/mms/message.py", line 224, in encode
return encoder.encode(self)
File "/usr/local/lib/python2.7/dist-packages/python_messaging-0.5.10-py2.7.egg/messaging/mms/mms_pdu.py", line 607, in encode
msg_data.extend(self.encode_message_body())
File "/usr/local/lib/python2.7/dist-packages/python_messaging-0.5.10-py2.7.egg/messaging/mms/mms_pdu.py", line 798, in encode_message_body
message_body.extend(part_content_type)
Mofidications:
==mms/message.py
if page.text is not None:
part, begin, end = page.text
* src = part.headers['Content-Type'][1]['name']
text_node = smil_doc.createElement('text')
text_node.setAttribute('src', src)
text_node.setAttribute('region', 'Text')
def set_text(self, text, content_type='text/plain', ct_parameters=None):
"""
Convenience wrapper method for set_data()
This method sets the :class:`DataPart` object to hold the
specified text string, with MIME content type "text/plain".
@param text: The text to hold
@type text: str
"""
self.set_data(text, content_type, ct_parameters)
time_data = DataPart()
time_data.set_text(text, 'text/plain', {'charset': 'utf-8', 'name': 'cid:text_0.txt'})
self.text = (time_data, time_begin, time_end)
#!/usr/bin/env python
from messaging.mms.message import MMSMessage, MMSMessagePage
mms = MMSMessage()
mms.headers['To'] = '+375296637480/TYPE=PLMN'
mms.headers['Message-Type'] = 'm-send-req'
mms.headers['Subject'] = 'Test python-messaging.mms'
slide1 = MMSMessagePage()
slide1.add_text('This is the first slide, with a static image and some text.')
slide2 = MMSMessagePage()
slide2.set_duration(4500)
slide2.add_text('This second slide has some timing effects.', 500, 3500)
mms.add_page(slide1)
mms.add_page(slide2)
payload = mms.encode().tostring()
print payload
vint@vgreck:~$ python test_mms.py enconded_content_general_form: [3, [131], [99, 104, 97, 114, 115, 101, 116, 0, 117, 116, 102, 45, 56, 0], [110, 97, 109, 101, 0, 99, 105, 100, 58, 116, 101, 120, 116, 95, 48, 46, 116, 120, 116, 0]]
Vitaly, if you have a fix for the problem, why don't you create a fork, do your thing there and send a pull request back? If it comes with tests and pep8 compliant we'll gladly accept it :)
Pablo, thanks for comments ;) Already forked, working ...
Hi Vitaly, Did you ever get the changes finished, it would be good to get them back upstream?
Thanks,
Andrew
Ping?
@vintozver how were you able to capture the SMS using tshark?
When I try with tcpdump on my android phone, I don't see any packets related to MMS or SMS. I've checked both the rmnet0 and wlan0 interfaces
rmnet1 MMS APN may be different depending on the carrier settings