Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
	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)