Constify version strings is ssl lib.
[openssl.git] / ssl / ssl_sess.c
index a4a3a4be451150c8dfa1a69f64ab9e2e272843e2..658d02d4021cf3ece5daa5fb51b565e0b0662420 100644 (file)
@@ -203,6 +203,12 @@ SSL_SESSION *SSL_SESSION_new(void)
        ss->compress_meth=0;
 #ifndef OPENSSL_NO_TLSEXT
        ss->tlsext_hostname = NULL; 
+#ifndef OPENSSL_NO_EC
+       ss->tlsext_ecpointformatlist_length = 0;
+       ss->tlsext_ecpointformatlist = NULL;
+       ss->tlsext_ellipticcurvelist_length = 0;
+       ss->tlsext_ellipticcurvelist = NULL;
+#endif
 #endif
        CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data);
 #ifndef OPENSSL_NO_PSK
@@ -352,6 +358,32 @@ int ssl_get_new_session(SSL *s, int session)
                                return 0;
                                }
                        }
+#ifndef OPENSSL_NO_EC
+               if (s->tlsext_ecpointformatlist)
+                       {
+                       if (ss->tlsext_ecpointformatlist != NULL) OPENSSL_free(ss->tlsext_ecpointformatlist);
+                       if ((ss->tlsext_ecpointformatlist = OPENSSL_malloc(s->tlsext_ecpointformatlist_length)) == NULL)
+                               {
+                               SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE);
+                               SSL_SESSION_free(ss);
+                               return 0;
+                               }
+                       ss->tlsext_ecpointformatlist_length = s->tlsext_ecpointformatlist_length;
+                       memcpy(ss->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist_length);
+                       }
+               if (s->tlsext_ellipticcurvelist)
+                       {
+                       if (ss->tlsext_ellipticcurvelist != NULL) OPENSSL_free(ss->tlsext_ellipticcurvelist);
+                       if ((ss->tlsext_ellipticcurvelist = OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) == NULL)
+                               {
+                               SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE);
+                               SSL_SESSION_free(ss);
+                               return 0;
+                               }
+                       ss->tlsext_ellipticcurvelist_length = s->tlsext_ellipticcurvelist_length;
+                       memcpy(ss->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist_length);
+                       }
+#endif
 #endif
                }
        else
@@ -644,6 +676,12 @@ void SSL_SESSION_free(SSL_SESSION *ss)
        if (ss->ciphers != NULL) sk_SSL_CIPHER_free(ss->ciphers);
 #ifndef OPENSSL_NO_TLSEXT
        if (ss->tlsext_hostname != NULL) OPENSSL_free(ss->tlsext_hostname);
+#ifndef OPENSSL_NO_EC
+       ss->tlsext_ecpointformatlist_length = 0;
+       if (ss->tlsext_ecpointformatlist != NULL) OPENSSL_free(ss->tlsext_ecpointformatlist);
+       ss->tlsext_ellipticcurvelist_length = 0;
+       if (ss->tlsext_ellipticcurvelist != NULL) OPENSSL_free(ss->tlsext_ellipticcurvelist);
+#endif /* OPENSSL_NO_EC */
 #endif
 #ifndef OPENSSL_NO_PSK
        if (ss->psk_identity_hint != NULL)
@@ -870,3 +908,72 @@ static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s)
                }
        }
 
+void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
+       int (*cb)(struct ssl_st *ssl,SSL_SESSION *sess))
+       {
+       ctx->new_session_cb=cb;
+       }
+
+int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(SSL *ssl, SSL_SESSION *sess)
+       {
+       return ctx->new_session_cb;
+       }
+
+void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
+       void (*cb)(SSL_CTX *ctx,SSL_SESSION *sess))
+       {
+       ctx->remove_session_cb=cb;
+       }
+
+void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(SSL_CTX * ctx,SSL_SESSION *sess)
+       {
+       return ctx->remove_session_cb;
+       }
+
+void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
+       SSL_SESSION *(*cb)(struct ssl_st *ssl,
+                unsigned char *data,int len,int *copy))
+       {
+       ctx->get_session_cb=cb;
+       }
+
+SSL_SESSION * (*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl,
+                unsigned char *data,int len,int *copy)
+       {
+       return ctx->get_session_cb;
+       }
+
+void SSL_CTX_set_info_callback(SSL_CTX *ctx, 
+       void (*cb)(const SSL *ssl,int type,int val))
+       {
+       ctx->info_callback=cb;
+       }
+
+void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl,int type,int val)
+       {
+       return ctx->info_callback;
+       }
+
+void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
+       int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey))
+       {
+       ctx->client_cert_cb=cb;
+       }
+
+int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL * ssl, X509 ** x509 , EVP_PKEY **pkey)
+       {
+       return ctx->client_cert_cb;
+       }
+
+void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
+       int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len))
+       {
+       ctx->app_gen_cookie_cb=cb;
+       }
+
+void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
+       int (*cb)(SSL *ssl, unsigned char *cookie, unsigned int cookie_len))
+       {
+       ctx->app_verify_cookie_cb=cb;
+       }
+