/
parse.c
67 lines (55 loc) · 1.37 KB
/
parse.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
* Logswan 2.1.11
* Copyright (c) 2015-2021, Frederic Cambus
* https://www.logswan.org
*
* Created: 2015-05-31
* Last Updated: 2021-02-15
*
* Logswan is released under the BSD 2-Clause license.
* See LICENSE file for details.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <string.h>
#include "parse.h"
void
parse_date(struct date *parsed_date, char *date)
{
parsed_date->day = strtok(date, "/");
parsed_date->month = strtok(NULL, "/");
parsed_date->year = strtok(NULL, ":");
parsed_date->hour = strtok(NULL, ":");
parsed_date->minute = strtok(NULL, ":");
parsed_date->second = strtok(NULL, " ");
}
void
parse_line(struct logline *parsed_line, char *linebuffer)
{
if (*linebuffer) {
/* Remote host */
parsed_line->remote_host = strtok(linebuffer, " ");
/* User-identifier */
strtok(NULL, " ");
/* User ID */
strtok(NULL, "[");
/* Date */
parsed_line->date = strtok(NULL, "]");
/* Requested resource */
strtok(NULL, "\"");
parsed_line->request = strtok(NULL, "\"");
/* HTTP status codes */
parsed_line->status_code = strtok(NULL, " ");
/* Returned object size */
parsed_line->object_size = strtok(NULL, " \"");
}
}
void
parse_request(struct request *parsed_request, char *request)
{
char *pch = strrchr(request, ' ');
if (pch) {
parsed_request->protocol = pch + 1;
parsed_request->method = strtok(request, " ");
}
}