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

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: internal.c,v 1.15 1998/11/12 06:28:11 wessels Exp $
  3.  *
  4.  * DEBUG: section 76    Internal Squid Object handling
  5.  * AUTHOR: Duane, Alex, Henrik
  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. /* called when we "miss" on an internal object;
  36.  * generate known dynamic objects, 
  37.  * return HTTP_NOT_FOUND for others
  38.  */
  39. void
  40. internalStart(request_t * request, StoreEntry * entry)
  41. {
  42.     ErrorState *err;
  43.     const char *upath = strBuf(request->urlpath);
  44.     debug(76, 3) ("internalStart: %s requesting '%s'n",
  45. inet_ntoa(request->client_addr), upath);
  46.     if (0 == strcmp(upath, "/squid-internal-dynamic/netdb"))
  47. netdbBinaryExchange(entry);
  48.     else {
  49. debugObj(76, 1, "internalStart: unknown request:n", request, (ObjPackMethod) & httpRequestPack);
  50. err = errorCon(ERR_INVALID_REQ, HTTP_NOT_FOUND);
  51. err->request = requestLink(request);
  52. errorAppendEntry(entry, err);
  53.     }
  54. }
  55. int
  56. internalCheck(const char *urlpath)
  57. {
  58.     return (0 == strncmp(urlpath, "/squid-internal-", 16));
  59. }
  60. int
  61. internalStaticCheck(const char *urlpath)
  62. {
  63.     return (0 == strncmp(urlpath, "/squid-internal-static", 22));
  64. }
  65. /*
  66.  * makes internal url with a given host and port (remote internal url)
  67.  */
  68. char *
  69. internalRemoteUri(const char *host, u_short port, const char *dir, const char *name)
  70. {
  71.     static MemBuf mb = MemBufNULL;
  72.     static char lc_host[SQUIDHOSTNAMELEN];
  73.     assert(host && port && name);
  74.     /* convert host name to lower case */
  75.     xstrncpy(lc_host, host, sizeof(lc_host));
  76.     Tolower(lc_host);
  77.     /* build uri in mb */
  78.     memBufReset(&mb);
  79.     memBufPrintf(&mb, "http://%s", lc_host);
  80.     /* append port if not default */
  81.     if (port != urlDefaultPort(PROTO_HTTP))
  82. memBufPrintf(&mb, ":%d", port);
  83.     if (dir)
  84. memBufPrintf(&mb, "%s", dir);
  85.     memBufPrintf(&mb, "%s", name);
  86.     /* return a pointer to a local static buffer */
  87.     return mb.buf;
  88. }
  89. /*
  90.  * makes internal url with local host and port
  91.  */
  92. char *
  93. internalLocalUri(const char *dir, const char *name)
  94. {
  95.     return internalRemoteUri(getMyHostname(), Config.Port.http->i, dir, name);
  96. }
  97. const char *
  98. internalHostname(void)
  99. {
  100.     LOCAL_ARRAY(char, host, SQUIDHOSTNAMELEN + 1);
  101.     xstrncpy(host, getMyHostname(), SQUIDHOSTNAMELEN);
  102.     Tolower(host);
  103.     return host;
  104. }