webroar 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +48 -1
- data/README +11 -14
- data/Rakefile +1 -1
- data/conf/mime_type.yml +172 -166
- data/conf/server_internal_config.yml +30 -8
- data/doc/user-guide.html +294 -153
- data/doc/user-guide.txt +9 -13
- data/lib/command_runner.rb +1 -0
- data/lib/dependencies.rb +18 -15
- data/lib/installer.rb +115 -50
- data/src/admin_panel/app/controllers/admin_controller.rb +1 -15
- data/src/admin_panel/app/controllers/application_controller.rb +2 -2
- data/src/admin_panel/app/controllers/application_specification_controller.rb +2 -1
- data/src/admin_panel/app/controllers/headers_controller.rb +73 -0
- data/src/admin_panel/app/controllers/mail_specification_controller.rb +10 -0
- data/src/admin_panel/app/controllers/server_specification_controller.rb +14 -0
- data/src/admin_panel/app/helpers/admin_helper.rb +0 -85
- data/src/admin_panel/app/models/app.rb +1 -1
- data/src/admin_panel/app/models/application_specification.rb +33 -25
- data/src/admin_panel/app/models/headers.rb +116 -0
- data/src/admin_panel/app/models/mail_specification.rb +20 -5
- data/src/admin_panel/app/models/server_specification.rb +2 -7
- data/src/admin_panel/app/views/admin/configuration.html.erb +10 -5
- data/src/admin_panel/app/views/exceptions/_exception_list_partial.html.erb +4 -4
- data/src/admin_panel/app/views/graph/_graph_page.html.erb +3 -0
- data/src/admin_panel/app/views/headers/_add_expires_text_box.html.erb +35 -0
- data/src/admin_panel/app/views/headers/_expires_by_type_form.html.erb +65 -0
- data/src/admin_panel/app/views/headers/_headers_table.html.erb +113 -0
- data/src/admin_panel/app/views/mail_specification/_current_spec.html.erb +168 -0
- data/src/admin_panel/app/views/{admin → server_specification}/_add_div.html.erb +1 -1
- data/src/admin_panel/config/initializers/application_constants.rb +6 -0
- data/src/admin_panel/lib/control.rb +6 -3
- data/src/admin_panel/lib/scgi.rb +74 -21
- data/src/admin_panel/lib/yaml_writer.rb +51 -17
- data/src/admin_panel/public/javascripts/application.js +20 -1
- data/src/head/wr_access_log.c +2 -2
- data/src/head/wr_application.c +294 -236
- data/src/head/wr_application.h +8 -8
- data/src/head/wr_configurator.c +451 -517
- data/src/head/wr_configurator.h +10 -115
- data/src/head/wr_connection.c +26 -25
- data/src/head/wr_connection.h +2 -3
- data/src/head/wr_controller.c +110 -93
- data/src/head/wr_controller.h +6 -6
- data/src/head/wr_main.c +31 -24
- data/src/head/wr_request.c +70 -93
- data/src/head/wr_request.h +0 -4
- data/src/head/wr_resolver.c +21 -15
- data/src/head/wr_resolver.h +2 -2
- data/src/head/wr_server.c +36 -26
- data/src/head/wr_server.h +5 -5
- data/src/head/wr_worker.c +551 -512
- data/src/head/wr_worker.h +33 -20
- data/src/helper/wr_config.c +316 -0
- data/src/helper/wr_config.h +235 -0
- data/src/helper/wr_helper.h +1 -5
- data/src/helper/wr_logger.c +4 -4
- data/src/helper/wr_scgi.c +3 -4
- data/src/helper/wr_scgi.h +2 -0
- data/src/helper/wr_string.h +2 -2
- data/src/helper/wr_util.c +3 -1
- data/src/helper/wr_util.h +0 -0
- data/src/helper/wr_yaml_parser.c +30 -0
- data/src/helper/wr_yaml_parser.h +1 -0
- data/src/ruby_lib/exception_tracker/instrumentation/action_controller.rb +2 -1
- data/src/ruby_lib/mailer/smtpmail.rb +7 -4
- data/src/ruby_lib/profiler/instrumentation/action_controller.rb +2 -1
- data/src/ruby_lib/profiler/instrumentation/active_record.rb +3 -0
- data/src/ruby_lib/rack/adapter/rails.rb +14 -7
- data/src/ruby_lib/ruby_interface/client.rb +1 -1
- data/src/ruby_lib/ruby_interface/version.rb +2 -2
- data/src/ruby_lib/webroar_app_loader.rb +4 -2
- data/src/worker/wkr_controller.c +200 -140
- data/src/worker/wkr_http.c +14 -28
- data/src/worker/wkr_http.h +4 -4
- data/src/worker/wkr_http_request.c +12 -11
- data/src/worker/wkr_http_request.h +7 -8
- data/src/worker/wkr_http_response.c +10 -14
- data/src/worker/wkr_http_response.h +0 -1
- data/src/worker/wkr_main.c +74 -140
- data/src/worker/wkr_static.c +295 -108
- data/src/worker/wkr_static.h +20 -7
- data/src/worker/worker.c +245 -70
- data/src/worker/worker.h +46 -34
- data/tasks/compile.rake +128 -175
- data/tasks/test.rake +345 -469
- data/test/spec/webroar_command_spec.rb +23 -0
- metadata +173 -43
- data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/README +0 -34
- data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/Rakefile +0 -13
- data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/init.rb +0 -5
- data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/action_mailer_tls.rb +0 -16
- data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb +0 -123
- data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/test/tls_test.rb +0 -42
- data/src/head/wr_config.h +0 -165
- data/src/ruby_lib/mailer/action_mailer_tls.rb +0 -16
- data/src/ruby_lib/mailer/smtp_tls.rb +0 -123
data/src/head/wr_server.c
CHANGED
@@ -18,12 +18,14 @@
|
|
18
18
|
*/
|
19
19
|
#include <wr_request.h>
|
20
20
|
|
21
|
+
extern config_t *Config;
|
22
|
+
|
21
23
|
static struct ev_loop *loop; //Event loop
|
22
24
|
struct ev_idle idle_watcher; //Ideal watcher
|
23
25
|
/************ Private functions **************************/
|
24
26
|
|
25
27
|
/** Create Server */
|
26
|
-
wr_svr_t* wr_svr_new(struct ev_loop* loop
|
28
|
+
wr_svr_t* wr_svr_new(struct ev_loop* loop) {
|
27
29
|
LOG_FUNCTION
|
28
30
|
wr_svr_t* server = wr_malloc(wr_svr_t);
|
29
31
|
|
@@ -35,13 +37,12 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
|
|
35
37
|
//Get ebb server object
|
36
38
|
ebb_server_init(&(server->ebb_svr),loop);
|
37
39
|
|
38
|
-
if(conf->server->flag&WR_SVR_SSL_SUPPORT) {
|
39
40
|
#ifdef HAVE_GNUTLS
|
40
|
-
|
41
|
+
if(Config->Server.flag & SERVER_SSL_SUPPORT) {
|
41
42
|
//Initialize ebb server for SSL support
|
42
43
|
ebb_server_init(&(server->secure_ebb_svr),loop);
|
43
44
|
// Add GnuTLS support
|
44
|
-
if(ebb_server_set_secure(&(server->secure_ebb_svr),
|
45
|
+
if(ebb_server_set_secure(&(server->secure_ebb_svr), Config->Server.SSL.certificate.str, Config->Server.SSL.key.str) < 0) {
|
45
46
|
ebb_server_unlisten(&(server->secure_ebb_svr));
|
46
47
|
//free(server);
|
47
48
|
//return NULL;
|
@@ -50,10 +51,9 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
|
|
50
51
|
server->secure_ebb_svr.data = server;
|
51
52
|
server->secure_ebb_svr.new_connection = wr_new_conn_cb;
|
52
53
|
}
|
53
|
-
|
54
|
+
}
|
54
55
|
#endif
|
55
56
|
|
56
|
-
}
|
57
57
|
server->ebb_svr.data = server;
|
58
58
|
server->ebb_svr.new_connection = wr_new_conn_cb;
|
59
59
|
|
@@ -61,17 +61,26 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
|
|
61
61
|
server->ctl = wr_svr_ctl_new();
|
62
62
|
if(!server->ctl) {
|
63
63
|
ebb_server_unlisten(&(server->ebb_svr));
|
64
|
+
#ifdef HAVE_GNUTLS
|
65
|
+
if(Config->Server.flag & SERVER_SSL_SUPPORT) {
|
66
|
+
ebb_server_unlisten(&(server->secure_ebb_svr));
|
67
|
+
}
|
68
|
+
#endif
|
64
69
|
free(server);
|
65
70
|
LOG_ERROR(WARN, "%s() control object allocation failed. Returning ...",__FUNCTION__);
|
66
71
|
return NULL;
|
67
72
|
}
|
68
73
|
|
69
|
-
server->conf = conf;
|
70
74
|
server->apps = NULL;
|
71
75
|
server->default_app = NULL;
|
72
76
|
server->resolver = wr_req_resolver_new();
|
73
77
|
if(server->resolver == NULL) {
|
74
78
|
ebb_server_unlisten(&(server->ebb_svr));
|
79
|
+
#ifdef HAVE_GNUTLS
|
80
|
+
if(Config->Server.flag & SERVER_SSL_SUPPORT) {
|
81
|
+
ebb_server_unlisten(&(server->secure_ebb_svr));
|
82
|
+
}
|
83
|
+
#endif
|
75
84
|
free(server);
|
76
85
|
LOG_ERROR(WARN, "Resolver object allocation failed. Returning ...");
|
77
86
|
return NULL;
|
@@ -81,19 +90,19 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
|
|
81
90
|
}
|
82
91
|
|
83
92
|
/** Attach ideal watcher with event loop */
|
84
|
-
|
93
|
+
void attach_idle_watcher() {
|
85
94
|
if(!ev_is_active(&idle_watcher)) {
|
86
95
|
ev_idle_start (loop, &idle_watcher);
|
87
96
|
}
|
88
97
|
}
|
89
98
|
|
90
99
|
/** Detach Ideal watcher from event loop*/
|
91
|
-
|
100
|
+
void detach_idle_watcher() {
|
92
101
|
ev_idle_stop(loop, &idle_watcher);
|
93
102
|
}
|
94
103
|
|
95
104
|
/** Callback function for Ideal watcher */
|
96
|
-
|
105
|
+
void idle_cb (struct ev_loop *loop, struct ev_idle *w, int revents) {
|
97
106
|
/*if(clients_in_use_p()) {
|
98
107
|
rb_thread_schedule();
|
99
108
|
} else if(!rb_thread_alone()) {*/
|
@@ -116,35 +125,35 @@ static inline void idle_cb (struct ev_loop *loop, struct ev_idle *w, int revents
|
|
116
125
|
*****************************************************/
|
117
126
|
|
118
127
|
/** Starts listening for requests */
|
119
|
-
int wr_svr_init(wr_svr_t** server
|
128
|
+
int wr_svr_init(wr_svr_t** server) {
|
120
129
|
//TODO: attach idle watcher
|
121
130
|
//ev_idle_init (&idle_watcher, idle_cb);
|
122
131
|
//attach_idle_watcher();
|
123
132
|
|
124
133
|
//Create and initialize Server object
|
125
134
|
loop = ev_default_loop (0);
|
126
|
-
*server = wr_svr_new(loop
|
135
|
+
*server = wr_svr_new(loop);
|
127
136
|
|
128
137
|
if(*server == NULL) {
|
129
138
|
LOG_ERROR(SEVERE,"Server is NULL");
|
130
139
|
return -1;
|
131
140
|
}
|
132
141
|
|
133
|
-
(*server)->conf = conf;
|
134
|
-
if(conf->server->flag&WR_SVR_SSL_SUPPORT) {
|
135
142
|
#ifdef HAVE_GNUTLS
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
143
|
+
if(Config->Server.flag & SERVER_SSL_SUPPORT) {
|
144
|
+
LOG_DEBUG(DEBUG,"SSL port = %d", Config->Server.SSL.port);
|
145
|
+
if(ebb_server_listen_on_port(&(*server)->secure_ebb_svr, Config->Server.SSL.port) < 0) {
|
146
|
+
LOG_ERROR(SEVERE,"ebb_server_listen_on_port(): failed. Port number = %d",Config->Server.SSL.port);
|
147
|
+
printf("Port %d is already in use.\n", Config->Server.SSL.port);
|
148
|
+
return -1;
|
140
149
|
}
|
141
|
-
#endif
|
142
|
-
|
143
150
|
}
|
144
|
-
|
151
|
+
#endif
|
152
|
+
|
153
|
+
LOG_DEBUG(DEBUG,"port = %d", Config->Server.port);
|
145
154
|
//ebb server starts listening for request
|
146
|
-
if(ebb_server_listen_on_port(&(*server)->ebb_svr,
|
147
|
-
printf("Port %d is already in use.\n",
|
155
|
+
if(ebb_server_listen_on_port(&(*server)->ebb_svr, Config->Server.port) < 1) {
|
156
|
+
printf("Port %d is already in use.\n", Config->Server.port);
|
148
157
|
return -1;
|
149
158
|
}
|
150
159
|
|
@@ -152,8 +161,10 @@ int wr_svr_init(wr_svr_t** server, wr_conf_t *conf) {
|
|
152
161
|
(*server)->on_app_remove = wr_app_remove_cb;
|
153
162
|
(*server)->on_app_reload = wr_app_reload_cb;
|
154
163
|
(*server)->on_wkr_add = wr_wkr_add_cb;
|
164
|
+
(*server)->on_wkr_add_error = wr_wkr_add_error_cb;
|
155
165
|
(*server)->on_wkr_remove = wr_wkr_remove_cb;
|
156
166
|
(*server)->on_wkr_ping = wr_wkr_ping_cb;
|
167
|
+
(*server)->on_wkr_conf_req = wr_app_conf_req_cb;
|
157
168
|
(*server)->default_app = (*server)->static_app = NULL;
|
158
169
|
|
159
170
|
return 0;
|
@@ -168,11 +179,11 @@ void wr_svr_free(wr_svr_t* server) {
|
|
168
179
|
#ifdef HAVE_GNUTLS
|
169
180
|
|
170
181
|
//Destroy ebb server object used for SSL
|
171
|
-
|
182
|
+
if(Config->Server.flag & SERVER_SSL_SUPPORT)
|
183
|
+
ebb_server_unlisten(&(server->secure_ebb_svr));
|
172
184
|
|
173
185
|
#endif
|
174
186
|
|
175
|
-
|
176
187
|
// Destroy application list
|
177
188
|
if(server->apps) {
|
178
189
|
wr_app_free(server->apps);
|
@@ -186,7 +197,6 @@ void wr_svr_free(wr_svr_t* server) {
|
|
186
197
|
|
187
198
|
//Destroy Server Control object
|
188
199
|
wr_svr_ctl_free(server->ctl);
|
189
|
-
wr_conf_free(server->conf);
|
190
200
|
wr_req_resolver_free(server->resolver);
|
191
201
|
free(server);
|
192
202
|
}
|
data/src/head/wr_server.h
CHANGED
@@ -21,7 +21,6 @@
|
|
21
21
|
|
22
22
|
#include <wr_configurator.h>
|
23
23
|
#include <ebb.h>
|
24
|
-
#include <wr_config.h>
|
25
24
|
|
26
25
|
typedef struct wr_app_s wr_app_t;
|
27
26
|
typedef struct wr_svr_ctl_s wr_svr_ctl_t;
|
@@ -35,16 +34,15 @@ typedef void (*wr_ctl_signal_cb) (wr_ctl_t*, const wr_ctl_msg_t*);
|
|
35
34
|
typedef struct {
|
36
35
|
ebb_server ebb_svr; /**< Ebb server */
|
37
36
|
|
38
|
-
ebb_server secure_ebb_svr; /**< Ebb server */
|
39
37
|
#ifdef HAVE_GNUTLS
|
38
|
+
ebb_server secure_ebb_svr; /**< Ebb server */
|
40
39
|
#endif
|
41
40
|
|
42
|
-
wr_conf_t* conf; /**< Configuration pointer */
|
43
41
|
wr_app_t* apps; /**< Application list */
|
44
42
|
wr_app_t* default_app;
|
45
43
|
wr_app_t* static_app;
|
46
44
|
wr_svr_ctl_t* ctl; /**< Server control pointer */
|
47
|
-
char err_msg[
|
45
|
+
char err_msg[STR_SIZE1KB]; /**< Error message */
|
48
46
|
wr_req_resolver_t *resolver;
|
49
47
|
short is_running; /**< Keep alive flag */
|
50
48
|
|
@@ -55,10 +53,12 @@ typedef struct {
|
|
55
53
|
wr_ctl_signal_cb on_wkr_add;
|
56
54
|
wr_ctl_signal_cb on_wkr_remove;
|
57
55
|
wr_ctl_signal_cb on_wkr_ping;
|
56
|
+
wr_ctl_signal_cb on_wkr_add_error;
|
57
|
+
wr_ctl_signal_cb on_wkr_conf_req;
|
58
58
|
}wr_svr_t;
|
59
59
|
|
60
60
|
/** Initialize Server */
|
61
|
-
int wr_svr_init(wr_svr_t
|
61
|
+
int wr_svr_init(wr_svr_t**);
|
62
62
|
/** Destroy Server */
|
63
63
|
void wr_svr_free(wr_svr_t*);
|
64
64
|
|