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_configurator.h
CHANGED
@@ -21,129 +21,24 @@
|
|
21
21
|
|
22
22
|
#include<wr_helper.h>
|
23
23
|
|
24
|
-
/** Configuration parameter macros */
|
25
|
-
#define WR_CONF_SVR_PORT "Server Specification/port"
|
26
|
-
#define WR_CONF_SVR_MAX_WKR "Server Specification/max_worker"
|
27
|
-
#define WR_CONF_SVR_MIN_WKR "Server Specification/min_worker"
|
28
|
-
#define WR_CONF_SVR_LOG_LEVEL "Server Specification/log_level"
|
29
|
-
#define WR_CONF_SVR_ACCESS_LOG "Server Specification/access_log"
|
30
|
-
|
31
|
-
#define WR_CONF_SVR_SSL_SUPPORT "Server Specification/SSL Specification/ssl_support"
|
32
|
-
|
33
|
-
#ifdef HAVE_GNUTLS
|
34
|
-
#define WR_CONF_SVR_SSL_CERTIFICATE "Server Specification/SSL Specification/certificate_file"
|
35
|
-
#define WR_CONF_SVR_SSL_KEY "Server Specification/SSL Specification/key_file"
|
36
|
-
#define WR_CONF_SVR_SSL_PORT "Server Specification/SSL Specification/ssl_port"
|
37
|
-
#endif
|
38
|
-
|
39
|
-
#define WR_CONF_APP_SPEC "Application Specification"
|
40
|
-
#define WR_CONF_APP_NAME "name"
|
41
|
-
#define WR_CONF_APP_BASE_URI "baseuri"
|
42
|
-
#define WR_CONF_APP_PATH "path"
|
43
|
-
#define WR_CONF_APP_TYPE "type"
|
44
|
-
#define WR_CONF_APP_ANALYTICS "analytics"
|
45
|
-
#define WR_CONF_APP_USER "run_as_user"
|
46
|
-
#define WR_CONF_APP_ENV "environment"
|
47
|
-
#define WR_CONF_APP_LOG_LEVEL "log_level"
|
48
|
-
#define WR_CONF_APP_MAX_WKR "max_worker"
|
49
|
-
#define WR_CONF_APP_MIN_WKR "min_worker"
|
50
|
-
#define WR_CONF_APP_HOST_NAMES "host_names"
|
51
|
-
|
52
|
-
#define WR_CONF_MAX_LEN_APP_NAME 30
|
53
|
-
#define WR_CONF_MAX_LEN_USR_NAME 30
|
54
|
-
|
55
|
-
// using 'AF_UNIX' macro to identify UDS support.
|
56
|
-
//#define WR_CONF_UDS 1
|
57
|
-
|
58
|
-
typedef enum wr_host_type_e{
|
59
|
-
WR_HOST_TPE_INVALID = 0,
|
60
|
-
WR_HOST_TYPE_STATIC = 1,
|
61
|
-
WR_HOST_TYPE_WILDCARD_IN_START = 2,
|
62
|
-
WR_HOST_TYPE_WILDCARD_IN_END = 4,
|
63
|
-
WR_HOST_TYPE_WILDCARD_IN_START_END = 8,
|
64
|
-
}wr_host_type_t;
|
65
|
-
|
66
|
-
typedef struct wr_host_name_s wr_host_name_t;
|
67
|
-
struct wr_host_name_s {
|
68
|
-
wr_str_t name;
|
69
|
-
wr_host_type_t type;
|
70
|
-
wr_host_name_t *next;
|
71
|
-
};
|
72
|
-
|
73
|
-
#define WR_SVR_ACCESS_LOG 1
|
74
|
-
#define WR_SVR_SSL_SUPPORT 2
|
75
|
-
|
76
|
-
|
77
|
-
/** server_configuration structure */
|
78
|
-
typedef struct {
|
79
|
-
wr_u_int port; /**< Server port*/
|
80
|
-
wr_u_short min_worker; /**< Default number of minimum workers */
|
81
|
-
wr_u_short max_worker; /**< Default number of maximum workers */
|
82
|
-
LOG_SEVERITY log_level; /**< Logging level */
|
83
|
-
//If WR_CONF_UDS is 1 'contol_sock_path' has UDS sock path
|
84
|
-
//If WR_CONF_UDS is 0 'port' has Internet socket port
|
85
|
-
wr_u_short ctl_port; /**< Server control port*/
|
86
|
-
wr_str_t sock_path; /**< Server control socket path in case of UNIX domain socket*/
|
87
|
-
#ifdef HAVE_GNUTLS
|
88
|
-
|
89
|
-
wr_str_t certificate; /**< Certificate path */
|
90
|
-
wr_str_t key; /**< Key path */
|
91
|
-
wr_u_short ssl_port; /**< SSL listening port */
|
92
|
-
#endif
|
93
|
-
|
94
|
-
short flag;
|
95
|
-
}wr_svr_conf_t;
|
96
|
-
|
97
|
-
/** application_configuration structure */
|
98
|
-
typedef struct wr_app_conf_s wr_app_conf_t;
|
99
|
-
struct wr_app_conf_s {
|
100
|
-
wr_str_t name; /**< Application name */
|
101
|
-
wr_str_t path; /**< Application path */
|
102
|
-
wr_str_t env; /**< Application environment */
|
103
|
-
wr_str_t type; /**< Application type {rails, merb etc.}*/
|
104
|
-
short analytics; /**< analytics flag {enabled/disabled} */
|
105
|
-
wr_str_t baseuri; /**< Application baseuri */
|
106
|
-
wr_u_short min_worker; /**< Minimum number of workers required */
|
107
|
-
wr_u_short max_worker; /**< Maximum number of workers */
|
108
|
-
LOG_SEVERITY log_level; /**< Logging level */
|
109
|
-
short cuid; /**< User id */
|
110
|
-
short cgid; /**< Group id */
|
111
|
-
wr_host_name_t *host_name_list;
|
112
|
-
wr_app_conf_t *next;
|
113
|
-
};
|
114
|
-
|
115
|
-
typedef struct wr_conf_s wr_conf_t;
|
116
24
|
/** Remove application_configuration from configuration */
|
117
|
-
int wr_app_conf_remove(
|
25
|
+
int wr_app_conf_remove(const char *app_name);
|
118
26
|
/** Read application configuration of specified application name */
|
119
|
-
|
120
|
-
/**
|
121
|
-
|
122
|
-
/** Replace the application configuration */
|
123
|
-
int wr_conf_app_replace(wr_conf_t *conf, wr_app_conf_t *app_conf);
|
27
|
+
config_application_list_t* wr_conf_app_read(const char *app_name, char* err_msg, int flag);
|
28
|
+
/** Update application configuration with new parameters */
|
29
|
+
int wr_conf_app_update(config_application_list_t *app);
|
124
30
|
/** Destroy application configuration */
|
125
|
-
void wr_conf_app_free(
|
31
|
+
void wr_conf_app_free(config_application_list_t* app);
|
126
32
|
|
127
|
-
/** configuration structure */
|
128
|
-
struct wr_conf_s {
|
129
|
-
wr_svr_conf_t *server; /**< Server configuration */
|
130
|
-
wr_app_conf_t *apps; /**< Application configuration */
|
131
|
-
wr_str_t wr_root_path; /**< WebROaR root path */
|
132
|
-
wr_str_t wkr_exe_path; /**< worker's executable path*/
|
133
|
-
wr_str_t ruby_lib_path; /**< Ruby library path */
|
134
|
-
wr_str_t config_file_path; /**< Configuration file path */
|
135
|
-
wr_str_t admin_panel_path; /**< Admin Panel path */
|
136
|
-
short uds; /**< UNIX domain socket flag(controlling flag) */
|
137
|
-
};
|
138
33
|
|
139
34
|
/** Read 'config.yml' file and fill configuration data structure */
|
140
|
-
|
35
|
+
int wr_conf_read();
|
141
36
|
/** Destroy configuration data structure */
|
142
|
-
void wr_conf_free(
|
37
|
+
void wr_conf_free();
|
143
38
|
/** Display configuration data structure */
|
144
|
-
void wr_conf_display(
|
39
|
+
void wr_conf_display();
|
145
40
|
/** Add Admin Panel to configuration data structure */
|
146
|
-
int wr_conf_admin_panel_add(
|
41
|
+
int wr_conf_admin_panel_add();
|
147
42
|
/** Add the configuration for static content server */
|
148
|
-
int wr_conf_static_server_add(
|
43
|
+
int wr_conf_static_server_add();
|
149
44
|
#endif /*WR_CONFIGURATOR_H_*/
|
data/src/head/wr_connection.c
CHANGED
@@ -17,7 +17,8 @@
|
|
17
17
|
* along with WebROaR. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
*/
|
19
19
|
#include <wr_request.h>
|
20
|
-
|
20
|
+
|
21
|
+
extern config_t *Config;
|
21
22
|
|
22
23
|
// Connection count
|
23
24
|
static unsigned int wr_conn_count = 0;
|
@@ -39,7 +40,8 @@ static wr_http_status_t http_status [] ={
|
|
39
40
|
{413, "413 Request Entity Too Large", "The request entity is too large"},
|
40
41
|
{414, "414 Request-URI Too Large", "The request URI is too large"},
|
41
42
|
{500, "500 Internal Server Error", "The server encountered an unexpected condition which prevented it from fulfilling the request."},
|
42
|
-
{501, "501 Not Implemented", "The server does not support the functionality required to fulfill the request."}
|
43
|
+
{501, "501 Not Implemented", "The server does not support the functionality required to fulfill the request."},
|
44
|
+
{503, "503 Service Unavailable", "The server is currently unable to handle the request due to a temporary overloading or maintenance of the server."}
|
43
45
|
};
|
44
46
|
|
45
47
|
#define WR_RESP_BODY "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n\
|
@@ -92,7 +94,7 @@ void wr_conn_after_write_cb(ebb_connection *connection) {
|
|
92
94
|
wr_conn_after_write_cb);
|
93
95
|
} else if(conn->resp_to_write <= 0) {
|
94
96
|
LOG_DEBUG(DEBUG,"response to write is less than 1 keep alive =%d", conn->keep_alive);
|
95
|
-
if(!
|
97
|
+
if(!(SERVER_KEEP_ALIVE & Config->Server.flag) || !conn->keep_alive) {
|
96
98
|
// Close ebb_connection if there is no any pending request
|
97
99
|
LOG_DEBUG(DEBUG,"Closing Connection %d ...", conn->id);
|
98
100
|
ebb_connection_schedule_close(connection);
|
@@ -108,9 +110,6 @@ void wr_req_parse_err_cb(ebb_connection* connection) {
|
|
108
110
|
LOG_DEBUG(DEBUG,"Connection id = %d",conn->id);
|
109
111
|
conn->keep_alive = 0;
|
110
112
|
wr_req_invalid(conn, WR_HTTP_STATUS_400);
|
111
|
-
// if(conn->resp_to_write == 0)
|
112
|
-
// conn->resp_to_write = 1;
|
113
|
-
// wr_server_err_response(conn, WR_HTTP_STATUS_400);
|
114
113
|
}
|
115
114
|
|
116
115
|
/** The ebb connection goes timeout */
|
@@ -147,29 +146,25 @@ void wr_conn_close_cb(ebb_connection* connection) {
|
|
147
146
|
}
|
148
147
|
}
|
149
148
|
|
150
|
-
/********************************************************
|
151
|
-
* Connection Function Definition *
|
152
|
-
********************************************************/
|
153
|
-
|
154
149
|
/** Create new Connection */
|
155
150
|
wr_conn_t* wr_conn_new(wr_svr_t *server) {
|
156
151
|
LOG_FUNCTION
|
157
152
|
wr_conn_t* a_connection = wr_malloc(wr_conn_t);
|
158
|
-
|
153
|
+
|
159
154
|
if(a_connection == NULL) {
|
160
155
|
LOG_DEBUG(SEVERE, "Error a_connection is null. Returning ...");
|
161
156
|
return NULL;
|
162
157
|
}
|
163
158
|
ebb_connection *connection = wr_malloc(ebb_connection);
|
164
|
-
|
159
|
+
|
165
160
|
if(connection == NULL) {
|
166
161
|
free(a_connection);
|
167
162
|
LOG_DEBUG(SEVERE, "Error connection is null. Returning ...");
|
168
163
|
return NULL;
|
169
164
|
}
|
170
|
-
|
165
|
+
|
171
166
|
ebb_connection_init(connection);
|
172
|
-
|
167
|
+
|
173
168
|
a_connection->id = ++wr_conn_count;
|
174
169
|
a_connection->resp_to_write = 0;
|
175
170
|
a_connection->ebb_conn = connection;
|
@@ -184,10 +179,15 @@ wr_conn_t* wr_conn_new(wr_svr_t *server) {
|
|
184
179
|
connection->on_close = wr_conn_close_cb;
|
185
180
|
connection->on_timeout = wr_conn_timeout_cb;
|
186
181
|
connection->on_request_parse_error = wr_req_parse_err_cb;
|
187
|
-
|
182
|
+
|
188
183
|
return a_connection;
|
189
184
|
}
|
190
185
|
|
186
|
+
|
187
|
+
/********************************************************
|
188
|
+
* Connection Function Definition *
|
189
|
+
********************************************************/
|
190
|
+
|
191
191
|
/** Destroy Connection */
|
192
192
|
void wr_conn_free(wr_conn_t *conn) {
|
193
193
|
LOG_FUNCTION
|
@@ -251,22 +251,22 @@ ebb_connection* wr_new_conn_cb(ebb_server* server, struct sockaddr_in* addr) {
|
|
251
251
|
/** Response generated by Server */
|
252
252
|
void wr_conn_err_resp(wr_conn_t *conn, wr_resp_status_t resp_code) {
|
253
253
|
LOG_FUNCTION
|
254
|
-
char response_body[
|
255
|
-
char response_buff[
|
254
|
+
char response_body[STR_SIZE512];
|
255
|
+
char response_buff[STR_SIZE512*2];
|
256
256
|
size_t body_len, buff_len;
|
257
257
|
|
258
258
|
LOG_DEBUG(DEBUG, "response code = %s",http_status[resp_code].phrase);
|
259
259
|
conn->keep_alive = 0;
|
260
260
|
|
261
|
-
char current_date[
|
262
|
-
get_time(current_date,
|
261
|
+
char current_date[STR_SIZE64];
|
262
|
+
get_time(current_date, STR_SIZE64);
|
263
263
|
|
264
264
|
switch(resp_code) {
|
265
265
|
case WR_HTTP_STATUS_100:
|
266
266
|
body_len = 0;
|
267
267
|
buff_len = sprintf(response_buff, WR_RESP_HEADERS,
|
268
|
-
http_status[resp_code].phrase, current_date,
|
269
|
-
|
268
|
+
http_status[resp_code].phrase, current_date, Config->Server.name.str,
|
269
|
+
Config->Server.version.str, body_len, http_status[resp_code].message);
|
270
270
|
break;
|
271
271
|
case WR_HTTP_STATUS_400:
|
272
272
|
case WR_HTTP_STATUS_403:
|
@@ -277,21 +277,22 @@ void wr_conn_err_resp(wr_conn_t *conn, wr_resp_status_t resp_code) {
|
|
277
277
|
case WR_HTTP_STATUS_414:
|
278
278
|
case WR_HTTP_STATUS_500:
|
279
279
|
case WR_HTTP_STATUS_501:
|
280
|
+
case WR_HTTP_STATUS_503:
|
280
281
|
if(conn->req && conn->req->resp_buf_len > 0) {
|
281
282
|
body_len = sprintf(response_body, WR_RESPONSE_ERR_BODY,
|
282
283
|
http_status[resp_code].phrase,http_status[resp_code].phrase+4,
|
283
284
|
http_status[resp_code].message,
|
284
285
|
conn->req->resp_buf,
|
285
|
-
|
286
|
+
Config->Server.name.str, Config->Server.version.str);
|
286
287
|
} else {
|
287
288
|
body_len = sprintf(response_body, WR_RESP_BODY,
|
288
289
|
http_status[resp_code].phrase,http_status[resp_code].phrase+4,
|
289
|
-
http_status[resp_code].message,
|
290
|
+
http_status[resp_code].message,Config->Server.name.str, Config->Server.version.str);
|
290
291
|
}
|
291
292
|
|
292
293
|
buff_len = sprintf(response_buff, WR_RESP_HEADERS,
|
293
294
|
http_status[resp_code].phrase, current_date,
|
294
|
-
|
295
|
+
Config->Server.name.str, Config->Server.version.str, body_len, response_body);
|
295
296
|
break;
|
296
297
|
}
|
297
298
|
|
@@ -299,7 +300,7 @@ void wr_conn_err_resp(wr_conn_t *conn, wr_resp_status_t resp_code) {
|
|
299
300
|
|
300
301
|
if(conn->req) {
|
301
302
|
wr_req_t* req = conn->req;
|
302
|
-
if(
|
303
|
+
if(Config->Server.flag & SERVER_ACCESS_LOG) {
|
303
304
|
req->resp_body_len = body_len;
|
304
305
|
req->resp_code = http_status[resp_code].code;
|
305
306
|
wr_access_log(req);
|
data/src/head/wr_connection.h
CHANGED
@@ -35,8 +35,6 @@ typedef struct {
|
|
35
35
|
wr_str_list_t *resp;
|
36
36
|
}wr_conn_t;
|
37
37
|
|
38
|
-
/** Create new Connection */
|
39
|
-
wr_conn_t* wr_conn_new(wr_svr_t*);
|
40
38
|
/** Destroy Connection */
|
41
39
|
void wr_conn_free(wr_conn_t*);
|
42
40
|
/** Add response to Connection */
|
@@ -59,7 +57,8 @@ typedef enum {
|
|
59
57
|
WR_HTTP_STATUS_413 ,
|
60
58
|
WR_HTTP_STATUS_414 ,
|
61
59
|
WR_HTTP_STATUS_500 ,
|
62
|
-
WR_HTTP_STATUS_501
|
60
|
+
WR_HTTP_STATUS_501 ,
|
61
|
+
WR_HTTP_STATUS_503
|
63
62
|
}wr_resp_status_t;
|
64
63
|
|
65
64
|
/** Response generated by Server */
|