Hello All,

It looks like pymsn-t 0.11.2 contains the code that breaks avatars  
support on x86_64 systems.

More specifically, when generating session IDs, it uses calls like  
random.randint(1000, sys.maxint) - but the issue is that sys.maxint  
returns 64 bit integers, while MSN protocol, as far as I understood,  
uses 32 bit ones - thus, slicing occurs and session ID in packets does  
not match stored session ID - so packets are silently discarded.

I've spent more than 4 hours to debug that, but I hope it was not in  
vain and can help smb besides me ;-)

My (quick-and-dirty) patch is below, it solved the problem on my PC.

I was not really sure what maxint places were safe and what were not,  
so I've replaced all of them to be sure. The place where it is  
certainly required is msn.py: 2713

==========================================================================
diff -urN pymsnt-0.11.2/src/ft.py pymsnt-0.11.2.patched/src/ft.py
--- pymsnt-0.11.2/src/ft.py     2006-10-18 07:40:55.000000000 +0300
+++ pymsnt-0.11.2.patched/src/ft.py     2007-05-28 13:17:18.000000000 +0300
@@ -14,6 +14,8 @@
  import random
  import sys

+SYS_MAXINT = 2147483647
+

  def doRateLimit(setConsumer, consumer):
        try:
@@ -208,7 +210,7 @@
                        del self.legacyftp

                LogEvent(INFO, self.ident)
-               self.sid = str(random.randint(1000, sys.maxint))
+               self.sid = str(random.randint(1000, SYS_MAXINT))
                iq = Element((None, "iq"))
                iq.attributes["type"] = "set"
                iq.attributes["to"] = self.toJID
diff -urN pymsnt-0.11.2/src/legacy/msn/msn.py  
pymsnt-0.11.2.patched/src/legacy/msn/msn.py
--- pymsnt-0.11.2/src/legacy/msn/msn.py 2006-10-18 07:40:54.000000000 +0300
+++ pymsnt-0.11.2.patched/src/legacy/msn/msn.py 2007-05-28  
13:16:40.000000000 +0300
@@ -150,6 +150,8 @@
  MESSAGEDEBUG = False
  MSNP2PDEBUG = False

+SYS_MAXINT = 2147483647
+

  P2PSEQ = [-3, -2, 0, -1, 1, 2, 3, 4, 5, 6, 7, 8]
  def p2pseq(n):
@@ -2686,7 +2688,7 @@
          if baseID:
              self.baseID = baseID
          else:
-            self.baseID = random.randint(1000, sys.maxint)
+            self.baseID = random.randint(1000, SYS_MAXINT)
          self.pos = -1

      def get(self):
@@ -2713,7 +2715,7 @@
      def __init__(self, remoteUser, switchboard, sessionID, sessionGuid):
          self.dataFlag = 0
          if not sessionID:
-            sessionID = random.randint(1000, sys.maxint)
+            sessionID = random.randint(1000, SYS_MAXINT)
          if not sessionGuid:
              sessionGuid = random_guid()
          self.remoteUser = remoteUser
@@ -2759,7 +2761,7 @@
          binaryFields[1] = self.seqID.next()
          binaryFields[3] = len(msgStr)
          binaryFields[4] = binaryFields[3]
-        binaryFields[6] = random.randint(1000, sys.maxint)
+        binaryFields[6] = random.randint(1000, SYS_MAXINT)
          self.sendP2PMessage(binaryFields, msgStr)

      def sendP2PMessage(self, binaryFields, msgStr):
@@ -2793,7 +2795,7 @@
          binaryFields[1] = self.seqID.next()
          binaryFields[3] = 4
          binaryFields[4] = 4
-        binaryFields[6] = random.randint(1000, sys.maxint)
+        binaryFields[6] = random.randint(1000, SYS_MAXINT)
          binaryFields[9] = 1
          self.sendP2PMessage(binaryFields, chr(0) * 4)

@@ -2823,7 +2825,7 @@
          binaryFields[3] = self.filesize
          binaryFields[4] = len(chunk)
          binaryFields[5] = self.dataFlag
-        binaryFields[6] = random.randint(1000, sys.maxint)
+        binaryFields[6] = random.randint(1000, SYS_MAXINT)
          binaryFields[9] = 1
          self.offset += len(chunk)
          self.sendP2PMessage(binaryFields, chunk)
==========================================================================

Good luck!                                     Alexander





----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.


_______________________________________________
py-transports mailing list
py-transports@blathersource.org
http://lists.modevia.com/cgi-bin/mailman/listinfo/py-transports

Reply via email to