Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Réseau
Réseau Forum d'entraide sur la programmation réseau en C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/11/2012, 22h33   #1
echantillon
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 81
Points : 14
Points : 14
Par défaut SSL et imap, petit programme, besoin d'aide

Bonjour à tous,
je bloque devant un problème et suis à cours de pistes.

Je parviens à établir une connexion SSL à un serveur imap sur le bon port, mais la lecture de la réponse du serveur fige mon programme.

Voici la partie initialisation de la fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Etablissement de la connexion
int opening_connexion()
{
	// Initialisations SSL
	SSL_library_init();
	SSL_load_error_strings();
	ERR_load_BIO_strings();
	OpenSSL_add_all_algorithms();
 
	// Création du contexte SSL
	SSL *ssl = NULL;	
	SSL_CTX *ctx = SSL_CTX_new(SSLv23_client_method());
	if (ctx == NULL) {
			fprintf(stderr, "\033[31m\nError in opening_connexion() : SSL_CTX_new()"
			"\nError: %s\033[0m", ERR_reason_error_string(ERR_get_error()));
			return EXIT_FAILURE;
	}
 
	// Chargement du certificat
	if(! SSL_CTX_load_verify_locations(ctx, CERTIFICAT, NULL)) {
                        fprintf(stderr, "\033[31m\nError in opening_connexion() : SSL_CTX_load_verify()"
                                            "\nUnable to load this certificate : %s", CERTIFICAT);
                        fprintf(stderr, "\nError : %s\033[0m", ERR_reason_error_string(ERR_get_error()));
                        SSL_CTX_free(ctx);
                        return EXIT_FAILURE;
        }
 
	// Initialisation de la connexion
	BIO *bio = NULL;
	bio = BIO_new_ssl_connect(ctx);
	if (bio == NULL) {
		fprintf(stderr, "\033[31m\nError in opening_connexion() : BIO_new_ssl_connect()033[0m");
		SSL_CTX_free(ctx);
		return(EXIT_FAILURE);
	}
 
	// Configuration
	BIO_get_ssl(bio, & ssl);
	SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);	
 
	// Connexion
	BIO_set_conn_hostname(bio, SERVER);
	fprintf(stdout, "\033[33m\nOpening connexion : \033[0m");
	fflush(stdout);
	if (BIO_do_connect(bio) <= 0) {
		fprintf(stderr, "\033[31mFAIL\nError in Openning_connexion() : BIO_new_connect()\nRetrying later..\033[0m\n");
		SSL_CTX_free(ctx);
		return EXIT_REPORT;
	}
	fprintf(stdout, "\033[33mOK\033[0m");
	fflush(stdout);
 
	// Vérification de la validité du certificat
        if(SSL_get_verify_result(ssl) != X509_V_OK)
        {
		fprintf(stderr, "\033[31m\nError in openning_connexion() : SSL_get_verify_result()\nInvalid certificate\nTant pis pour le moment\033[0m");
        //BIO_free_all(bio);
        //SSL_CTX_free(ctx);
        //return EXIT_FAILURE;
    }
et le test de lecture / écriture :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
	// Test
        int p = 0;
        char r[1024];
	p = BIO_read(bio, r, 1024);
	r[p] = 0;
	printf("\n%s", r); //ici ça fonctionne
 
        char *text = "01 login username pass";
	BIO_write(bio, texte, strlen(text));
 
	p = BIO_read(bio, r, 10); //attente indéfinie ..
	r[p] = 0;
	printf("\n%s", r);
 
	// Purge mémoire
	BIO_free_all(bio);
	SSL_CTX_free(ctx);
	return EXIT_SUCCESS;
}
Lors du premier appel à BIO_read() , je parviens à recevoir la chaine : "* OK Gimap ready for requests from 86.74.226.219 b63if3230553wec.154"
Mais lors du second appel le programme attend indéfiniment.
Si quelqu'un peut me mettre sur les rails (c'est sûrement une erreur de débutant), je n'ai rien contre de la bonne lecture et l'anglais ne m'effraie pas.
Merci d'avance.
Cordialement,
gaël
echantillon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h19.


 
 
 
 
Partenaires

Hébergement Web