Changeset 6 in Main


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

vhost

Location:
trunk
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Common/Makefile

    r3 r6  
    1111
    1212common.a: $(OBJS)
    13         ar rcs $@ $(OBJS)
     13        $(AR) rcs $@ $(OBJS)
    1414
    1515.c.o:
  • trunk/Common/log.c

    r3 r6  
    4040                                result = cm_strcat(tmp, va_arg(args, char*));
    4141                                free(tmp);
     42                        } else if(log[i] == 'd') {
     43                                int a = va_arg(args, int);
     44                                char buf[128];
     45                                sprintf(buf, "%d", a);
     46                                char* tmp = result;
     47                                result = cm_strcat(tmp, buf);
     48                                free(tmp);
    4249                        }
    4350                } else {
  • trunk/Common/string.c

    r5 r6  
    1616char* cm_strdup(const char* str) { return cm_strcat(str, ""); }
    1717
    18 char* cm_trimstart(const char* str){
     18char* cm_trimstart(const char* str) {
    1919        int i;
    20         for(i = 0; str[i] != 0; i++){
    21                 if(str[i] != ' ' && str[i] != '\t'){
     20        for(i = 0; str[i] != 0; i++) {
     21                if(str[i] != ' ' && str[i] != '\t') {
    2222                        return cm_strdup(str + i);
    2323                }
     
    2626}
    2727
    28 char* cm_trimend(const char* str){
     28char* cm_trimend(const char* str) {
    2929        char* s = cm_strdup(str);
    3030        int i;
    31         for(i = strlen(s) - 1; i >= 0; i--){
    32                 if(s[i] != '\t' && s[i] != ' '){
     31        for(i = strlen(s) - 1; i >= 0; i--) {
     32                if(s[i] != '\t' && s[i] != ' ') {
    3333                        s[i + 1] = 0;
    3434                        break;
     
    3838}
    3939
    40 char* cm_trim(const char* str){
     40char* cm_trim(const char* str) {
    4141        char* tmp = cm_trimstart(str);
    4242        char* s = cm_trimend(tmp);
     
    4545}
    4646
    47 char** cm_split(const char* str, const char* by){
     47char** cm_split(const char* str, const char* by) {
    4848        int i;
    4949        char** r = malloc(sizeof(*r));
     
    5555        bool dq = false;
    5656        bool sq = false;
    57         for(i = 0;; i++){
     57        for(i = 0;; i++) {
    5858                int j;
    5959                bool has = false;
    60                 for(j = 0; by[j] != 0; j++){
    61                         if(by[j] == str[i]){
     60                for(j = 0; by[j] != 0; j++) {
     61                        if(by[j] == str[i]) {
    6262                                has = true;
    6363                                break;
    6464                        }
    6565                }
    66                 if(!(dq || sq) && (has || str[i] == 0)){
    67                         if(strlen(b) > 0){
     66                if(!(dq || sq) && (has || str[i] == 0)) {
     67                        if(strlen(b) > 0) {
    6868                                char** old = r;
    6969                                int j;
    70                                 for(j = 0; old[j] != NULL; j++);
     70                                for(j = 0; old[j] != NULL; j++)
     71                                        ;
    7172                                r = malloc(sizeof(*r) * (j + 2));
    7273                                for(j = 0; old[j] != NULL; j++) r[j] = old[j];
     
    7879                        b[0] = 0;
    7980                        if(str[i] == 0) break;
    80                 }else{
    81                         if(str[i] == '"' && !sq){
     81                } else {
     82                        if(str[i] == '"' && !sq) {
    8283                                dq = !dq;
    83                         }else if(str[i] == '\'' && !dq){
     84                        } else if(str[i] == '\'' && !dq) {
    8485                                sq = !sq;
    85                         }else{
     86                        } else {
    8687                                cbuf[0] = str[i];
    8788                                char* tmp = b;
     
    9596}
    9697
    97 bool cm_strcaseequ(const char* a, const char* b){
     98bool cm_strcaseequ(const char* a, const char* b) {
    9899        if(a == NULL) return false;
    99100        if(b == NULL) return false;
    100101        if(strlen(a) != strlen(b)) return false;
    101102        int i;
    102         for(i = 0; a[i] != 0; i++){
     103        for(i = 0; a[i] != 0; i++) {
    103104                if(tolower(a[i]) != tolower(b[i])) return false;
    104105        }
  • trunk/Makefile

    r4 r6  
    1818
    1919format:
    20         clang-format --verbose -i `find . -name "*.c" -or -name "*.h"`
     20        clang-format --verbose -i `find ./Server ./Common -name "*.c" -or -name "*.h"`
    2121
    2222clean:
  • trunk/Platform/generic.mk

    r3 r6  
    66LDFLAGS =
    77LIBS =
     8EXEC =
  • 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.