156 lines
3.4 KiB
C
156 lines
3.4 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
|
* Please, refer LICENSE file for legal information
|
|
*
|
|
******************************************************************************/
|
|
|
|
/**
|
|
* @file observer.c
|
|
* @author Ilja Kartašov <ik@lowenware.com>
|
|
* @brief AISL event observer source code file
|
|
*
|
|
* @see https://lowenware.com/
|
|
*/
|
|
#include <string.h>
|
|
/* modules */
|
|
#include <mods/module.h>
|
|
/* 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;
|
|
}
|
|
}
|
|
|