Ejemplo n.º 1
0
/**
 * 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;
}
Ejemplo n.º 2
0
void s4285_main()
{
	ext_register(&s4285_ext);
}
Ejemplo n.º 3
0
void navtex_main()
{
	ext_register(&navtex_ext);
}
Ejemplo n.º 4
0
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;
}