def run(self): global rfclist data = self.client_sock.recv(250) # Download request print 'Download request received' res, rfc = P2P.validateGetRequest(data, rfclist) #res,rfc = 200 , 200 if(res == 200): if (data): segSize = 1024; if(ostype=="Windows"): filepath = srcdir+"\\rfc"+rfc+".pdf" else: filepath = srcdir+"/rfc"+rfc+".pdf" f = open(filepath, "rb") pktheader = P2P.getResponseHeader(200, filepath) self.client_sock.send(pktheader) data = f.read(segSize) while (data): self.client_sock.sendall(data) data = f.read(segSize) f.close() self.client_sock.close() print 'upload complete' else: pktheader = P2P.getResponseHeader(res, 'null') self.client_sock.send(pktheader) print 'Upload Failed: '+Status.getResponsePhrase(res) self.client_sock.close() return
def downloadRFC(self, rfcNum, hostname, port): global srcdir, dstdir # Get details from server using P2S Lookup request request = P2P.getRequestHeader(rfcNum, hostname) peer_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #peer_sock.connect((socket.gethostname(), port)) peer_sock.connect((hostname, port)) peer_sock.send(request) l = peer_sock.recv(200) #parse response res = P2P.validateGetReponse(l) if(res==200): if (ostype=="Windows"): fpath = dstdir+"\\rfc"+rfcNum+".pdf" else: fpath = dstdir+"/rfc"+rfcNum+".pdf" print 'fpath '+ fpath f = open(fpath, "wb") print l data = peer_sock.recv(1024) while (data): f.write(data) data = peer_sock.recv(1024) if(sys.getsizeof(data) == 0): break; else: print 'Download failed: '+Status.getResponsePhrase(res) f.close() peer_sock.close()
def run(self): #sending all rfc files details to centralized index global rfclist global srcdir, dstdir #for key,value in rfclist.iteritems(): # self.sendADDRequest(key, "RFC"+key) while True: print "Please select from the following option" print "1.ADD RFC to CI server" print "2.LOOKUP request to CI Server " print "3.List all request to CI server" print "4.Download rfc" print "5.Exit" user_choice= raw_input() if user_choice =='1': rfc_num=raw_input("Enter RFC Number to Add") rfc_title=raw_input("Enter RFC Title to Add") print "Sending Add RFC to CI server" res = self.checkRFCAvailability(rfc_num) if res==1: if(ostype=="Windows"): rfclist[rfc_num]= srcdir+'\\rfc'+str(rfc_num)+'.pdf' else: rfclist[rfc_num]= srcdir+'/rfc'+str(rfc_num)+'.pdf' self.sendADDRequest(rfc_num,rfc_title) else: print 'File Not available' print 'Save the file in the format -> rfc'+str(rfc_num)+'.pdf <- in P2PFilesrc Folder\n' elif user_choice=='2': rfc_num=raw_input("Enter RFC Number to lookup") rfc_title=raw_input("Enter RFC Title to lookup") print "Sending lookup request" self.sendLookUpRequest(rfc_num,rfc_title) elif user_choice=='3': print "Sending list all request" self.sendListAllRequest() elif user_choice=='4': print 'Downloading RFC' rfc_num=raw_input("Enter RFC Number to download") rfc_title=raw_input("Enter RFC Title to download") resp = self.sendLookUpRequest(rfc_num,rfc_title) host,port,stat = P2S.parseLookupResponse(resp,rfc_num,rfc_title) print 'stat' + str(stat) if(stat==200): self.downloadRFC(rfc_num, host, int(port)) else: print "Download Failed: "+Status.getResponsePhrase(stat) elif user_choice=='5': print "Exiting program" print("socket closed") self.ser_sock.close() os._exit(1) break else: print "Invalid input" return
def response(status, li): pktheader = "P2P-CI/1.0 "+str(status)+" "+Status.getResponsePhrase(status)+"\r\n\r\n" pktdata = "" if li=='null': pktdata+="\r\n" return pktheader+pktdata for rfcn,title,hostname,port in li: dataline = "RFC "+rfcn+" "+title+" "+hostname +" "+str(port)+"\r\n"; pktdata+=dataline pktdata+="\r\n" return pktheader+pktdata
def getResponseHeader(status,fi): opsys = platform.system()+" "+platform.release()+" "+platform.version() #path = 'C:\\SARAVANANB\\NCSU MAIN\\NCSU-Sem1\\CSC505\\Programs\\P2P\\P2PFilesrc\\1234.txt' pktheader = "P2P-CI/1.0 "+str(status)+" "+Status.getResponsePhrase(status)+ "\r\n" \ "Date: "+str(datetime.datetime.now().time()) + "\r\n" \ "OS: "+opsys+"\r\n" if(fi!='null'): contlen = os.path.getsize(fi) pktheader+="Last-Modified: "+str(time.ctime(os.path.getmtime(fi))) + "\r\n" +\ "Content-Length: " + str(contlen) + "\r\n" + \ "Content-Type: text/text\r\n" pktheader+="\r\n" return pktheader