def UploadTorrent(self, file_name, serverAddr): # create a tcp s = Socket(self.ip, self.port).TCP() s.bind((self.ip, self.port)) # connect to severAddr print "Connecting to :", serverAddr s.connect(serverAddr) # upload file to server resp = s.recv(256) if resp == "Ok": s.send("Upload") resp = s.recv(256) if resp == "Ok": # convert file to .torrent file print "Creating torrent file." fp = open(file_name, 'rb') fileContent = fp.read(1024) enCodedString = Torrent().encode(fileName=file_name) fp.close() fp = open(file_name+".torrent", "wb") fp.write(enCodedString) fp.close() # send torrent file to server # open the file # send recursively print "Sending file to server.." f = open(file_name+'.torrent', 'rb') l = f.read(1024) while(l): s.send(l) l = f.read(1024) f.close() print "Waiting for resonse from server" resp = s.recv(1024) if resp == "Failed": print "File upload failed." s.close() # self.UploadTorrent(file_name, serverAddr) elif resp == "Ok": # file successfully uploaded. Now open socket to let users download this file print "File successfully uploaded." s.close() self.SendFile( file_name) else: print "Server won't let you upload" else: print "Unable to talk to server. Please try after sometime." s.close()
def Upload(self, torrentFile): # decode the torrent file decod = Torrent().decode(torrentFile) # get the file name fileName = decod["info"]["name"] # get trackers trackers = decod["announce"] # update database of itself print "Updating database of torrent files" self.server.db.torrents.insert({"fileName": fileName}) # inform trackers to update there database trackerIP, trackerPort = trackers.split(":") trackerPort = int(trackerPort) print "Connecting to tracker at "+trackers serSoc = Socket('172.34.12.12', 6767).TCP() serSoc.connect((trackerIP, trackerPort)) print "Waiting for response from racker" resp = serSoc.recv(256) if resp == "Ok": serSoc.send("Server") resp = serSoc.recv(256) if resp == "Ok": data = self.ip + ":" + str(self.port) + "||" + fileName print "Sending data to tracker..." serSoc.send(data) resp = serSoc.recv(256) if resp == "Failed": self.socket.send("Failed") return else: self.socket.send("Failed") return # put file into the server print "Putting content into a torrent file..." fp = open(fileName+".torrent", "wb") fp.write(torrentFile) fp.close() # send confirmation to client thread print "Sending confirmation to seeder..." serSoc.close() self.socket.send("Ok") return
def Die(self): s = Socket(self.ip, self.port2).TCP() s.connect(self.trackerAddr) resp = s.recv(256) if resp == "Ok": # send seederAddr and groupAddr to tracker. seederAddr = self.seeders[0] + ":" + str(self.seeders[1]) groupAddr = self.ip + ":" + str(self.port) s.send(seederAddr + "||" + groupAddr) s.close() print "Group died successfully." else: print "Unable to remove group trackers database. Trying again" s.close() return
def GetTorrent(self, serverAddress, fileName): ''' Create a TCP socket Connect the server Get the torrent file from server ''' print "Downloading "+ fileName # Create a TCP socket s = Socket(self.ip, self.port).TCP() # connect to server print "Connecting to ", serverAddress # s.settimeout(5) # 5 seconds try: s.connect(serverAddress) # "random" IP address and port except socket.error, exc: print "Caught exception socket.error : %s" % exc
def GetGroup(self, trackerAddr, fileName): ''' Get tracker's ip and port Create a TCP socket and get group after doing some message passing ''' # create a tcp socket s = Socket(self.ip, self.port).TCP() s.bind((self.ip, self.port)) # connect socket to tracker s.connect(trackerAddr) # get group from tracker after doing some message passing resp = s.recv(256) if resp == "Ok": s.send("Leecher") resp = s.recv(256) if resp == "Ok": s.send(fileName) resp = s.recv(256) if resp == "Ok": resp = s.recv(1024) if resp == "Failed": print "Unable to assign a group.." groupAddr = None # we got the group addr groupAddr = resp else: print "File not exists at server" groupAddr = None else: print "Tracker is not respoinding..." groupAddr = None s.close() return groupAddr