diff --git a/examples/chat.c b/examples/chat.c index c0784bba..bb2ee387 100644 --- a/examples/chat.c +++ b/examples/chat.c @@ -21,6 +21,11 @@ #include "mongoose.h" +#define MAX_USER_LEN 20 +#define MAX_MESSAGE_LEN 100 +#define MAX_MESSAGES 5 +#define MAX_SESSIONS 2 + static const char *login_url = "/login.html"; static const char *authorize_url = "/authorize"; static const char *web_root = "./html"; @@ -37,13 +42,23 @@ static const char *ajax_reply_start = // the message is then originated from the server itself. struct message { long id; - char user[20]; - char text[200]; + char user[MAX_USER_LEN]; + char text[MAX_MESSAGE_LEN]; time_t utc_timestamp; }; -static struct message messages[5]; // Ringbuffer where messages are kept +// Describes web session. +struct session { + char session_id[33]; + char authenticated_user[MAX_USER_LEN]; + time_t expiration_timestamp_utc; +}; + +static struct message messages[MAX_MESSAGES]; // Ringbuffer for messages +static struct session sessions[MAX_SESSIONS]; // Current sessions static long last_message_id; + +// Protects messages, sessions, last_message_id static pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER; // Get a get of messages with IDs greater than last_id and transform them @@ -208,9 +223,9 @@ static int must_authorize(const struct mg_request_info *request_info) { strcmp(request_info->uri, authorize_url) != 0); } -static int process_request(struct mg_connection *conn, +static enum mg_error_t process_request(struct mg_connection *conn, const struct mg_request_info *request_info) { - int processed = 1; + enum mg_error_t processed = MG_SUCCESS; if (must_authorize(request_info) && !is_authorized(conn, request_info)) { @@ -225,7 +240,7 @@ static int process_request(struct mg_connection *conn, } else { // No suitable handler found, mark as not processed. Mongoose will // try to serve the request. - processed = 0; + processed = MG_ERROR; } return processed;