Line data Source code
1 : #include "http_minipot_session_report.h"
2 : #include <minipot_utils.h>
3 : #include "log.h"
4 :
5 : #define CONNECT_EV "connect"
6 : #define MSG_EV "message"
7 : #define LOGIN_EV "login"
8 : #define INVALID_EV "invalid"
9 :
10 : #define TYPE "http"
11 :
12 : #define METHOD "method"
13 : #define URL "url"
14 : #define USER_AG "user_agent"
15 : #define USERNAME "username"
16 : #define PASSWORD "password"
17 :
18 0 : int http_report_connect(struct http_minipot_session *s) {
19 0 : MINIPOT_TRACE_FUNC_FD(s->parent.fd);
20 0 : struct minipot_sentinel_msg msg = {
21 0 : .ts = time(NULL),
22 : .type = TYPE,
23 0 : .ip = s->parent.ip_addr,
24 : .action = CONNECT_EV,
25 : .data = NULL,
26 : .data_len = 0,
27 : };
28 0 : return minipot_report(s->http_minipot->parent.report_fd,
29 0 : s->http_minipot->parent.smsg_packer, &msg);
30 : }
31 :
32 0 : int http_report_invalid(struct http_minipot_session *s) {
33 0 : MINIPOT_TRACE_FUNC_FD(s->parent.fd);
34 0 : struct minipot_sentinel_msg msg = {
35 0 : .ts = time(NULL),
36 : .type = TYPE,
37 0 : .ip = s->parent.ip_addr,
38 : .action = INVALID_EV,
39 : .data = NULL,
40 : .data_len = 0,
41 : };
42 0 : return minipot_report(s->http_minipot->parent.report_fd,
43 0 : s->http_minipot->parent.smsg_packer, &msg);
44 : }
45 :
46 0 : int http_report_login(struct http_minipot_session *s, const char *username,
47 : size_t username_len, const char *password, size_t password_len) {
48 0 : MINIPOT_TRACE_FUNC_FD(s->parent.fd);
49 0 : if (username_len == 0
50 0 : || minipot_check_data(username, username_len)
51 0 : || minipot_check_data(password, password_len)
52 0 : || minipot_check_data(s->url, s->url_len)
53 0 : || minipot_check_data(s->user_ag, s->user_ag_len))
54 0 : return http_report_invalid(s);
55 0 : struct minipot_uint8_t_pair data[] = {
56 0 : {METHOD, strlen(METHOD), s->method, s->method_len},
57 0 : {URL, strlen(URL), s->url, s->url_len},
58 : {USERNAME, strlen(USERNAME), username, username_len},
59 : {PASSWORD, strlen(PASSWORD), password, password_len},
60 : // MUST BE THE LAST ONE - IT IS OPTIONAL !!!
61 0 : {USER_AG, strlen(USER_AG), s->user_ag, s->user_ag_len},
62 : };
63 0 : struct minipot_sentinel_msg msg = {
64 0 : .ts = time(NULL),
65 : .type = TYPE,
66 0 : .ip = s->parent.ip_addr,
67 : .action = LOGIN_EV,
68 : .data = data,
69 : // method, url, username, password + optional user agent
70 0 : .data_len = s->user_ag_len == 0 ? 4 : 5,
71 : };
72 0 : return minipot_report(s->http_minipot->parent.report_fd,
73 0 : s->http_minipot->parent.smsg_packer, &msg);
74 : }
75 :
76 0 : int http_report_message(struct http_minipot_session *s) {
77 0 : MINIPOT_TRACE_FUNC_FD(s->parent.fd);
78 0 : if (minipot_check_data(s->url, s->url_len)
79 0 : || minipot_check_data(s->user_ag, s->user_ag_len))
80 0 : return http_report_invalid(s);
81 0 : struct minipot_uint8_t_pair data[] = {
82 0 : {METHOD, strlen(METHOD), s->method, s->method_len},
83 0 : {URL, strlen(URL), s->url, s->url_len},
84 : // MUST BE THE LAST ONE - IT IS OPTIONAL !!!
85 0 : {USER_AG, strlen(USER_AG), s->user_ag, s->user_ag_len},
86 : };
87 0 : struct minipot_sentinel_msg msg = {
88 0 : .ts = time(NULL),
89 : .type = TYPE,
90 0 : .ip = s->parent.ip_addr,
91 : .action = MSG_EV,
92 : .data = data,
93 : // method, url + optional user
94 0 : .data_len = s->user_ag_len == 0 ? 2 : 3,
95 : };
96 0 : return minipot_report(s->http_minipot->parent.report_fd,
97 0 : s->http_minipot->parent.smsg_packer, &msg);
98 : }
|