/****************************************************************************** * * Copyright (c) 2017-2019 by Löwenware Ltd * Please, refer LICENSE file for legal information * ******************************************************************************/ /** * @file observer.c * @author Ilja Kartašov * @brief AISL event observer source code file * * @see https://lowenware.com/ */ #include /* modules */ #include /* commons */ #include "config.h" #include "end-points.h" #include "log.h" #include "observer.h" /* static struct ax_feedback m_feedback = {0}; */ AislStatus observer_init(void) { AislStatus result = AISL_SUCCESS; /* struct ax_feedback_cfg feedback_cfg; */ /* memset(&feedback_cfg, 0, sizeof(struct ax_feedback_cfg)); feedback_cfg.end_point = FEEDBACK_END_POINT; feedback_cfg.smtp.host = CONFIG_SMTP_SERVER; feedback_cfg.smtp.user = CONFIG_SMTP_USER; feedback_cfg.smtp.pass = CONFIG_SMTP_PASS; feedback_cfg.smtp.port = CONFIG_SMTP_PORT; feedback_cfg.mail_from = CONFIG_MAIL_FROM; feedback_cfg.mail_to = CONFIG_MAIL_TO; feedback_cfg.mail_subject = CONFIG_MAIL_SUBJECT; feedback_cfg.name_email = "email"; feedback_cfg.name_msg = "msg"; if ((result = ax_feedback_init(&m_feedback, &feedback_cfg)) != 0) return result; */ return result; } void observer_release(void) { /* ax_feedback_release(&m_feedback); */ } static void observer_on_stream_event(const struct aisl_evt *evt) { AxModule mods[] = { /* AX_MODULE(&m_feedback) */ NULL }; int i, c = sizeof (mods) / sizeof (mods[0]); for (i = 0; i < c; i++) { /* TODO: remove !!!! */ if (!mods[i]) continue; AislStatus status = ax_module_on_event(mods[i], evt); switch(status) { case AISL_IDLE: continue; case AISL_SUCCESS: return; default: LOG_ALERT("Module error: %s", aisl_status_to_string(status)); return; } } } static void observer_on_server_event(const struct aisl_evt *evt) { struct sockaddr_in srv_addr; AislServer srv = (AislServer) evt->source; AislStatus status = evt->status; aisl_server_get_address(srv, &srv_addr); LOG_STATE("HTTP%s server %s:%d: %s", (aisl_server_get_ssl(srv) ? "s" : ""), inet_ntoa(srv_addr.sin_addr), ntohs(srv_addr.sin_port), (status ? aisl_status_to_string(status) : "ready")); } static void observer_on_client_event(const struct aisl_evt *evt, const char *msg) { struct sockaddr_in cli_addr; AislClient cli = (AislClient) evt->source; aisl_client_get_address(cli, &cli_addr); if (evt->status == AISL_IDLE) msg = "timeout"; LOG_STATE( "HTTP%s client %s:%d: %s", (aisl_client_is_secure(cli) ? "s" : ""), inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port), msg ); } void observer_on_aisl_event(const struct aisl_evt *evt, void *p_ctx) { switch(evt->code) { case AISL_EVENT_SERVER_READY: case AISL_EVENT_SERVER_ERROR: observer_on_server_event(evt); break; case AISL_EVENT_CLIENT_CONNECT: observer_on_client_event(evt, "connected"); break; case AISL_EVENT_CLIENT_DISCONNECT: observer_on_client_event(evt, "disconnected"); break; case AISL_EVENT_STREAM_OPEN: case AISL_EVENT_STREAM_HEADER: case AISL_EVENT_STREAM_INPUT: case AISL_EVENT_STREAM_REQUEST: case AISL_EVENT_STREAM_OUTPUT: case AISL_EVENT_STREAM_CLOSE: case AISL_EVENT_STREAM_ERROR: observer_on_stream_event(evt); break; } }