Example #1
0
    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)
Example #2
0
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')
Example #4
0
    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()
Example #5
0
    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)
Example #6
0
    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...')
Example #7
0
    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")
Example #9
0
 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()
Example #10
0
    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")
Example #11
0
    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')
Example #12
0
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()
Example #13
0
	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()
Example #14
0
	def __init__(self, database, *args, **kwargs):
		super().__init__()
		self.database = database
		self.sheet = dataBase()
		self.init_GUI()
Example #15
0
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()
Example #17
0
    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()
Example #18
0
#
#  =================================================
#  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)"
Example #19
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()
Example #20
0
    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)
Example #21
0
    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")
Example #22
0
    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)
Example #23
0
	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()
Example #24
0
	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')
Example #25
0
      "____________________________      ________   ______   " + 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