initial commit
This commit is contained in:
parent
a218563723
commit
18212eab12
@ -1,2 +1,11 @@
|
|||||||
# nginx-beleg
|
# nginx-beleg
|
||||||
|
|
||||||
|
Projekt Programmierung I - nginx webserver Log Parser
|
||||||
|
|
||||||
|
Beispiellogs unter
|
||||||
|
https://cloud.cc24.dev/s/Zexs2NS3EDYNzj2
|
||||||
|
abrufbar.
|
||||||
|
|
||||||
|
**ACHTUNG**
|
||||||
|
Einschränkungen:
|
||||||
|
- Kann derzeit nur accesslogs und redirect-accesslogs verarbeiten
|
||||||
|
242
lib/gzunpack.c
Normal file
242
lib/gzunpack.c
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
/* ----------------------------------------------------------------
|
||||||
|
# This source code is an example from my CodeBlog:
|
||||||
|
# http://codeblog.vurdalakov.net
|
||||||
|
#
|
||||||
|
# Copyright (c) 2011 Vurdalakov
|
||||||
|
# http://www.vurdalakov.net
|
||||||
|
# vurdalakov@gmail.com
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person
|
||||||
|
# obtaining a copy of this software and associated documentation
|
||||||
|
# files (the "Software"), to deal in the Software without
|
||||||
|
# restriction, including without limitation the rights to use,
|
||||||
|
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the
|
||||||
|
# Software is furnished to do so, subject to the following
|
||||||
|
# conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
# OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "gzunpack.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "zlib.h"
|
||||||
|
|
||||||
|
int readBuffer(FILE* fileHandle, void* buffer, size_t bytesToRead)
|
||||||
|
{
|
||||||
|
size_t bytesRead;
|
||||||
|
|
||||||
|
bytesRead = fread(buffer, 1, bytesToRead, fileHandle);
|
||||||
|
|
||||||
|
if (ferror(fileHandle)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bytesRead != bytesToRead) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* readZeroTerminatedString(FILE* fileHandle)
|
||||||
|
{
|
||||||
|
long filePosition;
|
||||||
|
int length;
|
||||||
|
unsigned char byte;
|
||||||
|
char* string;
|
||||||
|
|
||||||
|
filePosition = ftell(fileHandle);
|
||||||
|
|
||||||
|
if (-1 == filePosition) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
length = 0;
|
||||||
|
while (1) {
|
||||||
|
byte = fgetc(fileHandle);
|
||||||
|
if (ferror(fileHandle)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
length++;
|
||||||
|
|
||||||
|
if (0 == byte) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fseek(fileHandle, filePosition, SEEK_SET)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
string = malloc(length);
|
||||||
|
|
||||||
|
length = 0;
|
||||||
|
while (1) {
|
||||||
|
byte = fgetc(fileHandle);
|
||||||
|
if (ferror(fileHandle)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
string[length] = byte;
|
||||||
|
|
||||||
|
if (0 == byte) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
GzFileHeader *gzUnpackHeader(FILE *packedFileHandle)
|
||||||
|
{
|
||||||
|
unsigned short signature;
|
||||||
|
GzFileHeader* gzFileHeader;
|
||||||
|
|
||||||
|
if (!readBuffer(packedFileHandle, &signature, 2)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (signature != 0x8B1F) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
gzFileHeader = malloc(sizeof(GzFileHeader));
|
||||||
|
memset(gzFileHeader, 0, sizeof(GzFileHeader));
|
||||||
|
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->compressionMethod, 1)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->flags, 1)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->modificationTime, 4)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->extraFlags, 1)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->operatingSystem, 1)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gzFileHeader->flags & 0x04) {
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->extraFieldLength, 2)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->extraField, gzFileHeader->extraFieldLength)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gzFileHeader->flags & 0x08) {
|
||||||
|
gzFileHeader->originalFileName = readZeroTerminatedString(packedFileHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gzFileHeader->flags & 0x10) {
|
||||||
|
gzFileHeader->fileComment = readZeroTerminatedString(packedFileHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gzFileHeader->flags & 0x02) {
|
||||||
|
if (!readBuffer(packedFileHandle, &gzFileHeader->headerCrc, 2)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return gzFileHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gzFreeHeader(GzFileHeader *gzFileHeader)
|
||||||
|
{
|
||||||
|
if (0 == gzFileHeader) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(gzFileHeader->extraField);
|
||||||
|
free(gzFileHeader->originalFileName);
|
||||||
|
free(gzFileHeader->fileComment);
|
||||||
|
|
||||||
|
free(gzFileHeader);
|
||||||
|
}
|
||||||
|
|
||||||
|
int gzUnpackFile(FILE *packedFileHandle, FILE *unpackedFileHandle)
|
||||||
|
{
|
||||||
|
z_stream stream;
|
||||||
|
int result;
|
||||||
|
unsigned char input_buffer[65536];
|
||||||
|
unsigned char output_buffer[65536];
|
||||||
|
unsigned int size;
|
||||||
|
|
||||||
|
stream.zalloc = 0;
|
||||||
|
stream.zfree = 0;
|
||||||
|
stream.opaque = 0;
|
||||||
|
stream.next_in = 0;
|
||||||
|
stream.avail_in = 0;
|
||||||
|
|
||||||
|
result = inflateInit2(&stream, 16 + MAX_WBITS);
|
||||||
|
if (result != Z_OK) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
stream.avail_in = fread(input_buffer, 1, sizeof(input_buffer), packedFileHandle);
|
||||||
|
if (ferror(packedFileHandle)) {
|
||||||
|
(void)inflateEnd(&stream);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (0 == stream.avail_in) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
stream.next_in = input_buffer;
|
||||||
|
|
||||||
|
do {
|
||||||
|
stream.avail_out = sizeof(output_buffer);
|
||||||
|
stream.next_out = output_buffer;
|
||||||
|
|
||||||
|
result = inflate(&stream, Z_NO_FLUSH);
|
||||||
|
switch (result)
|
||||||
|
{
|
||||||
|
case Z_NEED_DICT:
|
||||||
|
result = Z_DATA_ERROR;
|
||||||
|
case Z_STREAM_ERROR:
|
||||||
|
case Z_DATA_ERROR:
|
||||||
|
case Z_MEM_ERROR:
|
||||||
|
(void)inflateEnd(&stream);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = sizeof(output_buffer) - stream.avail_out;
|
||||||
|
if ((fwrite(output_buffer, 1, size, unpackedFileHandle) != size) || ferror(unpackedFileHandle)) {
|
||||||
|
(void)inflateEnd(&stream);
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
} while (0 == stream.avail_out);
|
||||||
|
|
||||||
|
} while (result != Z_STREAM_END);
|
||||||
|
|
||||||
|
inflateEnd(&stream);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
56
lib/gzunpack.h
Normal file
56
lib/gzunpack.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* ----------------------------------------------------------------
|
||||||
|
# This source code is an example from my CodeBlog:
|
||||||
|
# http://codeblog.vurdalakov.net
|
||||||
|
#
|
||||||
|
# Copyright (c) 2011 Vurdalakov
|
||||||
|
# http://www.vurdalakov.net
|
||||||
|
# vurdalakov@gmail.com
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person
|
||||||
|
# obtaining a copy of this software and associated documentation
|
||||||
|
# files (the "Software"), to deal in the Software without
|
||||||
|
# restriction, including without limitation the rights to use,
|
||||||
|
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the
|
||||||
|
# Software is furnished to do so, subject to the following
|
||||||
|
# conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
# OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifndef GZUNPACK_H
|
||||||
|
#define GZUNPACK_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char compressionMethod;
|
||||||
|
unsigned char flags;
|
||||||
|
unsigned long modificationTime;
|
||||||
|
unsigned char extraFlags;
|
||||||
|
unsigned char operatingSystem;
|
||||||
|
unsigned short extraFieldLength;
|
||||||
|
unsigned char *extraField;
|
||||||
|
char *originalFileName;
|
||||||
|
char *fileComment;
|
||||||
|
unsigned short headerCrc;
|
||||||
|
} GzFileHeader;
|
||||||
|
|
||||||
|
GzFileHeader *gzUnpackHeader(FILE *packedFileHandle);
|
||||||
|
|
||||||
|
void gzFreeHeader(GzFileHeader *gzFileHeader);
|
||||||
|
|
||||||
|
int gzUnpackFile(FILE *packedFileHandle, FILE *unpackedFileHandle);
|
||||||
|
|
||||||
|
#endif
|
3201
src/main-prod.c
Normal file
3201
src/main-prod.c
Normal file
File diff suppressed because it is too large
Load Diff
1149
src/main.c
Normal file
1149
src/main.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user