proxytrace.cc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include <limits.h>
  3. #include <assert.h>
  4. #include "../../../autoconf.h"
  5. #ifdef STDC_HEADERS
  6. // for exit()
  7. #include <unistd.h>
  8. #include <stdlib.h>
  9. #endif /* STDC_HEADERS */
  10. #include "proxytrace.h"
  11. static 
  12. const char *MethodStrings[] = {
  13.     "NONE",
  14.     "GET",
  15.     "POST",
  16.     "HEAD",
  17.     "CONNECT",
  18.     "BAD#"
  19. };
  20. #define MAX_METHODS (sizeof(MethodStrings)/sizeof(*MethodStrings)-1)
  21. static
  22. const char *ProtocolStrings[] = {
  23.     "NONE",
  24.     "http",
  25.     "ftp",
  26.     "gopher",
  27.     "wais",
  28.     "cache_object",
  29.     "TOTAL",
  30.     "BAD#"
  31. };
  32. #define MAX_PROTOCOLS (sizeof(ProtocolStrings)/sizeof(*ProtocolStrings)-1)
  33. static
  34. const char *ExtensionStrings[] = {
  35. "",
  36.     ".html",
  37.     ".gif",
  38.     ".cgi",
  39. ".data",
  40. ".class",
  41. ".map",
  42.     ".jpeg",
  43.     ".mpeg",
  44. ".OTHER",
  45. ".BAD#"
  46. };
  47.   
  48. #define MAX_EXTENSIONS (sizeof(ExtensionStrings)/sizeof(*ExtensionStrings)-1)
  49. const char *MethodStr(int method) {
  50.         assert (MAX_METHODS < INT_MAX);
  51. if (method < 0 || method > ((int)MAX_METHODS))
  52. method = MAX_METHODS;
  53. return MethodStrings[method];
  54. }
  55. const char *ProtocolStr(int protocol) {
  56. assert (MAX_PROTOCOLS < INT_MAX);
  57. if (protocol < 0 || protocol > ((int)MAX_PROTOCOLS))
  58. protocol = MAX_PROTOCOLS;
  59. return ProtocolStrings[protocol];
  60. }
  61. const char *ExtensionStr(int type) {
  62. assert (MAX_EXTENSIONS < INT_MAX);
  63. if (type < 0 || type > ((int)MAX_EXTENSIONS))
  64. type = MAX_EXTENSIONS;
  65. return ExtensionStrings[type];
  66. }
  67. const char *ExtensionTypeStr(int type) {
  68. return (type == 0) ? "NONE" : (ExtensionStr(type)+1);
  69. }
  70. size_t ReadHeader(FILE *in_file, void *userBuf) {
  71. static char defaultBuf[TRACE_HEADER_SIZE];
  72. void *buf = (userBuf) ? userBuf : defaultBuf;
  73. if (fread(buf, TRACE_HEADER_SIZE, 1, in_file) != 1) {
  74. fprintf(stderr, "%s:%d error reading file header (%d bytes)n",
  75. __FILE__, __LINE__, TRACE_HEADER_SIZE);
  76. exit(-2);
  77. }
  78. return TRACE_HEADER_SIZE;
  79. }
  80. size_t ReadEntry(FILE *in_file, TEntry *entry) {
  81. size_t items_read = fread(entry, sizeof(TEntry), 1, in_file);
  82. if (items_read < 0 || items_read > 1) {
  83. fprintf(stderr, "%s:%d error reading trace entry (%u bytes)n",
  84. __FILE__, __LINE__, (unsigned)sizeof(TEntry));
  85. exit(-2);
  86. }
  87. return items_read*sizeof(TEntry);
  88. }
  89. size_t ReadEntryV1(FILE *in_file, TEntry *entry) {
  90. size_t items_read = fread(&entry -> head, sizeof(TEntryHeader), 1, in_file);
  91. if (items_read == 1)
  92. items_read = fread(&entry -> tail, sizeof(TEntryTail), 1, in_file);
  93. if (items_read < 0 || items_read > 1) {
  94. fprintf(stderr, "%s:%d error reading v1 trace entry (%u bytes)n",
  95. __FILE__, __LINE__, (unsigned)(sizeof(TEntryHeader)+sizeof(TEntryTail)));
  96. exit(-2);
  97. }
  98. entry -> url = 0; /* initialize unused field */
  99. return items_read*(sizeof(TEntryHeader)+sizeof(TEntryTail));
  100. }