begin process at 2012 05 28 20:43:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Réseau & Internet

 > 

desallouer mem allouée par un membre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

desallouer mem allouée par un membre

jeudi 10 mars 2011 à 14:41:07 | desallouer mem allouée par un membre

razuki

Bonjour,
J'utilise OpenSSL pour programmer une couche sécurisée entre TCP et une application.
j'initialise la couche avec sec_initialize( ) et termine la couche avec un sec_terminate( );
1) sec_initialize( ) doit initialiser entre autres :
a) la méthode utilisée pour l'échange ( TLSv1_method( ), SSLv23_method( ), etc. )
b) et un contexte SSL : SSL_CTX
2) sec_terminate( ) doit desallouer les mémoires allouées dans sec_initialize( ). entre autre b)

J'ai crée une classe sslconfig contenant a) et b)

Code C/C++ :
class sslconfig {
   SSL_method *meth;
   SSL_CTX *ctx;
   sslconfig( ){
        meth = SSL_meth( ); 
        ctx = SSL_CTX_new(meht);
   }
   ~sslconfig( ){
        SSL_free(ctx)
    }
}
 


Tous les membres / fonction commensant par SSL_ sont des objets d'openSSL.

dans sec_terminate( ) je dois desallouer la mémoire occupée par SSL_CTX.

Mes questions :
Q1) Est-ce que la manière de définir le destructeur dans la classe est correcte ? est ce que j'ai le droit de faire cela ? Est-ce une manière propre de desallouer la mémoire. Ou bien :
Q2) Est ce que je dois ne rien mettre dans ~sslconfig càd : ~sslconfig( ){ } ? Dans ce cas, je dois appeler explicitement SSL_free(ctx) dans sec_terminate( ) càd :
gsslconfig->SSL_free(ctx) ?

Merci d'avance.
jeudi 10 mars 2011 à 15:22:45 | Re : desallouer mem allouée par un membre

CptPingu

Administrateur CodeS-SourceS
Le principe le plus important du C++ est le RAII (resource acquisition is initialization).
C'est à dire que tout objet est libre d'allouer des ressources, et que celles-ci ont la garantie d'être désalloué à la destruction de l'objet qui les possède.

La bonne méthode est donc de détruire ta ressource ctx dans le destructeur.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 10 mars 2011 à 15:39:14 | Re : desallouer mem allouée par un membre

razuki

D'accord. Donc le code écrit ci-dessus est à priori correcte. Sauf que le compilateur rale :
"ISO C++ forbids declaration of ‘SSL_meth’ with no type" au niveau de : SSL_meth *m_meth; Puis j'ai mis extern "C" devant : extern "C" SSL_meth *m_meth; mais il rale toujours : "error: expected unqualified-id before string constant"

1) Est ce que je ne peux définir une membre d'une classe en tant qu'extern étant donné que SSL_meth est une fonction OpenSSL ?
2) Est ce que je serais obligé d'utiliser plutot une structure et la declarer extern "C" ...?

jeudi 10 mars 2011 à 15:46:19 | Re : desallouer mem allouée par un membre

CptPingu

Administrateur CodeS-SourceS
Normalement, le type doit être défini. N'ayant le code sous les yeux, ça va être difficile de t'aider.
Peux-tu créer un exemple minimaliste ? Et me fournir la bilbiothèque SSL que tu utilises ? (Un lien suffira).

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 10 mars 2011 à 16:08:10 | Re : desallouer mem allouée par un membre

razuki

J'utilise OpenSSL.http://www.openssl.org/docs/ssl/ssl.html
J'ai défini la classe dans tools.h qui inclut les modules nécessaires d'openssl :
Code C/C++ :
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/x509.h>



tout le code dans tools.h est dans un namespace mystack { }.

Et pourtant dans un autre fichier ( mystack.cpp ) du même package, j'avais inclus les modules ssl aussi et j'avais utilisé sans problème les fonctions et structures d'OpenSSL sans mettre d'extern "C" devant. ( je les ai pas utilisé dans une classe par contre ). On m'avait dit qu'OpenSSL peut être utilisé en c++.
( les fichiers d'entete OpenSSL font la chose suivante j'imagine : )
#ifndef EXTERN_C
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C
#endif
#endif

D'où ma question de tout à l'heure : est ce que le fait de les utiliser dans une classe qui pose problème.
Le problème est - il ailleurs ?



jeudi 10 mars 2011 à 16:12:27 | Re : desallouer mem allouée par un membre

CptPingu

Administrateur CodeS-SourceS
Il n'y a aucune raison que ce soit le fait d'être mis dans une classe qui pose problème. C'est pourquoi je demandais un exemple.
Je vais essayer d'en faire un rapidement (un code inutile, mais qui compile).

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 10 mars 2011 à 16:37:38 | Re : desallouer mem allouée par un membre

