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
@@ -20,296 +20,197 @@
20
20
  * Implementation of CONFIGURATOR module
21
21
  *****************************************************************************/
22
22
 
23
- #include <wr_configurator.h>
24
- #include <wr_config.h>
23
+ #include <wr_request.h>
25
24
  #include <sys/stat.h>
26
25
  #include <sys/socket.h>
27
26
  #include <pwd.h>
28
27
 
28
+ extern config_t *Config;
29
+
30
+ #define WR_CONF_MAX_LEN_APP_NAME 30
31
+ #define WR_CONF_MAX_LEN_USR_NAME 30
32
+
29
33
  /*********************************************************
30
34
  * Private function definitions
31
35
  **********************************************************/
32
36
 
33
- static void wr_host_name_free(wr_host_name_t *host) {
34
- LOG_FUNCTION
35
- wr_host_name_t *next;
36
- while(host) {
37
- next = host->next;
38
- wr_string_free(host->name);
39
- free(host);
40
- host = next;
41
- }
42
- }
43
-
44
- /** Destroy application configuration */
45
- void wr_conf_app_free(wr_app_conf_t* app) {
46
- LOG_FUNCTION
47
- wr_app_conf_t* next;
48
-
49
- // Iterate applications and destroy each application
50
- while(app) {
51
- next = app->next;
52
- wr_string_free(app->name);
53
- wr_string_free(app->path);
54
- wr_string_free(app->env);
55
- wr_string_free(app->type);
56
- wr_string_free(app->baseuri);
57
- wr_host_name_free(app->host_name_list);
58
- free(app);
59
- app = next;
60
- }
61
- }
62
-
63
37
  /** Create new application configuration with default values inherited from server configuration */
64
- static inline wr_app_conf_t* wr_app_conf_new(wr_svr_conf_t *server) {
38
+ config_application_list_t* wr_config_application_new(){
65
39
  LOG_FUNCTION
66
- wr_app_conf_t* app = wr_malloc(wr_app_conf_t);
67
- app->log_level = server->log_level;
68
- app->min_worker = server->min_worker;
69
- app->max_worker = server->max_worker;
70
- app->cgid = -1;
71
- app->cuid = -1;
40
+ config_application_list_t* app = wr_malloc(config_application_list_t);
41
+ app->log_level = Config->Server.log_level;
42
+ app->min_worker = Config->Application.Default.min_workers;
43
+ app->max_worker = Config->Application.Default.max_workers;
72
44
  wr_string_null(app->name);
73
- wr_string_null(app->path);
74
45
  wr_string_null(app->baseuri);
75
- wr_string_null(app->env);
76
- wr_string_null(app->type);
77
- app->analytics = FALSE;
46
+ wr_string_null(app->path);
47
+ app->scgi = NULL;
78
48
  app->host_name_list = NULL;
49
+ app->new = NULL;
79
50
  app->next = NULL;
80
51
  return app;
81
52
  }
82
53
 
83
- /** Create new configuration with default values */
84
- static inline wr_conf_t* wr_conf_new() {
54
+ /** Set SCGI Config request */
55
+ int wr_app_conf_req_set(config_application_list_t *app, node_t *app_node){
85
56
  LOG_FUNCTION
86
- wr_conf_t *conf;
57
+ char *str;
58
+
59
+ app->scgi = scgi_new();
87
60
 
88
- conf = wr_malloc(wr_conf_t);
89
- if(conf == NULL) {
90
- return NULL;
61
+ if(!app->scgi) {
62
+ return FALSE;
91
63
  }
92
- conf->server = wr_malloc(wr_svr_conf_t);
93
- if(conf->server == NULL) {
94
- free(conf);
95
- return NULL;
96
- }
97
-
98
- //Setting default values, can be override by specifying into config.yml
99
- //conf->no_of_application = 0;
100
- // Check for POSIX system and set UDS flag
101
- #ifdef AF_UNIX
102
- conf->uds = 1;
103
- #else
104
- conf->uds = 0;
105
- #endif
106
- //conf->uds = WR_CONF_UDS;
107
-
108
- conf->server->port = WR_DEFAULT_SVR_PORT;
109
- conf->server->min_worker = WR_MIN_WKR;
110
- conf->server->max_worker = WR_MAX_WKR;
111
- conf->server->log_level = SEVERE;
112
- conf->server->flag = 0;
113
- conf->server->ctl_port = 0;
114
- wr_string_null(conf->server->sock_path);
115
- #ifdef HAVE_GNUTLS
116
-
117
- wr_string_null(conf->server->certificate);
118
- wr_string_null(conf->server->key);
119
- conf->server->ssl_port = WR_DEFAULT_SSL_PORT;
120
- #endif
121
-
122
- wr_string_null(conf->wr_root_path);
123
- wr_string_null(conf->wkr_exe_path);
124
- wr_string_null(conf->admin_panel_path);
125
- wr_string_null(conf->ruby_lib_path);
126
- wr_string_null(conf->config_file_path);
127
-
128
- conf->apps = NULL;
129
-
130
- return conf;
131
- }
132
-
133
- /** Initialize configuration path variables */
134
- static inline void wr_init_path(wr_conf_t *conf, const char *root_path) {
135
-
136
- LOG_FUNCTION
137
- size_t len;
138
- char str[WR_LONG_LONG_STR_LEN];
139
-
140
- // set WebROaR root fodler path
141
- len = strlen(root_path);
142
- wr_string_new(conf->wr_root_path, root_path, len);
143
-
144
- // Set configuration file path
145
- len = sprintf(str,"%s%sconf%s%s",
146
- root_path, WR_PATH_SEPARATOR,
147
- WR_PATH_SEPARATOR,WR_CONF_FILE);
148
- wr_string_new(conf->config_file_path, str, len);
149
-
150
- // Set the 'webroar-worker' file path
151
- len = sprintf(str,"%s%s%s%s%s",root_path, WR_PATH_SEPARATOR,
152
- WR_BIN_DIR, WR_PATH_SEPARATOR,
153
- WR_WKR_BIN);
154
- wr_string_new(conf->wkr_exe_path, str, len);
155
-
156
- // Set ruby lib folder path
157
- len = sprintf(str,"%s%s%s%s%s",
158
- root_path, WR_PATH_SEPARATOR,
159
- WR_SRC_DIR, WR_PATH_SEPARATOR,
160
- WR_RUBY_LIB_DIR);
161
- wr_string_new(conf->ruby_lib_path, str, len);
162
-
163
- // Set Admin Panel folder path
164
- len = sprintf(str,"%s%s%s%s%s",
165
- root_path, WR_PATH_SEPARATOR,
166
- WR_SRC_DIR, WR_PATH_SEPARATOR,
167
- WR_ADMIN_PANEL_DIR);
168
- wr_string_new(conf->admin_panel_path, str, len);
169
- }
170
-
171
- /** Validate YAML tokens */
172
- static inline char* wr_validate_string(const char* str) {
173
- int count, len, is_blank, is_comment;
174
-
175
- if(str == NULL)
176
- return NULL;
64
+
65
+ scgi_header_add(app->scgi, "COMPONENT", strlen("COMPONENT"), "WORKER", strlen("WORKER"));
66
+ scgi_header_add(app->scgi, "METHOD", strlen("METHOD"), "CONF_REQ", strlen("CONF_REQ"));
67
+ scgi_header_add(app->scgi, "STATUS", strlen("STATUS"), "OK", strlen("OK"));
68
+ scgi_header_add(app->scgi, "NAME", strlen("NAME"), app->name.str, app->name.len);
69
+ scgi_header_add(app->scgi, "PATH", strlen("PATH"), app->path.str, app->path.len);
70
+ if(!wr_string_is_empty(app->baseuri))
71
+ scgi_header_add(app->scgi, "BASE_URI", strlen("BASE_URI"), app->baseuri.str, app->baseuri.len);
72
+
73
+ str = wr_validate_string(get_node_value(app_node->child, "type"));
74
+ scgi_header_add(app->scgi, "TYPE", strlen("TYPE"), str, strlen(str));
75
+
76
+ str = wr_validate_string(get_node_value(app_node->child, "analytics"));
77
+ scgi_header_add(app->scgi, "ANALYTICS", strlen("ANALYTICS"), str, strlen(str));
78
+
79
+ str = wr_validate_string(get_node_value(app_node->child, "run_as_user"));
80
+ scgi_header_add(app->scgi, "USER", strlen("USER"), str, strlen(str));
177
81
 
178
- //Set flags
179
- is_blank = 1;
180
- is_comment = 0;
181
- len = strlen(str);
182
- for(count = 0; count < len ; count++) {
183
- //check for blank value
184
- if(str[count] != ' ') {
185
- is_blank = 0;
186
- }
187
- //check for comment '#' character
188
- if(str[count] == '#') {
189
- is_comment = 1;
190
- break;
82
+ // Set application environment
83
+ str = wr_validate_string(get_node_value(app_node->child, "environment"));
84
+ if(str){
85
+ scgi_header_add(app->scgi, "ENV", strlen("ENV"), str, strlen(str));
86
+ }else{
87
+ scgi_header_add(app->scgi, "ENV", strlen("ENV"), Config->Application.Default.env.str, Config->Application.Default.env.len);
88
+ }
89
+
90
+ node_t *nodes = get_nodes(app_node->child, "environment_variables/set_env");
91
+ wr_str_t val;
92
+ wr_string_null(val);
93
+ while(nodes){
94
+ str = wr_validate_string(NODE_VALUE(nodes));
95
+ if(str){
96
+ if(wr_string_is_empty(val)){
97
+ wr_string_new(val, str, strlen(str));
98
+ }else{
99
+ wr_string_append(val, "#", 1);
100
+ wr_string_append(val, str, strlen(str));
101
+ }
191
102
  }
103
+ nodes = NODE_NEXT(nodes);
192
104
  }
193
- if(is_comment || is_blank) {
194
- LOG_ERROR(SEVERE,"Invalid token.");
195
- return NULL;
105
+ if(!wr_string_is_empty(val)){
106
+ scgi_header_add(app->scgi, "ENV_VAR", strlen("ENV_VAR"), val.str, val.len);
196
107
  }
197
- return (char*)str;
108
+ wr_string_free(val);
109
+ scgi_build(app->scgi);
110
+
111
+ return TRUE;
198
112
  }
199
113
 
200
114
  /** Set Server Configuration */
201
- static inline int wr_conf_server_set(wr_conf_t * conf, node_t *root) {
115
+ int wr_config_server_set(node_t *root) {
202
116
  LOG_FUNCTION
203
- wr_svr_conf_t *server = conf->server;
204
117
  char *str;
205
118
 
206
119
  // Set server listening port
207
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_PORT));
208
- if(str)
209
- server->port = atoi(str);
210
-
211
- if(server->port < 0 || server->port > 65536) {
120
+ wr_set_numeric_value(root, "Server Specification/port", &Config->Server.port, FALSE);
121
+
122
+ if(Config->Server.port < 0 || Config->Server.port > 65536) {
212
123
  LOG_ERROR(SEVERE,"Valid port should be a number between 1 and 65536. Server can not start.");
213
124
  printf("Valid port should be a number between 1 and 65536. Server can not start.\n");
214
125
  return -1;
215
126
  }
216
127
 
217
128
  // Set min_worker
218
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_MIN_WKR));
219
- if(str) {
220
- server->min_worker = atoi(str);
221
- if(server->min_worker > WR_ALLOWED_MAX_WORKERS) {
222
- LOG_ERROR(SEVERE, "Server Specification: Minimum workers should be a number between 1 and %d. Server can not start.", WR_ALLOWED_MAX_WORKERS);
223
- printf("Server Specification: Minimum workers should be a number between 1 and %d. Server can not start.\n", WR_ALLOWED_MAX_WORKERS);
224
- return -1;
225
- }
129
+ wr_set_numeric_value(root, "Server Specification/min_worker", &Config->Application.Default.min_workers, FALSE);
130
+ if(Config->Application.Default.min_workers > Config->Server.Worker.max) {
131
+ LOG_ERROR(SEVERE, "Server Specification: Minimum workers should be a number between 1 and %d. Server can not start.", Config->Server.Worker.max);
132
+ printf("Server Specification: Minimum workers should be a number between 1 and %d. Server can not start.\n", Config->Server.Worker.max);
133
+ return -1;
226
134
  }
227
135
 
136
+
228
137
  // Set max_worker
229
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_MAX_WKR));
230
- if(str) {
231
- server->max_worker = atoi(str);
232
- if(server->max_worker > WR_ALLOWED_MAX_WORKERS) {
233
- LOG_ERROR(SEVERE, "Server Specification: Maximum workers should be a number between 1 and %d. Server can not start.", WR_ALLOWED_MAX_WORKERS);
234
- printf("Server Specification: Maximum workers should be a number between 1 and %d. Server can not start.\n", WR_ALLOWED_MAX_WORKERS);
235
- return -1;
236
- }
138
+ wr_set_numeric_value(root, "Server Specification/max_worker", &Config->Application.Default.max_workers, FALSE);
139
+ if(Config->Application.Default.max_workers > Config->Server.Worker.max) {
140
+ LOG_ERROR(SEVERE, "Server Specification: Maximum workers should be a number between 1 and %d. Server can not start.", Config->Server.Worker.max);
141
+ printf("Server Specification: Maximum workers should be a number between 1 and %d. Server can not start.\n", Config->Server.Worker.max);
142
+ return -1;
237
143
  }
238
144
 
239
- if(server->min_worker > server->max_worker) {
145
+ if(Config->Application.Default.min_workers > Config->Application.Default.max_workers) {
240
146
  LOG_ERROR(SEVERE,"Server Specification: Min worker value is greater than Max worker value. Server can not start.");
241
147
  printf("Server Specification: Min worker value is greater than Max worker value. Server can not start.\n");
242
148
  return -1;
243
149
  }
244
150
 
245
151
  // Set logging level
246
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_LOG_LEVEL));
152
+ str = wr_validate_string(get_node_value(root, "Server Specification/log_level"));
247
153
  if(str)
248
- server->log_level = get_log_severity(str);
249
-
154
+ Config->Server.log_level = get_log_severity(str);
155
+
250
156
  // Set access log flag
251
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_ACCESS_LOG));
157
+ str = wr_validate_string(get_node_value(root, "Server Specification/access_log"));
252
158
 
253
159
  if(str && strcmp(str,"enabled")==0 ) {
254
- server->flag |= WR_SVR_ACCESS_LOG;
160
+ Config->Server.flag |= SERVER_ACCESS_LOG;
255
161
  }
256
162
 
257
163
  //check ssl support
258
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_SSL_SUPPORT));
164
+ str = wr_validate_string(get_node_value(root, "Server Specification/SSL Specification/ssl_support"));
259
165
  if(str && strcmp(str,"enabled")==0 ) {
260
- server->flag |= WR_SVR_SSL_SUPPORT;
166
+ Config->Server.flag |= SERVER_SSL_SUPPORT;
261
167
  }
