class DiscoRequest:
def __init__(self, pytrans, jid):
LogEvent(INFO)
- self.doDisco()
+ self.pytrans, self.jid = pytrans, jid
def doDisco(self):
ID = self.pytrans.makeMessageID()
- iq = Eleemnt((None, "iq"))
- iq.attributes["to"] = jid
+ iq = Element((None, "iq"))
+ iq.attributes["to"] = self.jid
iq.attributes["from"] = config.jid
iq.attributes["type"] = "get"
query = iq.addElement("query")
import disco
from debug import LogEvent, INFO, WARN, ERROR
-
+import config
+import utils
if utils.checkTwisted():
from twisted.xish.domish import Element
else:
def __init__(self, session, senderJID, legacyftp):
self.session = session
+ self.toJID = self.session.jabberID + "/" + self.session.highestResource
self.senderJID = senderJID
self.legacyftp = legacyftp
LogEvent(INFO)
c3 = features.count(disco.IBB)
c4 = features.count(disco.IQOOB)
#if c1 > 0 and c2 > 0:
- # socksMode()
+ # self.socksMode()
#elif c1 > 0 and c3 > 0:
- # ibbMode()
+ # self.ibbMode()
if c4 > 0:
- oobMode()
+ self.oobMode()
else:
- messageOobMode()
+ self.messageOobMode()
def discoFail(ignored=None):
- oobMode()
+ self.messageOobMode()
- d = disco.DiscoRequest(self.session.pytrans, self.session.jabberID)
+ d = disco.DiscoRequest(self.session.pytrans, self.toJID).doDisco()
d.addCallback(discoDone)
d.addErrback(discoFail)
global oobSite
self.legacyftp.accept()
filename = str(random.randint(0, sys.maxint))
- oobSite.putFile(self, filename)
+ oobSite.resource.putFile(self, filename)
m = Element((None, "message"))
m.attributes["to"] = self.session.jabberID
m.attributes["from"] = self.senderJID
def error(self):
#FIXME
+ pass
self.files[filename] = file
def render_GET(self, request):
- filename = "/" + request.path
+ filename = request.path[1:] # Remove the leading /
if self.files.has_key(filename):
file = self.files[filename]
Connector(file, request)
del self.files[filename]
+ return server.NOT_DONE_YET
else:
page = error.NoResource(message="404 File Not Found")
return page.render(request)
oobSite = server.Site(FileTransfer())
-reactor.listenTCP(8080, site)
+reactor.listenTCP(int(config.ftOOBPort), oobSite)
def gotSendRequest(self, fileReceive):
if not self.session: return
LogEvent(INFO, self.session.jabberID)
- ft.FTReceive(self.session, msn2jid(fileReceive).userHandle, fileReceive)
+ ft.FTReceive(self.session, msn2jid(fileReceive.userHandle), fileReceive)
def loggedIn(self):
if not self.session: return
if self.badConditions():
fileReceive.accept(False)
return
+ LogEvent(INFO, self.switchboardSession.ident)
self.switchboardSession.gotSendRequest(fileReceive)
MSN_MAX_MESSAGE = 1664 # max message length
MSN_CVR_STR = "0x040c winnt 5.1 i386 MSNMSGR 7.0.0777 msmsgs"
MSN_AVATAR_GUID = "{A4268EEC-FEC5-49E5-95C3-F126696BDBF6}"
+MSN_MSNFTP_GUID = "{5D3E02AB-6190-11D3-BBBB-00C04F795683}"
# auth constants
LOGIN_SUCCESS = 1
def _checkFileInvitation(self, message, info):
""" helper method for checkMessage """
- if not info.get('Application-GUID', '').lower() == '{5D3E02AB-6190-11d3-BBBB-00C04F795683}': return 0
+ if not info.get('Application-GUID', '').upper() == MSN_MSNFTP_GUID: return 0
try:
cookie = info['Invitation-Cookie']
fileName = info['Application-File']
except KeyError:
log.msg('Received munged file transfer request ... ignoring.')
return 0
- self.gotSendRequest(msnft.MSNFTP_Receive(fileName, fileSize, message, message.userHandle, cookie, self))
+ self.gotSendRequest(msnft.MSNFTP_Receive(fileName, fileSize, message.userHandle, cookie, self))
return 1
def _checkP2PMessage(self, message, ctypes):
m = MSNMessage()
m.setHeader('Content-Type', 'text/x-msmsgsinvite; charset=UTF-8')
m.message += 'Application-Name: File Transfer\r\n'
- m.message += 'Application-GUID: {5D3E02AB-6190-11d3-BBBB-00C04F795683}\r\n'
+ m.message += 'Application-GUID: %s\r\n' % MSN_MSNFTP_GUID
m.message += 'Invitation-Command: INVITE\r\n'
m.message += 'Invitation-Cookie: %s\r\n' % str(cookie)
m.message += 'Application-File: %s\r\n' % fileName
from twisted.protocols.basic import LineReceiver
from twisted.internet.protocol import ClientFactory
-from msn import MSNMessage, MSNEventBase
+#from msn import MSNMessage
from debug import LogEvent, INFO, WARN, ERROR
import config
class MSNFTReceive_Base:
# Public
- def __init__(self, filename, filesize, message, userHandle):
+ def __init__(self, filename, filesize, userHandle):
self.connector = None
self.finished = False
self.error = False
self.buffer = []
- self.filename, self.filesize, self.message, self.userHandle = filename, filesize, message, userHandle
+ self.filename, self.filesize, self.userHandle = filename, filesize, userHandle
def removeMe(self):
self.connector = None
msnports = MSNFTP_Ports()
-class MSNFTP_Receive(ClientFactory):
- def __init__(self. filename, filesize, userHandle, message, iCookie, switchboard):
- MSNFTReceive_Base(filename, filesize, message, userHandle)
+class MSNFTP_Receive(ClientFactory, MSNFTReceive_Base):
+ def __init__(self, filename, filesize, userHandle, iCookie, switchboard):
+ MSNFTReceive_Base.__init__(self, filename, filesize, userHandle)
self.iCookie = iCookie
self.switchboard = switchboard
self.serverSocket = None
yes = False
self.gotError()
+ from msn import MSNMessage
m = MSNMessage()
m.setHeader('Content-Type', 'text/x-msmsgsinvite; charset=UTF-8')
if yes: