webroar 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/CHANGELOG +48 -1
  2. data/README +11 -14
  3. data/Rakefile +1 -1
  4. data/conf/mime_type.yml +172 -166
  5. data/conf/server_internal_config.yml +30 -8
  6. data/doc/user-guide.html +294 -153
  7. data/doc/user-guide.txt +9 -13
  8. data/lib/command_runner.rb +1 -0
  9. data/lib/dependencies.rb +18 -15
  10. data/lib/installer.rb +115 -50
  11. data/src/admin_panel/app/controllers/admin_controller.rb +1 -15
  12. data/src/admin_panel/app/controllers/application_controller.rb +2 -2
  13. data/src/admin_panel/app/controllers/application_specification_controller.rb +2 -1
  14. data/src/admin_panel/app/controllers/headers_controller.rb +73 -0
  15. data/src/admin_panel/app/controllers/mail_specification_controller.rb +10 -0
  16. data/src/admin_panel/app/controllers/server_specification_controller.rb +14 -0
  17. data/src/admin_panel/app/helpers/admin_helper.rb +0 -85
  18. data/src/admin_panel/app/models/app.rb +1 -1
  19. data/src/admin_panel/app/models/application_specification.rb +33 -25
  20. data/src/admin_panel/app/models/headers.rb +116 -0
  21. data/src/admin_panel/app/models/mail_specification.rb +20 -5
  22. data/src/admin_panel/app/models/server_specification.rb +2 -7
  23. data/src/admin_panel/app/views/admin/configuration.html.erb +10 -5
  24. data/src/admin_panel/app/views/exceptions/_exception_list_partial.html.erb +4 -4
  25. data/src/admin_panel/app/views/graph/_graph_page.html.erb +3 -0
  26. data/src/admin_panel/app/views/headers/_add_expires_text_box.html.erb +35 -0
  27. data/src/admin_panel/app/views/headers/_expires_by_type_form.html.erb +65 -0
  28. data/src/admin_panel/app/views/headers/_headers_table.html.erb +113 -0
  29. data/src/admin_panel/app/views/mail_specification/_current_spec.html.erb +168 -0
  30. data/src/admin_panel/app/views/{admin → server_specification}/_add_div.html.erb +1 -1
  31. data/src/admin_panel/config/initializers/application_constants.rb +6 -0
  32. data/src/admin_panel/lib/control.rb +6 -3
  33. data/src/admin_panel/lib/scgi.rb +74 -21
  34. data/src/admin_panel/lib/yaml_writer.rb +51 -17
  35. data/src/admin_panel/public/javascripts/application.js +20 -1
  36. data/src/head/wr_access_log.c +2 -2
  37. data/src/head/wr_application.c +294 -236
  38. data/src/head/wr_application.h +8 -8
  39. data/src/head/wr_configurator.c +451 -517
  40. data/src/head/wr_configurator.h +10 -115
  41. data/src/head/wr_connection.c +26 -25
  42. data/src/head/wr_connection.h +2 -3
  43. data/src/head/wr_controller.c +110 -93
  44. data/src/head/wr_controller.h +6 -6
  45. data/src/head/wr_main.c +31 -24
  46. data/src/head/wr_request.c +70 -93
  47. data/src/head/wr_request.h +0 -4
  48. data/src/head/wr_resolver.c +21 -15
  49. data/src/head/wr_resolver.h +2 -2
  50. data/src/head/wr_server.c +36 -26
  51. data/src/head/wr_server.h +5 -5
  52. data/src/head/wr_worker.c +551 -512
  53. data/src/head/wr_worker.h +33 -20
  54. data/src/helper/wr_config.c +316 -0
  55. data/src/helper/wr_config.h +235 -0
  56. data/src/helper/wr_helper.h +1 -5
  57. data/src/helper/wr_logger.c +4 -4
  58. data/src/helper/wr_scgi.c +3 -4
  59. data/src/helper/wr_scgi.h +2 -0
  60. data/src/helper/wr_string.h +2 -2
  61. data/src/helper/wr_util.c +3 -1
  62. data/src/helper/wr_util.h +0 -0
  63. data/src/helper/wr_yaml_parser.c +30 -0
  64. data/src/helper/wr_yaml_parser.h +1 -0
  65. data/src/ruby_lib/exception_tracker/instrumentation/action_controller.rb +2 -1
  66. data/src/ruby_lib/mailer/smtpmail.rb +7 -4
  67. data/src/ruby_lib/profiler/instrumentation/action_controller.rb +2 -1
  68. data/src/ruby_lib/profiler/instrumentation/active_record.rb +3 -0
  69. data/src/ruby_lib/rack/adapter/rails.rb +14 -7
  70. data/src/ruby_lib/ruby_interface/client.rb +1 -1
  71. data/src/ruby_lib/ruby_interface/version.rb +2 -2
  72. data/src/ruby_lib/webroar_app_loader.rb +4 -2
  73. data/src/worker/wkr_controller.c +200 -140
  74. data/src/worker/wkr_http.c +14 -28
  75. data/src/worker/wkr_http.h +4 -4
  76. data/src/worker/wkr_http_request.c +12 -11
  77. data/src/worker/wkr_http_request.h +7 -8
  78. data/src/worker/wkr_http_response.c +10 -14
  79. data/src/worker/wkr_http_response.h +0 -1
  80. data/src/worker/wkr_main.c +74 -140
  81. data/src/worker/wkr_static.c +295 -108
  82. data/src/worker/wkr_static.h +20 -7
  83. data/src/worker/worker.c +245 -70
  84. data/src/worker/worker.h +46 -34
  85. data/tasks/compile.rake +128 -175
  86. data/tasks/test.rake +345 -469
  87. data/test/spec/webroar_command_spec.rb +23 -0
  88. metadata +173 -43
  89. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/README +0 -34
  90. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/Rakefile +0 -13
  91. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/init.rb +0 -5
  92. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/action_mailer_tls.rb +0 -16
  93. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb +0 -123
  94. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/test/tls_test.rb +0 -42
  95. data/src/head/wr_config.h +0 -165
  96. data/src/ruby_lib/mailer/action_mailer_tls.rb +0 -16
  97. 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, wr_conf_t* conf) {
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), conf->server->certificate.str, conf->server->key.str) < 0) {
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
- static inline void attach_idle_watcher() {
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
- static inline void detach_idle_watcher() {
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
- static inline void idle_cb (struct ev_loop *loop, struct ev_idle *w, int revents) {
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, wr_conf_t *conf) {
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, conf);
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
- LOG_DEBUG(DEBUG,"SSL port = %d", conf->server->ssl_port);
137
- if(ebb_server_listen_on_port(&(*server)->secure_ebb_svr, conf->server->ssl_port) < 0) {
138
- LOG_ERROR(SEVERE,"ebb_server_listen_on_port(): failed. Port number = %d",conf->server->ssl_port);
139
- printf("Port %d is already in use.\n", conf->server->ssl_port);
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
- LOG_DEBUG(DEBUG,"port = %d", conf->server->port);
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, conf->server->port) < 1) {
147
- printf("Port %d is already in use.\n", conf->server->port);
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
- ebb_server_unlisten(&(server->secure_ebb_svr));
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[WR_MSG_SIZE]; /**< Error message */
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**, wr_conf_t*);
61
+ int wr_svr_init(wr_svr_t**);
62
62
  /** Destroy Server */
63
63
  void wr_svr_free(wr_svr_t*);
64
64