262
168
 
263
169
  #ifdef HAVE_GNUTLS
264
170
 
265
- if(server->flag&WR_SVR_SSL_SUPPORT) {
171
+ if(Config->Server.flag & SERVER_SSL_SUPPORT) {
266
172
  size_t len;
267
173
  struct stat buff;
268
174
  // Set certificate path
269
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_SSL_CERTIFICATE));
175
+ str = wr_validate_string(get_node_value(root, "Server Specification/SSL Specification/certificate_file"));
270
176
  if(str) {
271
177
  if(stat(str,&buff)!=0) {
272
178
  LOG_ERROR(SEVERE,"SSL certificate file path(%s) invalid. Server can not run on SSL.",str);
273
179
  printf("SSL certificate file path(%s) invalid. Server can not run on SSL.\n",str);
274
- server->flag &= (!WR_SVR_SSL_SUPPORT);
180
+ Config->Server.flag &= (!SERVER_SSL_SUPPORT);
275
181
  } else {
276
182
  len = strlen(str);
277
- wr_string_new(server->certificate, str, len);
183
+ wr_string_new(Config->Server.SSL.certificate, str, len);
278
184
  }
279
185
  } else {
280
186
  LOG_ERROR(SEVERE,"Certificate file path is missing. Server can not run on SSL.");
281
187
  printf("Certificate file path is missing. Server can not run on SSL.\n");
282
- server->flag &= (!WR_SVR_SSL_SUPPORT);
188
+ Config->Server.flag &= (!SERVER_SSL_SUPPORT);
283
189
  }
284
190
 
285
191
  // Set certificate path
286
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_SSL_KEY));
192
+ str = wr_validate_string(get_node_value(root, "Server Specification/SSL Specification/key_file"));
287
193
  if(str) {
288
194
  if(stat(str,&buff)!=0) {
289
195
  LOG_ERROR(SEVERE,"SSL key file path(%s) invalid. Server can not run on SSL.",str);
290
196
  printf("SSL key file path(%s) invalid. Server can not run on SSL.\n",str);
291
- server->flag &= (!WR_SVR_SSL_SUPPORT);
197
+ Config->Server.flag &= (!SERVER_SSL_SUPPORT);
292
198
  } else {
293
199
  len = strlen(str);
294
- wr_string_new(server->key, str, len);
200
+ wr_string_new(Config->Server.SSL.key, str, len);
295
201
  }
296
202
  } else {
297
203
  LOG_ERROR(SEVERE,"SSL key file path is missing. Server can not run on SSL.");
298
204
  printf("SSL key file path is missing. Server can not run on SSL.\n");
299
- server->flag &= (!WR_SVR_SSL_SUPPORT);
205
+ Config->Server.flag &= (!SERVER_SSL_SUPPORT);
300
206
  }
301
207
 
302
208
  // Set server listening port
