Changeset 6 in Main for trunk/Server


Ignore:
Timestamp:
Sep 13, 2024, 7:28:20 PM (2 months ago)
Author:
Nishi
Message:

vhost

Location:
trunk/Server
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/Makefile

    r4 r6  
    1111
    1212tewi$(EXEC): $(OBJS) ../Common/common.a
    13         $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) ../Common/common.a
     13        $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) ../Common/common.a -lssl -lcrypto
    1414
    1515.c.o:
  • trunk/Server/config.c

    r5 r6  
    1010#include <cm_log.h>
    1111
    12 int tw_config_read(const char* path){
     12struct tw_config config;
     13
     14void tw_config_init(void) {}
     15
     16int tw_config_read(const char* path) {
    1317        cm_log("Config", "Reading %s", path);
    1418        char cbuf[2];
    1519        cbuf[1] = 0;
     20        int ln = 0;
    1621        FILE* f = fopen(path, "r");
    17         if(f != NULL){
     22        if(f != NULL) {
    1823                char* line = malloc(1);
    1924                line[0] = 0;
    20                 while(1){
     25                int stop = 0;
     26                char* vhost = NULL;
     27                while(stop == 0) {
    2128                        int c = fread(cbuf, 1, 1, f);
    22                         if(cbuf[0] == '\n' || c <= 0){
     29                        if(cbuf[0] == '\n' || c <= 0) {
     30                                ln++;
    2331                                char* l = cm_trim(line);
    24                                 if(strlen(l) > 0 && l[0] != '#'){
     32                                if(strlen(l) > 0 && l[0] != '#') {
    2533                                        char** r = cm_split(l, " \t");
    2634                                        int i;
    27                                         if(cm_strcaseequ(r[0], "Include") || cm_strcaseequ(r[0], "IncludeOptional")){
    28                                                 for(i = 1; r[i] != NULL; i++){
    29                                                         if(tw_config_read(r[i]) != 0 && cm_strcaseequ(r[0], "Include")){
    30                                                                 for(i = 0; r[i] != NULL; i++) free(r[i]);
    31                                                                 free(r);
    32                                                                 free(line);
    33                                                                 free(l);
    34                                                                 fclose(f);
    35                                                                 return 1;
     35                                        if(cm_strcaseequ(r[0], "Include") || cm_strcaseequ(r[0], "IncludeOptional")) {
     36                                                for(i = 1; r[i] != NULL; i++) {
     37                                                        if(tw_config_read(r[i]) != 0 && cm_strcaseequ(r[0], "Include")) {
     38                                                                stop = 1;
     39                                                                break;
    3640                                                        }
    3741                                                }
     42                                        } else if(cm_strcaseequ(r[0], "BeginVirtualHost")) {
     43                                                if(vhost != NULL) {
     44                                                        cm_log("Config", "Already in virtual host section");
     45                                                        stop = 1;
     46                                                } else {
     47                                                        if(r[1] == NULL) {
     48                                                                cm_log("Config", "Missing virtual host");
     49                                                                stop = 1;
     50                                                        } else {
     51                                                                vhost = cm_strdup(r[1]);
     52                                                        }
     53                                                }
     54                                        } else if(cm_strcaseequ(r[0], "EndVirtualHost")) {
     55                                                if(vhost == NULL) {
     56                                                        cm_log("Config", "Not in virtual host section");
     57                                                        stop = 1;
     58                                                } else {
     59                                                        free(vhost);
     60                                                        vhost = NULL;
     61                                                }
     62                                        } else {
     63                                                if(r[0] != NULL) {
     64                                                        cm_log("Config", "Unknown directive `%s' at line %d", r[0], ln);
     65                                                }
     66                                                stop = 1;
    3867                                        }
    3968                                        for(i = 0; r[i] != NULL; i++) free(r[i]);
     
    4574                                line[0] = 0;
    4675                                if(c <= 0) break;
    47                         }else if(cbuf[0] != '\r'){
     76                        } else if(cbuf[0] != '\r') {
    4877                                char* tmp = line;
    4978                                line = cm_strcat(tmp, cbuf);
     
    5382                free(line);
    5483                fclose(f);
    55                 return 0;
    56         }else{
     84                return stop;
     85        } else {
    5786                cm_log("Config", "Could not open the file");
    5887                return 1;
  • trunk/Server/main.c

    r4 r6  
    44#include <stdbool.h>
    55#include <string.h>
     6
     7#include <openssl/opensslv.h>
    68
    79#include <cm_log.h>
     
    2022                                if(!cm_do_log) {
    2123                                        cm_do_log = true;
    22                                         cm_log("", "This is Tewi HTTPd, version %s", tw_get_version());
     24                                        cm_log("", "This is Tewi HTTPd, version %s, using %s", tw_get_version(), OPENSSL_VERSION_TEXT);
    2325                                } else {
    2426                                        cm_do_log = true;
    2527                                }
    26                         } else if(strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-C") == 0){
     28                        } else if(strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-C") == 0) {
    2729                                i++;
    28                                 if(argv[i] == NULL){
     30                                if(argv[i] == NULL) {
    2931                                        fprintf(stderr, "Missing argument\n");
    3032                                        return 1;
     
    3739                }
    3840        }
    39         if(tw_config_read(config) != 0){
     41        tw_config_init();
     42        if(tw_config_read(config) != 0) {
    4043                fprintf(stderr, "Could not read the config\n");
    4144                return 1;
  • trunk/Server/tw_config.h

    r4 r6  
    44#define __TW_CONFIG_H__
    55
     6struct tw_config_entry {};
     7
     8struct tw_config {
     9        struct tw_config_entry root;
     10};
     11
     12void tw_config_init(void);
    613int tw_config_read(const char* path);
    714
Note: See TracChangeset for help on using the changeset viewer.