CptPingu

Administrateur CodeS-SourceS
Aucun soucis avec:
Code C/C++ :
// Les autres headers sont inutiles, je les ai vu déjà inclus par /usr/include/openssl/ssl.h
#include <openssl/ssl.h>
#include <openssl/err.h>

class SSLConfig
{
public:
  SSLConfig()
  {
    _meth = 0;// Ton code ici :)
    _ctx = SSL_CTX_new(_meth);
  }
  ~SSLConfig()
  {
    SSL_CTX_free(_ctx);
  }

private:
  SSL_METHOD* _meth;
  SSL_CTX* _ctx;
};

int main()
{
  SSLConfig ssl;

  return 0;
}


Compilé avec:

g++ -W -Wall -pedantic -Wabi ssl.cc -lssl



________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 10 mars 2011 à 17:10:06 | Re : desallouer mem allouée par un membre

razuki

D'accord, je comprends mieux ce qui se passe. Ton code compile bien. Mais quand j'essaie de faire ceci à la place de ton code :

Code C/C++ :
#include <openssl/ssl.h>
#include <openssl/err.h>

class SSLConfig
{
public:
  SSLConfig(SSL_METHOD* method)
  {
    _meth = method;// Ton code ici :)
    _ctx = SSL_CTX_new(_meth);
  }
  void SSLctxfree(_ctx) // ligne 12 l'erreur est ici, il ne reconnait apparemment pas _ctx ...
  {
    SSL_CTX_free(_ctx);
  }

  ~SSLConfig();
  

private:
  SSL_METHOD* _meth;
  SSL_CTX* _ctx;
};

int main()
{
  SSL_METHOD *meth = TLSv1_method();
  SSLConfig ssl(meth);

  return 0;
}
 


le compilateur me dit :
autresslctx.cpp:12: error: &#8216;_ctx&#8217; has not been declared

jeudi 10 mars 2011 à 17:12:30 | Re : desallouer mem allouée par un membre

CptPingu

Administrateur CodeS-SourceS
Tout simplement:
Code C/C++ :
 void SSLctxfree(_ctx) =>  void SSLctxfree(SSL_CTX* ctx)


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 10 mars 2011 à 17:13:15 | Re : desallouer mem allouée par un membre

CptPingu

Administrateur CodeS-SourceS
Ou si je fais attention à ce que je dis...
Code C/C++ :
 void SSLctxfree(_ctx) =>  void SSLctxfree()


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question

1 2

Cette discussion est classée dans : sec, ssl, ctx, sslconfig, desallouer


Répondre à ce message

Sujets en rapport avec ce message

cin zapé .? [ par morgandetoi06 ] je capte pas, y a des cin>> qui sont zapés quand j execute ????#include #include using namespace std;int main(void){ char h,min,sec,ha,mina,seca,dist OpenSSL 0.9.7c [ par neoTHGLF ] Bonjour,Voilà, je suis en train de creer un programme client/serveur qui aurait besoin de se servir du protocole SSL. Après avoir trouvé de la doc Ope Timer en C? [ par tof0256 ] J'aimerais lire sur le port parallèle pendant un temps limité (15 sec). Lorqu'une donnée est lue le timer s'arrete. Apres 15 sec si aucune donnée n'a créer un timer de 3 ou 4 sec [ par biscot19 ] Voila je veux faire un timer ( une boucle) qui permet a mon programme principale de se lancer toutes les 3 ou 4 secondes.voici ma fonction principaleD Soket et ssl [ par Bagbones ] Bonjour,dans le cadre d'un projet je dois faire communiquer deux application en réseau. L'une est un programme Perl ss Linux, et l'autre est une appli ftps=ftp+ssl [ par mbarki ] Bonjour,j'aimerais developper un client serveur ftps (ftp et ssl), ou pourrai je trouver de la doc qui montre comment utiliser les bibliotheques C de https (SSL) et CPP [ par abdoulax ] Bonjours je débute dans la sécurité de transfert de données. Pour sécuriser mes données j'ai choisie le protocole HTTPS (paraît-il que FTPS n'est pas Probleme de date... [ par PAFounet ] bien le bonjour chez vous!voila, comme le nom du poste l'indique... j'ai un petit probleme de date...lorque j'execute la fonction suivante :#include # Socket SSL [ par boomer63 ] Slt tlm, je suis en train de developper un client pop3 pour accéder a mes mails de gmail. J'utilise donc SSL. J'ai un message d'erreur accés mémoire l Elimination des touches parasites [ par guifou ] Bonsoir!Voila je suis occupé depuis un certain temps sur un problème que je n'arrive pas a résoudre!je suis entrain de programmer (en C++) un chronome


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales