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

通讯编程

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <fcntl.h>
  6. #include <sys/stat.h>
  7. #include <sys/types.h>
  8. #include <tcl.h>
  9. #include "proxytrace.h"
  10. #include "my-endian.h"
  11.  
  12. #ifdef PC
  13. #include <io.h>
  14. #endif
  15. void PrintEntry_Text(FILE *out_file, TEntry *entry, int noURL);
  16. void PrintEntry_Squid(FILE *out_file, TEntry *entry, int swap);
  17. static enum { ifNone = 0, ifDECV1_0, ifDECV1_2 } InputFormat = ifNone;
  18. static enum { ofNone = 0, ofDECText, ofSquid, ofSquidSwapped } OutputFormat = ofNone;
  19. int getInputFormat(char* argv[]) {
  20. if (strncmp("-i", argv[0], 3) != 0)
  21. return ifNone;
  22. if (strncmp("v1.0", argv[1], 5) == 0)
  23. InputFormat = ifDECV1_0;
  24. else
  25. if (strncmp("v1.2", argv[1], 5) == 0)
  26. InputFormat = ifDECV1_2;
  27. else
  28. InputFormat = ifNone;
  29. return InputFormat;
  30. }
  31. int getOutputFormat(char* argv[]) {
  32. if (strncmp("-o", argv[0], 3) != 0)
  33. return ofNone;
  34. if (strncmp("txt", argv[1], 4) == 0)
  35. OutputFormat = ofDECText;
  36. else
  37. if (strncmp("squid", argv[1], 6) == 0)
  38. OutputFormat = ofSquid;
  39. else
  40. if (strncmp("squidsw", argv[1], 8) == 0)
  41. OutputFormat = ofSquidSwapped;
  42. else
  43. OutputFormat = ofNone;
  44. return OutputFormat;
  45. }
  46. extern FILE *cf, *sf;
  47. extern double initTime;
  48. extern double duration;
  49. extern double startTime;
  50. extern ReqLog* rlog;
  51. extern unsigned int num_rlog, sz_rlog;
  52. extern Tcl_HashTable cidHash, sidHash, urlHash;
  53. double lf_analyze(TEntry& lfe);
  54. void sort_url();
  55. void sort_rlog();
  56. int main (int argc, char* argv[]) 
  57. {
  58. int    is_little_endian = 0;
  59. TEntry entry;
  60. double   ctime;
  61. // Init tcl
  62. Tcl_Interp *interp = Tcl_CreateInterp();
  63. if (Tcl_Init(interp) == TCL_ERROR) {
  64. printf("%sn", interp->result);
  65. abort();
  66. }
  67. Tcl_InitHashTable(&cidHash, TCL_ONE_WORD_KEYS);
  68. Tcl_InitHashTable(&sidHash, TCL_ONE_WORD_KEYS);
  69. Tcl_InitHashTable(&urlHash, TCL_ONE_WORD_KEYS);
  70. if ((cf = fopen("reqlog", "w")) == NULL) {
  71. printf("cannot open request log.n");
  72. exit(1);
  73. }
  74. if ((sf = fopen("pglog", "w")) == NULL) {
  75. printf("cannot open page log.n");
  76. exit(1);
  77. }
  78. /* parse command line */
  79. if ((argc < 2) || (argc > 4)) {
  80. printf("Usage: %s <trace size> [<time duration>] [<start_time>]n", argv[0]);
  81. return 1;
  82. }
  83. if (argc >= 3) {
  84. duration = strtod(argv[2], NULL);
  85. if (argc == 4) {
  86. startTime = strtod(argv[3], NULL);
  87. printf("start time = %fn", startTime);
  88. }
  89. }
  90. sz_rlog = strtoul(argv[1], NULL, 10);
  91. rlog = new ReqLog[sz_rlog];
  92. /* determine endian-ness */
  93. is_little_endian = IsLittleEndian();
  94. /* read trace header */
  95. ReadHeader(stdin, 0);
  96. /* read entries untill EOF */
  97. while (ReadEntry(stdin, &entry)) {
  98. if ( !is_little_endian )
  99. ToOtherEndian(&entry);
  100. // Analyse one log entry
  101. ctime = lf_analyze(entry);
  102. if ((duration > 0) && (ctime > duration))
  103. break;
  104. }
  105. Tcl_DeleteHashTable(&cidHash);
  106. Tcl_DeleteHashTable(&sidHash);
  107. fprintf(stderr, "sort urln");
  108. sort_url();
  109. fclose(sf);
  110. fprintf(stderr, "sort requestsn");
  111. sort_rlog();
  112. fclose(cf);
  113. return 0;
  114. }