303
- str = wr_validate_string(get_node_value(root, WR_CONF_SVR_SSL_PORT));
304
- if(str) {
305
- server->ssl_port = atoi(str);
306
- if(server->ssl_port < 0 || server->ssl_port > 65536) {
307
- LOG_ERROR(SEVERE,"Given SSL port is invalid. Valid port should be a number between 1 and 65536. Server can not run on SSL.");
308
- printf("Given SSL port is invalid. Valid port should be a number between 1 and 65536. Server can not run on SSL.\n");
309
- server->flag &= (!WR_SVR_SSL_SUPPORT);
310
- }
311
- } else {
312
- server->ssl_port = WR_DEFAULT_SSL_PORT;
209
+ wr_set_numeric_value(root, "Server Specification/SSL Specification/ssl_port", &Config->Server.SSL.port, FALSE);
210
+ if(Config->Server.SSL.port < 0 || Config->Server.SSL.port > 65536) {
211
+ LOG_ERROR(SEVERE,"Given SSL port is invalid. Valid port should be a number between 1 and 65536. Server can not run on SSL.");
212
+ printf("Given SSL port is invalid. Valid port should be a number between 1 and 65536. Server can not run on SSL.\n");
213
+ Config->Server.flag &= (!SERVER_SSL_SUPPORT);
313
214
  }
314
215
  }
315
216
 
@@ -318,7 +219,7 @@ static inline int wr_conf_server_set(wr_conf_t * conf, node_t *root) {
318
219
  return 0;
319
220
  }
320
221
 
321
- static int wr_validate_app_host_name(const char *host_name, char *err_msg) {
222
+ int wr_validate_app_host_name(const char *host_name, char *err_msg) {
322
223
  LOG_FUNCTION
323
224
  int down_level = 1, label_len, i;
324
225
  char *label = NULL;
@@ -393,10 +294,10 @@ err_ret:
393
294
  return -1;
394
295
  }
395
296
 
396
- static int wr_app_host_name_set(wr_app_conf_t *app, char *host_names, char *err_msg) {
297
+ int wr_app_host_name_set(config_application_list_t *app, char *host_names, char *err_msg) {
397
298
  LOG_FUNCTION
398
- char *host = NULL, *host_array[WR_MAX_HOST_NAMES];
399
- wr_host_name_t *hosts = NULL, *tmp_host = NULL;
299
+ char *host = NULL, *host_array[Config->Application.max_hosts];
300
+ config_host_list_t *hosts = NULL, *tmp_host = NULL;
400
301
  int rv, counter = 0, no_of_hosts = 0;
401
302
  size_t len;
402
303
 
@@ -407,7 +308,7 @@ static int wr_app_host_name_set(wr_app_conf_t *app, char *host_names, char *err_
407
308
  /* Tokenizing all the hostnames here, as in wr_validate_app_host_name() individual hostname is again tokenizing for further validations.
408
309
  * Call to second strtok for tokenizing of new string, before completion of its first call, messing up with the original string of first call. */
409
310
  host = strtok(host_names, " ");
410
- while(host && counter < WR_MAX_HOST_NAMES) {
311
+ while(host && counter < Config->Application.max_hosts) {
411
312
  host_array[counter++] = host;
412
313
  host = strtok(NULL, " ");
413
314
  }
@@ -426,28 +327,28 @@ static int wr_app_host_name_set(wr_app_conf_t *app, char *host_names, char *err_
426
327
  return -1;
427
328
 
428
329
  len = strlen(host);
429
- tmp_host = wr_malloc(wr_host_name_t);
330
+ tmp_host = wr_malloc(config_host_list_t);
430
331
  if(tmp_host == NULL)
431
332
  return -1;
432
333
 
433
334
  tmp_host->next = NULL;
434
- tmp_host->type = WR_HOST_TPE_INVALID;
335
+ tmp_host->type = HOST_TPE_INVALID;
435
336
  //storing plain name, removing any '*', and '~'
436
337
  if(host[1] == '*') {
437
338
  if(host[len-1] == '*') {
438
- tmp_host->type = WR_HOST_TYPE_WILDCARD_IN_START_END;
339
+ tmp_host->type = HOST_TYPE_WILDCARD_IN_START_END;
439
340
  wr_string_new(tmp_host->name, host+2, len-3);
440
341
  } else {
441
- tmp_host->type = WR_HOST_TYPE_WILDCARD_IN_START;
342
+ tmp_host->type = HOST_TYPE_WILDCARD_IN_START;
442
343
  wr_string_new(tmp_host->name, host+2, len-2);
443
344
  }
444
345
  LOG_DEBUG(DEBUG, "Host name = %s", tmp_host->name.str);
445
346
  } else if(host[len-1] == '*') {
446
- tmp_host->type = WR_HOST_TYPE_WILDCARD_IN_END;
347
+ tmp_host->type = HOST_TYPE_WILDCARD_IN_END;
447
348
  wr_string_new(tmp_host->name, host+1, len-2);
448
349
  LOG_DEBUG(DEBUG, "Host name = %s", tmp_host->name.str);
449
350
  } else {
450
- tmp_host->type = WR_HOST_TYPE_STATIC;
351
+ tmp_host->type = HOST_TYPE_STATIC;
451
352
  if(host[0] == '~') {
452
353
  wr_string_new(tmp_host->name, host+1, len-1);
453
354
  } else {
@@ -467,23 +368,23 @@ static int wr_app_host_name_set(wr_app_conf_t *app, char *host_names, char *err_
467
368
  }
468
369
 
469
370
  /** Create and fill application configuration */
470
- static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node, char* err_msg) {
371
+ config_application_list_t* wr_config_application_set(node_t* app_node, char* err_msg) {
471
372
  LOG_FUNCTION
472
- wr_app_conf_t *app = NULL;
373
+ config_application_list_t *app = NULL;
473
374
  struct stat buff;
474
375
  char *str, *app_name;
475
376
  short free_app_obj = 0;
476
377
  size_t len;
477
378
 
478
379
  // Create application configuration with default values
479
- app = wr_app_conf_new(conf->server);
380
+ app = wr_config_application_new();
480
381
 
481
382
  if(!app) {
482
383
  return NULL;
483
384
  }
484
-
385
+
485
386
  //Set application name
486
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_NAME));
387
+ str = wr_validate_string(get_node_value(app_node->child, "name"));
487
388
  len = strlen(str);
488
389
  if(str && len > 0 && len < WR_CONF_MAX_LEN_APP_NAME) {
489
390
  wr_string_new(app->name, str, len);
@@ -494,19 +395,19 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
494
395
  printf("Application name is too long. Maximum is %d characters\n", WR_CONF_MAX_LEN_APP_NAME);
495
396
  if(err_msg)
496
397
  sprintf(err_msg,"\n Application name is too long. Maximum is %d characters", WR_CONF_MAX_LEN_APP_NAME);
497
- wr_conf_app_free(app);
398
+ wr_application_list_free(app);
498
399
  return NULL;
499
400
  } else {
500
401
  LOG_ERROR(SEVERE,"Application name is missing");
501
402
  printf("Application name is missing.\n");
502
403
  if(err_msg)
503
404
  sprintf(err_msg+strlen(err_msg),"\nApplication name is missing.");
504
- wr_conf_app_free(app);
405
+ wr_application_list_free(app);
505
406
  return NULL;
506
407
  }
507
408
 
508
409
  // Set application path
509
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_PATH));
410
+ str = wr_validate_string(get_node_value(app_node->child, "path"));
510
411
  if(str && strlen(str) > 0) {
511
412
  //Check existence of application path
512
413
  if(stat(str,&buff)!=0) {
@@ -519,7 +420,7 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
519
420
  }
520
421
  len = strlen(str);
521
422
  wr_string_new(app->path, str, len);
522
- LOG_DEBUG(DEBUG, "Application Path = %s", app->path.str);
423
+ LOG_DEBUG(DEBUG, "Application Path = %s", str);
523
424
  } else {
524
425
  LOG_ERROR(SEVERE,"Application path for %s is missing. Application not started.", app_name);
525
426
  printf("Application path for %s is missing. Application not started\n", app_name);
@@ -530,11 +431,9 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
530
431
  }
531
432
 
532
433
  // Set application type
533
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_TYPE));
434
+ str = wr_validate_string(get_node_value(app_node->child, "type"));
534
435
  if(str && strlen(str) > 0) {
535
- len = strlen(str);
536
- wr_string_new(app->type, str, len);
537
- LOG_DEBUG(DEBUG, "Application Type = %s", app->type.str);
436
+ LOG_DEBUG(DEBUG, "Application Type = %s", str);
538
437
  } else {
539
438
  LOG_ERROR(SEVERE,"Application type for %s is missing", app_name);
540
439
  printf("Application type for %s is missing\n", app_name);
@@ -545,12 +444,10 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
545
444
  }
546
445
 
547
446
  // Set application analytics
548
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_ANALYTICS));
447
+ str = wr_validate_string(get_node_value(app_node->child, "analytics"));
549
448
  if(str && strlen(str) > 0) {
449
+ len = strlen(str);
550
450
  LOG_DEBUG(DEBUG,"App analytics = %s", str);
551
- if(strcmp(str,WR_ANALYTICS_ON)==0) {
552
- app->analytics = TRUE;
553
- }
554
451
  } else {
555
452
  LOG_ERROR(SEVERE,"Application analytics for %s is missing. Application not started.",app_name);
556
453
  printf("Application analytics for %s is missing. Application not started.\n",app_name);
@@ -561,7 +458,7 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
561
458
  }
562
459
 
563
460
  // Set application base uri
564
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_BASE_URI));
461
+ str = wr_validate_string(get_node_value(app_node->child, "baseuri"));
565
462
  if(str && strlen(str) > 0) {
566
463
  len = strlen(str);
567
464
  wr_string_new(app->baseuri, str, len);
@@ -569,21 +466,19 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
569
466
  }
