



@deftypefun {int} {gnutls_ext_register} (const char * @var{name}, int @var{id}, gnutls_ext_parse_type_t @var{parse_point}, gnutls_ext_recv_func @var{recv_func}, gnutls_ext_send_func @var{send_func}, gnutls_ext_deinit_data_func @var{deinit_func}, gnutls_ext_pack_func @var{pack_func}, gnutls_ext_unpack_func @var{unpack_func})
@var{name}: the name of the extension to register

@var{id}: the numeric TLS id of the extension

@var{parse_point}: the parse type of the extension (see gnutls_ext_parse_type_t)

@var{recv_func}: a function to receive the data

@var{send_func}: a function to send the data

@var{deinit_func}: a function deinitialize any private data

@var{pack_func}: a function which serializes the extension's private data (used on session packing for resumption)

@var{unpack_func}: a function which will deserialize the extension's private data

This function will register a new extension type. The extension will remain
registered until @code{gnutls_global_deinit()}  is called. If the extension type
is already registered then @code{GNUTLS_E_ALREADY_REGISTERED}  will be returned.

Each registered extension can store temporary data into the gnutls_session_t
structure using @code{gnutls_ext_set_data()} , and they can be retrieved using
@code{gnutls_ext_get_data()} .

Any extensions registered with this function are valid for the client
and TLS1.2 server hello (or encrypted extensions for TLS1.3).

This function is not thread safe.

@strong{Returns:} @code{GNUTLS_E_SUCCESS}  on success, otherwise a negative error code.

@strong{Since:} 3.4.0
@end deftypefun
