def run(self): self.addr_pkt = self.socket.recv(164) if (len(self.addr_pkt) != 0): self.bytes_read = len(self.addr_pkt) while (self.bytes_read < 164): self.addr_pkt += self.socket.recv(164 - self.bytes_read) self.bytes_read = len(self.addr_pkt) self.sessionid = self.addr_pkt[0:16].decode() self.lenfile = int(self.addr_pkt[16:26].decode()) self.lenpart = int(self.addr_pkt[26:32].decode()) self.filename = self.addr_pkt[32:132].decode().strip(' ') self.md5 = self.addr_pkt[132:].decode() db = dataBase() #db.create() search = db.check_file(self.sessionid, self.md5) if (search == 0): npart = db.insert_file(self.sessionid, self.md5, self.filename, self.lenfile, self.lenpart) self.aadr_pkt = "AADR" + npart self.socket.send(self.aadr_pkt.encode()) self.socket.close() else: npart = db.update_file(self.sessionid, self.md5, self.filename, self.lenfile, self.lenpart) self.aadr_pkt = "AADR" + npart self.socket.send(self.aadr_pkt.encode()) self.socket.close() # insert or update md5 in global dict #self.list.append(Util.globalDict[self.sessionid]) #self.list.append(self.md5) #Util.globalDict[self.sessionid] = self.list # insert into interested #peer_addr = db.getPeerBySid(self.sessionid) db.insertInterested(self.sessionid, self.md5) # insert into bitmapping totalBit = math.ceil((self.lenfile / self.lenpart)) bits = pL.partList_gen(totalBit, 255) db.insertBitmapping(self.md5, self.sessionid, bits)
def main(): # 构建数据库类,完成数据库连接 # 此处需要填写自己的数据库的名称、用户名和密码 db = dataBase.dataBase(host='127.0.0.1', port=3306, user='******', password='******', db='zhihu', charset='utf8') # 构建数据解析类 de = data_explain.explain_data(db) # 自定义所要收集话题的ID topicID = '21246026' # 构建动态的URL url_COIVD_question = "http://www.zhihu.com/api/v4/topics/" + topicID + "/feeds/timeline_question?include=data%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Danswer%29%5D.target.content%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%3Bdata%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Danswer%29%5D.target.is_normal%2Ccomment_count%2Cvoteup_count%2Ccontent%2Crelevant_info%2Cexcerpt.author.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Darticle%29%5D.target.content%2Cvoteup_count%2Ccomment_count%2Cvoting%2Cauthor.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Dtopic_sticky_module%29%5D.target.data%5B%3F%28target.type%3Dpeople%29%5D.target.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Danswer%29%5D.target.annotation_detail%2Ccontent%2Chermes_label%2Cis_labeled%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Canswer_type%3Bdata%5B%3F%28target.type%3Danswer%29%5D.target.author.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Danswer%29%5D.target.paid_info%3Bdata%5B%3F%28target.type%3Darticle%29%5D.target.annotation_detail%2Ccontent%2Chermes_label%2Cis_labeled%2Cauthor.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B%3F%28target.type%3Dquestion%29%5D.target.annotation_detail%2Ccomment_count%3B&limit=10&offset=0" # 开始循环收集 cirData_get(de, url_COIVD_question)
def research(self): db = dataBase() #generating packet search_extended = self.search + (' ' * (20 - len(self.search))) pack = "FIND" + self.sid + search_extended #retreive address of superpeer if (Util.mode in ["normal", "logged"]): super_ip = db.retrieveSuperPeers() sIpv4, sIpv6, sPort = Util.ip_deformatting(super_ip[0][0], super_ip[0][1]) #connection to superpeer con = Conn(sIpv4, sIpv6, sPort) else: config = db.retrieveConfig(("selfV4", "selfV6")) #connection to superpeer con = Conn(config.selfV4, config.selfV6, 3000) if con.connection(): Util.printLog('Incipit corretto') con.s.send(pack.encode()) recv_type = con.s.recv(4) if (len(recv_type) != 0): self.bytes_read = len(recv_type) while (self.bytes_read < 4): recv_type += con.s.recv(4 - self.bytes_read) self.bytes_read = len(recv_type) if (recv_type.decode() == "AFIN"): recv_packet = con.s.recv(3) # numero di md5 ottenuti self.bytes_read = len(recv_packet) Util.printLog("RICEVUTO AFIN") while (self.bytes_read < 3): recv_packet += con.s.recv(3 - self.bytes_read) self.bytes_read = len(recv_packet) recv_afin = Recv_Afin(int(recv_packet.decode()), con.s) recv_afin.start() else: Util.printLog('Incipit fallito')
def konwertuj(self): if self.sprawdzPliki(str( self.oldFilePath.text())) and self.sprawdzPliki( str(self.newFilePath.text())): # baza danych sql = dataBase() sql.read(str(self.newFilePath.text())) # stara baza danych oldPath = os.path.dirname(str(self.oldFilePath.text())) oldName = os.path.basename(str(self.oldFilePath.text())) sys.path.append(oldPath) oldModule = __import__(os.path.splitext(oldName)[0]) # for i, j in oldModule.bibliotekaDane.items(): param = sql.has_value("name", i) if not param[0]: sql.addPackage({ "name": i, "path": j[0], "x": str(j[1]), "y": str(j[2]), "z": str(j[3]), "rx": str(j[4]), "ry": str(j[5]), "rz": str(j[6]), "add_socket": 0, "add_socket_id": 0, "socket": str(j[7]), "socket_height": str(j[8]), "description": "", "datasheet": "" }) try: if self.removeOld.isChecked(): os.remove(str(self.oldFilePath.text())) except OSError: pass QtGui.QMessageBox().information(self, u"Conversion", u"Conversion finished.") self.reject()
def add_file(self, file): print('Files/'+file) self.check_file = Path('Files/'+file) db = dataBase() if (self.check_file.is_file()): self.f = open('Files/'+file, 'rb') self.contenuto = self.f.read() self.filename = file self.size = str(os.stat('Files/'+file).st_size).zfill(10) self.FileHash = hashlib.md5() self.FileHash.update(self.contenuto) self.FileHash.hexdigest() if (len(self.filename) < 100): self.f_name = self.filename.ljust(100, ' ') if(self.con.connection()): self.data_add_file = 'ADDR' + self.sid + self.size + str(self.lenpart).zfill(6) + self.f_name + self.FileHash.hexdigest() self.con.s.send(self.data_add_file.encode()) self.ack_aadr = self.con.s.recv(12) self.bytes_read = len(self.ack_aadr) while(self.bytes_read < 12): print(self.bytes_read) self.ack_aadr += self.con.s.recv(12 - self.bytes_read) self.bytes_read = len(self.ack_aadr) if(self.ack_aadr[0:4].decode() == "AADR"): npart = db.insert_file(self.sid, self.FileHash.hexdigest(), self.filename, int(self.size), int(self.lenpart)) self.con.deconnection() else: print("Connection refused...") else: print("There isn't any file with this name in your directory") sleep(4)
def send_login(self): con = Conn(self.ip4_t, self.ip6_t, self.port_t) if con.connection(): addr = Util.ip_formatting(self.ip4_l, self.ip6_l, self.port_l) packet = "LOGI" + addr con.s.send(packet.encode()) recv_packet = con.s.recv(20) if (recv_packet[:4].decode() == 'ALGI'): db = dataBase() db.updateConfig('sessionId', recv_packet[4:].decode()) db.updateConfig('mode', 'logged') Util.sessionId = recv_packet[4:].decode() del db Util.mode = "logged" else: Util.printLog("login failed: " + recv_packet.decode()) else: Util.printLog('Connection refused...')
def run(self): db = dataBase() peersocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) peersocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) peersocket.bind(('', self.port)) peersocket.settimeout(20) peersocket.listen(20) while True: try: other_peersocket, addr = peersocket.accept() recv_packet = other_peersocket.recv(80) self.bytes_read = len(recv_packet) while (self.bytes_read < 80): recv_packet += other_peersocket.recv(80 - self.bytes_read) self.bytes_read = len(recv_packet) Util.printLog("ANEAR da: " + addr[0]) # retrieving data from near research Util.printLog("pacchetto ====> " + str(recv_packet.decode())) if (recv_packet[:4].decode() == "ANEA"): self.lock.acquire() db.insertResponse(recv_packet[4:20].decode(), recv_packet[20:75].decode(), recv_packet[75:80].decode(), "null", "null") db.insertNeighborhood(recv_packet[20:75].decode(), recv_packet[75:80].decode()) self.lock.release() except: sys.exit() del db
def main(): # 构建数据库类,完成数据库连接 # 此处需要填写自己的数据库的名称、用户名和密码 db = dataBase.dataBase(host='127.0.0.1', port=3306, user='******', password='******', db='zhihu', charset='utf8') # 构建数据解析类 de = data_explain.explain_data(db) # 获取需要回答信息的问题ID question_id = db.getQuestionId_Answer() result = pd.DataFrame(list(question_id)) result.columns = ['question_id'] # 按照问题的ID依次获取回答信息并解析存储 for i in range(1, len(result['question_id'])): print(i) print(result['question_id'][i]) URL = 'https://www.zhihu.com/api/v4/questions/'+ result['question_id'][i] +'/answers?include=data%5B%2A%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cis_labeled%2Cis_recognized%2Cpaid_info%2Cpaid_info_content%3Bdata%5B%2A%5D.mark_infos%5B%2A%5D.url%3Bdata%5B%2A%5D.author.follower_count%2Cbadge%5B%2A%5D.topics%3Bsettings.table_of_content.enabled%3B&limit=5&offset=0&platform=desktop&sort_by=default' if(i%100 == 0): time.sleep(random.uniform(0,1)*50) # 每隔一定时间休息较长一段时间 cirData_get_explain(URL, "get",de,"json")
def konwertuj(self): if self.sprawdzPliki(str(self.oldFilePath.text())) and self.sprawdzPliki(str(self.newFilePath.text())): # baza danych sql = dataBase() sql.read(str(self.newFilePath.text())) # stara baza danych oldPath = os.path.dirname(str(self.oldFilePath.text())) oldName = os.path.basename(str(self.oldFilePath.text())) sys.path.append(oldPath) oldModule = __import__(os.path.splitext(oldName)[0]) # for i, j in oldModule.bibliotekaDane.items(): param = sql.has_value("name", i) if not param[0]: sql.addPackage({"name": i, "path": j[0], "x": str(j[1]), "y": str(j[2]), "z": str(j[3]), "rx": str(j[4]), "ry": str(j[5]), "rz": str(j[6]), "add_socket": 0, "add_socket_id": 0, "socket": str(j[7]), "socket_height": str(j[8]), "description": "", "datasheet": ""}) try: if self.removeOld.isChecked(): os.remove(str(self.oldFilePath.text())) except OSError: pass QtGui.QMessageBox().information(self, u"Conversion", u"Conversion finished.") self.reject()
def run(self): db = dataBase() while True: recv_packet = self.other_peersocket.recv(212) self.bytes_read = len(recv_packet) if(self.bytes_read == 0): Util.printLog("ESCO DAL SECONDO LIVELLO DAVVERO") sys.exit() while(self.bytes_read < 212): Util.printLog(str(self.bytes_read)) recv_packet += self.other_peersocket.recv(212 - self.bytes_read) self.bytes_read = len(recv_packet) Util.printLog(str(recv_packet.decode())) # retrieving data from file research if(recv_packet[:4].decode() == "AQUE"): self.lock.acquire() db.insertResponse(recv_packet[4:20].decode(), recv_packet[20:75].decode(), recv_packet[75:80].decode(), recv_packet[80:112].decode(), recv_packet[112:212].decode()) self.lock.release() Util.printLog("CHIUDO THREAD LIVELLO DUE")
def run(self): Util.printLog('\n\nApertura thread SUPE\n\n') db = dataBase() Util.lock.acquire() res = db.retrieveCounterRequest(self.pid, self.pack[20:75]) if (res == 0): # Richiesta già conosciuta Util.printLog("Eseguo SUPE per: " + self.ipRequest) db.insertRequest(self.pid, self.pack[20:75], time.time()) Util.globalLock.acquire() mode = Util.mode # Prelevo la modalità attuale Util.globalLock.release() if self.ttl > 1: # Inoltro richiesta ai vicini if mode in ['update', 'updateS']: Util.printLog('Update. Prendo vicini da lista') neighborhood = Util.listPeers if mode == 'normal': Util.printLog('Invio SUPE da modalità ::: ' + mode) neighborhood = db.retrievePeers() else: Util.printLog('Invio SUPE da modalità ::: ' + mode) neighborhood = db.retrieveSuperPeers() Util.lock.release() self.ttl = str(self.ttl - 1).zfill(2) self.pack = ''.join((self.pack[:80], self.ttl)) for neighbor in neighborhood: ipv4, ipv6, port = Util.ip_deformatting( neighbor[0], neighbor[1]) if ipv4 != self.ipRequest and ipv6 != self.ipRequest and ipv4 != self.ipv4: con = Conn(ipv4, ipv6, port) if con.connection(): con.s.send(self.pack.encode()) Util.printLog("Inoltro SUPE a vicino ::: " + ipv4) con.deconnection() else: Util.printLog("Inoltro SUPE fallita per ::: " + ipv4) else: Util.lock.release( ) # Non devo inoltrare, ma devo comunque rilasciare la lock if mode in ['updateS', 'super']: # Sono superpeer e rispondo self.pack = 'ASUP' + self.pid + self.myIPP Util.printLog('ASUP pacchetto ::: ' + str(self.pack)) Util.printLog('ASUP verso ::: ' + self.ipv4 + self.ipv6 + str(self.port)) con = Conn(self.ipv4, self.ipv6, self.port) if con.connection(): con.s.send(self.pack.encode()) Util.printLog('Risposta ASUP a ::: ' + self.ipv4) con.deconnection() else: Util.printLog('Risposta ASUP fallita per ::: ' + self.ipv4) else: Util.lock.release() Util.printLog("SUPE per: " + self.ipRequest + ". Già eseguita") Util.printLog('\n\nChiusura thread SUPE\n\n')
from geopy.distance import geodesic as dist parser = argparse.ArgumentParser( description='Extract a journey from th rpiGps') parser.add_argument('--start', required=True, help='start date of the form YYYY-MM-DD') parser.add_argument('--stop', required=True, help='stop date of the form YYYY-MM-DD') parser.add_argument('--title', required=True, help='title of the trip') parser.add_argument('--subTitle', required=True, help='subtitle of the trip') args = parser.parse_args() db = dataBase("Jouke", "!Jouke", "localhost", "busGps") db.start() while db.init: time.sleep(0.1) data = db.Get( "SELECT Id,Lat,Lon,Time from Gps WHERE Time BETWEEN '{}' AND '{}' ORDER BY id" .format(args.start, args.stop)) print( "SELECT Id,Lat,Lon,Time from Gps WHERE Time BETWEEN '{}' AND '{}' ORDER BY id" .format(args.start, args.stop)) print("found %s items" % len(data)) # Create the root KML object rootNights = kml.KML() rootRoute = kml.KML()
def run(self): # Lettura della richiesta download = self.sock.recv(44) readB = len(download) while (readB < 44): download += self.sock.recv(44 - readB) readB = len(download) md5 = download[4:36].decode() part = int(download[36:].decode()) #dal database devo estrarre i chunk relativi alla parte db = dataBase() lenPart = db.retrieveInfoFile(md5) nameFile = lenPart[3] # Nome del file lenFile = lenPart[1] lenPart = lenPart[2] # Lunghezza della parte seekPosition = lenPart * (part - 1) # Posiziono la testina sulla parte interessata if lenPart > 1024: lenChunk = int(db.retrieveConfig(('lenChunk',))) nChunk = ceil(lenPart/lenChunk) elif lenPart < 4: lenChunk = 1 nChunk = lenPart else: lenChunk = ceil(lenPart/4) # Prevedo 4 chunk per parte nChunk = 4 nparts = ceil(lenFile/lenPart) # Preparo ed invio il pacchetto self.sock.send(('AREP' + str(nChunk).zfill(6)).encode()) # Intestazione pacchetto AREP f = open('Files/' + nameFile, 'rb') f.seek(seekPosition, 0) for _ in range(nChunk - 1): # Ciclo dei chunk completi r = f.read(lenChunk) self.sock.send(str(len(r)).zfill(5).encode() + r) remainder = lenPart % lenChunk if remainder == 0: # Se non ho resto significa che l'ultimo chunk è completamente pieno remainder = lenChunk r = f.read(remainder) self.sock.send(str(len(r)).zfill(5).encode() + r) self.sock.close() f.close()
def __init__(self, database, *args, **kwargs): super().__init__() self.database = database self.sheet = dataBase() self.init_GUI()
from heaterController import heaterController from sendPost import sendPost import paho.mqtt.client as mqtt import os, urlparse # from sendPost import sendPost #initals declarations idsensorInside = 1 idsensorOutside = 2 # 15 min between readings timeReadingTemp = 60 timeLastReading = 0 # Creating objects dataBase = dataBase() sendPost = sendPost(dataBase) sendPost.start() # Get desired temp from database cloud initialDesiredTemp = sendPost.getTemp() #creat heater object heaterController = heaterController(initialDesiredTemp, sendPost) # -------------START MQTT END-------------- # URL used in the MQTT connection url_mqtt = 'url_mqtt' # Define event callbacks def on_connect(client, userdata, flags, rc):
def run(self): db = dataBase() dbs = dataBaseSuper() self.config = db.retrieveAllConfig() peersocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) peersocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) peersocket.bind(('', self.port)) peersocket.listen(20) while True: Util.printLog("IN ATTESA DI UNA RICHIESTA ") other_peersocket, addr = peersocket.accept() if addr[0][:2] == "::": addrPack = addr[0][7:] Util.printLog("Richiesta in arrivo da: " + addrPack) else: addrPack = addr[0] Util.printLog("Richiesta in arrivo da: " + addrPack) recv_type = other_peersocket.recv(4) if (len(recv_type) != 0): self.bytes_read = len(recv_type) while (self.bytes_read < 4): recv_type += other_peersocket.recv(4 - self.bytes_read) self.bytes_read = len(recv_type) # SUPE --- if (recv_type.decode() == "SUPE"): Util.printLog('Ricevo SUPE da: ' + addrPack) recv_packet = other_peersocket.recv(78) # 82 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 78): recv_packet += other_peersocket.recv(78 - self.bytes_read) self.bytes_read = len(recv_packet) Util.printLog("FINITO LETTURA SUPE, AVVIO THREAD SUPE") pkt = recv_type + recv_packet th_SUPE = ThreadSUPE(pkt.decode(), self.ipv4, self.ipv6, addrPack) th_SUPE.start() # ASUP --- elif (recv_type.decode() == "ASUP"): Util.printLog("Ricevuto ASUP da: " + addrPack) recv_packet = other_peersocket.recv(76) # 80 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 76): recv_packet += other_peersocket.recv(76 - self.bytes_read) self.bytes_read = len(recv_packet) Util.lock.acquire() db.insertSuperPeers(recv_packet[16:71].decode(), recv_packet[71:].decode()) db.insertResponse(recv_packet[:16].decode(), recv_packet[16:71].decode(), recv_packet[71:].decode(), "null", "null") Util.lock.release() # QUER --- elif (recv_type.decode() == "QUER"): Util.printLog('Ricevo QUER da: ' + addrPack) recv_packet = other_peersocket.recv(98) # 102 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 98): Util.printLog(str(self.bytes_read)) recv_packet += other_peersocket.recv(98 - self.bytes_read) self.bytes_read = len(recv_packet) Util.printLog("NUMERO LETTO : " + str(len(recv_packet))) pkt = recv_type + recv_packet Util.printLog("QUER RICEVUTO: " + pkt.decode()) th_QUER = ThreadQUER(pkt.decode(), addrPack) th_QUER.start() # AFIN --- elif (recv_type.decode() == "AFIN"): recv_packet = other_peersocket.recv( 3) # numero di md5 ottenuti self.bytes_read = len(recv_packet) Util.printLog("RICEVUTO AFIN") while (self.bytes_read < 3): recv_packet += other_peersocket.recv(3 - self.bytes_read) self.bytes_read = len(recv_packet) recv_afin = Recv_Afin(int(recv_packet.decode()), other_peersocket) recv_afin.start() # FIND --- elif (recv_type.decode() == "FIND"): recv_packet = other_peersocket.recv(36) # 40 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 36): recv_packet += other_peersocket.recv(36 - self.bytes_read) self.bytes_read = len(recv_packet) pktid = Util.ip_packet16() addr = Util.ip_formatting(self.ipv4, self.ipv6, self.port) Util.printLog("RICEVUTO FIND E TRASFORMO IN QUER " + str(recv_packet[16:].decode())) new_packet = "QUER" + pktid + addr + str(self.ttl).zfill( 2) + recv_packet[16:].decode().ljust(20) Util.printLog("====> PACCHETTO DI QUER <====") Util.printLog(str(new_packet)) Util.printLog("=============================") th_FIND = ThreadFIND(new_packet, recv_packet[:16].decode()) th_FIND.start() # AQUE --- elif (recv_type.decode() == "AQUE"): recv_packet = other_peersocket.recv(208) # 212 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 208): recv_packet += other_peersocket.recv(208 - self.bytes_read) self.bytes_read = len(recv_packet) Util.printLog("RICEVO GLI AQUE DALLA RETE") recv_packet = recv_type + recv_packet t_RESP = thread_Response(recv_packet.decode()) t_RESP.start() # ADFF --- elif (recv_type.decode() == "ADFF"): recv_packet = other_peersocket.recv(148) # 152 - 4 self.bytes_read = len(recv_packet) Util.printLog("LUNGHEZZA LETTURA AGG FILE " + str(self.bytes_read)) while (self.bytes_read < 148): Util.printLog("I'M HERE") recv_packet += other_peersocket.recv(148 - self.bytes_read) self.bytes_read = len(recv_packet) recv_packet = recv_type + recv_packet Util.printLog("AGGIUNTO FILE AL SUPERPEER") th_INS = ThreadINS(recv_packet.decode()) th_INS.start() # DEFF --- elif (recv_type.decode() == "DEFF"): recv_packet = other_peersocket.recv(48) # 52 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 48): recv_packet += other_peersocket.recv(48 - self.bytes_read) self.bytes_read = len(recv_packet) recv_packet = recv_type + recv_packet Util.printLog("ELIMINATO FILE AL SUPERPEER") th_DEL = ThreadDEL(recv_packet.decode()) th_DEL.start() # LOGI --- elif (recv_type.decode() == "LOGI"): recv_packet = other_peersocket.recv(60) # 64 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 60): recv_packet += other_peersocket.recv(60 - self.bytes_read) self.bytes_read = len(recv_packet) th_ALGI = ThreadALGI(recv_packet[:55].decode(), recv_packet[55:].decode(), other_peersocket) th_ALGI.ALGI() Util.printLog("FINE LOGIN NEL CENTRAL THREAD") # LOGO --- elif (recv_type.decode() == "LOGO"): recv_packet = other_peersocket.recv(16) # 20 - 4 self.bytes_read = len(recv_packet) while (self.bytes_read < 16): recv_packet += other_peersocket.recv(16 - self.bytes_read) self.bytes_read = len(recv_packet) recv_packet = recv_type + recv_packet Util.printLog("LOGOUT DAL SUPERPEER") th_LOGO = ThreadLOGO(recv_packet.decode(), other_peersocket) th_LOGO.LOGO() # UPLOAD --- elif (recv_type.decode() == "RETR"): recv_packet = other_peersocket.recv(32) # 36 - 4 Util.printLog("RICEVUTA RICHIESTA DI DOWNLOAD DI " + recv_packet.decode() + " DALLA RETE") self.bytes_read = len(recv_packet) while (self.bytes_read < 32): Util.printLog("DENTRO AL CICLO DEL RETR") recv_packet += other_peersocket.recv(32 - self.bytes_read) self.bytes_read = len(recv_packet) th_UPLOAD = Upload(self.port, recv_packet.decode(), other_peersocket) th_UPLOAD.start() th_UPLOAD.join() # EXIT --- elif (recv_type.decode() == "EXIT"): sys.exit() if (recv_type.decode() not in ['AFIN', 'FIND']): other_peersocket.close()
def run(self): db = dataBase() statusMd5 = [] num = 0 recv_packet = self.other_peersocket.recv(56) self.bytes_read = len(recv_packet) while (self.bytes_read < 56): recv_packet += other_peersocket.recv(56 - self.bytes_read) self.bytes_read = len(recv_packet) flag = True check = db.getInterestedPeers(recv_packet[16:48].decode()) #Util.printLog("CHECK → " + str(check)) for c in check: #Util.printLog("c → " + str(c[0])) if (c[0] == recv_packet[:16].decode()): flag = False if (flag): db.insertInterested(recv_packet[:16].decode(), recv_packet[16:48].decode()) #Util.printLog("INSERITO IN F_IN") #else: #Util.printLog("NON INSERITO IN F_IN") # retrieving part for update part_recv = recv_packet[48:].decode() part = (int(part_recv) - 1) // 8 #toUpdateBits = db.retrieveBits(recv_packet[16:48].decode(), recv_packet[:16].decode(), int(part)) toUpdateBits = Util.globalDict[recv_packet[:48].decode()][part] specificBit = int(part_recv) % 8 if (specificBit == 0): specificBit = 8 #Util.printLog("part --> " + str(part)) #Util.printLog("toUpdateBits --> " + str(toUpdateBits)) #Util.printLog("specific bit --> " + str(specificBit)) for i in Util.globalDict.keys(): for j in Util.globalDict[i].keys(): Util.count_dict += bin(Util.globalDict[i][j][2:].count('1')) if (Util.count_dict < 200): up = uB.updateBits(toUpdateBits, specificBit) # updating database Util.globalDict[recv_packet[:48].decode()][part] = up # return status of md5 for peer statusMd5 = db.getBitmapping(recv_packet[:16].decode(), recv_packet[16:48].decode()) for sM in statusMd5: num = num + bin(sM[0])[2:].count('1') packet = "APAD" + str(num).zfill(8) self.other_peersocket.send(packet.encode()) self.other_peersocket.close() else: Util.count_dict = 0 t_RIFLE = rifleDict()
# # ================================================= # myMeto.py # - Author jouke hijlkema <*****@*****.**> # - Initial Version 1.0 # ================================================= import time from rainMeter import rainMeter from windSpeed import windSpeed from windDirection import windDirection from TempEtc import Temp from dataBase import dataBase from datetime import datetime db = dataBase("Meteo","!Meteo","localhost","Meteo") myRain = rainMeter(38) myWindSpeed = windSpeed(40) myWindDir = windDirection() myTemp = Temp() while True: r = myRain.read() ws = myWindSpeed.read() wd = myWindDir.read() t = myTemp.readTemp() h = myTemp.readHumidity() p = myTemp.readPressure() db.Put(("INSERT INTO Mesurements " "(Time,Rain,WindSpeed,WindDirection,Temperature,Humidity,Pressure)"
def run(self): db = dataBase() file_find = [] #ricavo i superpeer a cui sono collegato e inoltro la richiesta nella rete superpeers = db.retrieveSuperPeers() config = db.retrieveConfig(('selfV4', 'selfV6')) Util.globalLock.acquire() Util.statusRequest[self.packet[4:20]] = True Util.printLog("DIZIONARIO GLOBALE SETTATO ---> " + str(Util.statusRequest[self.packet[4:20]])) Util.globalLock.release() if (superpeers): for sp in superpeers: ipv4, ipv6, port = Util.ip_deformatting(sp[0], sp[1]) if (ipv4 != config.selfV4): conn = Conn(ipv4, ipv6, port) if (conn.connection()): conn.s.send(self.packet.encode()) conn.deconnection() Util.printLog("INVIO QUER VERSO " + str(ipv4) + " RIUSCITO") else: Util.printLog( "INVIO QUER FALLITO VERSO IL SUPER... PROBABILMENTE " + str(ipv4) + " E' OFFLINE") continue cond = th.Condition() cond.acquire() cond.wait(20) cond.release() Util.globalLock.acquire() Util.statusRequest[self.packet[4:20]] = False Util.printLog("PASSATI 20 SECONDI.. DIZIONARIO ---> " + str(Util.statusRequest[self.packet[4:20]])) Util.globalLock.release() #controllo tra i peer loggati a me prima di inoltrare la quer nella rete dbS = dataBaseSuper() localFile = dbS.findInLocalSP(self.packet[82:]) Util.printLog("LOCALFILE " + str(localFile)) #creazione pacchetto di AFIN passati i 20 secondi addrPeer = db.retrievePeerSid(self.sid) Util.printLog("ADDRPEER " + str(addrPeer)) resp = db.retrieveResponse(self.packet[4:20]) ipv4, ipv6, port = Util.ip_deformatting(addrPeer[0][0], addrPeer[0][1]) for f in resp: file_find.append(f[3]) for ff in localFile: file_find.append(ff[1]) seen = set() uniq = [] for x in file_find: if x not in seen: uniq.append(x) seen.add(x) toPeer = "AFIN" + str(len(seen)).zfill(3) connP = Conn(ipv4, ipv6, port) if (connP.connection()): connP.s.send(toPeer.encode()) buffer_md5 = '' for i in resp: count = 0 ll = [] md5 = i[3] if (md5 == buffer_md5): continue for j in resp: if (md5 in j): count = count + 1 add = j[1] + j[2] ll.append(add) if (count == 1): toPeer = md5 + i[4] + str(count).zfill(3) + i[1] + i[2] connP.s.send(toPeer.encode()) Util.printLog("PACCHETTO AFIN 1-----> " + str(toPeer)) elif (count > 1): buffer_md5 = md5 toPeer = md5 + i[4] + str(count) for l in ll: toPeer = toPeer + l connP.s.send(toPeer.encode()) Util.printLog("PACCHETTO AFIN 2+-----> " + str(toPeer)) buffer_md5_l = '' if (localFile): # se la lista non è vuota entro nel ciclo k = 0 for lf in localFile: count = 0 ll2 = [] md5 = lf[1] Util.printLog("localfile in for " + str(lf)) addrLocalPeer = db.retrievePeerSid(lf[0]) if (md5 == buffer_md5_l): continue for j in localFile: if (md5 in j): addrLocalPeer_dub = db.retrievePeerSid(j[0]) count = count + 1 add = addrLocalPeer_dub[0][0] + addrLocalPeer_dub[0][1] ll2.append(add) Util.printLog("addrLocalPeer " + str(addrLocalPeer)) if (count == 1): toPeer = lf[1] + lf[2] + str(1).zfill( 3) + addrLocalPeer[0][0] + addrLocalPeer[0][1] k = k + 1 connP.s.send(toPeer.encode()) Util.printLog("PACCHETTO AFIN 1 LOCAL-----> " + str(toPeer)) elif (count > 1): buffer_md5_l = md5 toPeer = lf[1] + lf[2] + str(count).zfill(3) for l2 in ll2: toPeer = toPeer + l2 connP.s.send(toPeer.encode()) Util.printLog("PACCHETTO AFIN 1+ LOCAL-----> " + str(toPeer)) connP.deconnection()
def body(self): open_conn = Conn(port=3000) peersocket = open_conn.initializeSocket() db = dataBase() c = ['black'] db.create("tracker") # check logged pN = plot_net() res = db.checkLogged() if (res): for r in res: c.append('green') ip = Util.ip_deformatting(r[0], r[1]) pN.addPeer(ip[0], c) pause(0.5) while True: Util.printLog("###### IN ATTESA DI UNA RICHIESTA #######") other_peersocket, addr = peersocket.accept() if addr[0][:2] == "::": addrPack = addr[0][7:] Util.printLog("Richiesta in arrivo da: " + addrPack) else: addrPack = addr[0] Util.printLog("Richiesta in arrivo da: " + addrPack) recv_type = other_peersocket.recv(4) if (len(recv_type) != 0): self.bytes_read = len(recv_type) while (self.bytes_read < 4): recv_type += other_peersocket.recv(4 - self.bytes_read) self.bytes_read = len(recv_type) Util.printLog("RICHIESTA IN ENTRATA AL TRACKER → " + str(recv_type.decode())) # LOGIN --- if (recv_type.decode() == "LOGI"): recv_packet = other_peersocket.recv(60) self.bytes_read = len(recv_packet) while (self.bytes_read < 60): recv_packet += other_peersocket.recv(60 - self.bytes_read) self.bytes_read = len(recv_packet) th_LOGIN = t_login(other_peersocket, recv_packet.decode()) th_LOGIN.start() c.append('green') ip = Util.ip_deformatting(recv_packet[:55].decode(), recv_packet[55:].decode()) pN.addPeer(ip[0], c) pause(1) # LOGOUT --- if (recv_type.decode() == "LOGO"): recv_packet = other_peersocket.recv(16) self.bytes_read = len(recv_packet) while (self.bytes_read < 16): recv_packet += other_peersocket.recv(16 - self.bytes_read) self.bytes_read = len(recv_packet) addr = db.getPeerBySid(recv_packet.decode()) if (addr): ip = Util.ip_deformatting(addr[0], addr[1]) t_LOGOUT = t_logout(other_peersocket, recv_packet.decode()) t_LOGOUT.start() t_LOGOUT.join() Util.printLog(t_LOGOUT.statusLogout) if (t_LOGOUT.statusLogout == "ALOG"): pN.removePeer(ip[0], c) pause(1) # LOOK --- if (recv_type.decode() == "LOOK"): Util.printLog("\n→ ARRIVO LOOK ←\n") t_LOOK = t_look(other_peersocket) t_LOOK.start() # FCHU --- if (recv_type.decode() == "FCHU"): #Util.printLog("\n→ ARRIVO FCHU ←\n") th_FCHU = t_fchu(other_peersocket) th_FCHU.start() # ADDR --- if (recv_type.decode() == "ADDR"): Util.printLog("\n→ ARRIVO ADDR ←\n") th_ADDR = t_addr(other_peersocket) th_ADDR.start() # RPAD --- if (recv_type.decode() == "RPAD"): #Util.printLog("\n→ ARRIVO RPAD ←\n") th_RPAD = t_rpad(other_peersocket) th_RPAD.start() print(Util.globalDict)
def __init__(self): autorized = 80067394566866L QDialog.__init__(self) msgTitle = "Error!" msg = "no se ha podido establecer conexion con base de datos!" msgCopyNoValid = "La copia de este software no es valida!\n Contactenos para mayor informacion <*****@*****.**>" self.setupUi(self) self.stack.setCurrentIndex(0) self.db = dataBase.dataBase() cod = get_mac() if cod != autorized: QMessageBox.critical(self, msgTitle, msgCopyNoValid) exit() if not self.db.connect(): QMessageBox.critical(self, msgTitle, msg) exit() self.productsList = ProductsList(self.db) self.listNotas = ListaNotas(self.db) self.showPrint = ShowPrint() nota = self.db.fetchone("select `id` from notas order by `id` desc limit 1;") self.nota=str(nota[0]) self.lnota.setText("Ultima Nota: <b>#"+self.nota+"</b>") self.nFecha = 0 #### botones ##### self.connect(self.blimpiar, SIGNAL("clicked()"), self.limpiar) self.connect(self.btNuevaLam, SIGNAL("clicked()"), self.add_lamina) self.connect(self.bpgenera, SIGNAL("clicked()"), self.gencode) # boton que agrega nuevo producto self.connect(self.bpagregar, SIGNAL("clicked()"), self.add_producto) #### edit text (cajas de texto) self.connect(self.codigo, SIGNAL("editingFinished()"), self.display) self.connect(self.codigo, SIGNAL("textChanged(QString)"), self.busca1) self.connect(self.cant, SIGNAL("returnPressed()"), self.agregar) self.connect(self.ttext, SIGNAL("textChanged(QString)"), self.busk) self.connect(self.tpcodigo, SIGNAL("editingFinished()"), self.setFocus1) self.connect(self.tpdesc, SIGNAL("editingFinished()"), self.setFocus2) self.connect(self.cpdep, SIGNAL("returnPressed()"), self.setFocus3) self.connect(self.txtPrecio, SIGNAL("editingFinished()"), self.setFocus4) self.connect(self.txtPrecioPublico, SIGNAL("returnPressed()"), self.add_producto) # buscador de productos, laminas y biografias self.connect(self.ttext, SIGNAL("returnPressed()"), self.busk_bio) # buscador de productos para edicion self.connect(self.tfiltro, SIGNAL("editingFinished()"), self.listarps) # buscaodor de laminas para edicion self.connect(self.txtFilterLam, SIGNAL("editingFinished()"), self.listaLaminas) self.connect(self.txtCodigoLam, SIGNAL("returnPressed()"), self.add_lamina) self.connect(self.txtTituloLam, SIGNAL("returnPressed()"), self.add_lamina) #### radio check ##### self.connect(self.rlam, SIGNAL("clicked()"), self.busk) self.connect(self.rbio, SIGNAL("clicked()"), self.busk_bio) self.connect(self.rtemp, SIGNAL("clicked()"), self.descuento) self.connect(self.rmen, SIGNAL("clicked()"), self.descuento) self.connect(self.rmay, SIGNAL("clicked()"), self.descuento) self.connect(self.rprod, SIGNAL("clicked()"), self.busk) #### tablas #### # tabla laminas para edicion self.connect(self.tbLaminas, SIGNAL("doubleClicked(QModelIndex)"), self.editLam) # tabla laminas para edicion self.connect(self.tbLaminas, SIGNAL("itemActivated(QTableWidgetItem*)"), self.editLam) # tabla de productos para edicion self.connect(self.tplista, SIGNAL("doubleClicked(QModelIndex)"), self.editItem) ### QToolButton (botones de la parte superior) self.connect(self.beliminar, SIGNAL("clicked()"), self.delete) self.connect(self.bbuska, SIGNAL("clicked()"), self.buskador) self.connect(self.bventa, SIGNAL("clicked()"), self.ventaOn) self.connect(self.badmin, SIGNAL("clicked()"), self.adminOn) self.connect(self.btCorteCaja, SIGNAL("clicked()"), self.corteOn) # cierre de venta self.connect(self.btCerrarVenta, SIGNAL("clicked()"), self.cierre_venta) ### calendario ### self.connect(self.calendario, SIGNAL('clicked(QDate)'), self.event_cal) ### Menu ### self.connect(self.actionBuscador, SIGNAL("triggered()"), self.buskador) self.connect(self.actionImprimir, SIGNAL("triggered()"), self.imprimir) self.connect(self.actionCorte, SIGNAL("triggered()"), self.corteOn) self.connect(self.actionAdministrador, SIGNAL("triggered()"), self.adminOn) self.connect(self.actionNueva, SIGNAL("triggered()"), self.ventaOn) self.connect(self.actionEditar_nota, SIGNAL("triggered()"), self.abrirNota) self.connect(self.actionGuardar, SIGNAL("triggered()"), self.guardarNota) self.connect(self.actionGuardar, SIGNAL("triggered()"), self.guardarNota) self.connect(self.actionAcerca, SIGNAL("triggered()"), self.showInfo) self.connect(self.lista2, SIGNAL("doubleClicked(QModelIndex)"), self.adomatic) #self.connect(self.lista2, SIGNAL("itemActivated(QListWidgetItem*)"), self.adomatic) self.connect(self.tbusk, SIGNAL("doubleClicked(QModelIndex)"), self.adomatic) #self.connect(self.tbusk, SIGNAL("itemActivated(QTableWidgetItem*)"), self.adomatic) self.cliente=[0,"Normal mostrador",'','',''] self.basket=[] self.tipo=0 self.codigo.setFocus() self.txt="" self.desc=0 self.hoy=datetime.date.today() self.lfecha.setText("Fecha: <b>"+str(self.hoy.strftime("%d/%m/%Y"))+"</b>") self.fecha=str(self.hoy.strftime("%Y-%m-%d")) day=self.hoy.strftime("%d")
def run(self): # LOOK ers = [] # Lista per il menù db = dataBase() sessionid = db.retrieveConfig(('sessionId', )) con = Conn(self.t_ipv4, self.t_ipv6, self.t_port) if con.connection(): pkt_look = 'LOOK' + sessionid + self.search.ljust(20) con.s.send(pkt_look.encode()) ack_look = con.s.recv(7) # Ricezione intestazione bytes_read = len(ack_look) while bytes_read < 7: ack_look += con.s.recv(7 - bytes_read) bytes_read = len(ack_look) nanswer = int(ack_look[4:7].decode()) list_answers = [] for _ in range(nanswer): # Per ogni md5 answer = con.s.recv(148) bytes_read = len(answer) while bytes_read < 148: answer += con.s.recv(148 - bytes_read) bytes_read = len(answer) md5_lfile_lpart = (answer[:32].decode(), answer[132:142].decode(), answer[142:148].decode(), answer[32:132].decode().strip()) list_answers.extend( (answer[32:132].decode().strip(), md5_lfile_lpart)) list_answers.extend(("Abort", None)) con.deconnection() Util.searchLock.acquire() Util.activeSearch += 1 Util.searchLock.release() Util.menuLock.acquire() # Menù md5 = curses.wrapper(Util.menu, list_answers, ['Select a file:']) # md5[0] -> md5, md5[1] -> lenFile, md5[2] -> lenPart if md5 != None: if Path('Files/' + md5[3]).is_file(): res = curses.wrapper( Util.menu, ['Yes', True, 'No', False], ['The file requested already exists. Override it?']) if not res: print('Overwrite? Nop') exit() pkt_fchu = "FCHU" + sessionid + md5[0] lenfile = int(md5[1]) lenpart = int(md5[2]) infoFile = md5[3] # Mi tengo solo il nome del file md5 = md5[0] nBit = int(math.ceil(lenfile / lenpart)) Util.printLog(str(len(infoFile))) else: Util.printLog("Download aborted...") Util.menuLock.release() Util.searchLock.acquire() Util.activeSearch -= 1 if Util.activeSearch == 0: Util.searchIncoming.acquire() Util.searchIncoming.notify() Util.searchIncoming.release() Util.searchLock.release() exit() else: Util.printLog("Error. Unable to connect to the tracker") exit() Util.menuLock.release() Util.searchLock.acquire() Util.activeSearch -= 1 if Util.activeSearch == 0: Util.searchIncoming.acquire() Util.searchIncoming.notify() Util.searchIncoming.release() Util.searchLock.release() #FINE LOOK queue = LifoQueue() #Coda LIFO controllerIsAlive = False # Stato del controller di download ######### CREO LA GRAFICA INIZIALE Util.lockGraphics.acquire() rowNumber = len(Util.rows) # Numero di file attualmente visualizzati descriptor = 'File' + str(Util.uniqueIdRow) Util.uniqueIdRow += 1 Util.rows.append( descriptor) # Salvo il tag che identifica il file in download y1 = Util.offsety + Util.nameFileHeight + (Util.heightRow * rowNumber) y2 = y1 + Util.heightPart for i in range(0, nBit): x1 = Util.offsetx + (Util.widthPart * i) x2 = Util.offsetx + (Util.widthPart * (i + 1)) idRec = Util.w.create_rectangle(x1, y1, x2, y2, fill="red", width=1, tags=(descriptor)) # Rettangoli # Ridefinizione delle coordinate basate su quelle precedenti y1 = y1 + Util.heightPart # Coordinata Y in alto y2 = y2 + Util.heightLine # Coordinata Y in basso for i in range(0, nBit, 10): x = Util.offsetx + Util.widthPart * i Util.w.create_line(x, y1, x, y2, tags=(descriptor)) Util.w.create_text(x + Util.LeftPaddingText, y2, anchor="sw", text=str(i + 1), tags=(descriptor)) # Labels Util.w.create_text(Util.offsetx, Util.offsety + (Util.heightRow * rowNumber), anchor="nw", text=infoFile, tags=(descriptor)) # Nome file dCond = Condition() # Condizione per fermare il download # Bottoni #image = Image.open("mazzini.jpeg").resize((20,20), Image.ANTIALIAS) b = Button(Util.master, height='10', width='10', image=Util.pause) #b.pack() b['command'] = lambda: pauseAndplay(b, dCond, queue) b.place(x=0, y=Util.offsety + (Util.heightRow * rowNumber)) b2 = Button(Util.master, height='10', width='10', image=Util.stop) #b2.pack(ipadx=20, ipady=Util.offsety + (Util.heightRow * rowNumber)) b2['command'] = lambda: stop(dCond, queue) b2.place(x=20, y=Util.offsety + (Util.heightRow * rowNumber)) Util.buttonsList.append([b, b2]) # Statistiche Util.w.create_text(Util.labelOffsetx, Util.labelDistance + Util.offsety + (Util.heightRow * rowNumber), anchor="nw", text='Progress: \t\t0%', tags=(descriptor)) # Nome file Util.w.create_text(Util.labelOffsetx, (Util.labelDistance * 2) + Util.offsety + (Util.heightRow * rowNumber), anchor="nw", text='Downloaded: \t0', tags=(descriptor)) # Nome file Util.w.create_text(Util.labelOffsetx, (Util.labelDistance * 3) + Util.offsety + (Util.heightRow * rowNumber), anchor="nw", text='Total: \t\t' + str(nBit), tags=(descriptor)) # Nome file Util.lockGraphics.release() ######### # Risposta di FCHU while True: c = Conn(self.t_ipv4, self.t_ipv6, self.t_port) if not c.connection(): Util.printLog('Connection Error...') else: c.s.send(pkt_fchu.encode()) hitPeers = c.s.recv(7) # Intestazione pacchetto AFCH readB = len(hitPeers) listPeers = [] # Tutti i peer listStatus = [] while (readB < 7): hitPeers += c.s.recv(7 - readB) readB = len(hitPeers) nBlock = math.ceil(nBit / 8) nPeers = int(hitPeers[4:7].decode()) toReadB = 60 + nBlock # Ip + stato if nPeers == 0: Util.printLog('No peer found...') exit() for peer in range(nPeers): # Per ogni peer infoPeer = c.s.recv(toReadB) readB = len(infoPeer) while (readB < toReadB): infoPeer += c.s.recv(toReadB - readB) readB = len(infoPeer) listPeers.append(infoPeer[:60].decode()) # Peer listStatus.append(list(infoPeer[60:])) # Stato c.deconnection() # Creazione di una lista di parti pesata statusParts = [] # Lista dello stato delle parti for i in range(nBit): statusParts.append([i, 0, []]) # Parte, peso, ip for peer in range(nPeers): for block in range(nBlock): bit8 = listStatus[peer][block] # Isolo il blocco while bit8 > 0: maxBit = 7 - int(log( bit8, 2)) # Indice del più alto bit impostato ad 1 offset = 8 * block statusParts[maxBit + offset][1] += 1 # Aumento il peso statusParts[maxBit + offset][2].append( listPeers[peer]) # Inserisco l'ip bit8 = bit8 ^ (1 << (7 - maxBit) ) # Elimino il bit utilizzato shuffle( statusParts ) # Mescolo la lista (scelta random delle parti col medesimo peso) statusParts = [ [part[0], part[2]] for part in sorted(statusParts, key=itemgetter(1)) ] # Riordino della lista dalla parte più rara (rarest first) if not controllerIsAlive: Util.printLog('DOWNLOAD ATTIVATO') controllerIsAlive = True idPartOne = idRec - (nBit - 1) # Id del primo rettagolo t = D(statusParts, queue, descriptor, idPartOne, infoFile, lenpart, md5, dCond, b, b2) t.start() else: if t.is_alive(): queue.put(statusParts) else: print('Terminato') exit() sleep(60)
def run(self): Util.w.itemconfig(self.idRect, fill='#0000ff', width=1) jobDone = False for peers in self.listPeers: peer = Util.ip_deformatting(peers[:55],peers[55:]) Util.printLog(str(peer)) c = Conn(peer[0], peer[1], peer[2]) # ipv4 ipv6 port if c.connection(): packet = 'RETP' + self.md5 + str(self.part).zfill(8) # Preparo il pacchetto RETP c.s.send(packet.encode()) # Invio richiesta download # Lettura della risposta nChunk = c.s.recv(10) # 'AREP' + n° chunks readB = len(nChunk) while (readB < 10): nChunk += c.s.recv(10 - readB) readB = len(nChunk) nChunk = int(nChunk[4:].decode()) # Elaborazione dei chunk fileDescriptor = open('Files/' + self.fileName, 'r+b') fileDescriptor.seek(self.lenPart * (self.part - 1)) # Sposto il puntatore nell'area corretta for _ in range(nChunk): # Estrazione lunghezza chunk lenChunk = c.s.recv(5) readB = len(lenChunk) while (readB < 5): lenChunk += c.s.recv(5 - readB) readB = len(lenChunk) lenChunk = int(lenChunk.decode()) # Estrazione dati chunk dataChunk = c.s.recv(lenChunk) readB = len(dataChunk) while (readB < lenChunk): dataChunk += c.s.recv(lenChunk - readB) readB = len(dataChunk) fileDescriptor.write(dataChunk) # Scrivo il chunk su file c.deconnection() jobDone = True break else: Util.printLog('Connessione peer fallita...') if jobDone: # Job completato sleep(uniform(0.2,0.5)) self.wLock.acquire() self.data['downloadedParts'] += 1 self.wLock.release() db = dataBase() track = db.retrieveConfig(('trackerV4','trackerV6','trackerP', 'sessionId')) c = Conn(track.trackerV4, track.trackerV6, track.trackerP) maxNumTracker = 5 for count in range(maxNumTracker): if c.connection(): c.s.send(('RPAD' + track.sessionId + self.md5 + str(self.part).zfill(8)).encode()) apad = c.s.recv(8) readB = len(apad) while(readB < 8): apad += c.s.recv(8 - readB) readB = len(apad) else: Util.printLog('Connessione al tracker fallita...') percent, parts = Util.w.find_withtag(self.tag)[-3:-1] # Terzultimo e penultimo Util.w.itemconfig(percent, text='Progress: \t\t' + '{0:.2f}'.format(self.data['downloadedParts'] / self.data['totalParts'] * 100) + '%') Util.w.itemconfig(parts, text='Downloaded: \t' + str(self.data['downloadedParts'])) Util.w.itemconfig(self.idRect, fill='#00ff00', width=1) else: # Fallita connessione al peer per scaricare la parte Util.w.itemconfig(self.idRect, fill='#ff0000', width=1) self.wLock.acquire() self.missingParts.append(self.part - 1) Util.printLog('job failed for : ' + str(current_thread())) self.wLock.release() self.wLock.acquire() self.data['workers'] -= 1 self.wLock.release() Util.dSem.release()
def run(self): self.pktid = self.from_peer[4:20] self.ip = self.from_peer[20:75] self.door = self.from_peer[75:80] self.ttl = int(self.from_peer[80:82]) self.string = self.from_peer[82:].rstrip() db = dataBase() self.lock.acquire() res = db.retrivenSearch(self.pktid, self.ip) #self.my_ip = str(self.ipv4)+"|"+str(self.ipv6) Util.printLog('Avvio il thread QUER') if(res == 0): file_found = [] self.timestamp = time.time() db.insertSearch(self.pktid, self.ip, self.timestamp) self.lock.release() for file in os.listdir("img"): if re.search(self.string, file, re.IGNORECASE): file_found.append(file) if(len(file_found) != 0): #rispondo self.answer(file_found, self.pktid, self.ip, self.ipv4, self.ipv6, str(self.new_port), self.door) if(self.ttl>1): Util.printLog("QUER: eseguo l'inoltro ai vicini della richiesta\n") #vado a decrementare il ttl di uno e costruisco la nuova query da inviare ai vicini self.ttl_new = self.new_ttl(self.ttl) self.new_quer = "QUER"+self.pktid+self.ip+self.door+self.ttl_new+self.from_peer[82:] self.lock.acquire() self.search_neighbors(db, self.ip_request, self.new_quer) self.lock.release() del db else: Util.printLog("QUER: già presente un pacchetto con questo pktid\n") before = db.retriveSearch(self.pktid, self.ip) self.lock.release() now = time.time() if((now - before) < 20): Util.printLog('QUER: non faccio nulla perchè ho già elaborato la richiesta\n') del db else: file_found = [] self.timestamp = time.time() self.lock.acquire() db.updateTimestamp(self.pktid, self.ip) self.lock.release() for file in os.listdir("img"): if re.search(self.string, file, re.IGNORECASE): file_found.append(file) if(len(file_found) != 0): #rispondo e apro l'upload self.answer(file_found, self.pktid, self.ip, self.ipv4, self.ipv6, str(self.new_port), self.door) if(self.ttl>1): Util.printLog("QUER: eseguo l'inoltro ai vicini della richiesta 2\n") #vado a decrementare il ttl di uno e costruisco la nuova query da inviare ai vicini self.ttl_new = self.new_ttl(self.ttl) self.new_quer = "QUER"+self.pktid+self.ip+self.door+self.ttl_new+self.from_peer[82:] self.lock.acquire() self.search_neighbors(db, self.ip_request, self.new_quer) self.lock.release() del db Util.printLog('QUER: ultima riga\n')
"____________________________ ________ ______ " + bcolors.ENDC) print(bcolors.MAGENTA + "\______ \_____ \______ \ / _____/ / __ \ " + bcolors.ENDC) print(bcolors.OKBLUE + " | ___// ____/| ___/ / \ ___ > < " + bcolors.ENDC) print(bcolors.OKBLUE + " | | / \| | \ \_\ \/ -- \ " + bcolors.ENDC) print(bcolors.CYAN + " |____| \_______ \____| \______ /\______ / " + bcolors.ENDC) print(bcolors.CYAN + " \/ \/ \/ " + bcolors.ENDC) #for i in tqdm(range(4), desc="Loading: "): #time.sleep(2) c = Config() #istanza delle configurazioni db = dataBase() db.destroy() db.create(c) #del db print("--- Configurations ---\n") print('ttl: ', c.ttl) print('maxNear: ', c.maxNear) print('timeResearch: ', c.timeResearch) print('timeIdPacket: ', c.timeIdPacket) print("\n----------------------\n") #near=Vicini(c) lock = th.Lock() # background thread for NEAR and QUER