logswan

Fast Web log analyzer using probabilistic data structures
Log | Files | Refs | README | LICENSE

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 }