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 ; }
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 ; }