570
467
 
571
468
  // Set Host names (used for multiple host deployment and application identifiaction)
572
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_HOST_NAMES));
469
+ str = wr_validate_string(get_node_value(app_node->child, "host_names"));
573
470
  if(str && strlen(str) > 0) {
574
471
  wr_app_host_name_set(app, str, err_msg);
575
472
  }
576
473
 
577
474
  // Set application user & group id
578
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_USER));
475
+ str = wr_validate_string(get_node_value(app_node->child, "run_as_user"));
579
476
  if(str && strlen(str) > 0) {
477
+ len = strlen(str);
580
478
  struct passwd *user_info=NULL;
581
479
  user_info = getpwnam(str);
582
480
  // Check for user existence
583
- if(user_info) {
584
- app->cuid = user_info->pw_uid;
585
- app->cgid = user_info->pw_gid;
586
- } else {
481
+ if(!user_info) {
587
482
  LOG_ERROR(SEVERE,"Application run_as_user for %s is invalid. Application not started.",app_name);
588
483
  printf("Application run_as_user for %s is invalid. Application not started.\n",app_name);
589
484
  if(err_msg)
@@ -617,44 +512,33 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
617
512
  }
618
513
 
619
514
  // Set application environment
620
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_ENV));
515
+ str = wr_validate_string(get_node_value(app_node->child, "environment"));
621
516
  if(str && strlen(str) > 0) {
622
- len = strlen(str);
623
- wr_string_new(app->env, str, len);
624
- LOG_DEBUG(DEBUG, "Application environment = %s", app->env.str);
625
- } else {
626
- len = strlen(WR_DEFAULT_ENV);
627
- wr_string_new(app->env, WR_DEFAULT_ENV, len);
517
+ LOG_DEBUG(DEBUG, "Application environment = %s", str);
628
518
  }
629
519
 
630
520
  // Set min_worker
631
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_MIN_WKR));
632
- if(str && strlen(str) > 0) {
633
- app->min_worker = atoi(str);
634
- if(app->min_worker > WR_ALLOWED_MAX_WORKERS) {
635
- LOG_ERROR(SEVERE, "Application(%s)-Minimum workers should be a number between 1 and %d. Application not started.", app_name, WR_ALLOWED_MAX_WORKERS);
636
- printf("Application(%s)-Minimum workers should be a number between 1 and %d. Application not started.\n", app_name, WR_ALLOWED_MAX_WORKERS);
637
- if(err_msg)
638
- sprintf(err_msg + strlen(err_msg), "Application(%s)-Minimum workers should be a number between 1 and %d. Application not started.", app_name, WR_ALLOWED_MAX_WORKERS);
639
- free_app_obj = 1;
640
- }
521
+ wr_set_numeric_value(app_node->child, "min_worker", &app->min_worker, FALSE);
522
+ if(app->min_worker > Config->Server.Worker.max) {
523
+ LOG_ERROR(SEVERE, "Application(%s)-Minimum workers should be a number between 1 and %d. Application not started.", app_name, Config->Server.Worker.max);
524
+ printf("Application(%s)-Minimum workers should be a number between 1 and %d. Application not started.\n", app_name, Config->Server.Worker.max);
525
+ if(err_msg)
526
+ sprintf(err_msg + strlen(err_msg), "Application(%s)-Minimum workers should be a number between 1 and %d. Application not started.", app_name, Config->Server.Worker.max);
527
+ free_app_obj = 1;
641
528
  }
642
-
529
+
643
530
  // Set max_worker
644
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_MAX_WKR));
645
- if(str && strlen(str) > 0) {
646
- app->max_worker = atoi(str);
647
- if(app->max_worker > WR_ALLOWED_MAX_WORKERS) {
648
- LOG_ERROR(SEVERE, "Application(%s)-Maximum workers should be a number between 1 and %d. Application not started.", app_name, WR_ALLOWED_MAX_WORKERS);
649
- printf("Application(%s)-Maximum workers should be a number between 1 and %d. Application not started.\n", app_name, WR_ALLOWED_MAX_WORKERS);
650
- if(err_msg)
651
- sprintf(err_msg + strlen(err_msg), "Application(%s)-Maximum workers should be a number between 1 and %d. Application not started.", app_name, WR_ALLOWED_MAX_WORKERS);
652
- free_app_obj = 1;
653
- }
531
+ wr_set_numeric_value(app_node->child, "max_worker", &app->max_worker, FALSE);
532
+ if(app->max_worker > Config->Server.Worker.max) {
533
+ LOG_ERROR(SEVERE, "Application(%s)-Maximum workers should be a number between 1 and %d. Application not started.", app_name, Config->Server.Worker.max);
534
+ printf("Application(%s)-Maximum workers should be a number between 1 and %d. Application not started.\n", app_name, Config->Server.Worker.max);
535
+ if(err_msg)
536
+ sprintf(err_msg + strlen(err_msg), "Application(%s)-Maximum workers should be a number between 1 and %d. Application not started.", app_name, Config->Server.Worker.max);
537
+ free_app_obj = 1;
654
538
  }
655
-
539
+
656
540
  if(free_app_obj & 1) {
657
- wr_conf_app_free(app);
541
+ wr_application_list_free(app);
658
542
  return NULL;
659
543
  }
660
544
 
@@ -664,39 +548,47 @@ static inline wr_app_conf_t* wr_app_conf_set (wr_conf_t* conf, node_t* app_node,
664
548
  printf("Application(%s) no. of min workers(%d) should not be greater than no. of max workers(%d). Application not started.\n",app_name, app->min_worker, app->max_worker);
665
549
  if(err_msg)
666
550
  sprintf(err_msg+strlen(err_msg),"\nApplication(%s) no. of min workers(%d) should not be greater than no. of max workers(%d). Application not started.",app_name, app->min_worker, app->max_worker);
667
- wr_conf_app_free(app);
551
+ wr_application_list_free(app);
668
552
  return NULL;
669
553
  }
670
554
 
671
555
  // Set logging level
672
- str = wr_validate_string(get_node_value(app_node->child, WR_CONF_APP_LOG_LEVEL));
673
- if(str && strlen(str) > 0)
556
+ str = wr_validate_string(get_node_value(app_node->child, "log_level"));
557
+ if(str && strlen(str) > 0){
674
558
  app->log_level = get_log_severity(str);
559
+ }
560
+
561
+ if(wr_app_conf_req_set(app, app_node) == FALSE){
562
+ wr_application_list_free(app);
563
+ return NULL;
564
+ }
565
+
675
566
  return app;
676
567
  }
677
568
 
678
569
  /** Iterate application nodes and construct application configuration structure */
