#include "main.h" //#include "wac_network_connection_factory.h" #include "ServiceBuild.h" #include #include "bfc/platform/export.h" #include "netinc.h" #include "api__wac_network.h" #include "wac_network_http_receiver_factory.h" #include "wac_network_connection_factory.h" #include "wac_network_ssl_connection_factory.h" #include "wac_network_dns_factory.h" #include "wac_network_web_server_factory.h" #include "util.h" #include "api/syscb/api_syscb.h" #include "wac_network_ssl_connection.h" #include #include "bfc/platform/export.h" #include "../nu/nonewthrow.c" JNL_HTTPGetFactory HTTPGetService; JNL_ConnectionFactory connectionService; JNL_AsyncDNSFactory dnsService; JNL_WebServFactory webserverService; api_service *WASABI_API_SVC = Q_NULLPTR; api_application *WASABI_API_APP = Q_NULLPTR; api_config *AGAVE_API_CONFIG = Q_NULLPTR; api_threadpool *WASABI_API_THREADPOOL = Q_NULLPTR; api_syscb *WASABI_API_SYSCB = Q_NULLPTR; static wa::Components::WAC_Network_AsyncDNS *global_dns = NULL; wa::Components::WAC_Network_AsyncDNS *GetGlobalDNS() { if ( !global_dns ) { if ( JNL::open_socketlib() ) return NULL; global_dns = new wa::Components::WAC_Network_AsyncDNS; } return global_dns; } void DestroyGlobalDNS() { if ( global_dns ) { delete global_dns; global_dns = NULL; JNL::close_socketlib(); } } #ifdef USE_SSL #include #include static HCRYPTPROV GetKeySet() { HCRYPTPROV hCryptProv; LPCWSTR UserName = L"WinampKeyContainer"; // name of the key container if ( CryptAcquireContext( &hCryptProv, // handle to the CSP UserName, // container name NULL, // use the default provider PROV_RSA_FULL, // provider type 0 ) ) // flag values { return hCryptProv; } else if ( CryptAcquireContext( &hCryptProv, UserName, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET ) ) { return hCryptProv; } else return 0; } JNL_SSL_ConnectionFactory sslConnectionService; void InitSSL() { SSL_load_error_strings(); SSL_library_init(); HCRYPTPROV hCryptProv = GetKeySet(); if ( hCryptProv ) { BYTE pbData[ 8 * sizeof( unsigned long ) ] = { 0 }; if ( CryptGenRandom( hCryptProv, 8 * sizeof( unsigned long ), pbData ) ) { RAND_seed( pbData, 16 ); } CryptReleaseContext( hCryptProv, 0 ); } sslContext = SSL_CTX_new( SSLv23_client_method() ); SSL_CTX_set_verify( sslContext, SSL_VERIFY_NONE, NULL ); // SSL_CTX_set_session_cache_mode(sslContext, SSL_SESS_CACHE_OFF); } void QuitSSL() { SSL_CTX_free( sslContext ); } #endif // !USE_SSL wa::Components::WAC_Network _wac_network; void wa::Components::WAC_Network::RegisterServices( api_service *p_service ) { WASABI_API_SVC = p_service; ServiceBuild( WASABI_API_SYSCB, syscbApiServiceGuid ); ServiceBuild( WASABI_API_APP, applicationApiServiceGuid ); ServiceBuild( AGAVE_API_CONFIG, AgaveConfigGUID ); ServiceBuild( WASABI_API_THREADPOOL, ThreadPoolGUID ); WASABI_API_SVC->service_register( &HTTPGetService ); WASABI_API_SVC->service_register( &connectionService ); #ifdef USE_SSL WASABI_API_SVC->service_register( &sslConnectionService ); #endif WASABI_API_SVC->service_register( &dnsService ); WASABI_API_SVC->service_register( &webserverService ); //dlMgrFactory.Register( &dlMgr ); } void wa::Components::WAC_Network::DeregisterServices( api_service *p_service ) { Q_UNUSED( p_service ) ServiceRelease( WASABI_API_SYSCB, syscbApiServiceGuid ); ServiceRelease( WASABI_API_APP, applicationApiServiceGuid ); ServiceRelease( AGAVE_API_CONFIG, AgaveConfigGUID ); //dlMgr.Kill(); //dlMgrFactory.Deregister(); DestroyGlobalDNS(); p_service->service_deregister( &HTTPGetService ); p_service->service_deregister( &connectionService ); #ifdef USE_SSL p_service->service_deregister( &sslConnectionService ); #endif p_service->service_deregister( &dnsService ); #ifdef USE_SSL QuitSSL(); #endif ServiceRelease( WASABI_API_THREADPOOL, ThreadPoolGUID ); } extern "C" WAC_NETWORK_EXPORT ifc_wa5component * GetWinamp5SystemComponent() { return &_wac_network; } #ifdef CBCLASS #undef CBCLASS #endif #define CBCLASS wa::Components::WAC_Network START_DISPATCH; VCB( API_WA5COMPONENT_REGISTERSERVICES, RegisterServices ) CB( API_WA5COMPONENT_REGISTERSERVICES_SAFE_MODE, RegisterServicesSafeModeOk ) VCB( API_WA5COMPONENT_DEREEGISTERSERVICES, DeregisterServices ) END_DISPATCH; #undef CBCLASS