|
@@ -1,29 +1,3 @@
|
|
-<<<<<<< HEAD
|
|
|
|
-// Copyright (c) 2004-2013 Sergey Lyubka
|
|
|
|
-//
|
|
|
|
-// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
-// of this software and associated documentation files (the "Software"), to deal
|
|
|
|
-// in the Software without restriction, including without limitation the rights
|
|
|
|
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
-// copies of the Software, and to permit persons to whom the Software is
|
|
|
|
-// furnished to do so, subject to the following conditions:
|
|
|
|
-//
|
|
|
|
-// The above copyright notice and this permission notice shall be included in
|
|
|
|
-// all copies or substantial portions of the Software.
|
|
|
|
-//
|
|
|
|
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
-// THE SOFTWARE.
|
|
|
|
-
|
|
|
|
-#if defined(_WIN32)
|
|
|
|
-#define _CRT_SECURE_NO_WARNINGS // Disable deprecation warning in VS2005
|
|
|
|
-#else
|
|
|
|
-#define _XOPEN_SOURCE 600 // For PATH_MAX on linux
|
|
|
|
-=======
|
|
|
|
/* Copyright (c) 2004-2013 Sergey Lyubka
|
|
/* Copyright (c) 2004-2013 Sergey Lyubka
|
|
*
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
@@ -49,7 +23,6 @@
|
|
#define _CRT_SECURE_NO_WARNINGS /* Disable deprecation warning in VS2005 */
|
|
#define _CRT_SECURE_NO_WARNINGS /* Disable deprecation warning in VS2005 */
|
|
#else
|
|
#else
|
|
#define _XOPEN_SOURCE 600 /* For PATH_MAX on linux */
|
|
#define _XOPEN_SOURCE 600 /* For PATH_MAX on linux */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifndef IGNORE_UNUSED_RESULT
|
|
#ifndef IGNORE_UNUSED_RESULT
|
|
@@ -97,36 +70,22 @@ extern char *_getcwd(char *buf, size_t size);
|
|
#define DIRSEP '/'
|
|
#define DIRSEP '/'
|
|
#define WINCDECL
|
|
#define WINCDECL
|
|
#define abs_path(rel, abs, abs_size) realpath((rel), (abs))
|
|
#define abs_path(rel, abs, abs_size) realpath((rel), (abs))
|
|
-<<<<<<< HEAD
|
|
|
|
-#endif // _WIN32
|
|
|
|
-=======
|
|
|
|
#endif /* _WIN32 */
|
|
#endif /* _WIN32 */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
|
|
|
|
#define MAX_OPTIONS 100
|
|
#define MAX_OPTIONS 100
|
|
#define MAX_CONF_FILE_LINE_SIZE (8 * 1024)
|
|
#define MAX_CONF_FILE_LINE_SIZE (8 * 1024)
|
|
|
|
|
|
static int exit_flag;
|
|
static int exit_flag;
|
|
-<<<<<<< HEAD
|
|
|
|
-static char server_name[40]; // Set by init_server_name()
|
|
|
|
-static char config_file[PATH_MAX] = ""; // Set by process_command_line_arguments()
|
|
|
|
-static struct mg_context *ctx; // Set by start_civetweb()
|
|
|
|
-=======
|
|
|
|
static char server_name[40]; /* Set by init_server_name() */
|
|
static char server_name[40]; /* Set by init_server_name() */
|
|
static char config_file[PATH_MAX] = ""; /* Set by
|
|
static char config_file[PATH_MAX] = ""; /* Set by
|
|
process_command_line_arguments() */
|
|
process_command_line_arguments() */
|
|
static struct mg_context *ctx; /* Set by start_civetweb() */
|
|
static struct mg_context *ctx; /* Set by start_civetweb() */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
|
|
|
|
#if !defined(CONFIG_FILE)
|
|
#if !defined(CONFIG_FILE)
|
|
#define CONFIG_FILE "civetweb.conf"
|
|
#define CONFIG_FILE "civetweb.conf"
|
|
#endif /* !CONFIG_FILE */
|
|
#endif /* !CONFIG_FILE */
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
-// backup config file
|
|
|
|
-=======
|
|
|
|
/* backup config file */
|
|
/* backup config file */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
#if !defined(CONFIG_FILE2) && defined(LINUX)
|
|
#if !defined(CONFIG_FILE2) && defined(LINUX)
|
|
#define CONFIG_FILE2 "/usr/local/etc/civetweb.conf"
|
|
#define CONFIG_FILE2 "/usr/local/etc/civetweb.conf"
|
|
#endif
|
|
#endif
|
|
@@ -210,11 +169,7 @@ static void create_config_file(const char *path)
|
|
FILE *fp;
|
|
FILE *fp;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Create config file if it is not present yet
|
|
|
|
-=======
|
|
|
|
/* Create config file if it is not present yet */
|
|
/* Create config file if it is not present yet */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if ((fp = fopen(path, "r")) != NULL) {
|
|
if ((fp = fopen(path, "r")) != NULL) {
|
|
fclose(fp);
|
|
fclose(fp);
|
|
} else if ((fp = fopen(path, "a+")) != NULL) {
|
|
} else if ((fp = fopen(path, "a+")) != NULL) {
|
|
@@ -269,20 +224,12 @@ static void process_command_line_arguments(char *argv[], char **options)
|
|
FILE *fp = NULL;
|
|
FILE *fp = NULL;
|
|
size_t i, cmd_line_opts_start = 1, line_no = 0;
|
|
size_t i, cmd_line_opts_start = 1, line_no = 0;
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Should we use a config file ?
|
|
|
|
-=======
|
|
|
|
/* Should we use a config file ? */
|
|
/* Should we use a config file ? */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if (argv[1] != NULL && argv[1][0] != '-') {
|
|
if (argv[1] != NULL && argv[1][0] != '-') {
|
|
snprintf(config_file, sizeof(config_file), "%s", argv[1]);
|
|
snprintf(config_file, sizeof(config_file), "%s", argv[1]);
|
|
cmd_line_opts_start = 2;
|
|
cmd_line_opts_start = 2;
|
|
} else if ((p = strrchr(argv[0], DIRSEP)) == NULL) {
|
|
} else if ((p = strrchr(argv[0], DIRSEP)) == NULL) {
|
|
-<<<<<<< HEAD
|
|
|
|
- // No command line flags specified. Look where binary lives
|
|
|
|
-=======
|
|
|
|
/* No command line flags specified. Look where binary lives */
|
|
/* No command line flags specified. Look where binary lives */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
snprintf(config_file, sizeof(config_file)-1, "%s", CONFIG_FILE);
|
|
snprintf(config_file, sizeof(config_file)-1, "%s", CONFIG_FILE);
|
|
config_file[sizeof(config_file)-1] = 0;
|
|
config_file[sizeof(config_file)-1] = 0;
|
|
} else {
|
|
} else {
|
|
@@ -293,21 +240,13 @@ static void process_command_line_arguments(char *argv[], char **options)
|
|
|
|
|
|
fp = fopen(config_file, "r");
|
|
fp = fopen(config_file, "r");
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // If config file was set in command line and open failed, die
|
|
|
|
-=======
|
|
|
|
/* If config file was set in command line and open failed, die */
|
|
/* If config file was set in command line and open failed, die */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if (cmd_line_opts_start == 2 && fp == NULL) {
|
|
if (cmd_line_opts_start == 2 && fp == NULL) {
|
|
die("Cannot open config file %s: %s", config_file, strerror(errno));
|
|
die("Cannot open config file %s: %s", config_file, strerror(errno));
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_FILE2
|
|
#ifdef CONFIG_FILE2
|
|
-<<<<<<< HEAD
|
|
|
|
- // try alternate config file
|
|
|
|
-=======
|
|
|
|
/* try alternate config file */
|
|
/* try alternate config file */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if (fp == NULL) {
|
|
if (fp == NULL) {
|
|
fp = fopen(CONFIG_FILE2, "r");
|
|
fp = fopen(CONFIG_FILE2, "r");
|
|
if (fp != NULL) {
|
|
if (fp != NULL) {
|
|
@@ -316,25 +255,6 @@ static void process_command_line_arguments(char *argv[], char **options)
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Load config file settings first
|
|
|
|
- if (fp != NULL) {
|
|
|
|
- fprintf(stderr, "Loading config file %s\n", config_file);
|
|
|
|
-
|
|
|
|
- // Loop over the lines in config file
|
|
|
|
- while (fgets(line, sizeof(line), fp) != NULL) {
|
|
|
|
- line_no++;
|
|
|
|
-
|
|
|
|
- // Ignore empty lines and comments
|
|
|
|
- for (i = 0; isspace(* (unsigned char *) &line[i]); ) i++;
|
|
|
|
- if (line[i] == '#' || line[i] == '\0') {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (sscanf(line, "%s %[^\r\n#]", opt, val) != 2) {
|
|
|
|
- printf("%s: line %d is invalid, ignoring it:\n %s",
|
|
|
|
- config_file, (int) line_no, line);
|
|
|
|
-=======
|
|
|
|
/* Load config file settings first */
|
|
/* Load config file settings first */
|
|
if (fp != NULL) {
|
|
if (fp != NULL) {
|
|
fprintf(stderr, "Loading config file %s\n", config_file);
|
|
fprintf(stderr, "Loading config file %s\n", config_file);
|
|
@@ -359,7 +279,6 @@ static void process_command_line_arguments(char *argv[], char **options)
|
|
if (sscanf(p, "%s %[^\r\n#]", opt, val) != 2) {
|
|
if (sscanf(p, "%s %[^\r\n#]", opt, val) != 2) {
|
|
printf("%s: line %d is invalid, ignoring it:\n %s",
|
|
printf("%s: line %d is invalid, ignoring it:\n %s",
|
|
config_file, (int) line_no, p);
|
|
config_file, (int) line_no, p);
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
} else {
|
|
} else {
|
|
set_option(options, opt, val);
|
|
set_option(options, opt, val);
|
|
}
|
|
}
|
|
@@ -368,21 +287,12 @@ static void process_command_line_arguments(char *argv[], char **options)
|
|
(void) fclose(fp);
|
|
(void) fclose(fp);
|
|
}
|
|
}
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // If we're under MacOS and started by launchd, then the second
|
|
|
|
- // argument is process serial number, -psn_.....
|
|
|
|
- // In this case, don't process arguments at all.
|
|
|
|
- if (argv[1] == NULL || memcmp(argv[1], "-psn_", 5) != 0) {
|
|
|
|
- // Handle command line flags.
|
|
|
|
- // They override config file and default settings.
|
|
|
|
-=======
|
|
|
|
/* If we're under MacOS and started by launchd, then the second
|
|
/* If we're under MacOS and started by launchd, then the second
|
|
argument is process serial number, -psn_.....
|
|
argument is process serial number, -psn_.....
|
|
In this case, don't process arguments at all. */
|
|
In this case, don't process arguments at all. */
|
|
if (argv[1] == NULL || memcmp(argv[1], "-psn_", 5) != 0) {
|
|
if (argv[1] == NULL || memcmp(argv[1], "-psn_", 5) != 0) {
|
|
/* Handle command line flags.
|
|
/* Handle command line flags.
|
|
They override config file and default settings. */
|
|
They override config file and default settings. */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
for (i = cmd_line_opts_start; argv[i] != NULL; i += 2) {
|
|
for (i = cmd_line_opts_start; argv[i] != NULL; i += 2) {
|
|
if (argv[i][0] != '-' || argv[i + 1] == NULL) {
|
|
if (argv[i][0] != '-' || argv[i + 1] == NULL) {
|
|
show_usage_and_exit();
|
|
show_usage_and_exit();
|
|
@@ -409,14 +319,9 @@ static int is_path_absolute(const char *path)
|
|
{
|
|
{
|
|
#ifdef _WIN32
|
|
#ifdef _WIN32
|
|
return path != NULL &&
|
|
return path != NULL &&
|
|
-<<<<<<< HEAD
|
|
|
|
- ((path[0] == '\\' && path[1] == '\\') || // UNC path, e.g. \\server\dir
|
|
|
|
- (isalpha(path[0]) && path[1] == ':' && path[2] == '\\')); // E.g. X:\dir
|
|
|
|
-=======
|
|
|
|
((path[0] == '\\' && path[1] == '\\') || /* UNC path, e.g.
|
|
((path[0] == '\\' && path[1] == '\\') || /* UNC path, e.g.
|
|
\\server\dir */
|
|
\\server\dir */
|
|
(isalpha(path[0]) && path[1] == ':' && path[2] == '\\')); /* E.g. X:\dir */
|
|
(isalpha(path[0]) && path[1] == ':' && path[2] == '\\')); /* E.g. X:\dir */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
#else
|
|
#else
|
|
return path != NULL && path[0] == '/';
|
|
return path != NULL && path[0] == '/';
|
|
#endif
|
|
#endif
|
|
@@ -439,8 +344,6 @@ static void verify_existence(char **options, const char *option_name,
|
|
struct stat st;
|
|
struct stat st;
|
|
const char *path = get_option(options, option_name);
|
|
const char *path = get_option(options, option_name);
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
-=======
|
|
|
|
#ifdef _WIN32
|
|
#ifdef _WIN32
|
|
wchar_t wbuf[1024];
|
|
wchar_t wbuf[1024];
|
|
char mbbuf[1024];
|
|
char mbbuf[1024];
|
|
@@ -455,7 +358,6 @@ static void verify_existence(char **options, const char *option_name,
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if (path != NULL && (stat(path, &st) != 0 ||
|
|
if (path != NULL && (stat(path, &st) != 0 ||
|
|
((S_ISDIR(st.st_mode) ? 1 : 0) != must_be_dir))) {
|
|
((S_ISDIR(st.st_mode) ? 1 : 0) != must_be_dir))) {
|
|
die("Invalid path for %s: [%s]: (%s). Make sure that path is either "
|
|
die("Invalid path for %s: [%s]: (%s). Make sure that path is either "
|
|
@@ -470,17 +372,6 @@ static void set_absolute_path(char *options[], const char *option_name,
|
|
char path[PATH_MAX] = "", abs[PATH_MAX] = "", *option_value;
|
|
char path[PATH_MAX] = "", abs[PATH_MAX] = "", *option_value;
|
|
const char *p;
|
|
const char *p;
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Check whether option is already set
|
|
|
|
- option_value = get_option(options, option_name);
|
|
|
|
-
|
|
|
|
- // If option is already set and it is an absolute path,
|
|
|
|
- // leave it as it is -- it's already absolute.
|
|
|
|
- if (option_value != NULL && !is_path_absolute(option_value)) {
|
|
|
|
- // Not absolute. Use the directory where civetweb executable lives
|
|
|
|
- // be the relative directory for everything.
|
|
|
|
- // Extract civetweb executable directory into path.
|
|
|
|
-=======
|
|
|
|
/* Check whether option is already set */
|
|
/* Check whether option is already set */
|
|
option_value = get_option(options, option_name);
|
|
option_value = get_option(options, option_name);
|
|
|
|
|
|
@@ -490,7 +381,6 @@ static void set_absolute_path(char *options[], const char *option_name,
|
|
/* Not absolute. Use the directory where civetweb executable lives
|
|
/* Not absolute. Use the directory where civetweb executable lives
|
|
be the relative directory for everything.
|
|
be the relative directory for everything.
|
|
Extract civetweb executable directory into path. */
|
|
Extract civetweb executable directory into path. */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if ((p = strrchr(path_to_civetweb_exe, DIRSEP)) == NULL) {
|
|
if ((p = strrchr(path_to_civetweb_exe, DIRSEP)) == NULL) {
|
|
IGNORE_UNUSED_RESULT(getcwd(path, sizeof(path)));
|
|
IGNORE_UNUSED_RESULT(getcwd(path, sizeof(path)));
|
|
} else {
|
|
} else {
|
|
@@ -502,11 +392,7 @@ static void set_absolute_path(char *options[], const char *option_name,
|
|
strncat(path, "/", sizeof(path) - 1);
|
|
strncat(path, "/", sizeof(path) - 1);
|
|
strncat(path, option_value, sizeof(path) - 1);
|
|
strncat(path, option_value, sizeof(path) - 1);
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Absolutize the path, and set the option
|
|
|
|
-=======
|
|
|
|
/* Absolutize the path, and set the option */
|
|
/* Absolutize the path, and set the option */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
IGNORE_UNUSED_RESULT(abs_path(path, abs, sizeof(abs)));
|
|
IGNORE_UNUSED_RESULT(abs_path(path, abs, sizeof(abs)));
|
|
set_option(options, option_name, abs);
|
|
set_option(options, option_name, abs);
|
|
}
|
|
}
|
|
@@ -518,11 +404,7 @@ static void start_civetweb(int argc, char *argv[])
|
|
char *options[MAX_OPTIONS];
|
|
char *options[MAX_OPTIONS];
|
|
int i;
|
|
int i;
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Edit passwords file if -A option is specified
|
|
|
|
-=======
|
|
|
|
/* Edit passwords file if -A option is specified */
|
|
/* Edit passwords file if -A option is specified */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if (argc > 1 && !strcmp(argv[1], "-A")) {
|
|
if (argc > 1 && !strcmp(argv[1], "-A")) {
|
|
if (argc != 6) {
|
|
if (argc != 6) {
|
|
show_usage_and_exit();
|
|
show_usage_and_exit();
|
|
@@ -531,11 +413,7 @@ static void start_civetweb(int argc, char *argv[])
|
|
EXIT_SUCCESS : EXIT_FAILURE);
|
|
EXIT_SUCCESS : EXIT_FAILURE);
|
|
}
|
|
}
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Show usage if -h or --help options are specified
|
|
|
|
-=======
|
|
|
|
/* Show usage if -h or --help options are specified */
|
|
/* Show usage if -h or --help options are specified */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) {
|
|
if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) {
|
|
show_usage_and_exit();
|
|
show_usage_and_exit();
|
|
}
|
|
}
|
|
@@ -543,17 +421,10 @@ static void start_civetweb(int argc, char *argv[])
|
|
options[0] = NULL;
|
|
options[0] = NULL;
|
|
set_option(options, "document_root", ".");
|
|
set_option(options, "document_root", ".");
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Update config based on command line arguments
|
|
|
|
- process_command_line_arguments(argv, options);
|
|
|
|
-
|
|
|
|
- // Make sure we have absolute paths for files and directories
|
|
|
|
-=======
|
|
|
|
/* Update config based on command line arguments */
|
|
/* Update config based on command line arguments */
|
|
process_command_line_arguments(argv, options);
|
|
process_command_line_arguments(argv, options);
|
|
|
|
|
|
/* Make sure we have absolute paths for files and directories */
|
|
/* Make sure we have absolute paths for files and directories */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
set_absolute_path(options, "document_root", argv[0]);
|
|
set_absolute_path(options, "document_root", argv[0]);
|
|
set_absolute_path(options, "put_delete_auth_file", argv[0]);
|
|
set_absolute_path(options, "put_delete_auth_file", argv[0]);
|
|
set_absolute_path(options, "cgi_interpreter", argv[0]);
|
|
set_absolute_path(options, "cgi_interpreter", argv[0]);
|
|
@@ -562,28 +433,16 @@ static void start_civetweb(int argc, char *argv[])
|
|
set_absolute_path(options, "global_auth_file", argv[0]);
|
|
set_absolute_path(options, "global_auth_file", argv[0]);
|
|
set_absolute_path(options, "ssl_certificate", argv[0]);
|
|
set_absolute_path(options, "ssl_certificate", argv[0]);
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Make extra verification for certain options
|
|
|
|
-=======
|
|
|
|
/* Make extra verification for certain options */
|
|
/* Make extra verification for certain options */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
verify_existence(options, "document_root", 1);
|
|
verify_existence(options, "document_root", 1);
|
|
verify_existence(options, "cgi_interpreter", 0);
|
|
verify_existence(options, "cgi_interpreter", 0);
|
|
verify_existence(options, "ssl_certificate", 0);
|
|
verify_existence(options, "ssl_certificate", 0);
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Setup signal handler: quit on Ctrl-C
|
|
|
|
- signal(SIGTERM, signal_handler);
|
|
|
|
- signal(SIGINT, signal_handler);
|
|
|
|
-
|
|
|
|
- // Start Civetweb
|
|
|
|
-=======
|
|
|
|
/* Setup signal handler: quit on Ctrl-C */
|
|
/* Setup signal handler: quit on Ctrl-C */
|
|
signal(SIGTERM, signal_handler);
|
|
signal(SIGTERM, signal_handler);
|
|
signal(SIGINT, signal_handler);
|
|
signal(SIGINT, signal_handler);
|
|
|
|
|
|
/* Start Civetweb */
|
|
/* Start Civetweb */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
memset(&callbacks, 0, sizeof(callbacks));
|
|
memset(&callbacks, 0, sizeof(callbacks));
|
|
callbacks.log_message = &log_message;
|
|
callbacks.log_message = &log_message;
|
|
ctx = mg_start(&callbacks, NULL, (const char **) options);
|
|
ctx = mg_start(&callbacks, NULL, (const char **) options);
|
|
@@ -602,15 +461,6 @@ enum {
|
|
ID_REMOVE_SERVICE, ID_STATIC, ID_GROUP, ID_SAVE, ID_RESET_DEFAULTS,
|
|
ID_REMOVE_SERVICE, ID_STATIC, ID_GROUP, ID_SAVE, ID_RESET_DEFAULTS,
|
|
ID_STATUS, ID_CONNECT,
|
|
ID_STATUS, ID_CONNECT,
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // All dynamically created text boxes for options have IDs starting from
|
|
|
|
- // ID_CONTROLS, incremented by one.
|
|
|
|
- ID_CONTROLS = 200,
|
|
|
|
-
|
|
|
|
- // Text boxes for files have "..." buttons to open file browser. These
|
|
|
|
- // buttons have IDs that are ID_FILE_BUTTONS_DELTA higher than associated
|
|
|
|
- // text box ID.
|
|
|
|
-=======
|
|
|
|
/* All dynamically created text boxes for options have IDs starting from
|
|
/* All dynamically created text boxes for options have IDs starting from
|
|
ID_CONTROLS, incremented by one. */
|
|
ID_CONTROLS, incremented by one. */
|
|
ID_CONTROLS = 200,
|
|
ID_CONTROLS = 200,
|
|
@@ -618,7 +468,6 @@ enum {
|
|
/* Text boxes for files have "..." buttons to open file browser. These
|
|
/* Text boxes for files have "..." buttons to open file browser. These
|
|
buttons have IDs that are ID_FILE_BUTTONS_DELTA higher than associated
|
|
buttons have IDs that are ID_FILE_BUTTONS_DELTA higher than associated
|
|
text box ID. */
|
|
text box ID. */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
ID_FILE_BUTTONS_DELTA = 1000
|
|
ID_FILE_BUTTONS_DELTA = 1000
|
|
};
|
|
};
|
|
static HICON hIcon;
|
|
static HICON hIcon;
|
|
@@ -719,11 +568,7 @@ static void save_config(HWND hDlg, FILE *fp)
|
|
GetDlgItemText(hDlg, id, value, sizeof(value));
|
|
GetDlgItemText(hDlg, id, value, sizeof(value));
|
|
}
|
|
}
|
|
default_value = options[i * 2 + 1] == NULL ? "" : options[i * 2 + 1];
|
|
default_value = options[i * 2 + 1] == NULL ? "" : options[i * 2 + 1];
|
|
-<<<<<<< HEAD
|
|
|
|
- // If value is the same as default, skip it
|
|
|
|
-=======
|
|
|
|
/* If value is the same as default, skip it */
|
|
/* If value is the same as default, skip it */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
if (strcmp(value, default_value) != 0) {
|
|
if (strcmp(value, default_value) != 0) {
|
|
fprintf(fp, "%s %s\n", name, value);
|
|
fprintf(fp, "%s %s\n", name, value);
|
|
}
|
|
}
|
|
@@ -873,11 +718,7 @@ static void show_settings_dialog()
|
|
static int guard;
|
|
static int guard;
|
|
|
|
|
|
static struct {
|
|
static struct {
|
|
-<<<<<<< HEAD
|
|
|
|
- DLGTEMPLATE template; // 18 bytes
|
|
|
|
-=======
|
|
|
|
DLGTEMPLATE template; /* 18 bytes */
|
|
DLGTEMPLATE template; /* 18 bytes */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
WORD menu, class;
|
|
WORD menu, class;
|
|
wchar_t caption[1];
|
|
wchar_t caption[1];
|
|
WORD fontsiz;
|
|
WORD fontsiz;
|
|
@@ -958,11 +799,7 @@ static int manage_service(int action)
|
|
static const char *service_name = "Civetweb";
|
|
static const char *service_name = "Civetweb";
|
|
SC_HANDLE hSCM = NULL, hService = NULL;
|
|
SC_HANDLE hSCM = NULL, hService = NULL;
|
|
SERVICE_DESCRIPTION descr = {server_name};
|
|
SERVICE_DESCRIPTION descr = {server_name};
|
|
-<<<<<<< HEAD
|
|
|
|
- char path[PATH_MAX + 20] = ""; // Path to executable plus magic argument
|
|
|
|
-=======
|
|
|
|
char path[PATH_MAX + 20] = "";/* Path to executable plus magic argument */
|
|
char path[PATH_MAX + 20] = "";/* Path to executable plus magic argument */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
int success = 1;
|
|
int success = 1;
|
|
|
|
|
|
if ((hSCM = OpenSCManager(NULL, NULL, action == ID_INSTALL_SERVICE ?
|
|
if ((hSCM = OpenSCManager(NULL, NULL, action == ID_INSTALL_SERVICE ?
|
|
@@ -1012,11 +849,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|
char buf[200], *service_argv[] = {__argv[0], NULL};
|
|
char buf[200], *service_argv[] = {__argv[0], NULL};
|
|
POINT pt;
|
|
POINT pt;
|
|
HMENU hMenu;
|
|
HMENU hMenu;
|
|
-<<<<<<< HEAD
|
|
|
|
- static UINT s_uTaskbarRestart; // for taskbar creation
|
|
|
|
-=======
|
|
|
|
static UINT s_uTaskbarRestart; /* for taskbar creation */
|
|
static UINT s_uTaskbarRestart; /* for taskbar creation */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
|
|
|
|
switch (msg) {
|
|
switch (msg) {
|
|
case WM_CREATE:
|
|
case WM_CREATE:
|
|
@@ -1085,11 +918,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam,
|
|
mg_stop(ctx);
|
|
mg_stop(ctx);
|
|
Shell_NotifyIcon(NIM_DELETE, &TrayIcon);
|
|
Shell_NotifyIcon(NIM_DELETE, &TrayIcon);
|
|
PostQuitMessage(0);
|
|
PostQuitMessage(0);
|
|
-<<<<<<< HEAD
|
|
|
|
- return 0; // We've just sent our own quit message, with proper hwnd.
|
|
|
|
-=======
|
|
|
|
return 0;/* We've just sent our own quit message, with proper hwnd. */
|
|
return 0;/* We've just sent our own quit message, with proper hwnd. */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
default:
|
|
default:
|
|
if (msg==s_uTaskbarRestart)
|
|
if (msg==s_uTaskbarRestart)
|
|
Shell_NotifyIcon(NIM_ADD, &TrayIcon);
|
|
Shell_NotifyIcon(NIM_ADD, &TrayIcon);
|
|
@@ -1131,11 +960,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR cmdline, int show)
|
|
DispatchMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
}
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Return the WM_QUIT value.
|
|
|
|
-=======
|
|
|
|
/* Return the WM_QUIT value. */
|
|
/* Return the WM_QUIT value. */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
return (int) msg.wParam;
|
|
return (int) msg.wParam;
|
|
}
|
|
}
|
|
#elif defined(USE_COCOA)
|
|
#elif defined(USE_COCOA)
|
|
@@ -1172,35 +997,15 @@ int main(int argc, char *argv[])
|
|
[NSAutoreleasePool new];
|
|
[NSAutoreleasePool new];
|
|
[NSApplication sharedApplication];
|
|
[NSApplication sharedApplication];
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Add delegate to process menu item actions
|
|
|
|
- Civetweb *myDelegate = [[Civetweb alloc] autorelease];
|
|
|
|
-[NSApp setDelegate: myDelegate];
|
|
|
|
-
|
|
|
|
- // Run this app as agent
|
|
|
|
-=======
|
|
|
|
/* Add delegate to process menu item actions */
|
|
/* Add delegate to process menu item actions */
|
|
Civetweb *myDelegate = [[Civetweb alloc] autorelease];
|
|
Civetweb *myDelegate = [[Civetweb alloc] autorelease];
|
|
[NSApp setDelegate: myDelegate];
|
|
[NSApp setDelegate: myDelegate];
|
|
|
|
|
|
/* Run this app as agent */
|
|
/* Run this app as agent */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
ProcessSerialNumber psn = { 0, kCurrentProcess };
|
|
ProcessSerialNumber psn = { 0, kCurrentProcess };
|
|
TransformProcessType(&psn, kProcessTransformToBackgroundApplication);
|
|
TransformProcessType(&psn, kProcessTransformToBackgroundApplication);
|
|
SetFrontProcess(&psn);
|
|
SetFrontProcess(&psn);
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Add status bar menu
|
|
|
|
- id menu = [[NSMenu new] autorelease];
|
|
|
|
-
|
|
|
|
- // Add version menu item
|
|
|
|
-[menu addItem:[[[NSMenuItem alloc]
|
|
|
|
- //initWithTitle:[NSString stringWithFormat:@"%s", server_name]
|
|
|
|
- initWithTitle:[NSString stringWithUTF8String:server_name]
|
|
|
|
- action:@selector(noexist) keyEquivalent:@""] autorelease]];
|
|
|
|
-
|
|
|
|
- // Add configuration menu item
|
|
|
|
-=======
|
|
|
|
/* Add status bar menu */
|
|
/* Add status bar menu */
|
|
id menu = [[NSMenu new] autorelease];
|
|
id menu = [[NSMenu new] autorelease];
|
|
|
|
|
|
@@ -1211,51 +1016,31 @@ int main(int argc, char *argv[])
|
|
action:@selector(noexist) keyEquivalent:@""] autorelease]];
|
|
action:@selector(noexist) keyEquivalent:@""] autorelease]];
|
|
|
|
|
|
/* Add configuration menu item */
|
|
/* Add configuration menu item */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
[menu addItem:[[[NSMenuItem alloc]
|
|
[menu addItem:[[[NSMenuItem alloc]
|
|
initWithTitle:@"Edit configuration"
|
|
initWithTitle:@"Edit configuration"
|
|
action:@selector(editConfig) keyEquivalent:@""] autorelease]];
|
|
action:@selector(editConfig) keyEquivalent:@""] autorelease]];
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Add connect menu item
|
|
|
|
-=======
|
|
|
|
/* Add connect menu item */
|
|
/* Add connect menu item */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
[menu addItem:[[[NSMenuItem alloc]
|
|
[menu addItem:[[[NSMenuItem alloc]
|
|
initWithTitle:@"Open web root in a browser"
|
|
initWithTitle:@"Open web root in a browser"
|
|
action:@selector(openBrowser) keyEquivalent:@""] autorelease]];
|
|
action:@selector(openBrowser) keyEquivalent:@""] autorelease]];
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Separator
|
|
|
|
-[menu addItem:[NSMenuItem separatorItem]];
|
|
|
|
-
|
|
|
|
- // Add quit menu item
|
|
|
|
-=======
|
|
|
|
/* Separator */
|
|
/* Separator */
|
|
[menu addItem:[NSMenuItem separatorItem]];
|
|
[menu addItem:[NSMenuItem separatorItem]];
|
|
|
|
|
|
/* Add quit menu item */
|
|
/* Add quit menu item */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
[menu addItem:[[[NSMenuItem alloc]
|
|
[menu addItem:[[[NSMenuItem alloc]
|
|
initWithTitle:@"Quit"
|
|
initWithTitle:@"Quit"
|
|
action:@selector(shutDown) keyEquivalent:@"q"] autorelease]];
|
|
action:@selector(shutDown) keyEquivalent:@"q"] autorelease]];
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Attach menu to the status bar
|
|
|
|
-=======
|
|
|
|
/* Attach menu to the status bar */
|
|
/* Attach menu to the status bar */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
id item = [[[NSStatusBar systemStatusBar]
|
|
id item = [[[NSStatusBar systemStatusBar]
|
|
statusItemWithLength:NSVariableStatusItemLength] retain];
|
|
statusItemWithLength:NSVariableStatusItemLength] retain];
|
|
[item setHighlightMode:YES];
|
|
[item setHighlightMode:YES];
|
|
[item setImage:[NSImage imageNamed:@"civetweb_22x22.png"]];
|
|
[item setImage:[NSImage imageNamed:@"civetweb_22x22.png"]];
|
|
[item setMenu:menu];
|
|
[item setMenu:menu];
|
|
|
|
|
|
-<<<<<<< HEAD
|
|
|
|
- // Run the app
|
|
|
|
-=======
|
|
|
|
/* Run the app */
|
|
/* Run the app */
|
|
->>>>>>> b393b8d2410737a01a0d18987b5dfc185b3c0ef3
|
|
|
|
[NSApp activateIgnoringOtherApps:YES];
|
|
[NSApp activateIgnoringOtherApps:YES];
|
|
[NSApp run];
|
|
[NSApp run];
|
|
|
|
|