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