1 #include <event2/event.h>
2 #if defined(EVENT_EXPORT_TEST_COMPONENT_EXTRA)
3 #include "event2/http.h"
4 #include "event2/rpc.h"
5 #include <event2/dns.h>
6 #elif defined(EVENT_EXPORT_TEST_COMPONENT_PTHREADS)
7 #include <event2/thread.h>
8 #elif defined(EVENT_EXPORT_TEST_COMPONENT_OPENSSL)
9 #include <openssl/ssl.h>
10 #include <openssl/err.h>
11 #include <event2/bufferevent_ssl.h>
12 #endif
13 
14 #if defined(EVENT_EXPORT_TEST_COMPONENT_EXTRA)
15 static int
test()16 test()
17 {
18 	struct event_base *base = NULL;
19 	struct evhttp *http = NULL;
20 	struct evdns_base *dns_base = NULL;
21 	struct evrpc_base *rpc_base = NULL;
22 
23 	base = event_base_new();
24 	if (base) {
25 		http = evhttp_new(base);
26 		dns_base = evdns_base_new(base,
27 			EVDNS_BASE_DISABLE_WHEN_INACTIVE);
28 	}
29 	if (http)
30 		rpc_base = evrpc_init(http);
31 
32 	if (base)
33 		event_base_free(base);
34 	if (http)
35 		evhttp_free(http);
36 	if (rpc_base)
37 		evrpc_free(rpc_base);
38 	if (dns_base)
39 		evdns_base_free(dns_base, 0);
40 
41 	return 0;
42 }
43 #elif defined(EVENT_EXPORT_TEST_COMPONENT_PTHREADS)
44 static int
test()45 test()
46 {
47 	return evthread_use_pthreads();
48 }
49 #elif defined(EVENT_EXPORT_TEST_COMPONENT_OPENSSL)
50 static int
test()51 test()
52 {
53 	struct event_base *base = NULL;
54 	SSL_CTX *ssl_ctx = NULL;
55 	SSL *ssl = NULL;
56 	struct bufferevent *bev;
57 	int r = 1;
58 
59 	SSL_library_init();
60 	ERR_load_crypto_strings();
61 	SSL_load_error_strings();
62 	OpenSSL_add_all_algorithms();
63 
64 	base = event_base_new();
65 	if (!base) {
66 		goto error;
67 	}
68 
69 	ssl_ctx = SSL_CTX_new(SSLv23_method());
70 	if (!ssl_ctx) {
71 		goto error;
72 	}
73 	ssl = SSL_new(ssl_ctx);
74 	if (ssl == NULL) {
75 		goto error;
76 	}
77 	bev = bufferevent_openssl_socket_new(base, -1, ssl,
78 		BUFFEREVENT_SSL_CONNECTING,
79 		BEV_OPT_CLOSE_ON_FREE | BEV_OPT_DEFER_CALLBACKS);
80 	if (bev == NULL) {
81 		goto error;
82 	}
83 	r = 0;
84 error:
85 	if (base)
86 		event_base_free(base);
87 	if (ssl_ctx)
88 		SSL_CTX_free(ssl_ctx);
89 	if (ssl)
90 		SSL_free(ssl);
91 	return r;
92 }
93 #else
94 static int
test()95 test()
96 {
97 	struct event_base *base = NULL;
98 
99 	base = event_base_new();
100 	if (base)
101 		event_base_free(base);
102 
103 	return 0;
104 }
105 #endif
106 
107 int
main(int argc,char const * argv[])108 main(int argc, char const *argv[])
109 {
110 	int r = 0;
111 #ifdef _WIN32
112 	{
113 		WSADATA wsaData;
114 		WSAStartup(MAKEWORD(2, 2), &wsaData);
115 	}
116 #endif
117 	r = test();
118 #ifdef _WIN32
119 	WSACleanup();
120 #endif
121 	return r;
122 }
123