Привет, пример для веб-сервера mongoose с SSL в C - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь установить веб-сервер mongoose v3.3 с самозаверяющим сертификатом SSL.Я знаю, как это сделать без SSL, но я хочу реализовать HTTPS.

Я реализовал что-то вроде этого:

void *event_handler(enum mg_event event,
struct mg_connection *conn) {

const struct mg_request_info *request_info = mg_get_request_info(conn);

static void* done = "done";

if (event == MG_NEW_REQUEST) {
    if (strcmp(request_info->uri, "/hello") == 0) {
        // handle c[renderer] request
        if(strcmp(request_info->request_method, "GET") != 0) {
            // send error (we only care about HTTP GET)
            mg_printf(conn, "HTTP/1.1 %d Error (%s)\r\n\r\n%s",
                500,
                "we only care about HTTP GET",
                "we only care about HTTP GET");
            // return not null means we handled the request
            return done;
        }

        // handle your GET request to /hello
        char* content = "Hello World!";
        char* mimeType = "text/plain";
        int contentLength = strlen(content);

        mg_printf(conn,
            "HTTP/1.1 200 OK\r\n"
            "Cache: no-cache\r\n"
            "Content-Type: %s\r\n"
            "Content-Length: %d\r\n"
            "\r\n",
            mimeType,
            contentLength);
        mg_write(conn, content, contentLength);
        return done;
        }
    }
    // in this example i only handle /hello
    mg_printf(conn, "HTTP/1.1 %d Error (%s)\r\n\r\n%s",
        500, /* This the error code you want to send back*/
        "Invalid Request.",
        "Invalid Request.");
    return done;
}

// No suitable handler found, mark as not processed. Mongoose will
// try to serve the request.
return NULL;
}

int main(int argc, char **argv) {

const char *options[] = {
    "ssl_certificate", "cert.pem",
    "listening_ports", "443s",
    "num_threads", "10",
    NULL
};

static struct mg_context *ctx;

ctx = mg_start(&event_handler, options);
if(ctx == NULL) {
    exit(EXIT_FAILURE);
}

puts("Server running, press enter to exit\n");
getchar();
mg_stop(ctx);

return EXIT_SUCCESS;
}

Проблема в том, что я не могу получить доступ к своему серверу извеб-браузер.Я думаю, проблема в том, что первое событие, которое получает мой обратный вызов, - это MG_INIT_SSL, но я не знаю, как его обработать или обработать.Кто-нибудь может помочь, пожалуйста?

...