679
- static inline int wr_iterate_app_node(wr_conf_t *conf, node_t *root) {
680
- wr_app_conf_t *app, *prev_app;
570
+ int wr_iterate_app_node(node_t *root) {
571
+ LOG_FUNCTION
572
+ config_application_list_t *app, *prev_app;
681
573
  node_t* app_nodes;
682
574
 
683
575
  LOG_DEBUG(DEBUG,"iterate_application_node()");
684
576
  //Fetch Application Specification nodes
685
- app_nodes = get_nodes(root, WR_CONF_APP_SPEC);
577
+ app_nodes = get_nodes(root, "Application Specification");
686
578
 
687
579
  // Iterate application nodes
688
580
  while(app_nodes) {
689
581
  if(app_nodes->child) {
690
582
  // Create & fill application configuration structure
691
- app = wr_app_conf_set(conf, app_nodes, NULL);
583
+ app = wr_config_application_set(app_nodes, NULL);
692
584
 
693
585
  if(app) {
694
586
  //return -1;
695
587
  // Set application configuration to configuration structure
696
- if(conf->apps) {
588
+ if(Config->Application.list) {
697
589
  prev_app->next = app;
698
590
  } else {
699
- conf->apps = app;
591
+ Config->Application.list = app;
700
592
  }
701
593
  prev_app = app;
702
594
  }
@@ -707,9 +599,9 @@ static inline int wr_iterate_app_node(wr_conf_t *conf, node_t *root) {
707
599
  }
708
600
 
709
601
  /** Validate application baseuri for duplication. Also removes every such application object. */
710
- static inline int wr_remove_app_with_dup_baseuri(wr_conf_t *conf) {
602
+ int wr_remove_app_with_dup_baseuri() {
711
603
  LOG_FUNCTION
712
- wr_app_conf_t *app=conf->apps, *next,*tmp_app;
604
+ config_application_list_t *app = Config->Application.list, *next,*tmp_app;
713
605
  int rv = 0;
714
606
 
715
607
  if(app == NULL) {
@@ -724,11 +616,11 @@ static inline int wr_remove_app_with_dup_baseuri(wr_conf_t *conf) {
724
616
  if(app->baseuri.str) {
725
617
  LOG_DEBUG(DEBUG, "Comparing baseuit %s ",app->baseuri.str) ;
726
618
  // Compare each application baseuri with admin-panel baseuri
727
- if(strcmp(app->baseuri.str, WR_ADMIN_PANEL_BASE_URL)==0) {
728
- LOG_ERROR(SEVERE,"'%s' base-uri is reserved for 'Admin Panel'. Application %s not started", WR_ADMIN_PANEL_BASE_URL,app->name.str);
729
- printf("'%s' base-uri is reserved for 'Admin Panel'. Application %s not started\n", WR_ADMIN_PANEL_BASE_URL,app->name.str);
619
+ if(strcmp(app->baseuri.str, Config->Application.Admin_panel.base_uri.str)==0) {
620
+ LOG_ERROR(SEVERE,"'%s' base-uri is reserved for 'Admin Panel'. Application %s not started", Config->Application.Admin_panel.base_uri.str,app->name.str);
621
+ printf("'%s' base-uri is reserved for 'Admin Panel'. Application %s not started\n", Config->Application.Admin_panel.base_uri.str,app->name.str);
730
622
  rv = -1;
731
- wr_app_conf_remove(conf, app->name.str);
623
+ wr_app_conf_remove(app->name.str);
732
624
  } else {
733
625
  tmp_app = next;
734
626
  while(tmp_app) {
@@ -736,7 +628,7 @@ static inline int wr_remove_app_with_dup_baseuri(wr_conf_t *conf) {
736
628
  LOG_ERROR(SEVERE,"Base-uri '%s' is repeated for more than one application.", app->baseuri.str);
737
629
  printf("Base-uri '%s' is repeated for more than one application.\n",app->baseuri.str);
738
630
  rv = -1;
739
- wr_app_conf_remove(conf, tmp_app->name.str);
631
+ wr_app_conf_remove(tmp_app->name.str);
740
632
  tmp_app = next = app->next;
741
633
  } else {
742
634
  tmp_app = tmp_app->next;
@@ -750,10 +642,10 @@ static inline int wr_remove_app_with_dup_baseuri(wr_conf_t *conf) {
750
642
  return rv;
751
643
  }
752
644
 
753
- static inline int wr_chk_host_within_list(wr_host_name_t *list) {
645
+ int wr_chk_host_within_list(config_host_list_t *list) {
754
646
  LOG_FUNCTION
755
647
 
756
- wr_host_name_t *tmp=NULL;
648
+ config_host_list_t *tmp=NULL;
757
649
 
758
650
  while(list) {
759
651
  tmp = list->next;
@@ -768,7 +660,7 @@ static inline int wr_chk_host_within_list(wr_host_name_t *list) {
768
660
  return 0;
769
661
  }
770
662
 
771
- static inline int wr_chk_host_lists(wr_host_name_t *list1, wr_host_name_t *list2) {
663
+ int wr_chk_host_lists(config_host_list_t *list1, config_host_list_t *list2) {
772
664
  LOG_FUNCTION
773
665
 
774
666
  while(list1) {
@@ -784,9 +676,9 @@ static inline int wr_chk_host_lists(wr_host_name_t *list1, wr_host_name_t *list2
784
676
  }
785
677
 
786
678
  /** Removes Application object on repeated host_name. */
787
- static inline int wr_remove_app_with_dup_host(wr_conf_t *conf) {
679
+ int wr_remove_app_with_dup_host() {
788
680
  LOG_FUNCTION
789
- wr_app_conf_t *app=conf->apps, *tmp_app = NULL;
681
+ config_application_list_t *app = Config->Application.list, *tmp_app = NULL;
790
682
  short rv = 0;
791
683
 
792
684
  if(app == NULL) {
@@ -802,7 +694,7 @@ static inline int wr_remove_app_with_dup_host(wr_conf_t *conf) {
802
694
  if(wr_chk_host_within_list(app->host_name_list)!=0) {
803
695
  LOG_ERROR(WARN,"Host names are repeated in Application '%s'. Application would not start.", app->name.str);
804
696
  printf("Host names are repeated in Application '%s'. Application would not start.\n", app->name.str);
805
- wr_app_conf_remove(conf, app->name.str);
697
+ wr_app_conf_remove(app->name.str);
806
698
  app = tmp_app;
807
699
  rv = -1;
808
700
  continue;
@@ -813,8 +705,8 @@ static inline int wr_remove_app_with_dup_host(wr_conf_t *conf) {
813
705
  if(wr_chk_host_lists(app->host_name_list, tmp_app->host_name_list) !=0) {
814
706
  LOG_ERROR(WARN,"Host names are repeated in '%s' and '%s'. Applications would not start.", app->name.str, tmp_app->name.str);
815
707
  printf("Host names are repeated in '%s' and '%s'. Applications would not start.\n", app->name.str, tmp_app->name.str);
816
- wr_app_conf_remove(conf, app->name.str);
817
- wr_app_conf_remove(conf, tmp_app->name.str);
708
+ wr_app_conf_remove(app->name.str);
709
+ wr_app_conf_remove(tmp_app->name.str);
818
710
  rv = -1;
819
711
  break;
820
712
  }
@@ -822,7 +714,7 @@ static inline int wr_remove_app_with_dup_host(wr_conf_t *conf) {
822
714
  tmp_app = tmp_app->next;
823
715
  }
824
716
  if(tmp_app) {
825
- app = conf->apps;
717
+ app = Config->Application.list;
826
718
  continue;
827
719
  }
828
720
  }
@@ -832,47 +724,51 @@ static inline int wr_remove_app_with_dup_host(wr_conf_t *conf) {
832
724
  }
833
725
 
834
726
  /** Read Admin Panel */
835
- static inline wr_app_conf_t* wr_conf_admin_panel_read(wr_conf_t* conf) {
727
+ config_application_list_t* wr_conf_admin_panel_read() {
836
728
  LOG_FUNCTION
837
- struct passwd *user_info=NULL;
838
- size_t len;
839
-
840
- user_info = getpwnam("root");
729
+ struct passwd *user_info = getpwnam("root");;
730
+
841
731
  // Check for user privilege
842
732
  if(user_info) {
843
733
  if(geteuid() == user_info->pw_uid && getegid() == user_info->pw_gid) {
844
- wr_app_conf_t* app = wr_app_conf_new(conf->server);
734
+ config_application_list_t* app = wr_config_application_new();
845
735
 
846
736
  if(app ==NULL) {
847
737
  return NULL;
848
738
  }
739
+
740
+ app->scgi = scgi_new();
741
+ scgi_header_add(app->scgi, "COMPONENT", strlen("COMPONENT"), "WORKER", strlen("WORKER"));
742
+ scgi_header_add(app->scgi, "METHOD", strlen("METHOD"), "CONF_REQ", strlen("CONF_REQ"));
743
+ scgi_header_add(app->scgi, "STATUS", strlen("STATUS"), "OK", strlen("OK"));
744
+
849
745
 
850
746
  // Set Admin base uri to 'admin-panel'
851
- len = strlen(WR_ADMIN_PANEL_BASE_URL);
852
- wr_string_new(app->baseuri,WR_ADMIN_PANEL_BASE_URL,len);
853
-
854
- //Set user & group id
855
- app->cgid = user_info->pw_gid;
856
- app->cuid = user_info->pw_uid;
857
-
747
+ wr_string_dump(app->baseuri, Config->Application.Admin_panel.base_uri);
748
+ scgi_header_add(app->scgi, "BASE_URI", strlen("BASE_URI"), app->baseuri.str, app->baseuri.len);
749
+
750
+ scgi_header_add(app->scgi, "USER", strlen("USER"), "root", strlen("root"));
751
+
858
752
  // Set application environment to production
859
- len = strlen("production");
860
- wr_string_new(app->env,"production",len);
753
+ scgi_header_add(app->scgi, "ENV", strlen("ENV"), "production",strlen("production"));
861
754
 
862
755
  //Set max_worker & min_processsor to 1
863
756
  app->max_worker = 1;
864
757
  app->min_worker = 1;
865
758
 
866
759
  // Set application name
867
- len = strlen(WR_ADMIN_PANEL_APP_NAME);
868
- wr_string_new(app->name,WR_ADMIN_PANEL_APP_NAME,len);
869
-
760
+ wr_string_dump(app->name, Config->Application.Admin_panel.name);
761
+ scgi_header_add(app->scgi, "NAME", strlen("NAME"), app->name.str, app->name.len);
762
+
870
763
  // Set Admin Panel path
871
- wr_string_dump(app->path,conf->admin_panel_path);
764
+ wr_string_dump(app->path, Config->Server.Dir.admin_panel);
765
+ scgi_header_add(app->scgi, "PATH", strlen("PATH"), Config->Server.Dir.admin_panel.str, Config->Server.Dir.admin_panel.len);
872
766
 
873
767
  // Set application type to rails
874
- len = strlen("rails");
875
- wr_string_new(app->type,"rails",len);
768
+ scgi_header_add(app->scgi, "TYPE", strlen("TYPE"), "rails", strlen("rails"));
769
+
770
+ scgi_header_add(app->scgi, "ANALYTICS", strlen("ANALYTICS"), "disabled", strlen("disabled"));
771
+ scgi_build(app->scgi);
876
772
  return app;
877
773
  }
878
774
  }
@@ -880,171 +776,253 @@ static inline wr_app_conf_t* wr_conf_admin_panel_read(wr_conf_t* conf) {
880
776
  }
881
777
 
882
778
  /** Create application configuration for static content server */
883
- static inline wr_app_conf_t* wr_conf_static_server_read(wr_conf_t* conf) {
779
+ config_application_list_t* wr_conf_static_server_read() {
884
780
  LOG_FUNCTION
885
781
  struct passwd *user_info=NULL;
886
- size_t len;
887
782
 
888
783
  user_info = getpwnam("root");
889
784
  // Check for user privilege
890
785
  if(user_info) {
891
786
  if(geteuid() == user_info->pw_uid && getegid() == user_info->pw_gid) {
892
- wr_app_conf_t* app = wr_app_conf_new(conf->server);
787
+ config_application_list_t* app = wr_config_application_new();
788
+ node_t *root;
789
+ const char *value;
893
790
 
894
791
  if(app == NULL) {
895
792
  return NULL;
896
793
  }
897
794
 
898
795
  // Set application name
899
- len = strlen(WR_STATIC_FILE_SERVER_NAME);
900
- wr_string_new(app->name,WR_STATIC_FILE_SERVER_NAME,len);
796
+ wr_string_dump(app->name, Config->Application.Static_server.name);
901
797
 
902
798
  //Set user & group id
903
- app->cgid = user_info->pw_gid;
904
- app->cuid = user_info->pw_uid;
905
799
 
906
800
  // Set all other parameter to app name
907
- wr_string_dump(app->env,app->name);
908
801
  wr_string_dump(app->baseuri,app->name);
909
802
  wr_string_dump(app->path,app->name);
910
- wr_string_dump(app->type,app->name);
803
+
804
+ app->scgi = scgi_new();
805
+ scgi_header_add(app->scgi, "COMPONENT", strlen("COMPONENT"), "WORKER", strlen("WORKER"));
806
+ scgi_header_add(app->scgi, "METHOD", strlen("METHOD"), "CONF_REQ", strlen("CONF_REQ"));
807
+ scgi_header_add(app->scgi, "STATUS", strlen("STATUS"), "OK", strlen("OK"));
808
+
809
+ root = yaml_parse(Config->Server.File.config.str);
810
+
811
+ if(!root) {
812
+ LOG_ERROR(SEVERE, "Config file found with erroneous entries. Please correct it.");
813
+ }else{
814
+ value = get_node_value(root,"Encoding/Content-Type");
815
+ if(value){
816
+ scgi_header_add(app->scgi, "CONTENT_TYPE", strlen("CONTENT_TYPE"), value, strlen(value));
817
+ }
818
+
819
+ value = get_node_value(root,"Encoding/User-Agent");
820
+ if(value){
821
+ scgi_header_add(app->scgi, "USER_AGENT", strlen("USER_AGENT"), value, strlen(value));
822
+ }
823
+
824
+ value = get_node_value(root,"Encoding/Size Limit/lower_limit");
825
+ if(value){
826
+ scgi_header_add(app->scgi, "LOWER_LIMIT", strlen("LOWER_LIMIT"), value, strlen(value));
827
+ }
828
+
829
+ value = get_node_value(root,"Encoding/Size Limit/upper_limit");
830
+ if(value){
831
+ scgi_header_add(app->scgi, "UPPER_LIMIT", strlen("UPPER_LIMIT"), value, strlen(value));
832
+ }
833
+ node_free(root);
834
+ }
911
835
 
912
836
  //Set max_worker & min_processsor
913
- app->max_worker = WR_STATIC_SVR_MAX_WKR;
914
- app->min_worker = WR_STATIC_SVR_MIN_WKR;
915
-
837
+ app->max_worker = Config->Application.Static_server.max_workers;
838
+ app->min_worker = Config->Application.Static_server.min_workers;
839
+
840
+ scgi_build(app->scgi);
841
+
916
842
  return app;
917
843
  }
918
844
  }
919
845
  return NULL;
920
846
  }
847
+
848
+ /** Search application configuration form application list */
849
+ config_application_list_t* wr_conf_app_exist(const char *app_name, config_application_list_t **prev_app){
850
+ config_application_list_t* app = Config->Application.list;
851
+
852
+ if(prev_app){
853
+ *prev_app = NULL;
854
+ while(app){
855
+ if(strcmp(app_name, app->name.str) == 0) //Compare application name
856
+ return app;
857
+ *prev_app = app;
858
+ app = app->next;
859
+ }
860
+ }else{
861
+ while(app){
862
+ if(strcmp(app_name, app->name.str) == 0) //Compare application name
863
+ return app;
864
+ app = app->next;
865
+ }
866
+ }
867
+ return NULL;
868
+ }
869
+
870
+ /** Read Application Configuration **/
871
+ void wr_application_conf_read(node_t *root){
872
+ wr_set_numeric_value(root, "Application/message_queue_size", &Config->Application.msg_queue_size, FALSE);
873
+ wr_set_numeric_value(root, "Application/maximum_request_ratio", &Config->Application.max_req_ratio, FALSE);
874
+ wr_set_numeric_value(root, "Application/minimum_request_ratio", &Config->Application.min_req_ratio, FALSE);
875
+ wr_set_numeric_value(root, "Application/high_load_time", &Config->Application.high_load, FALSE);
876
+ wr_set_numeric_value(root, "Application/low_load_time", &Config->Application.low_load, FALSE);
877
+ wr_set_numeric_value(root, "Application/maximum_hosts", &Config->Application.max_hosts, FALSE);
878
+ }
879
+
880
+ /** Read Worker Configuration **/
881
+ void wr_worker_conf_read(node_t *root){
882
+ wr_set_numeric_value(root, "Worker/maximum_request_body_size", &Config->Request.max_body_size, FALSE);
883
+ wr_set_numeric_value(root, "Worker/maximum_workers", &Config->Server.Worker.max, FALSE);
884
+ wr_set_numeric_value(root, "Worker/pending_workers", &Config->Server.Worker.pending, FALSE);
885
+ wr_set_numeric_value(root, "Worker/add_trials", &Config->Server.Worker.add_trials, FALSE);
886
+ wr_set_numeric_value(root, "Worker/add_wait", &Config->Server.Worker.add_wait, FALSE);
887
+ wr_set_numeric_value(root, "Worker/add_timeout", &Config->Server.Worker.add_timeout, TRUE);
888
+ wr_set_numeric_value(root, "Worker/kill_timeout", &Config->Server.Worker.kill_timeout, FALSE);
889
+ wr_set_numeric_value(root, "Worker/idle_time", &Config->Server.Worker.idle_time, TRUE);
890
+ wr_set_numeric_value(root, "Worker/ping_timeout", &Config->Server.Worker.ping_timeout, FALSE);
891
+ wr_set_numeric_value(root, "Worker/ping_trials", &Config->Server.Worker.ping_trials, FALSE);
892
+ }
893
+
894
+ /** Read and fill Server Internal Configuration **/
895
+ void wr_internal_conf_read(){
896
+ LOG_FUNCTION
897
+ node_t *root;
898
+
899
+ LOG_DEBUG(4,"YAML file path %s", Config->Server.File.internal_config.str);
900
+ root = yaml_parse(Config->Server.File.internal_config.str);
901
+
902
+ if(!root) {
903
+ LOG_ERROR(SEVERE, "Config file found with erroneous entries. Please correct it.");
904
+ printf("Config file found with erroneous entries. Please correct it.\n");
905
+ return;
906
+ }
907
+
908
+ wr_application_conf_read(root);
909
+ wr_worker_conf_read(root);
910
+
911
+ node_free(root);
912
+ }
913
+
921
914
  /***********************************************************
922
915
  * Configurator API definitions
923
916
  ************************************************************/
924
917
 
925
918
  /** Remove specified application from configuraion */
926
- int wr_app_conf_remove(wr_conf_t* conf, const char *app_name) {
919
+ int wr_app_conf_remove(const char *app_name) {
927
920
  LOG_FUNCTION
928
- wr_app_conf_t* app = conf->apps, *tmp_app = NULL;
929
-
930
921
  LOG_DEBUG(DEBUG, "Removing application %s", app_name);
931
- // Iterate application nodes
932
- while(app) {
933
- if(strcmp(app_name, app->name.str) == 0) //Compare application name
934
- break;
935
- tmp_app = app;
936
- app = app->next;
937
- }
922
+ config_application_list_t *app, *prev_app;
923
+
924
+ app = wr_conf_app_exist(app_name, &prev_app);
925
+
938
926
  if(app) {
939
927
  // Set application configuraion links
940
- if(tmp_app) {
941
- tmp_app->next = app->next;
928
+ if(prev_app) {
929
+ prev_app->next = app->next;
942
930
  } else {
943
- conf->apps = app->next;
931
+ Config->Application.list = app->next;
944
932
  }
945
933
  app->next = NULL;
946
934
  //Destroy application configuration
947
935
  LOG_DEBUG(DEBUG, "Removed application %s", app->name.str);
948
- wr_conf_app_free(app);
936
+ wr_application_list_free(app);
949
937
  return 0;
950
938
  } else
951
939
  return -1;
952
940
  }
953
941
 
954
- /** Replace the application configuration */
955
- int wr_conf_app_replace(wr_conf_t *conf, wr_app_conf_t *app_conf){
956
- LOG_FUNCTION
957
- wr_app_conf_t *app = conf->apps, *tmp_app = NULL;
958
-
959
- while(app) {
960
- if(strcmp(app_conf->name.str, app->name.str)==0)
961
- break;
962
- tmp_app = app;
963
- app = app->next;
964
- }
965
-
966
- if(app){
967
- app_conf->next = app->next;
968
- if(tmp_app){
969
- tmp_app->next = app_conf;
970
- }else{
971
- conf->apps = app_conf;
972
- }
973
- app->next = NULL;
974
- wr_conf_app_free(app);
975
- }else{
976
- LOG_ERROR(WARN, "Application '%s' is not found", app_conf->name.str);
977
- app_conf->next = conf->apps;
978
- conf->apps = app_conf;
979
- }
980
- return 0;
981
- }
982
-
983
942
  /** Remove the existing application specification if exists.
984
943
  * And add the new application configuration. */
985
- wr_app_conf_t* wr_conf_app_update(wr_conf_t* conf, const char *app_name, char* err_msg) {
944
+ int wr_conf_app_update(config_application_list_t *app) {
986
945
  LOG_FUNCTION
987
- wr_app_conf_t *app = conf->apps, *tmp_app = NULL;
988
-
989
- while(app) {
990
- if(strcmp(app_name, app->name.str)==0)
991
- break;
992
- tmp_app = app;
993
- app = app->next;
994
- }
995
-
996
- if(app){
997
- if(tmp_app){
998
- tmp_app->next = app->next;
999
- }else{
1000
- conf->apps = app->next;
1001
- }
1002
- app->next = NULL;
1003
- //wr_conf_app_free(app);
1004
- }else{
1005
- if(err_msg)
1006
- sprintf(err_msg, "Application '%s' is not found", app_name);
1007
- }
1008
-
1009
- return wr_conf_app_read(conf, app_name, err_msg);
946
+
947
+ if(app == NULL) return FALSE;
948
+
949
+ wr_string_free(app->baseuri);
950
+ app->baseuri = app->new->baseuri;
951
+
952
+ wr_string_free(app->path);
953
+ app->path = app->new->path;
954
+
955
+ scgi_free(app->scgi);
956
+ app->scgi = app->new->scgi;
957
+
958
+ wr_host_list_free(app->host_name_list);
959
+ app->host_name_list = app->new->host_name_list;
960
+
961
+ app->min_worker = app->new->min_worker;
962
+ app->max_worker = app->new->max_worker;
963
+ app->log_level = app->new->log_level;
964
+
965
+ free(app->new);
966
+ app->new = NULL;
967
+
968
+ return TRUE;
1010
969
  }
1011
970
 
1012
971
  /** Read specified application and construct application configuration */
1013
- wr_app_conf_t* wr_conf_app_read(wr_conf_t* conf, const char *app_name, char* err_msg) {
972
+ // Flag to allow duplicate application
973
+ config_application_list_t* wr_conf_app_read(const char *app_name, char* err_msg, int flag) {
1014
974
  LOG_FUNCTION
1015
975
  //Parse configuration file
1016
976
  node_t *root , *app_nodes = NULL;
1017
- wr_app_conf_t *app = NULL, *tmp;
977
+ config_application_list_t *app = NULL, *old_app = NULL, *tmp;
1018
978
  char *str;
1019
-
1020
- app = conf->apps;
1021
-
1022
- while(app) {
1023
- if(strcmp(app->name.str, app_name) == 0) {
1024
- if(err_msg)
979
+
980
+ old_app = wr_conf_app_exist(app_name, NULL);
981
+
982
+ if(flag == TRUE && old_app == NULL) return NULL;
983
+ if(flag == FALSE && old_app){
984
+ if(err_msg)
1025
985
  sprintf(err_msg, "Application '%s' is already exists", app_name);
1026
- return NULL;
1027
- }
1028
- app = app->next;
986
+ return NULL;
1029
987
  }
1030
-
1031
- app = NULL;
1032
-
1033
- if(strcmp(app_name, WR_ADMIN_PANEL_APP_NAME) == 0) {
1034
- app = wr_conf_admin_panel_read(conf);
988
+
989
+ if(strcmp(app_name, Config->Application.Admin_panel.name.str) == 0) {
990
+ app = wr_conf_admin_panel_read();
1035
991
 
1036
992
  if(app) {
1037
993
  //Set application configuration into configuration data structure
1038
- app->next = conf->apps;
1039
- conf->apps = app;
994
+ if(flag == TRUE){
995
+ old_app->new = app;
996
+ return old_app;
997
+ }else{
998
+ app->next = Config->Application.list;
999
+ Config->Application.list = app;
1000
+ }
1040
1001
  } else {
1041
1002
  if(err_msg)
1042
1003
  strcpy(err_msg, "Could not read Admin Panel");
1043
1004
  }
1044
1005
  return app;
1006
+ }else if(strcmp(app_name, Config->Application.Static_server.name.str) == 0){
1007
+ // Read Static server
1008
+ app = wr_conf_static_server_read();
1009
+ if(app) {
1010
+ //Set application configuration into configuration data structure
1011
+ if(flag == TRUE){
1012
+ old_app->new = app;
1013
+ return old_app;
1014
+ }else{
1015
+ app->next = Config->Application.list;
1016
+ Config->Application.list = app;
1017
+ }
1018
+ } else {
1019
+ if(err_msg)
1020
+ strcpy(err_msg, "Could not read Static Server");
1021
+ }
1022
+ return app;
1045
1023
  }
1046
1024
 
1047
- root = yaml_parse(conf->config_file_path.str);
1025
+ root = yaml_parse(Config->Server.File.config.str);
1048
1026
 
1049
1027
  if(!root) {
1050
1028
  LOG_ERROR(SEVERE, "Config file found with erroneous entries. Please correct it.");
@@ -1057,15 +1035,14 @@ wr_app_conf_t* wr_conf_app_read(wr_conf_t* conf, const char *app_name, char* err
1057
1035
  // return NULL;
1058
1036
  // }
1059
1037
  //Fetch Application Specification nodes
1060
- app_nodes = get_nodes(root, WR_CONF_APP_SPEC);
1038
+ app_nodes = get_nodes(root, "Application Specification");
1061
1039
 
1062
1040
  // Iterate application nodes
1063
1041
  while(app_nodes) {
1064
1042
  if(app_nodes->child) {
1065
- str = wr_validate_string(get_node_value(app_nodes->child, WR_CONF_APP_NAME));
1066
- // Compare application name
1043
+ str = wr_validate_string(get_node_value(app_nodes->child, "name"));// Compare application name
1067
1044
  if(str && strcmp(str, app_name)==0) {
1068
- app = wr_app_conf_set(conf, app_nodes, err_msg);
1045
+ app = wr_config_application_set(app_nodes, err_msg);
1069
1046
  break;
1070
1047
  }
1071
1048
  }
@@ -1073,149 +1050,106 @@ wr_app_conf_t* wr_conf_app_read(wr_conf_t* conf, const char *app_name, char* err
1073
1050
  }
1074
1051
 
1075
1052
  node_free(root);
1053
+ if(app == NULL) return NULL;
1054
+
1076
1055
 
1077
- if(app) {
1078
- // checking uniqueness for host name. While setting application object, we are parsing raw string of host_names
1079
- // into host_name_list. We can easily check for uniqueness once host_name_list is ready.
1080
- if(app->host_name_list){
1081
- if(wr_chk_host_within_list(app->host_name_list)!=0) {
1082
- LOG_ERROR(WARN,"Checking hosts within list is failed.");
1083
- wr_conf_app_free(app);
1084
- return NULL;
1085
- }
1056
+ // checking uniqueness for host name. While setting application object, we are parsing raw string of host_names
1057
+ // into host_name_list. We can easily check for uniqueness once host_name_list is ready.
1058
+ if(app->host_name_list){
1059
+ if(wr_chk_host_within_list(app->host_name_list)!=0) {
1060
+ LOG_ERROR(WARN,"Checking hosts within list is failed.");
1061
+ wr_application_list_free(app);
1062
+ return NULL;
1063
+ }
1086
1064
 
1087
- tmp = conf->apps;
1088
- while(tmp) {
1089
- if(tmp->host_name_list) {
1090
- if(wr_chk_host_lists(app->host_name_list, tmp->host_name_list)!=0) {
1091
- LOG_ERROR(WARN,"Checking host lists is failed.");
1092
- wr_conf_app_free(app);
1093
- return NULL;
1094
- }
1065
+ tmp = Config->Application.list;
1066
+ while(tmp) {
1067
+ if(tmp->host_name_list && strcmp(tmp->name.str, app_name)!= 0 ) {
1068
+ if(wr_chk_host_lists(app->host_name_list, tmp->host_name_list)!=0) {
1069
+ LOG_ERROR(WARN,"Checking host lists is failed.");
1070
+ wr_application_list_free(app);
1071
+ return NULL;
1095
1072
  }
1096
- tmp = tmp->next;
1097
1073
  }
1074
+ tmp = tmp->next;
1098
1075
  }
1099
- //Set application configuration into configuration data structure
1100
- app->next = conf->apps;
1101
- conf->apps = app;
1102
1076
  }
1103
- return app;
1104
- }
1105
-
1106
- /** Destroy configuration object */
1107
- void wr_conf_free(wr_conf_t* conf) {
1108
- LOG_FUNCTION
1109
- //Destroy server_configuration
1110
- if(conf->server) {
1111
- wr_string_free(conf->server->sock_path);
1112
- #ifdef HAVE_GNUTLS
1113
-
1114
- wr_string_free(conf->server->certificate);
1115
- wr_string_free(conf->server->key);
1116
- #endif
1117
-
1118
- free(conf->server);
1077
+
1078
+ //Set application configuration into configuration data structure
1079
+ if(flag == TRUE){
1080
+ old_app->new = app;
1081
+ return old_app;
1082
+ }else{
1083
+ app->next = Config->Application.list;
1084
+ Config->Application.list = app;
1119
1085
  }
1120
- //Destroy application_configuration list
1121
- wr_conf_app_free(conf->apps);
1122
-
1123
- // Destroy configuration structure
1124
- wr_string_free(conf->wr_root_path);
1125
- wr_string_free(conf->ruby_lib_path);
1126
- wr_string_free(conf->wkr_exe_path);
1127
- wr_string_free(conf->admin_panel_path);
1128
- wr_string_free(conf->config_file_path);
1129
- free(conf);
1086
+
1087
+ return app;
1130
1088
  }
1131
1089
 
1132
1090
  /** Read configuration file and fill configuration object */
1133
- wr_conf_t* wr_conf_read(const char* root_path) {
1091
+ int wr_conf_read() {
1134
1092
  LOG_FUNCTION
1135
1093
  node_t *root;
1136
- wr_conf_t* conf = NULL;
1137
-
1138
- //Create configuration structure
1139
- conf = wr_conf_new();
1140
- if(conf == NULL) {
1141
- LOG_ERROR(SEVERE,"Configuration object could not be allocated.");
1142
- printf("Configuration object could not be allocated.\n");
1143
- return NULL;
1144
- }
1145
-
1146
- // Initialize various paths based on webroar_root path
1147
- wr_init_path(conf, root_path);
1094
+
1095
+ wr_internal_conf_read();
1148
1096
 
1149
1097
  // Get parsed nodes
1150
- LOG_DEBUG(4,"YAML file path %s", conf->config_file_path.str);
1151
- root = yaml_parse(conf->config_file_path.str);
1098
+ LOG_DEBUG(4,"YAML file path %s", Config->Server.File.config.str);
1099
+ root = yaml_parse(Config->Server.File.config.str);
1152
1100
 
1153
1101
  if(!root) {
1154
1102
  LOG_ERROR(SEVERE, "Config file found with erroneous entries. Please correct it.");
1155
1103
  printf("Config file found with erroneous entries. Please correct it.\n");
1156
- wr_conf_free(conf);
1157
- return NULL;
1104
+ return FALSE;
1158
1105
  }
1159
1106
 
1160
1107
  // Set server_configuration parameters
1161
- // Set server_configuration parameters
1162
- if(wr_conf_server_set(conf, root)!=0)
1163
- goto conf_err;
1108
+ if(wr_config_server_set(root)!=0)
1109
+ return FALSE;
1164
1110
 
1165
1111
  // Set application_configuration list
1166
- wr_iterate_app_node(conf, root);
1112
+ wr_iterate_app_node(root);
1167
1113
 
1168
- wr_remove_app_with_dup_baseuri(conf);
1114
+ wr_remove_app_with_dup_baseuri();
1169
1115
 
1170
- wr_remove_app_with_dup_host(conf);
1116
+ wr_remove_app_with_dup_host();
1171
1117
 
1172
1118
  //configuration_print(configuration);
1173
1119
  node_free(root);
1174
-
1175
- return conf;
1176
-
1177
- conf_err:
1178
- wr_conf_free(conf);
1179
- return NULL;
1180
-
1120
+
1121
+ return TRUE;
1181
1122
  }
1182
1123
 
1183
1124
  /** Display configuration object */
1184
- void wr_conf_display(wr_conf_t* conf) {
1125
+ void wr_conf_display() {
1185
1126
  LOG_FUNCTION
1186
- wr_app_conf_t *app = conf->apps;
1127
+ config_application_list_t *app = Config->Application.list;
1187
1128
 
1188
1129
  //printf("No of Applications : %d\n", conf->no_of_application);
1189
1130
 
1190
1131
  // Display Server specification
1191
- if(conf->server) {
1192
- printf("Server log level : %d\n", conf->server->log_level);
1193
- printf("Server port : %d\n", conf->server->port);
1194
- printf("Server min worker : %d\n", conf->server->min_worker);
1195
- printf("Server max worker : %d\n", conf->server->max_worker);
1196
- printf("Access log flag : %d\n", conf->server->flag&WR_SVR_ACCESS_LOG);
1132
+ printf("Server log level : %d\n", Config->Server.log_level);
1133
+ printf("Server port : %d\n", Config->Server.port);
1134
+ printf("Server min worker : %d\n", Config->Application.Default.min_workers);
1135
+ printf("Server max worker : %d\n", Config->Application.Default.max_workers);
1136
+ printf("Access log flag : %d\n", Config->Server.flag & SERVER_ACCESS_LOG);
1197
1137
  #ifdef HAVE_GNUTLS
1198
-
1199
- printf("Server SSL certificate : %s\n", conf->server->certificate.str);
1200
- printf("Server SSL key : %s\n", conf->server->key.str);
1201
- printf("Server SSL port : %d\n", conf->server->ssl_port);
1138
+ printf("Server SSL certificate : %s\n", Config->Server.SSL.certificate.str);
1139
+ printf("Server SSL key : %s\n", Config->Server.SSL.key.str);
1140
+ printf("Server SSL port : %d\n", Config->Server.SSL.port);
1202
1141
  #endif
1203
1142
 
1204
- }
1205
-
1206
1143
  // Display application specification
1207
1144
  while(app) {
1208
1145
  printf("Application log level : %d\n", app->log_level);
1209
- printf("Environment : %s\n", app->env.str);
1210
1146
  printf("Application min worker : %d\n", app->max_worker);
1211
1147
  printf("Application max worker : %d\n", app->min_worker);
1212
1148
  printf("Application name : %s\n", app->name.str);
1213
1149
  printf("Application path : %s\n", app->path.str);
1214
- printf("Application type : %s\n", app->type.str);
1215
- printf("Application analytics : %d\n", app->analytics);
1216
1150
  printf("Application baseuri : %s\n", app->baseuri.str);
1217
1151
  if(app->host_name_list) {
1218
- wr_host_name_t* host=app->host_name_list;
1152
+ config_host_list_t* host=app->host_name_list;
1219
1153
  printf("Host Name List :- \n");
1220
1154
  while(host) {
1221
1155
  printf("%s, ", host->name.str);
@@ -1228,13 +1162,13 @@ void wr_conf_display(wr_conf_t* conf) {
1228
1162
  }
1229
1163
 
1230
1164
  /** Add Admin Panel configuration */
1231
- int wr_conf_admin_panel_add(wr_conf_t* conf) {
1165
+ int wr_conf_admin_panel_add() {
1232
1166
  LOG_FUNCTION
1233
- wr_app_conf_t* app = wr_conf_admin_panel_read(conf);
1167
+ config_application_list_t* app = wr_conf_admin_panel_read();
1234
1168
 
1235
1169
  if(app != NULL) {
1236
- app->next = conf->apps;
1237
- conf->apps = app;
1170
+ app->next = Config->Application.list;
1171
+ Config->Application.list = app;
1238
1172
  return 0;
1239
1173
  } else {
1240
1174
  printf("'Admin Panel' could not be started. To start 'Admin Panel' run server with root privileges.\n");
@@ -1244,13 +1178,13 @@ int wr_conf_admin_panel_add(wr_conf_t* conf) {
1244
1178
  }
1245
1179
 
1246
1180
  /** Add the configuration for static content server */
1247
- int wr_conf_static_server_add(wr_conf_t* conf) {
1181
+ int wr_conf_static_server_add() {
1248
1182
  LOG_FUNCTION
1249
- wr_app_conf_t* app = wr_conf_static_server_read(conf);
1183
+ config_application_list_t* app = wr_conf_static_server_read();
1250
1184
 
1251
1185
  if(app != NULL) {
1252
- app->next = conf->apps;
1253
- conf->apps = app;
1186
+ app->next = Config->Application.list;
1187
+ Config->Application.list = app;
1254
1188
  return 0;
1255
1189
  }
1256
1190