def serve_client_messagiel(conn, addr, id): client_host, client_port = addr print "messagiel: conn. %s:%s, lancement thread %d" % (client_host, client_port, id) queue_messagiel[id] = [] # Demander au client sloche quel est le nom de l'utilisateur # qui vient de se brancher au messagiel. conn.sendall( '<MESSAGE TYPE="set"><HR FROM="messagiel">abcdef</HR></MESSAGE>' + '\0') # S'attendre a une reponse dans le genre de: # <MESSAGE TYPE="enter" FROM="Client"><NOM>laplante</NOM><HR>24248</HR></MESSAGE> rep = conn.recv(1024) if rep.find('TYPE="enter"') < 0: print "Expected enter message from %s:%s; got %s. Closing connection." % ( client_host, client_port, rep) conn.close() return username = rep[rep.find("<NOM>") + 5:rep.find("</NOM>")] #print "messagiel: %s:%s -> usager %s" % (client_host, client_port, username) for i in range(MAX_USERS): if unames_messagiel[id] == username: print "deja branche !!!! fermeture de la connection" conn.close() return # Aller chercher la liste d'amis de l'usager mes_amis = amis_api.liste_amis(username) rep_liste = '<MESSAGE TYPE="ami">' for ami in mes_amis: # L'ami est-il en ligne ? if chiffre_user(ami) != None: sta = 1 # oui else: sta = 0 # non rep_liste += '<AMI STATUS="%d">%s</AMI>' % (sta, ami) rep_liste += '</MESSAGE>' conn.sendall(rep_liste + '\0') # S'occuper des vieux messages... # Par "messages", j'entends messages XML qui peuvent avoir # plusieurs fonctions. vieux_messages = stockage_messagiel_api.obtenir_vider_stockage(username) for m in vieux_messages: conn.sendall(m + '\0') unames_messagiel[id] = username while True: ready = select.select([conn], [], [], 0.01) if ready[0]: data = conn.recv(1024) # Connection morte if not data: break else: pass #print "messagiel: %s: %s" % (username, data) # Requete ami if data.find('<OPTION>request</OPTION>') > 0: to = data[data.find("<TO>") + 4:data.find("</TO>")] text = data[data.find("<TEXT>") + 6:data.find("</TEXT>")] #print "messagiel: %s req ami %s: '%s'" % (username, to, text) # relai. marche sur 2007. relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="request">%s</TEXT>' % text relai += '<FROM>%s</FROM>' % username relai += '</MESSAGE>' id_dest = chiffre_user(to) envoi_ou_stockage(to, relai) # Ami autorise. # <MESSAGE TYPE="send"><NOM>donald</NOM><TO>laplante</TO><TEXT></TEXT> # <OPTION>autoriser</OPTION></MESSAGE> if data.find('<OPTION>autoriser</OPTION>') > 0: nom = data[data.find("<NOM>") + 5:data.find("</NOM>")] to = data[data.find("<TO>") + 4:data.find("</TO>")] #print "%s autorise %s a etre son ami" % (nom, to) # Stocker nouvel ami dans la BDD if nom == username: mes_amis = amis_api.liste_amis(nom) mes_amis.append(to) amis_api.stocker_liste_amis(nom, mes_amis) ses_amis = amis_api.liste_amis(to) ses_amis.append(nom) amis_api.stocker_liste_amis(to, ses_amis) # Envoie la bulle "ami accepte" mais n'ajoute pas # l'ami a la liste... relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="autoriser">%s</TEXT>' % nom relai += '<FROM>%s</FROM>' % nom relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # Ami refuse if data.find('<OPTION>refus</OPTION>') > 0: nom = data[data.find("<NOM>") + 5:data.find("</NOM>")] to = data[data.find("<TO>") + 4:data.find("</TO>")] #print "%s refuse a %s le droit d'etre son ami" % (nom, to) # Envoyer la bulle "ami refuse" relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="refus">%s</TEXT>' % nom relai += '<FROM>%s</FROM>' % nom relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # Relai ami # <MESSAGE TYPE="ami" FROM="Client"><NOM>donald</NOM><AMI>laplante</AMI></MESSAGE> if data.find('TYPE="ami"') > 0: #print "relai ami..." nom = data[data.find("<NOM>") + 5:data.find("</NOM>")] ami = data[data.find("<AMI>") + 5:data.find("</AMI>")] relai = '<MESSAGE TYPE="ami">' relai += '<AMI STATUS="1">%s</AMI>' % ami relai += '</MESSAGE>' envoi_ou_stockage(nom, relai) # Supprimer ami if data.find('<OPTION>supprimer</OPTION>') > 0: to = data[data.find("<TO>") + 4:data.find("</TO>")] #print "messagiel: %s supprime ami %s" % (username, to) # Ce relai marche sur le client 2007 relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="supprimer">%s</TEXT>' % username relai += '<FROM>%s</FROM>' % username relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # (de-)stocker cela dans la BDD mes_amis = amis_api.liste_amis(username) mes_amis.remove(to) amis_api.stocker_liste_amis(username, mes_amis) ses_amis = amis_api.liste_amis(to) ses_amis.remove(username) amis_api.stocker_liste_amis(to, ses_amis) # Message slochepop if not (data.find('<OPTION>') > 0) and data.find('TYPE="send"') > 0: to = data[data.find("<TO>") + 4:data.find("</TO>")] text = data[data.find("<TEXT>") + 6:data.find("</TEXT>")] #print "messagiel: %s message a %s: '%s'" % (username, to, text) # Ajoute un nouveau message slochepop avec une # petite bulle qu'il faut cliquer pour le lire. relai = '<MESSAGE TYPE="send">' relai += '<TEXT>%s</TEXT>' % text relai += '<FROM>%s</FROM>' % username relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # Messages en file (recus d'un autre module ou thread etc.) while len(queue_messagiel[id]): conn.sendall(queue_messagiel[id][0].strip() + '\0') #print "messagiel: %s: envoi depuis queue: %s" % (username, queue_messagiel[id][0]) queue_messagiel[id] = queue_messagiel[id][1:] unames_messagiel[id] = "" print "messagiel: fermeture conn. %s:%s" % (client_host, client_port) conn.close()
def serve_client_messagiel(conn, addr, id): client_host, client_port = addr #print "messagiel: conn. %s:%s, lancement thread %d" % (client_host, client_port, id) queue_messagiel[id] = [] # Demander au client sloche quel est le nom de l'utilisateur # qui vient de se brancher au messagiel. conn.sendall('<MESSAGE TYPE="set"><HR FROM="messagiel">abcdef</HR></MESSAGE>' + '\0') # S'attendre a une reponse dans le genre de: # <MESSAGE TYPE="enter" FROM="Client"><NOM>laplante</NOM><HR>24248</HR></MESSAGE> rep = conn.recv(1024) if rep.find('TYPE="enter"') < 0: #print "Expected enter message from %s:%s; got %s. Closing connection." % (client_host, client_port, rep) conn.close() return username = rep[rep.find("<NOM>")+5:rep.find("</NOM>")] #print "messagiel: %s:%s -> usager %s" % (client_host, client_port, username) for i in range(MAX_USERS): if unames_messagiel[id] == username: #print "deja branche !!!! fermeture de la connection" conn.close() return # Aller chercher la liste d'amis de l'usager mes_amis = amis_api.liste_amis(username) rep_liste = '<MESSAGE TYPE="ami">' for ami in mes_amis: # L'ami est-il en ligne ? if chiffre_user(ami) != None: sta = 1 # oui else: sta = 0 # non rep_liste += '<AMI STATUS="%d">%s</AMI>' % (sta, ami) rep_liste += '</MESSAGE>' conn.sendall(rep_liste + '\0') # S'occuper des vieux messages... # Par "messages", j'entends messages XML qui peuvent avoir # plusieurs fonctions. vieux_messages = stockage_messagiel_api.obtenir_vider_stockage(username) for m in vieux_messages: conn.sendall(m + '\0') unames_messagiel[id] = username while True: ready = select.select([conn], [], [], 0.01) if ready[0]: data = conn.recv(1024) # Connection morte if not data: break else: pass #print "messagiel: %s: %s" % (username, data) # Requete ami if data.find('<OPTION>request</OPTION>') > 0: to = data[data.find("<TO>")+4:data.find("</TO>")] text = data[data.find("<TEXT>")+6:data.find("</TEXT>")] #print "messagiel: %s req ami %s: '%s'" % (username, to, text) # relai. marche sur 2007. relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="request">%s</TEXT>' % text relai += '<FROM>%s</FROM>' % username relai += '</MESSAGE>' id_dest = chiffre_user(to) envoi_ou_stockage(to, relai) # Ami autorise. # <MESSAGE TYPE="send"><NOM>donald</NOM><TO>laplante</TO><TEXT></TEXT> # <OPTION>autoriser</OPTION></MESSAGE> if data.find('<OPTION>autoriser</OPTION>') > 0: nom = data[data.find("<NOM>")+5:data.find("</NOM>")] to = data[data.find("<TO>")+4:data.find("</TO>")] #print "%s autorise %s a etre son ami" % (nom, to) # Stocker nouvel ami dans la BDD if nom == username: mes_amis = amis_api.liste_amis(nom) mes_amis.append(to) amis_api.stocker_liste_amis(nom, mes_amis) ses_amis = amis_api.liste_amis(to) ses_amis.append(nom) amis_api.stocker_liste_amis(to, ses_amis) # Envoie la bulle "ami accepte" mais n'ajoute pas # l'ami a la liste... relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="autoriser">%s</TEXT>' % nom relai += '<FROM>%s</FROM>' % nom relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # Ami refuse if data.find('<OPTION>refus</OPTION>') > 0: nom = data[data.find("<NOM>")+5:data.find("</NOM>")] to = data[data.find("<TO>")+4:data.find("</TO>")] #print "%s refuse a %s le droit d'etre son ami" % (nom, to) # Envoyer la bulle "ami refuse" relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="refus">%s</TEXT>' % nom relai += '<FROM>%s</FROM>' % nom relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # Relai ami # <MESSAGE TYPE="ami" FROM="Client"><NOM>donald</NOM><AMI>laplante</AMI></MESSAGE> if data.find('TYPE="ami"') > 0: #print "relai ami..." nom = data[data.find("<NOM>")+5:data.find("</NOM>")] ami = data[data.find("<AMI>")+5:data.find("</AMI>")] relai = '<MESSAGE TYPE="ami">' relai += '<AMI STATUS="1">%s</AMI>' % ami relai += '</MESSAGE>' envoi_ou_stockage(nom, relai) # Supprimer ami if data.find('<OPTION>supprimer</OPTION>') > 0: to = data[data.find("<TO>")+4:data.find("</TO>")] #print "messagiel: %s supprime ami %s" % (username, to) # Ce relai marche sur le client 2007 relai = '<MESSAGE TYPE="send">' relai += '<TEXT OPTION="supprimer">%s</TEXT>' % username relai += '<FROM>%s</FROM>' % username relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # (de-)stocker cela dans la BDD mes_amis = amis_api.liste_amis(username) mes_amis.remove(to) amis_api.stocker_liste_amis(username, mes_amis) ses_amis = amis_api.liste_amis(to) ses_amis.remove(username) amis_api.stocker_liste_amis(to, ses_amis) # Message slochepop if not (data.find('<OPTION>') > 0) and data.find('TYPE="send"') > 0: to = data[data.find("<TO>")+4:data.find("</TO>")] text = data[data.find("<TEXT>")+6:data.find("</TEXT>")] #print "messagiel: %s message a %s: '%s'" % (username, to, text) # Ajoute un nouveau message slochepop avec une # petite bulle qu'il faut cliquer pour le lire. relai = '<MESSAGE TYPE="send">' relai += '<TEXT>%s</TEXT>' % text relai += '<FROM>%s</FROM>' % username relai += '</MESSAGE>' envoi_ou_stockage(to, relai) # Messages en file (recus d'un autre module ou thread etc.) while len(queue_messagiel[id]): conn.sendall(queue_messagiel[id][0].strip() + '\0') #print "messagiel: %s: envoi depuis queue: %s" % (username, queue_messagiel[id][0]) queue_messagiel[id] = queue_messagiel[id][1:] unames_messagiel[id] = "" print "messagiel: fermeture conn. %s:%s" % (client_host, client_port) conn.close()
c = data.readline().strip() t = data.readline().strip() p = data.readline().strip() if passwd == correct_passwd: fiche = '&status=admin& &sn=UmFuZG9tSVZv7UmKg3plxW97fXdAeZiw3t3DBMwCeRYE%2Fc0QoiDUgEjFkv%2F7N%2BvEu41%2B8oYWUI43ttaJUBNak5wL%2FpB8cXKWL1gz6O%2BPJyotoWCA24VTymBMRieZhNnKZiddF92HmBx663m5FJ%2B5VKYHmwwTavn%2BuJrm83B5iBL2QNEfEDPDUP7VXIrQRe%2FFMHyzJmEmYEY7ap4gt01%2FIDfxvtNhAtiS&' fiche += '&piedcouleur=%s& &blocked=no&' % pc fiche += ' &tetecouleur=%s& &uid=926674& &description=%s& &username=%s&' % (tc, desc, username) fiche += '&commentaire=%s&&corpscouleur=%s&' % (comm, cc) fiche += '&hcorps=2& &corps='+c+'& &sn_mdate=2006-05-20%2017%3A28%3A51& &htete=57&' fiche += '&nblogin=15& &lastlogindate=2006%2F05%2F28%2011%3A18%3A52& &xml=true& &ageok=false& &tete='+t+'& &pied='+p+'&' fiche += ' &status=actif& &hpied=2& &lastlogintime=1148829532& &sn_cdate=2006-05-20%2009%3A29%3A28& &boqakiri=givonefe& &kickout=0& ' # Aller chercher la liste d'amis de l'usager mes_amis = amis_api.liste_amis(username) data_amis = '&nbami=%d& ' % len(mes_amis) index = 0 for ami in mes_amis: data_amis += '&ami%d=%s& ' % (index, ami) index += 1 fiche += data_amis fiche += ' &resultat=ok& ' fiche += ' &guest=false& ' #fiche += ' &pouvoir=11,13,41& ' else: fiche = "&erreur=Mauvais mot de passe&" print(fiche)