00001
00002 #include <stdio.h>
00003 #include "../../../autoconf.h"
00004 #ifdef STDC_HEADERS
00005
00006 #include <unistd.h>
00007 #include <stdlib.h>
00008 #endif
00009
00010 #include "proxytrace.h"
00011
00012 static
00013 const char *MethodStrings[] = {
00014 "NONE",
00015 "GET",
00016 "POST",
00017 "HEAD",
00018 "CONNECT",
00019 "BAD#"
00020 };
00021
00022 #define MAX_METHODS (sizeof(MethodStrings)/sizeof(*MethodStrings)-1)
00023
00024 static
00025 const char *ProtocolStrings[] = {
00026 "NONE",
00027 "http",
00028 "ftp",
00029 "gopher",
00030 "wais",
00031 "cache_object",
00032 "TOTAL",
00033 "BAD#"
00034 };
00035
00036 #define MAX_PROTOCOLS (sizeof(ProtocolStrings)/sizeof(*ProtocolStrings)-1)
00037
00038 static
00039 const char *ExtensionStrings[] = {
00040 "",
00041 ".html",
00042 ".gif",
00043 ".cgi",
00044 ".data",
00045 ".class",
00046 ".map",
00047 ".jpeg",
00048 ".mpeg",
00049 ".OTHER",
00050 ".BAD#"
00051 };
00052
00053 #define MAX_EXTENSIONS (sizeof(ExtensionStrings)/sizeof(*ExtensionStrings)-1)
00054
00055 const char *MethodStr(int method) {
00056
00057 if (method < 0 || method > MAX_METHODS)
00058 method = MAX_METHODS;
00059
00060 return MethodStrings[method];
00061 }
00062
00063 const char *ProtocolStr(int protocol) {
00064
00065 if (protocol < 0 || protocol > MAX_PROTOCOLS)
00066 protocol = MAX_PROTOCOLS;
00067
00068 return ProtocolStrings[protocol];
00069 }
00070
00071 const char *ExtensionStr(int type) {
00072
00073 if (type < 0 || type > MAX_EXTENSIONS)
00074 type = MAX_EXTENSIONS;
00075
00076 return ExtensionStrings[type];
00077 }
00078
00079 const char *ExtensionTypeStr(int type) {
00080
00081 return (type == 0) ? "NONE" : (ExtensionStr(type)+1);
00082 }
00083
00084
00085 size_t ReadHeader(FILE *in_file, void *userBuf) {
00086 static char defaultBuf[TRACE_HEADER_SIZE];
00087
00088 void *buf = (userBuf) ? userBuf : defaultBuf;
00089
00090 if (fread(buf, TRACE_HEADER_SIZE, 1, in_file) != 1) {
00091 fprintf(stderr, "%s:%d error reading file header (%d bytes)\n",
00092 __FILE__, __LINE__, TRACE_HEADER_SIZE);
00093 exit(-2);
00094 }
00095
00096 return TRACE_HEADER_SIZE;
00097 }
00098
00099 size_t ReadEntry(FILE *in_file, TEntry *entry) {
00100
00101 size_t items_read = fread(entry, sizeof(TEntry), 1, in_file);
00102
00103 if (items_read < 0 || items_read > 1) {
00104 fprintf(stderr, "%s:%d error reading trace entry (%u bytes)\n",
00105 __FILE__, __LINE__, (unsigned)sizeof(TEntry));
00106 exit(-2);
00107 }
00108
00109 return items_read*sizeof(TEntry);
00110 }
00111
00112 size_t ReadEntryV1(FILE *in_file, TEntry *entry) {
00113
00114 size_t items_read = fread(&entry -> head, sizeof(TEntryHeader), 1, in_file);
00115
00116 if (items_read == 1)
00117 items_read = fread(&entry -> tail, sizeof(TEntryTail), 1, in_file);
00118
00119 if (items_read < 0 || items_read > 1) {
00120 fprintf(stderr, "%s:%d error reading v1 trace entry (%u bytes)\n",
00121 __FILE__, __LINE__, (unsigned)(sizeof(TEntryHeader)+sizeof(TEntryTail)));
00122 exit(-2);
00123 }
00124
00125 entry -> url = 0;
00126
00127 return items_read*(sizeof(TEntryHeader)+sizeof(TEntryTail));
00128 }