Changeset 62 in Main for trunk/Server/main.c
- Timestamp:
- Sep 19, 2024, 5:02:26 AM (2 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Server/main.c
r51 r62 15 15 16 16 #include <cm_log.h> 17 #include <cm_string.h> 17 18 18 19 #include "tw_config.h" … … 26 27 extern bool cm_do_log; 27 28 extern struct tw_config config; 29 extern FILE* logfile; 28 30 29 31 char tw_server[2048]; 30 32 33 int startup(int argc, char** argv); 34 35 #ifdef SERVICE 36 SERVICE_STATUS status; 37 SERVICE_STATUS_HANDLE status_handle; 38 39 void WINAPI servhandler(DWORD control){ 40 switch(control){ 41 case SERVICE_CONTROL_STOP: 42 case SERVICE_CONTROL_SHUTDOWN: 43 status.dwCurrentState = SERVICE_STOP_PENDING; 44 break; 45 } 46 SetServiceStatus(status_handle, &status); 47 } 48 49 void WINAPI servmain(DWORD argc, LPSTR* argv){ 50 logfile = fopen(PREFIX "/logs/tewi.log", "a"); 51 if(logfile == NULL) logfile = stderr; 52 status.dwServiceType = SERVICE_WIN32_OWN_PROCESS; 53 status.dwCurrentState = SERVICE_START_PENDING; 54 status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; 55 status.dwWin32ExitCode = NO_ERROR; 56 status.dwServiceSpecificExitCode = 0; 57 status.dwCheckPoint = 0; 58 status.dwWaitHint = 0; 59 status_handle = RegisterServiceCtrlHandler("Tewi HTTPd", servhandler); 60 if(status_handle == NULL) return; 61 if(SetServiceStatus(status_handle, &status) == 0) return; 62 int st = startup(argc, argv); 63 if(st != -1){ 64 status.dwWin32ExitCode = NO_ERROR; 65 status.dwServiceSpecificExitCode = st; 66 status.dwCurrentState = SERVICE_STOPPED; 67 SetServiceStatus(status_handle, &status); 68 return; 69 } 70 status.dwCurrentState = SERVICE_RUNNING; 71 SetServiceStatus(status_handle, &status); 72 tw_server_loop(); 73 status.dwCurrentState = SERVICE_STOPPED; 74 SetServiceStatus(status_handle, &status); 75 } 76 #endif 77 31 78 int main(int argc, char** argv) { 79 logfile = stderr; 80 #ifdef SERVICE 81 SERVICE_TABLE_ENTRY table[] = {{"Tewi HTTPd", servmain}, {NULL, NULL}}; 82 StartServiceCtrlDispatcher(table); 83 #else 84 int st = startup(argc, argv); 85 if(st != -1) return st; 86 tw_server_loop(); 87 #endif 88 } 89 90 int startup(int argc, char** argv){ 32 91 int i; 33 92 const char* confpath = PREFIX "/etc/tewi.conf"; 34 for(i = 1; i < argc; i++) { 35 if(argv[i][0] == '-') { 36 if(strcmp(argv[i], "--verbose") == 0 || strcmp(argv[i], "-v") == 0) { 37 if(!cm_do_log) { 38 cm_do_log = true; 39 #ifndef NO_SSL 40 cm_log("", "This is Tewi HTTPd, version %s, using %s", tw_get_version(), OPENSSL_VERSION_TEXT); 41 #else 42 cm_log("", "This is Tewi HTTPd, version %s", tw_get_version()); 43 #endif 93 if(argv != NULL){ 94 for(i = 1; i < argc; i++) { 95 if(argv[i][0] == '-') { 96 if(strcmp(argv[i], "--verbose") == 0 || strcmp(argv[i], "-v") == 0) { 97 if(!cm_do_log) { 98 cm_do_log = true; 99 #ifndef NO_SSL 100 cm_log("", "This is Tewi HTTPd, version %s, using %s", tw_get_version(), OPENSSL_VERSION_TEXT); 101 #else 102 cm_log("", "This is Tewi HTTPd, version %s", tw_get_version()); 103 #endif 104 } else { 105 cm_do_log = true; 106 } 107 } else if(strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-C") == 0) { 108 i++; 109 if(argv[i] == NULL) { 110 fprintf(stderr, "Missing argument\n"); 111 return 1; 112 } 113 confpath = argv[i]; 114 } else if(strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-V") == 0) { 115 printf("Tewi HTTPd Tewi/%s\n", tw_get_version()); 116 printf("Under public domain.\n"); 117 printf("Original by 2024 Nishi\n"); 118 printf("\n"); 119 printf("Usage: %s [--config|-C config] [--verbose|-v] [--version|-V]\n", argv[0]); 120 printf("--config | -C config : Specify config\n"); 121 printf("--verbose | -v : Verbose mode\n"); 122 printf("--version | -V : Version information\n"); 123 return 0; 44 124 } else { 45 cm_do_log = true; 46 } 47 } else if(strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-C") == 0) { 48 i++; 49 if(argv[i] == NULL) { 50 fprintf(stderr, "Missing argument\n"); 125 fprintf(stderr, "Unknown option: %s\n", argv[i]); 51 126 return 1; 52 127 } 53 confpath = argv[i];54 } else if(strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-V") == 0) {55 printf("Tewi HTTPd Tewi/%s\n", tw_get_version());56 printf("Under public domain.\n");57 printf("Original by 2024 Nishi\n");58 printf("\n");59 printf("Usage: %s [--config|-C config] [--verbose|-v] [--version|-V]\n", argv[0]);60 printf("--config | -C config : Specify config\n");61 printf("--verbose | -v : Verbose mode\n");62 printf("--version | -V : Version information\n");63 return 0;64 } else {65 fprintf(stderr, "Unknown option: %s\n", argv[i]);66 return 1;67 128 } 68 129 } … … 78 139 } 79 140 sprintf(tw_server, "Tewi/%s (%s)%s", tw_get_version(), tw_get_platform(), config.extension == NULL ? "" : config.extension); 80 cm_log("Daemon", "Ready, server: %s", tw_server); 141 char* r = cm_strcat(tw_server, " running..."); 142 cm_force_log(r); 143 free(r); 81 144 #ifndef __MINGW32__ 82 145 signal(SIGCHLD, SIG_IGN); … … 84 147 SetConsoleTitle(tw_server); 85 148 #endif 86 tw_server_loop();149 return -1; 87 150 }
Note:
See TracChangeset
for help on using the changeset viewer.