示例#1
0
int
transport_initialize
(
	TransportRecv recv_callback,
	TransportListenError listen_error_callback
)
{
	transport_recv_callback = recv_callback ;
	transport_listen_error_callback = listen_error_callback ;

	if (owsl_initialize ())
	{
		return -1 ;
	}

	transport_data_socket_list = owlist_new () ;
	if (transport_data_socket_list == NULL)
	{
		owsl_terminate () ;
		return -1 ;
	}

	transport_listening_socket_list = owlist_new () ;
	if (transport_listening_socket_list == NULL)
	{
		owlist_free (transport_data_socket_list) ;
		transport_data_socket_list = NULL ;
		owsl_terminate () ;
		return -1 ;
	}

	if (pthread_mutex_init (& transport_socket_lists_mutex, NULL))
	{
		owlist_free (transport_listening_socket_list) ;
		transport_listening_socket_list = NULL ;
		owlist_free (transport_data_socket_list) ;
		transport_data_socket_list = NULL ;
		owsl_terminate () ;
		return -1 ;
	}

	return 0 ;
}
示例#2
0
OWPL_RESULT
owplShutdown()
{
	phTerminate();
	owsl_terminate();
	owslIsInitialized = 0;
	owplEventListenerRemoveAll();
	owplAdapterTerminate();
	return OWPL_RESULT_SUCCESS;
}
示例#3
0
int
transport_terminate
(void)
{
	int return_code = 0 ;

	return_code |= pthread_mutex_destroy (& transport_socket_lists_mutex) ;

	return_code |= owlist_free_all (transport_listening_socket_list, (void (*) (void *)) transport_socket_free) ;
	transport_listening_socket_list = NULL ;

	return_code |= owlist_free_all (transport_data_socket_list, (void (*) (void *)) transport_socket_free) ;
	transport_data_socket_list = NULL ;

	return_code |= owsl_terminate () ;

	return return_code ;
}
示例#4
0
static OWPL_RESULT
owplInitOwsl
(
	unsigned short use_udp,
	unsigned short use_tcp,
	unsigned short use_tls
)
{
	int return_code ;
	int owslWasJustInitialized = 0 ;

	if (! owslIsInitialized)
	{
		return_code = owsl_initialize () ;
		if (return_code != 0)
		{
			goto error ;
		}
		owslIsInitialized = 1 ;
		owslWasJustInitialized = 1 ;
	}

	if (use_udp)
	{
		if
		(
			owsl_socket_type_get
			(
				OWSL_AF_IPV4,
				OWSL_MODE_DATAGRAM,
				OWSL_CIPHERING_DISABLED
			) == OWSL_TYPE_UNKNOWN
			&&
			owsl_socket_type_add (OWSL_TYPE_IPV4_UDP) != 0
		)
		{
			goto error ;
		}
		if
		(
			owsl_socket_type_get
			(
				OWSL_AF_IPV6,
				OWSL_MODE_DATAGRAM,
				OWSL_CIPHERING_DISABLED
			) == OWSL_TYPE_UNKNOWN
			&&
			owsl_socket_type_add (OWSL_TYPE_IPV6_UDP) != 0
		)
		{
			goto error ;
		}
	}
	if (use_tcp)
	{
		if
		(
			owsl_socket_type_get
			(
				OWSL_AF_IPV4,
				OWSL_MODE_STREAM,
				OWSL_CIPHERING_DISABLED
			) == OWSL_TYPE_UNKNOWN
			&&
			owsl_socket_type_add (OWSL_TYPE_IPV4_TCP) != 0
		)
		{
			goto error ;
		}
		if
		(
			owsl_socket_type_get
			(
				OWSL_AF_IPV6,
				OWSL_MODE_STREAM,
				OWSL_CIPHERING_DISABLED
			) == OWSL_TYPE_UNKNOWN
			&&
			owsl_socket_type_add (OWSL_TYPE_IPV6_TCP) != 0
		)
		{
			goto error ;
		}
	}
	if (use_tls)
	{
		if
		(
			owsl_socket_type_get
			(
				OWSL_AF_IPV4,
				OWSL_MODE_STREAM,
				OWSL_CIPHERING_ENABLED
			) == OWSL_TYPE_UNKNOWN
			&&
			owsl_socket_type_add (OWSL_TYPE_IPV4_TLS) != 0
		)
		{
			goto error ;
		}
		if
		(
			owsl_socket_type_get
			(
				OWSL_AF_IPV6,
				OWSL_MODE_STREAM,
				OWSL_CIPHERING_ENABLED
			) == OWSL_TYPE_UNKNOWN
			&&
			owsl_socket_type_add (OWSL_TYPE_IPV6_TLS) != 0
		)
		{
			goto error ;
		}
	}

	return OWPL_RESULT_SUCCESS ;

error :
	if (owslWasJustInitialized)
	{
		owsl_terminate () ;
	}
	return OWPL_RESULT_FAILURE ;
}