Changeset 12 in Main for trunk/Server/config.c


Ignore:
Timestamp:
Sep 13, 2024, 10:36:03 PM (2 months ago)
Author:
Nishi
Message:

vhost works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/config.c

    r7 r12  
    77#include <stdlib.h>
    88#include <string.h>
     9#include <unistd.h>
    910
    1011#include <cm_string.h>
     
    1314struct tw_config config;
    1415
     16struct tw_config_entry* tw_vhost_match(const char* name, int port) {
     17        int i;
     18        for(i = 0; i < config.vhost_count; i++) {
     19                if(strcmp(config.vhosts[i].name, name) == 0 && config.vhosts[i].port == port) {
     20                        return &config.vhosts[i];
     21                }
     22        }
     23        return &config.root;
     24}
     25
    1526void tw_config_init(void) {
    1627        int i;
     
    1829                config.ports[i] = -1;
    1930        }
     31        for(i = 0; i < MAX_VHOSTS; i++) {
     32                config.vhosts[i].sslkey = NULL;
     33                config.vhosts[i].sslcert = NULL;
     34        }
     35        config.root.sslkey = NULL;
     36        config.root.sslcert = NULL;
     37        config.vhost_count = 0;
     38        gethostname(config.hostname, 1024);
    2039}
    2140
     
    3049                line[0] = 0;
    3150                int stop = 0;
     51                struct tw_config_entry* current = &config.root;
    3252                char* vhost = NULL;
    3353                while(stop == 0) {
     
    4868                                        } else if(cm_strcaseequ(r[0], "BeginVirtualHost")) {
    4969                                                if(vhost != NULL) {
    50                                                         cm_log("Config", "Already in virtual host section");
     70                                                        cm_log("Config", "Already in virtual host section at line %d", ln);
    5171                                                        stop = 1;
    5272                                                } else {
    5373                                                        if(r[1] == NULL) {
    54                                                                 cm_log("Config", "Missing virtual host");
     74                                                                cm_log("Config", "Missing virtual host at line %d", ln);
    5575                                                                stop = 1;
    5676                                                        } else {
    5777                                                                vhost = cm_strdup(r[1]);
     78                                                                current = &config.vhosts[config.vhost_count++];
     79                                                                int i;
     80                                                                current->name = cm_strdup(vhost);
     81                                                                current->port = 80;
     82                                                                for(i = 0; vhost[i] != 0; i++) {
     83                                                                        if(vhost[i] == ':') {
     84                                                                                current->name[i] = 0;
     85                                                                                current->port = atoi(current->name + i + 1);
     86                                                                                break;
     87                                                                        }
     88                                                                }
    5889                                                        }
    5990                                                }
    6091                                        } else if(cm_strcaseequ(r[0], "EndVirtualHost")) {
    6192                                                if(vhost == NULL) {
    62                                                         cm_log("Config", "Not in virtual host section");
     93                                                        cm_log("Config", "Not in virtual host section at line %d", ln);
    6394                                                        stop = 1;
    6495                                                } else {
    6596                                                        free(vhost);
    6697                                                        vhost = NULL;
     98                                                        current = &config.root;
    6799                                                }
    68100                                        } else if(cm_strcaseequ(r[0], "Listen") || cm_strcaseequ(r[0], "ListenSSL")) {
     
    75107                                                                ;
    76108                                                        config.ports[j] = port;
     109                                                }
     110                                        } else if(cm_strcaseequ(r[0], "SSLKey")) {
     111                                                if(r[1] == NULL) {
     112                                                        cm_log("Config", "Missing path at line %d", ln);
     113                                                        stop = 1;
     114                                                } else {
     115                                                        if(current->sslkey != NULL) free(current->sslkey);
     116                                                        current->sslkey = cm_strdup(r[1]);
     117                                                }
     118                                        } else if(cm_strcaseequ(r[0], "SSLCertificate")) {
     119                                                if(r[1] == NULL) {
     120                                                        cm_log("Config", "Missing path at line %d", ln);
     121                                                        stop = 1;
     122                                                } else {
     123                                                        if(current->sslcert != NULL) free(current->sslcert);
     124                                                        current->sslcert = cm_strdup(r[1]);
    77125                                                }
    78126                                        } else {
Note: See TracChangeset for help on using the changeset viewer.