from tlib import xmlw
# System imports
-import types, operator, os, sys, base64, random, struct, random, sha, base64, StringIO, array, codecs
+import types, operator, os, sys, base64, random, struct, random, sha, base64, StringIO, array, codecs, binascii
from urllib import quote, unquote
P2PSEQ = [-3, -2, 0, -1, 1, 2, 3, 4, 5, 6, 7, 8]
def p2pseq(n):
- if n > 5:
- return n - 3
- else:
- return P2PSEQ[n]
+ if n > 5:
+ return n - 3
+ else:
+ return P2PSEQ[n]
def getVal(inp):
m = self.currentMessage
self.currentMessage = None
if MESSAGEDEBUG: log.msg(m.message)
- if not self.checkMessage(m):
+ try:
+ if not self.checkMessage(m):
+ self.setLineMode(extra)
+ return
+ except Exception, e:
+ log.msg("Traceback - ERROR in checkMessage: " + str(e))
self.setLineMode(extra)
return
self.gotMessage(m)
self.gotMSNAlert(bodytext, actionurl, subscrurl)
def _gotUBX(self, message):
+ msnContact = self.factory.contacts.getContact(message.userHandle)
+ if not msnContact: return
lm = message.message.lower()
p1 = lm.find("<psm>") + 5
p2 = lm.find("</psm>")
if p1 >= 0 and p2 >= 0:
personal = unescapeFromXml(message.message[p1:p2])
- msnContact = self.factory.contacts.getContact(message.userHandle)
- if not msnContact: return
msnContact.personal = personal
self.contactPersonalChanged(message.userHandle, personal)
else:
+ msnContact.personal = ''
self.contactPersonalChanged(message.userHandle, '')
def checkMessage(self, message):
if MSNP2PDEBUG: log.msg("Updated MSNObject received!" + msnobjStr)
msnContact.msnobj = msnobj
msnContact.msnobjGot = False
- self.contactAvatarChanged(msnContact.userHandle, msnContact.msnobj.sha1d)
+ self.contactAvatarChanged(msnContact.userHandle, binascii.hexlify(b64dec(msnContact.msnobj.sha1d)))
def handle_CHL(self, params):
checkParamLen(len(params), 2, 'CHL')
self.currentMessage = MSNMessage(length=messageLen, userHandle=params[0], screenName="UBX", specialMessage=True)
self.setRawMode()
else:
- self.contactPersonalChanged(params[0], '')
+ self._gotUBX(MSNMessage(userHandle=params[0]))
def handle_UUX(self, params):
checkParamLen(len(params), 2, 'UUX')
contact.
@param userHandle: contact who's msnobj has been changed
- @param hash: sha1 hash of their avatar
+ @param hash: sha1 hash of their avatar as hex string
"""
def statusChanged(self, statusCode):
cookie = info['Invitation-Cookie']
filename = info['Application-File']
filesize = int(info['Application-FileSize'])
- connectivity = (info.get('Connectivity').lower() == 'y')
+ connectivity = (info.get('Connectivity', 'n').lower() == 'y')
except KeyError:
log.msg('Received munged file transfer request ... ignoring.')
return 0
reactor.callLater(0, kill)
def warn(self, text):
- if MSNP2PDEBUG:
- log.msg("Warning in transfer: %s %s" % (self, text))
+ log.msg("Warning in transfer: %s %s" % (self, text))
def sendP2PACK(self, ackHeaders):
binaryFields = BinaryFields()
def write(self, data):
if MSNP2PDEBUG: log.msg("write")
i = 0
+ data = self.data + data
+ self.data = ""
length = len(data)
while i < length:
if i + 1202 < length:
self._writeChunk(data[i:i+1202])
i += 1202
else:
- self.data += data[i:]
- if len(self.data) >= 1202:
- data = self.data
- self.data = ""
- self.write(data)
+ self.data = data[i:]
return
def _writeChunk(self, chunk):
- log.msg("writing chunk")
+ if MSNP2PDEBUG: log.msg("writing chunk")
binaryFields = BinaryFields()
binaryFields[0] = self.sessionID
if self.offset == 0:
if binaryFields[4] != 4:
self.warn("field4," + str(binaryFields[4]))
return
- if binaryFields[9] != 1:
- self.warn("field9," + str(binaryFields[9]))
+ # Just ignore the footer
+ #if binaryFields[9] != 1:
+ # self.warn("field9," + str(binaryFields[9]))
# return
self.sendP2PACK(binaryFields)
if binaryFields[5] != self.dataFlag:
self.warn("field5," + str(binaryFields[5]))
return
- if binaryFields[9] != 1:
- self.warn("field9," + str(binaryFields[9]))
+ # Just ignore the footer
+ #if binaryFields[9] != 1:
+ # self.warn("field9," + str(binaryFields[9]))
# return
offset = binaryFields[2]
total = binaryFields[3]