def synchronize(): global old_id cur_id=old_id try: passwd_mgr=urllib2.HTTPPasswordMgrWithDefaultRealm() passwd_mgr.add_password(None, status_url, username, password) handler=urllib2.HTTPBasicAuthHandler(passwd_mgr) opener=urllib2.build_opener(handler) urllib2.install_opener(opener) a_url = status_url + status_page + "?since_id=" + str(old_id) f=opener.open(a_url) urllib2.install_opener(opener) xml = f.read() #print xml root = ET.fromstring(xml) for child in root.findall('status'): try: data = child.find('text').text time = child.find('created_at').text idx = child.find('id').text except: print "Invalid Status" break sid = int(idx) print "sid: %d, cur: %d, old: %d" % (sid, cur_id, old_id) if sid > old_id: # new command found if sid > cur_id: cur_id = sid pkt = cmd.verify_msg(data, "keys/mrpub.pem") ccpkt.parsing(pkt) old_id = cur_id except Exception as inst: print type(inst) print inst
def synchronize(): global old_id cur_id = old_id try: passwd_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() passwd_mgr.add_password(None, status_url, username, password) handler = urllib2.HTTPBasicAuthHandler(passwd_mgr) opener = urllib2.build_opener(handler) urllib2.install_opener(opener) a_url = status_url + status_page + "?since_id=" + str(old_id) f = opener.open(a_url) urllib2.install_opener(opener) xml = f.read() #print xml root = ET.fromstring(xml) for child in root.findall('status'): try: data = child.find('text').text time = child.find('created_at').text idx = child.find('id').text except: print "Invalid Status" break sid = int(idx) print "sid: %d, cur: %d, old: %d" % (sid, cur_id, old_id) if sid > old_id: # new command found if sid > cur_id: cur_id = sid pkt = cmd.verify_msg(data, "keys/mrpub.pem") ccpkt.parsing(pkt) old_id = cur_id except Exception as inst: print type(inst) print inst
def handle(self): data = self.request[0].strip() sock = self.request[1] # print "Receiving %s from %s ..." % (data, self.client_address[0]) msg = ccpkt.get_ack_msg() try: sock.settimeout(5) sock.sendto(msg, self.client_address) except socket.timeout: pass #sock.close() #FIXME: should I close the socket??? print "Recv: ", data cmd = ccpkt.parsing(data) print "Parsing command: ", cmd if cmd is 'grp': for peer in peerlist.keys(): print "Contacting ", peer if peerlist[peer] is 'active': host,port=peer.split(':') print "forward to %s:%d " % (host, int(port)) i = 0 while i < 3: try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) sock.sendto(data, (host, int(port))) #FIXME: Should be raw data (encrypted) recv = sock.recvfrom(1024) sock.close() except socket.timeout: print "Socket timeout" peerlist[peer] = 'dead' i += 1 continue; pkt = recv[0].strip() cmd = ccpkt.parsing(pkt) if cmd == 'ack': peerlist[peer] = 'active' break
def p2p_init(ip): # start udp server while True: try: port = random.randint(1025, 65535) print "Try to listening at UDP %d ..." % port server = udp_server((ip, port), udp_server_handler) server_thread=threading.Thread(target=server.serve_forever) server_thread.daemon=True server_thread.start() print "Starting listening at %s:%d ..." % (ip, port) break; except: print "Fail to listen at UDP %d." % port # check peer list for peer in peerlist.keys(): i = 0 host,port=peer.split(':') while i < 3: try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) chmsg = ccpkt.get_checkin_msg(host, int(port)) sock.settimeout(5) sock.sendto(chmsg, (host, int(port))) recv = sock.recvfrom(1024) sock.close() except socket.timeout as te: print "Not receive Ack. Make %s dead." % peer peerlist[peer]='dead' i = i+1 continue pkt = recv[0].strip() cmd = ccpkt.parsing(pkt) if cmd is 'ack': peerlist[peer] = 'active' break; print peerlist while True: pass