/** * gnutls_ext_register: * @name: the name of the extension to register * @type: the numeric id of the extension * @parse_type: the parse type of the extension (see gnutls_ext_parse_type_t) * @recv_func: a function to receive the data * @send_func: a function to send the data * @deinit_func: a function deinitialize any private data * @pack_func: a function which serializes the extension's private data (used on session packing for resumption) * @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 gnutls_global_deinit() is called. If the extension type * is already registered then %GNUTLS_E_ALREADY_REGISTERED will be returned. * * Each registered extension can store temporary data into the gnutls_session_t * structure using gnutls_ext_set_data(), and they can be retrieved using * gnutls_ext_get_data(). * * This function is not thread safe. * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * * Since: 3.4.0 **/ int gnutls_ext_register(const char *name, int type, gnutls_ext_parse_type_t parse_type, gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, gnutls_ext_unpack_func unpack_func) { extension_entry_st tmp_mod; int ret; unsigned i; for (i = 0; i < extfunc_size; i++) { if (extfunc[i].type == type) return gnutls_assert_val(GNUTLS_E_ALREADY_REGISTERED); } memset(&tmp_mod, 0, sizeof(tmp_mod)); tmp_mod.name = gnutls_strdup(name); tmp_mod.free_name = 1; tmp_mod.type = type; tmp_mod.parse_type = parse_type; tmp_mod.recv_func = recv_func; tmp_mod.send_func = send_func; tmp_mod.deinit_func = deinit_func; tmp_mod.pack_func = pack_func; tmp_mod.unpack_func = unpack_func; ret = ext_register(&tmp_mod); if (ret < 0) { gnutls_free((void*)tmp_mod.name); } return ret; }
void s4285_main() { ext_register(&s4285_ext); }
void navtex_main() { ext_register(&navtex_ext); }
int _gnutls_ext_init(void) { int ret; ret = ext_register(&ext_mod_max_record_size); if (ret != GNUTLS_E_SUCCESS) return ret; ret = ext_register(&ext_mod_ext_master_secret); if (ret != GNUTLS_E_SUCCESS) return ret; ret = ext_register(&ext_mod_etm); if (ret != GNUTLS_E_SUCCESS) return ret; #ifdef ENABLE_OCSP ret = ext_register(&ext_mod_status_request); if (ret != GNUTLS_E_SUCCESS) return ret; #endif #ifdef ENABLE_OPENPGP ret = ext_register(&ext_mod_cert_type); if (ret != GNUTLS_E_SUCCESS) return ret; #endif ret = ext_register(&ext_mod_server_name); if (ret != GNUTLS_E_SUCCESS) return ret; ret = ext_register(&ext_mod_sr); if (ret != GNUTLS_E_SUCCESS) return ret; #ifdef ENABLE_SRP ret = ext_register(&ext_mod_srp); if (ret != GNUTLS_E_SUCCESS) return ret; #endif #ifdef ENABLE_HEARTBEAT ret = ext_register(&ext_mod_heartbeat); if (ret != GNUTLS_E_SUCCESS) return ret; #endif #ifdef ENABLE_SESSION_TICKETS ret = ext_register(&ext_mod_session_ticket); if (ret != GNUTLS_E_SUCCESS) return ret; #endif ret = ext_register(&ext_mod_supported_ecc); if (ret != GNUTLS_E_SUCCESS) return ret; ret = ext_register(&ext_mod_supported_ecc_pf); if (ret != GNUTLS_E_SUCCESS) return ret; ret = ext_register(&ext_mod_sig); if (ret != GNUTLS_E_SUCCESS) return ret; #ifdef ENABLE_DTLS_SRTP ret = ext_register(&ext_mod_srtp); if (ret != GNUTLS_E_SUCCESS) return ret; #endif #ifdef ENABLE_ALPN ret = ext_register(&ext_mod_alpn); if (ret != GNUTLS_E_SUCCESS) return ret; #endif /* This must be the last extension registered. */ ret = ext_register(&ext_mod_dumbfw); if (ret != GNUTLS_E_SUCCESS) return ret; return GNUTLS_E_SUCCESS; }