]> code.delx.au - pymsnt/commitdiff
Sending of chunked messages works now.
authorjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Thu, 23 Mar 2006 12:41:49 +0000 (12:41 +0000)
committerjamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>
Thu, 23 Mar 2006 12:41:49 +0000 (12:41 +0000)
git-svn-id: http://delx.cjb.net/svn/pymsnt/trunk@130 55fbd22a-6204-0410-b2f0-b6c764c7e90a

committer: jamesbunton <jamesbunton@55fbd22a-6204-0410-b2f0-b6c764c7e90a>

src/legacy/__init__.py
src/tlib/msn/msn.py
src/tlib/msn/msnw.py

index fd2413100d5055e914182efcd83667f298246794..0ec88de46bf7da317a29135f34afdbced604fb90 100644 (file)
@@ -2,5 +2,5 @@
 # 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
index e16d4e89ddb73adbcb8ceea21ba9259e47c244da..23464de54a96137ac2326eac9fb865307fcae7c0 100644 (file)
@@ -433,7 +433,7 @@ class MSNMessage:
         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
 
@@ -444,6 +444,11 @@ class MSNMessage:
         """
         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
@@ -2331,11 +2336,13 @@ class SwitchboardClient(MSNEventBase):
         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)
index 55e02ffcf80f5e74ba30afbbdda8ab6ceb68b38b..7f72f2df5945bf81f3d81587fe41a169b1ef321a 100644 (file)
@@ -527,13 +527,13 @@ class SwitchboardSessionBase(msn.SwitchboardClient):
                        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)
@@ -546,13 +546,14 @@ class SwitchboardSessionBase(msn.SwitchboardClient):
                                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)