useragent.c
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:4k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: useragent.c,v 1.16 1999/01/29 18:31:18 wessels Exp $
  3.  *
  4.  * DEBUG: section 40    User-Agent logging
  5.  * AUTHOR: Joe Ramey <ramey@csc.ti.com>
  6.  *
  7.  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
  8.  * ----------------------------------------------------------
  9.  *
  10.  *  Squid is the result of efforts by numerous individuals from the
  11.  *  Internet community.  Development is led by Duane Wessels of the
  12.  *  National Laboratory for Applied Network Research and funded by the
  13.  *  National Science Foundation.  Squid is Copyrighted (C) 1998 by
  14.  *  Duane Wessels and the University of California San Diego.  Please
  15.  *  see the COPYRIGHT file for full details.  Squid incorporates
  16.  *  software developed and/or copyrighted by other sources.  Please see
  17.  *  the CREDITS file for full details.
  18.  *
  19.  *  This program is free software; you can redistribute it and/or modify
  20.  *  it under the terms of the GNU General Public License as published by
  21.  *  the Free Software Foundation; either version 2 of the License, or
  22.  *  (at your option) any later version.
  23.  *  
  24.  *  This program is distributed in the hope that it will be useful,
  25.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  26.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27.  *  GNU General Public License for more details.
  28.  *  
  29.  *  You should have received a copy of the GNU General Public License
  30.  *  along with this program; if not, write to the Free Software
  31.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  32.  *
  33.  */
  34. #include "squid.h"
  35. void
  36. useragentOpenLog(void)
  37. {
  38. #if USE_USERAGENT_LOG
  39.     char *fname = NULL;
  40.     int log_fd = -1;
  41.     fname = Config.Log.useragent;
  42.     /* Close and reopen the log.  It may have been renamed "manually"
  43.      * before HUP'ing us. */
  44.     if (cache_useragent_log) {
  45. file_close(fileno(cache_useragent_log));
  46. fclose(cache_useragent_log);
  47. cache_useragent_log = NULL;
  48.     }
  49.     if (fname && strcmp(fname, "none") != 0) {
  50. log_fd = file_open(fname, O_WRONLY | O_CREAT | O_APPEND, NULL, NULL, NULL);
  51. if (log_fd < 0) {
  52.     debug(50, 0) ("useragentOpenLog: %s: %sn", fname, xstrerror());
  53. } else if ((cache_useragent_log = fdopen(log_fd, "a")) == NULL) {
  54.     file_close(log_fd);
  55.     debug(50, 0) ("useragentOpenLog: %s: %sn", fname, xstrerror());
  56. }
  57.     }
  58.     if (log_fd < 0 || cache_useragent_log == NULL)
  59. debug(40, 1) ("User-Agent logging is disabled.n");
  60. #endif
  61. }
  62. void
  63. useragentRotateLog(void)
  64. {
  65. #if USE_USERAGENT_LOG
  66.     char *fname = NULL;
  67.     int i;
  68.     LOCAL_ARRAY(char, from, MAXPATHLEN);
  69.     LOCAL_ARRAY(char, to, MAXPATHLEN);
  70.     struct stat sb;
  71.     if ((fname = Config.Log.useragent) == NULL)
  72. return;
  73.     if (strcmp(fname, "none") == 0)
  74. return;
  75. #ifdef S_ISREG
  76.     if (stat(fname, &sb) == 0)
  77. if (S_ISREG(sb.st_mode) == 0)
  78.     return;
  79. #endif
  80.     debug(40, 1) ("useragentRotateLog: Rotating.n");
  81.     /* Rotate numbers 0 through N up one */
  82.     for (i = Config.Log.rotateNumber; i > 1;) {
  83. i--;
  84. snprintf(from, MAXPATHLEN, "%s.%d", fname, i - 1);
  85. snprintf(to, MAXPATHLEN, "%s.%d", fname, i);
  86. rename(from, to);
  87.     }
  88.     if (cache_useragent_log) {
  89. file_close(fileno(cache_useragent_log));
  90. fclose(cache_useragent_log);
  91. cache_useragent_log = NULL;
  92.     }
  93.     /* Rotate the current log to .0 */
  94.     if (Config.Log.rotateNumber > 0) {
  95. snprintf(to, MAXPATHLEN, "%s.%d", fname, 0);
  96. rename(fname, to);
  97.     }
  98.     useragentOpenLog();
  99. #endif
  100. }
  101. void
  102. logUserAgent(const char *client, const char *agent)
  103. {
  104. #if USE_USERAGENT_LOG
  105.     static time_t last_time = 0;
  106.     static char time_str[128];
  107.     const char *s;
  108.     if (!cache_useragent_log)
  109. return;
  110.     if (squid_curtime != last_time) {
  111. s = mkhttpdlogtime(&squid_curtime);
  112. strcpy(time_str, s);
  113. last_time = squid_curtime;
  114.     }
  115.     fprintf(cache_useragent_log, "%s [%s] "%s"n",
  116. client,
  117. time_str,
  118. agent);
  119.     if (!Config.onoff.buffered_logs)
  120. fflush(cache_useragent_log);
  121. #endif
  122. }