# Licensed for distribution under the GPL version 2, check COPYING for details
from glue import LegacyConnection, LegacyGroupchat, translateAccount, startStats, updateStats, reloadConfig
-from glue import name, url, version, mangle, id, namespace
+from glue import url, version, mangle, id, namespace
from glue import formRegEntry, getAttributes, isGroupJID
self.screenName = screenName
self.specialMessage = specialMessage
self.message = message
- self.headers = {'MIME-Version' : '1.0', 'Content-Type' : 'text/plain'}
+ self.headers = {'MIME-Version' : '1.0', 'Content-Type' : 'text/plain; charset=UTF-8'}
self.length = length
self.readPos = 0
"""
return reduce(operator.add, [len(x[0]) + len(x[1]) + 4 for x in self.headers.items()]) + len(self.message) + 2
+ def delHeader(self, header):
+ """ delete the desired header """
+ if self.headers.has_key(header):
+ del self.headers[header]
+
def setHeader(self, header, value):
""" set the desired header """
self.headers[header] = value
else: id, d = self._createIDMapping()
if message.length == 0: message.length = message._calcMessageLen()
self.sendLine("MSG %s %s %s" % (id, message.ack, message.length))
- # apparently order matters with at least MIME-Version and Content-Type
- self.sendLine('MIME-Version: %s' % message.getHeader('MIME-Version'))
- self.sendLine('Content-Type: %s' % message.getHeader('Content-Type'))
+ # Apparently order matters with these
+ orderMatters = ("MIME-Version", "Content-Type", "Message-ID")
+ for header in orderMatters:
+ if message.hasHeader(header):
+ self.sendLine("%s: %s" % (header, message.getHeader(header)))
# send the rest of the headers
- for header in [h for h in message.headers.items() if h[0].lower() not in ('mime-version','content-type')]:
+ for header in [h for h in message.headers.items() if h[0] not in orderMatters]:
self.sendLine("%s: %s" % (header[0], header[1]))
self.transport.write("\r\n")
self.transport.write(message.message)
self.messageBuffer.append((text, noerror))
else:
LogEvent(INFO, self.ident)
+ text = str(text.replace("\n", "\r\n").encode("utf-8"))
def failedMessage(ignored):
if not noerror:
self.failedMessage(text)
if len(text) < MSNConnection.MAXMESSAGESIZE:
- message = msn.MSNMessage(message=str(text.replace("\n", "\r\n").encode("utf-8")))
- message.setHeader("Content-Type", "text/plain; charset=UTF-8")
+ message = msn.MSNMessage(message=text)
message.ack = msn.MSNMessage.MESSAGE_NACK
d = msn.SwitchboardClient.sendMessage(self, message)
guid = msn.random_guid()
while chunk < chunks:
offset = chunk * MSNConnection.MAXMESSAGESIZE
- text = text[offset : offset + MSNConnection.MAXMESSAGESIZE]
- message = msn.MSNMessage(message=str(text.replace("\n", "\r\n").encode("utf-8")))
+ message = msn.MSNMessage(message=text[offset : offset + MSNConnection.MAXMESSAGESIZE])
message.ack = msn.MSNMessage.MESSAGE_NACK
+ message.setHeader("Message-ID", guid)
if chunk == 0:
- message.setHeader("Content-Type", "text/plain; charset=UTF-8")
message.setHeader("Chunks", str(chunks))
else:
+ message.delHeader("MIME-Version")
+ message.delHeader("Content-Type")
message.setHeader("Chunk", str(chunk))
d = msn.SwitchboardClient.sendMessage(self, message)