#include "squid.h"
/*
 * $Id: globals.h,v 1.108 2001/10/17 20:25:02 hno Exp $
 *
 *
 * SQUID Web Proxy Cache          http://www.squid-cache.org/
 * ----------------------------------------------------------
 *
 *  Squid is the result of efforts by numerous individuals from
 *  the Internet community; see the CONTRIBUTORS file for full
 *  details.   Many organizations have provided support for Squid's
 *  development; see the SPONSORS file for full details.  Squid is
 *  Copyrighted (C) 2001 by the Regents of the University of
 *  California; see the COPYRIGHT file for full details.  Squid
 *  incorporates software developed and/or copyrighted by other
 *  sources; see the CREDITS file for full details.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 *
 */
FILE *debug_log=NULL;
SquidConfig Config;
SquidConfig2 Config2;
char *ConfigFile=NULL;
const char *dns_error_message = NULL;
char tmp_error_buf[ERROR_BUF_SZ];
int FatalInProgress = 0;

char *volatile debug_options = NULL;
char ThisCache[SQUIDHOSTNAMELEN << 1];
char ThisCache2[SQUIDHOSTNAMELEN << 1];
char config_input_line[BUFSIZ];
const char *AclMatchedName = NULL;
const char *DefaultConfigFile = DEFAULT_CONFIG_FILE;
const char *cfg_filename = NULL;
const char *const appname = "squid";
const char *const dash_str = "-";
const char *const localhost = "127.0.0.1";
const char *const null_string = "";
const char *const version_string = VERSION;
const char *const full_appname_string = "Squid/" SQUID_VERSION;
const char *const w_space = " \t\n\r";

//squid_fde *fd_table = NULL;
squid_fdeArray squid_fd_table;

// not used, use squid_fd_table.n or squid_fd_table.MaxSocket instead
//int Biggest_FD = -1;
int Number_FD = 0;
int Opening_FD = 0;
int HttpSockets[MAXHTTPPORTS];
int NDnsServersAlloc = 0;
int NHttpSockets = 0;
int RESERVED_FD;
int Squid_MaxFD = SQUID_MAXFD;
int config_lineno = 0;
int debugLevels[MAX_DEBUG_SECTIONS];
int do_mallinfo = 0;
int opt_reuseaddr = 1;
int icmp_sock_index = -1;
int icmp_sock = -1;
int neighbors_do_private_keys = 1;
int opt_accel_uses_host = 0;
int opt_catch_signals = 1;
//int opt_debug_stderr = -1;
int opt_debug_stderr = 5;
int opt_dns_tests = 1;
int opt_foreground_rebuild = 0;
int opt_forwarded_for = 1;
int opt_reload_hit_only = 0;
int opt_syslog_enable = 0;
int opt_udp_hit_obj = 0;
int opt_create_swap_dirs = 0;
int opt_store_doublecheck = 0;
int syslog_enable = 0;
int theInIcpConnection = -1;
int theOutIcpConnection = -1;
int DnsSocket = -1;
#ifdef SQUID_SNMP
int theInSnmpConnection = -1;
int theOutSnmpConnection = -1;
char *snmp_agentinfo;
#endif
int vhost_mode = 0;
int vport_mode = 0;
int n_disk_objects = 0;
iostats IOStats;
struct _acl_deny_info_list *DenyInfoList = NULL;
struct in_addr any_addr;
struct in_addr local_addr;
struct in_addr no_addr;
struct in_addr theOutICPAddr;
struct in_addr theOutSNMPAddr;
struct timeval current_time;
struct timeval squid_start;
time_t squid_curtime = 0;
int shutting_down = 0;
int reconfiguring = 0;
int store_dirs_rebuilding = 1;
int store_dirs_rebuild_progress =0;

int store_swap_size = 0;
unsigned long store_mem_size = 0;
time_t hit_only_mode_until = 0;
StatCounters statCounter;
double request_failure_ratio = 0.0;
double current_dtime;
int store_hash_buckets = 0;
hash_table *store_table = NULL;
dlink_list ClientActiveRequests;

const String StringNull = { 0, 0, NULL };
const MemBuf MemBufNull = MemBufNULL;
int hot_obj_count = 0;
int _db_level;
const int CacheDigestHashFuncCount = 4;
CacheDigest *store_digest = NULL;
const char *StoreDigestFileName = "store_digest";
const char *StoreDigestMimeStr = "application/cache-digest";
#if USE_CACHE_DIGESTS
const Version CacheDigestVer = { 5, 3 };
#endif
const char *MultipartMsgBoundaryStr = "Unique-Squid-Separator";
icpUdpData *IcpQueueHead = NULL;
#if HTTP_VIOLATIONS
int refresh_nocache_hack = 0;
#endif
request_flags null_request_flags;
int store_open_disk_fd = 0;
authscheme_entry_t *authscheme_list = NULL;
storefs_entry_t *storefs_list = NULL;
storerepl_entry_t *storerepl_list = NULL;
int store_swap_low = 0;
int store_swap_high = 0;
int store_pages_max = 0;
ssize_t store_maxobjsize = -1;
RemovalPolicy *mem_policy;

/* ???  EK
 const  char *log_tags[];

 const char *RequestMethodStr[];
 const char *ProtocolStr[];
 const char *fdTypeStr[];
 const char *hier_strings[];
 const char *memStatusStr[];
 const char *pingStatusStr[];
 const char *storeStatusStr[];
 const char *swapStatusStr[];
*/

#if SQUID_SNMP
 int theInSnmpConnection=-1;   /* -1 */
 int theOutSnmpConnection=-1;  /* -1 */
 char *snmp_agentinfo;
#endif
 StatCounters Counter;
/* ??? EK
 char *err_type_str[];
 char *icp_opcode_str[];
 char *swap_log_op_str[];
 char *lookup_t_str[];
 double current_dtime;
*/
#if HEAP_REPLACEMENT
 heap *store_heap;
 heap *inmem_heap;
#else
 dlink_list store_list;
#endif
/* ??? EK
 dlink_list ClientActiveRequests;
 int _db_level;
*/
#if USE_CACHE_DIGESTS
 const Version CacheDigestVer={ 5, 3 };        /* { 5, 3 } */
#endif

/*    ??? EK
 request_flags null_request_flags;
 const char *SwapDirType[];
*/

const char *RequestBlockingAclMatchedName = NULL; /* Florian DECKERT  NULL */

int incoming_sockets_accepted=0;
hash_table *proxy_auth_username_cache=NULL;    /* NULL */
AUTHSSETUP authSchemeSetup_0;

 int rename_unixstyle(const char *old_name, const char *new_name)
{
  int result;
  result=rename(old_name, new_name);
  if (result != 0)
  {
    if (access(new_name, W_OK) == 0)
                   remove(new_name);
    result = rename(old_name, new_name);
  }
  return result;
}
