コード例 #1
0
 def LOGO(self):
     db = dataBaseSuper()
     Util.printLog("DENTRO A THREADLOGO")
     Util.lock.acquire()
     Util.printLog("SESSION ID LOGOUT: " + str(self.sessionid))
     self.info = db.retrieveLOGIN(self.sessionid)
     self.count = db.deleteFROMpeer(self.sessionid)
     Util.printLog("NUMERO DI FILE ELIMINATI ----> " + str(self.count))
     Util.lock.release()
     Util.printLog("[ALGO] disconnessione dell'utente: " + self.sessionid +
                   ", file eliminati: " + str(self.count))
     del db
     self.answer(self.count, self.info)
コード例 #2
0
    def run(self):
        self.sessionid = self.pkt_del[4:20]
        self.md5 = self.pkt_del[20:52]

        db = dataBaseSuper()
        Util.lock.acquire()
        find = db.retrieveFILE(self.sessionid, self.md5)

        if (find == 0):
            Util.lock.release()
            Util.printLog("[DEFF] non ho trovato nessun file caricato da: " +
                          self.sessionid + " con il seguente md5: " + self.md5)
        else:
            db.deleteFILE(self.sessionid, self.md5)
            Util.lock.release()
            Util.printLog("[DEFF] ho eliminato il file caricato da: " +
                          self.sessionid + " con il seguente md5: " + self.md5)
        del db
コード例 #3
0
    def run(self):
        self.sessionid = self.pkt_ins[4:20]
        self.md5 = self.pkt_ins[20:52]
        self.filename = self.pkt_ins[52:]

        db = dataBaseSuper()
        Util.lock.acquire()
        find = db.retrieveFILE(self.sessionid, self.md5)

        if (find == 0):
            db.insertFILE(self.sessionid, self.md5, self.filename)
            db.updateFILE(self.filename, self.md5)
            Util.lock.release()
            Util.printLog("[ADFF] l'utente con il seguente SessionID: " +
                          self.sessionid + "ha aggiunto il file: " +
                          self.filename)
        else:
            db.updateFILE(self.filename, self.md5)
            Util.lock.release()
            Util.printLog("[ADFF] aggiornato nome file in : " + self.filename)
        del db
コード例 #4
0
    def run(self):

        self.pktid = self.from_peer[4:20]
        self.ip = self.from_peer[20:75]
        self.peer_port = self.from_peer[75:80]
        self.ttl = int(self.from_peer[80:82])
        self.string = self.from_peer[82:].strip()

        db = dataBaseSuper()
        Util.lock.acquire()
        res = db.retrieveCounterRequest(self.pktid, self.ip)
        Util.printLog("THREADQUER DI RES ----------_> " + str(res))
        if (res == 0):
            self.timestamp = time.time()
            db.insertRequest(self.pktid, self.ip, self.timestamp)
            Util.lock.release()
            self.do(db, self.pktid, self.ip, self.timestamp, Util.lock,
                    self.string, self.peer_port, self.ttl, self.from_peer[82:],
                    self.ip_request)
        else:
            before = db.retrieveRequestTimestamp(self.pktid, self.ip)
            Util.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:
                self.timestamp = time.time()
                Util.lock.acquire()
                db.updateTimestamp(self.pktid, self.ip)
                Util.lock.release()
                self.do(db, self.pktid, self.ip, self.timestamp, Util.lock,
                        self.string, self.peer_port, self.ttl,
                        self.from_peer[82:], self.ip_request)
コード例 #5
0
    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()
コード例 #6
0
    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()