|  | =pod | 
|  |  | 
|  | =head1 NAME | 
|  |  | 
|  | d2i_SSL_SESSION, i2d_SSL_SESSION - convert SSL_SESSION object from/to ASN1 representation | 
|  |  | 
|  | =head1 SYNOPSIS | 
|  |  | 
|  | #include <openssl/ssl.h> | 
|  |  | 
|  | SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, unsigned char **pp, long length); | 
|  | int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); | 
|  |  | 
|  | =head1 DESCRIPTION | 
|  |  | 
|  | d2i_SSL_SESSION() transforms the external ASN1 representation of an SSL/TLS | 
|  | session, stored as binary data at location B<pp> with length B<length>, into | 
|  | an SSL_SESSION object. | 
|  |  | 
|  | i2d_SSL_SESSION() transforms the SSL_SESSION object B<in> into the ASN1 | 
|  | representation and stores it into the memory location pointed to by B<pp>. | 
|  | The length of the resulting ASN1 representation is returned. If B<pp> is | 
|  | the NULL pointer, only the length is calculated and returned. | 
|  |  | 
|  | =head1 NOTES | 
|  |  | 
|  | The SSL_SESSION object is built from several malloc()ed parts, it can | 
|  | therefore not be moved, copied or stored directly. In order to store | 
|  | session data on disk or into a database, it must be transformed into | 
|  | a binary ASN1 representation. | 
|  |  | 
|  | When using d2i_SSL_SESSION(), the SSL_SESSION object is automatically | 
|  | allocated. The reference count is 1, so that the session must be | 
|  | explicitly removed using L<SSL_SESSION_free(3)|SSL_SESSION_free(3)>, | 
|  | unless the SSL_SESSION object is completely taken over, when being called | 
|  | inside the get_session_cb() (see | 
|  | L<SSL_CTX_sess_set_get_cb(3)|SSL_CTX_sess_set_get_cb(3)>). | 
|  |  | 
|  | SSL_SESSION objects keep internal link information about the session cache | 
|  | list, when being inserted into one SSL_CTX object's session cache. | 
|  | One SSL_SESSION object, regardless of its reference count, must therefore | 
|  | only be used with one SSL_CTX object (and the SSL objects created | 
|  | from this SSL_CTX object). | 
|  |  | 
|  | When using i2d_SSL_SESSION(), the memory location pointed to by B<pp> must be | 
|  | large enough to hold the binary representation of the session. There is no | 
|  | known limit on the size of the created ASN1 representation, so the necessary | 
|  | amount of space should be obtained by first calling i2d_SSL_SESSION() with | 
|  | B<pp=NULL>, and obtain the size needed, then allocate the memory and | 
|  | call i2d_SSL_SESSION() again. | 
|  |  | 
|  | =head1 RETURN VALUES | 
|  |  | 
|  | d2i_SSL_SESSION() returns a pointer to the newly allocated SSL_SESSION | 
|  | object. In case of failure the NULL-pointer is returned and the error message | 
|  | can be retrieved from the error stack. | 
|  |  | 
|  | i2d_SSL_SESSION() returns the size of the ASN1 representation in bytes. | 
|  | When the session is not valid, B<0> is returned and no operation is performed. | 
|  |  | 
|  | =head1 SEE ALSO | 
|  |  | 
|  | L<ssl(3)|ssl(3)>, L<SSL_SESSION_free(3)|SSL_SESSION_free(3)>, | 
|  | L<SSL_CTX_sess_set_get_cb(3)|SSL_CTX_sess_set_get_cb(3)> | 
|  |  | 
|  | =cut |