From 7df6e8cb7b6971dd35d619d85c3f40e4894a8e3d Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@18797224-902f-48f8-a5cc-f745e15eee43> Date: Wed, 8 Apr 1998 05:34:53 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'XPCOM_BRANCH'. git-svn-id: svn://10.0.0.236/branches/XPCOM_BRANCH@101 18797224-902f-48f8-a5cc-f745e15eee43 --- CVSROOT/modules | 248 -- mozilla/lib/libnet/mkgeturl.c | 5877 ----------------------------- mozilla/modules/softupdt/Makefile | 21 - mozilla/xpcom/glue/nsID.cpp | 66 - 4 files changed, 6212 deletions(-) delete mode 100644 CVSROOT/modules delete mode 100644 mozilla/lib/libnet/mkgeturl.c delete mode 100644 mozilla/modules/softupdt/Makefile delete mode 100644 mozilla/xpcom/glue/nsID.cpp diff --git a/CVSROOT/modules b/CVSROOT/modules deleted file mode 100644 index 18172006c22..00000000000 --- a/CVSROOT/modules +++ /dev/null @@ -1,248 +0,0 @@ -# Three different line formats are valid: -# key -a aliases... -# key [options] directory -# key [options] directory files... -# -# Where "options" are composed of: -# -i prog Run "prog" on "cvs commit" from top-level of module. -# -o prog Run "prog" on "cvs checkout" of module. -# -e prog Run "prog" on "cvs export" of module. -# -t prog Run "prog" on "cvs rtag" of module. -# -u prog Run "prog" on "cvs update" of module. -# -d dir Place module in directory "dir" instead of module name. -# -l Top-level directory only -- do not recurse. -# -# NOTE: If you change any of the "Run" options above, you'll have to -# release and re-checkout any working directories of these modules. -# -# And "directory" is a path to a directory relative to $CVSROOT. -# -# The "-a" option specifies an alias. An alias is interpreted as if -# everything on the right of the "-a" had been typed on the command line. -# -# You can encode a module within a module by using the special '&' -# character to interpose another module into the current module. This -# can be useful for creating a module that consists of many directories -# spread out over the entire source repository. - -ClientSourceProduct -a \ - ClientSourceProductWin \ - ClientSourceProductMac \ - ClientSourceProductUnix \ - -ClientSourceProductWin -a MozillaCommon MozillaWinOnly - -ClientSourceProductMac -a MozillaCommon MozillaMacOnly - -ClientSourceProductUnix -a MozillaCommon MozillaUnixOnly - -MozillaCommon -a \ - ns/LEGAL \ - ns/LICENSE \ - ns/build \ - ns/include \ - ns/jpeg \ - ns/js \ - ns/lib/htmldlgs \ - ns/lib/layout \ - ns/lib/libcnv \ - ns/lib/libi18n \ - ns/lib/liblayer \ - ns/lib/libmisc \ - ns/lib/libmime \ - ns/lib/libmocha \ - ns/lib/libnet \ - ns/lib/libparse \ - ns/lib/libpics \ - ns/lib/libpwcac \ - ns/lib/libstyle \ - ns/lib/plugin \ - ns/lib/xlate \ - ns/lib/xp \ - ns/modules/edtplug/classes \ - ns/modules/edtplug/src \ - ns/modules/edtplug/include \ - ns/modules/libfont/classes \ - ns/modules/libfont/public \ - ns/modules/libfont/src \ - ns/modules/libhook \ - ns/modules/libimg \ - ns/modules/libpref \ - ns/modules/libreg \ - ns/modules/libutil \ - ns/modules/progress/src \ - ns/modules/rdf \ - ns/modules/schedulr \ - ns/modules/security/freenav \ - ns/modules/xml \ - ns/modules/zlib/src \ - ns/nav-java/stubs \ - ns/nsprpub \ - ns/xpcom \ - ns/l10n \ - ns/nsprpub \ - ns/dbm \ - ns/modules/schedulr - -MozillaWinOnly -a \ - ns/client.mak \ - ns/cmd/makefile.win \ - ns/cmd/wincom \ - ns/cmd/winfe \ - ns/config \ - ns/lib/makefile.win \ - ns/modules/coreincl \ - ns/modules/edtplug/makefile.win \ - ns/makefile.win \ - ns/modules/libfont/jmcgen \ - ns/modules/libfont/makefile.win \ - ns/modules/libfont/producers/makefile.win \ - ns/modules/libfont/producers/win \ - ns/modules/libfont/producers/win/classes \ - ns/modules/libfont/producers/win/classes/netscape \ - ns/modules/libfont/producers/win/classes/netscape/fonts \ - ns/modules/libfont/producers/win/src \ - ns/modules/makefile.win \ - ns/modules/progress/makefile.win \ - ns/modules/progress/public \ - ns/modules/security/makefile.win \ - ns/modules/zlib/makefile.win \ - ns/nav-java/makefile.win \ - JavaStubWin - - -MozillaUnixOnly -a \ - ns/cmd/Makefile \ - ns/cmd/stubfe \ - ns/cmd/xfe \ - ns/config/.cvsignore \ - ns/config/AIX.mk \ - ns/config/BSD_OS.mk \ - ns/config/bsdecho.c \ - ns/config/bsdecho.c \ - ns/config/clobber_miss.pl \ - ns/config/clobber_miss.pl \ - ns/config/common.mk \ - ns/config/common.mk \ - ns/config/config.guess \ - ns/config/config.mk \ - ns/config/coreconf.mk \ - ns/config/coreconf.mk \ - ns/config/cvsco.pl \ - ns/config/cvsco.pl \ - ns/config/fastcwd.pl \ - ns/config/fastcwd.pl \ - ns/config/FreeBSD.mk \ - ns/config/gtscc.c \ - ns/config/HP-UX.mk \ - ns/config/IRIX.mk \ - ns/config/Linux.mk \ - ns/config/makecopy.c \ - ns/config/makecopy.c \ - ns/config/Makefile \ - ns/config/Makefile \ - ns/config/mangle.c \ - ns/config/mangle.c \ - ns/config/mantomak.c \ - ns/config/mantomak.c \ - ns/config/mkdepend \ - ns/config/NCR.mk \ - ns/config/NEC.mk \ - ns/config/NEWS-OS.mk \ - ns/config/NEXTSTEP.mk \ - ns/config/nfspwd.pl \ - ns/config/nfspwd.pl \ - ns/config/nodl.pl \ - ns/config/nodl.pl \ - ns/config/nsinstall.c \ - ns/config/nsinstall.c \ - ns/config/OSF1.mk \ - ns/config/outofdate.pl \ - ns/config/outofdate.pl \ - ns/config/pathsub.c \ - ns/config/pathsub.c \ - ns/config/pathsub.h \ - ns/config/pathsub.h \ - ns/config/pkg2dpth.pl \ - ns/config/pkg2dpth.pl \ - ns/config/ports \ - ns/config/revdepth.pl \ - ns/config/revdepth.pl \ - ns/config/Rhapsody.mk \ - ns/config/rules.mk \ - ns/config/SCOOS.mk \ - ns/config/SINIX.mk \ - ns/config/sj.pl \ - ns/config/sj.pl \ - ns/config/SunOS.mk \ - ns/config/SunOS4.mk \ - ns/config/SunOS5.mk \ - ns/config/UNIXWARE.mk \ - ns/config/xmversion.sh \ - ns/lib/Makefile \ - ns/Makefile \ - ns/modules/edtplug/Makefile \ - ns/modules/libfont/jmcgen \ - ns/modules/libfont/Makefile \ - ns/modules/libfont/producers/Makefile \ - ns/modules/Makefile \ - ns/modules/progress/Makefile \ - ns/modules/progress/public \ - ns/modules/security/Makefile \ - ns/modules/zlib/Makefile \ - ns/nav-java/Makefile \ - ns/lib/mariner \ - JavaStubUnix - - -MozillaMacOnly -a \ - ns/cmd/macfe \ - ns/lib/mac/AutoAdmin \ - ns/lib/mac/Includes \ - ns/lib/mac/MacMemoryAllocator \ - ns/lib/mac/Misc \ - ns/lib/mac/MoreFiles \ - ns/lib/mac/NSRuntime \ - ns/lib/mac/NSStdLib \ - ns/lib/mac/patches \ - ns/lib/mac/PowerPlant \ - ns/lib/mac/UserInterface \ - ns/modules/coreincl \ - ns/modules/edtplug/macbuild \ - ns/modules/libfont/jmcgen/include \ - ns/modules/libfont/jmcgen/src \ - ns/modules/libfont/macbuild \ - ns/modules/progress/macbuild \ - ns/modules/progress/public \ - ns/modules/zlib/macbuild \ - ns/lib/mariner \ - JavaStubMac - -JavaStubAll -a \ - JavaStubWin \ - JavaStubMac \ - JavaStubUnix - -JavaStubCore -a \ - ns/sun-java/stubs/include \ - ns/sun-java/stubs/src - -JavaStubMac -a \ - JavaStubCore \ - ns/sun-java/stubs/macbuild \ - ns/sun-java/stubs/macjri - -JavaStubUnix -a \ - JavaStubCore \ - ns/sun-java/Makefile \ - ns/sun-java/stubs/jri \ - ns/sun-java/stubs/Makefile - -JavaStubWin -a \ - JavaStubCore \ - ns/sun-java/makefile.win \ - ns/sun-java/stubs/jri \ - ns/sun-java/stubs/makefile.win - - - diff --git a/mozilla/lib/libnet/mkgeturl.c b/mozilla/lib/libnet/mkgeturl.c deleted file mode 100644 index eafdd65b414..00000000000 --- a/mozilla/lib/libnet/mkgeturl.c +++ /dev/null @@ -1,5877 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ -/* - * mkgeturl.c - * This file implements the main calling api for netlib. - * Includes NET_InitNetlib, NET_Shutdown, NET_GetURL, and NET_ProcessNet - * - * Designed and originally implemented by Lou Montulli '94 - * Additions/Changes by Judson Valeski, Gagan Saksena 1997. - */ -#include "mkutils.h" -#include "mkgeturl.h" -#include "shist.h" -#include "mkparse.h" -#include "mkformat.h" -#include "mkstream.h" -#include "mkpadpac.h" - -#include "mkhttp.h" -#include "mkftp.h" -#include "mkgopher.h" -#include "mkremote.h" -#include "mknews.h" -#include "mkpop3.h" -#include "mkdaturl.h" -#include "mkfile.h" -#include "mksmtp.h" -#include "mkcache.h" -#include "mkmemcac.h" -#include "glhist.h" -#include "mkaccess.h" -#include "mkmailbx.h" -#include "mkautocf.h" -#include "mkmarimb.h" -#include "mkabook.h" -#include "mkhelp.h" -#include "ssl.h" -#include "mkcertld.h" - -#ifdef MOZ_LDAP -#incclude "mkldap.h" -#endif - -#ifdef MOZ_MAIL_NEWS -#include "mkimap4.h" -#endif - -#include "mktcp.h" /* for NET_InGetHostByName semaphore */ -#include "cert.h" -#ifdef MOZILLA_CLIENT -#include "secnav.h" -#ifdef MOCHA -#include "libmocha.h" -#include "libevent.h" -#include "jscompat.h" -#include "jspubtd.h" -#endif -#endif - -#include "libimg.h" /* Image Lib public API. */ -#include "il_strm.h" /* Image Lib public API. */ - -#include "libi18n.h" -#include "xp_sec.h" -#include "mkmocha.h" -#include "htmldlgs.h" - -#include "np.h" -#include "prefapi.h" -#ifdef NSPR20 -#ifdef XP_MAC -#include "prpriv.h" /* for NewNamedMonitor */ -#else -#include "private/prpriv.h" -#endif -#endif /* NSPR20 */ - -#include "sslerr.h" -#include "xp_error.h" -#include "merrors.h" -#include "prefetch.h" - -#ifdef XP_OS2 -#include "os2sock.h" -#endif - -#ifdef EDITOR -#include "edt.h" -#endif - -#ifdef MOCHA -#include "libmocha.h" -#endif - -#ifdef XP_UNIX -#include "prnetdb.h" -#else -#define PRHostEnt struct hostent -#endif - -#include "xplocale.h" - -/* This is only until all platforms have libfont/ checked in */ -#define WEBFONTS - -#ifdef WEBFONTS -#include "nf.h" -#endif /* WEBFONTS */ - -/* plugins: */ -#include "np.h" - -/* for XP_GetString() */ -#include "xpgetstr.h" -extern int MK_CONNECTION_REFUSED; -extern int MK_CONNECTION_TIMED_OUT; -extern int MK_MALFORMED_URL_ERROR; -extern int MK_OUT_OF_MEMORY; -extern int MK_RELATIVE_TIMEBOMB_MESSAGE; -extern int MK_RELATIVE_TIMEBOMB_WARNING_MESSAGE; -extern int MK_TIMEBOMB_MESSAGE; -extern int MK_TIMEBOMB_URL_PROHIBIT; -extern int MK_TIMEBOMB_WARNING_MESSAGE; -extern int MK_UNABLE_TO_CONNECT; -extern int MK_UNABLE_TO_CREATE_SOCKET; -extern int MK_UNABLE_TO_LOCATE_HOST; -extern int MK_UNABLE_TO_LOCATE_PROXY; -extern int XP_ALERT_CONNECTION_LESSZERO; -extern int XP_ALERT_INTERRUPT_WINDOW; -extern int XP_ALERT_URLS_LESSZERO; -extern int XP_CONFIRM_REPOST_FORMDATA; -extern int XP_CONSULT_SYS_ADMIN; -extern int XP_HTML_MISSING_REPLYDATA; -extern int XP_SOCKS_NS_ENV_VAR; -extern int XP_SOME_HOSTS_UNREACHABLE; -extern int XP_THIS_IS_DNS_VERSION; -extern int XP_THIS_IS_YP_VERSION; -extern int XP_UNKNOWN_HOST; -extern int XP_UNKNOWN_HOSTS; -extern int XP_UNKNOWN_HTTP_PROXY; -extern int XP_UNKNOWN_SOCKS_HOST; -extern int XP_URLS_WAITING_FOR_AN_OPEN_SOCKET; -extern int XP_URLS_WAITING_FOR_FEWER_ACTIVE_URLS; -extern int XP_CONNECTIONS_OPEN; -extern int XP_ACTIVE_URLS; -extern int XP_USING_PREVIOUSLY_CACHED_COPY_INSTEAD; -extern int XP_BAD_AUTOCONFIG_NO_FAILOVER; - -extern int XP_SOCK_CON_SOCK_PROTOCOL; -extern int XP_URL_NOT_FOUND_IN_CACHE; -extern int XP_PARTIAL_CACHE_ENTRY; -extern int XP_CHECKING_SERVER__FORCE_RELOAD; -extern int XP_OBJECT_HAS_EXPIRED; -extern int XP_CHECKING_SERVER_CACHE_ENTRY; -extern int XP_CHECKING_SERVER__LASTMOD_MISS; -extern int XP_NETSITE_ ; -extern int XP_LOCATION_ ; -extern int XP_FILE_MIME_TYPE_ ; -extern int XP_CURRENTLY_UNKNOWN; -extern int XP_SOURCE_ ; -extern int XP_CURRENTLY_IN_DISK_CACHE ; -extern int XP_CURRENTLY_IN_MEM_CACHE; -extern int XP_CURRENTLY_NO_CACHE ; -extern int XP_LOCAL_CACHE_FILE_ ; -extern int XP_NONE ; -extern int XP_LOCAL_TIME_FMT ; -extern int XP_LAST_MODIFIED ; -extern int XP_GMT_TIME_FMT ; -extern int XP_CONTENT_LENGTH_ ; -extern int XP_NO_DATE_GIVEN; -extern int XP_EXPIRES_ ; -extern int XP_MAC_TYPE_ ; -extern int XP_MAC_CREATOR_ ; -extern int XP_CHARSET_ ; -extern int XP_STATUS_UNKNOWN ; -extern int XP_SECURITY_ ; -extern int XP_CERTIFICATE_ ; -extern int XP_UNTITLED_DOCUMENT ; -extern int XP_HAS_THE_FOLLOWING_STRUCT ; -extern int XP_DOCUMENT_INFO ; -extern int XP_THE_WINDOW_IS_NOW_INACTIVE ; -extern int XP_MSG_UNKNOWN ; -extern int XP_EDIT_NEW_DOC_URL; -extern int XP_EDIT_NEW_DOC_NAME; -extern int XP_CONFIRM_MAILTO_POST_1; -extern int XP_CONFIRM_MAILTO_POST_2; - -extern int XP_ALERT_OFFLINE_MODE_SELECTED; - - -#if defined(JAVA) -#include "nslocks.h" -#include "prlog.h" -#include - -PRMonitor* libnet_asyncIO; - -#if defined(SOLARIS) -extern int gethostname(char *, int); -#endif /* SOLARIS */ - -#endif /* JAVA */ - -#define LIBNET_UNLOCK_AND_RETURN(value) \ - do { int rv = (value); LIBNET_UNLOCK(); return rv; } while (0) - -/* -** Don't ever forget about this!!! -** -** This is ALL superseeded by the setting in /ns/modules/libpref/src/init/all.js -** lock for timebomb.use_timebomb - -** Define TIMEBOMB_ON for beta builds. -** Undef TIMEBOMB_ON for release builds. -*/ -#define TIMEBOMB_ON -/* #undef TIMEBOMB_ON */ -/* -** After this date all hell breaks loose -*/ -#define TIME_BOMB_TIME 888739203 /* 3/01/98 + 3 secs */ -#ifdef XP_OS2 -#define TIME_BOMB_WARNING_TIME 869976003 /* 7/21/97 + 3 secs */ -#else -#define TIME_BOMB_WARNING_TIME 857203203 /* 3/01/97 + 3 secs */ -#endif - -#ifndef XP_UNIX -#ifdef NADA_VERSION -static char *https_security = "SECURITY_VERSION: -https"; -#else -static char *https_security = "SECURITY_VERSION: +https"; -#endif -#endif - -#ifdef EDITOR -/* - * Strings used for new, empty document creation - * Kluge we use to load a new document is resource with one space. - * These strings are loaded from XP_MSG.I on first GetURL call - * (this allows changing "Untitled" for other languages) -*/ -PUBLIC char *XP_NEW_DOC_URL = NULL; /* "about:editfilenew" */ -/* - * This is the name we want to appear as the URL address - * You can load a new doc using this - it will be changed - * to XP_NEW_DOC_URL. - * When done, XP_NEW_DOC_URL will be changed to XP_NEW_DOC_NAME -*/ -PUBLIC char *XP_NEW_DOC_NAME = NULL; /* "Untitled" */ -#endif - -#ifdef PROFILE -#pragma profile on -#endif - -/* forward decl's */ -PRIVATE void add_slash_to_URL (URL_Struct *URL_s); -PRIVATE Bool override_proxy (CONST char * URL); -PRIVATE int net_output_about_url(ActiveEntry * this_entry); -PRIVATE int net_output_security_url(ActiveEntry * this_entry, MWContext *cx); -PRIVATE Bool net_about_kludge(URL_Struct *URL_s); -PRIVATE void net_FreeURLAllHeaders(URL_Struct * URL_s); -PRIVATE void NET_InitAboutProtocol(void); -PRIVATE void NET_InitSecurityProtocol(void); - -PRIVATE NET_TimeBombActive = FALSE; - -typedef struct _WaitingURLStruct { - int type; - URL_Struct *URL_s; - FO_Present_Types format_out; - MWContext *window_id; - Net_GetUrlExitFunc *exit_routine; -} WaitingURLStruct; - -/* Pointers to proxy servers - * They are pointers to a host if - * a proxy environment variable - * was found or they are zero if not. - */ -PRIVATE char * MKftp_proxy=0; -PRIVATE char * MKgopher_proxy=0; -PRIVATE char * MKhttp_proxy=0; -PRIVATE char * MKhttps_proxy=0; -PRIVATE char * MKwais_proxy=0; -PRIVATE char * MKnews_proxy=0; -PRIVATE char * MKno_proxy=0; -PRIVATE char * MKproxy_ac_url=0; -PRIVATE NET_ProxyStyle MKproxy_style = PROXY_STYLE_UNSET; - -PRIVATE char * MKglobal_config_url = 0; - -PRIVATE XP_List * net_EntryList=0; - -MODULE_PRIVATE CacheUseEnum NET_CacheUseMethod=CU_CHECK_PER_SESSION; - -#ifdef XP_WIN16 -#define MAX_NUMBER_OF_PROCESSING_URLS 8 -#else -#define MAX_NUMBER_OF_PROCESSING_URLS 15 -#endif - -#define INITIAL_MAX_ALL_HEADERS 10 -#define MULT_ALL_HEADER_COUNT 2 -#define MAX_ALL_HEADER_COUNT 16000 - -#ifndef XP_MAC - /* I don't want these annoying asserts in the Mac build but in case some other platform does... */ - #define DO_ANNOYING_ASSERTS_IN_STUBS 1 -#endif - -MODULE_PRIVATE time_t NET_StartupTime=0; - -MODULE_PRIVATE XP_Bool NET_ProxyAcLoaded = FALSE; -MODULE_PRIVATE XP_Bool NET_GlobalAcLoaded = FALSE; -MODULE_PRIVATE int NET_TotalNumberOfOpenConnections=0; -MODULE_PRIVATE int NET_MaxNumberOfOpenConnections=100; -MODULE_PRIVATE int NET_MaxNumberOfOpenConnectionsPerContext=4; -MODULE_PRIVATE int NET_TotalNumberOfProcessingURLs=0; -PRIVATE XP_List * net_waiting_for_actives_url_list=0; -PRIVATE XP_List * net_waiting_for_connection_url_list=0; - -typedef struct NETExitCallbackNode { - struct NETExitCallbackNode *next; - void *arg; - void (* func)(void *arg); -} NETExitCallbackNode; - -PRIVATE NETExitCallbackNode *NETExitCallbackHead = NULL; - -/* forward decl */ -PRIVATE void net_cleanup_reg_protocol_impls(void); -PRIVATE void NET_InitTotallyRandomStuffPeopleAddedProtocols(void); - - - -/* fix Mac warning for missing prototype */ -PUBLIC void -NET_AddExitCallback( void (* func)(void *arg), void *arg); - -PUBLIC void -NET_AddExitCallback( void (* func)(void *arg), void *arg) -{ - NETExitCallbackNode *node; - - /* alloc node */ - node = XP_ALLOC(sizeof(NETExitCallbackNode)); - if ( node != NULL ) { - /* fill it in */ - node->func = func; - node->arg = arg; - /* link it into the list */ - node->next = NETExitCallbackHead; - NETExitCallbackHead = node; - } - - return; -} - -PRIVATE void -NET_ProcessExitCallbacks(void) -{ - NETExitCallbackNode *node, *freenode; - - node = NETExitCallbackHead; - - while ( node != NULL ) { - (* node->func)(node->arg); - freenode = node; - node = node->next; - XP_FREE(freenode); - } - - NETExitCallbackHead = NULL; - - return; -} - -/* Gather manual proxy information from the prefapi. Called from - SetupPrefs and SelectProxyStyle */ -PRIVATE void -NET_UpdateManualProxyInfo(const char * prefChanged) { - - XP_Bool bSetupAll=FALSE; - char * proxy = NULL; - int32 iPort=0; - char text[MAXHOSTNAMELEN + 8]; - - if (!prefChanged) - bSetupAll = TRUE; - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.ftp") || - !XP_STRCMP(prefChanged, "network.proxy.ftp_port")) { - PREF_CopyCharPref("network.proxy.ftp",&proxy); - if(proxy && *proxy) { - PREF_GetIntPref("network.proxy.ftp_port",&iPort); - sprintf(text,"%s:%d", proxy, iPort); - StrAllocCopy(MKftp_proxy, text); - iPort=0; - } - else - FREE_AND_CLEAR(MKftp_proxy); - } - if (proxy) FREE_AND_CLEAR(proxy); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.gopher") || - !XP_STRCMP(prefChanged, "network.proxy.gopher_port")) { - PREF_CopyCharPref("network.proxy.gopher",&proxy); - if(proxy && *proxy) { - PREF_GetIntPref("network.proxy.gopher_port",&iPort); - sprintf(text,"%s:%d", proxy, iPort); - StrAllocCopy(MKgopher_proxy, text); - iPort=0; - } - else - FREE_AND_CLEAR(MKgopher_proxy); - } - if (proxy) FREE_AND_CLEAR(proxy); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.http") || - !XP_STRCMP(prefChanged, "network.proxy.http_port")) { - PREF_CopyCharPref("network.proxy.http",&proxy); - if(proxy && *proxy) { - PREF_GetIntPref("network.proxy.http_port",&iPort); - sprintf(text,"%s:%d", proxy, iPort); - StrAllocCopy(MKhttp_proxy, text); - iPort=0; - } - else - FREE_AND_CLEAR(MKhttp_proxy); - } - if (proxy) FREE_AND_CLEAR(proxy); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.ssl") || - !XP_STRCMP(prefChanged, "network.proxy.ssl_port")) { - PREF_CopyCharPref("network.proxy.ssl",&proxy); - if(proxy && *proxy) { - PREF_GetIntPref("network.proxy.ssl_port",&iPort); - sprintf(text,"%s:%d", proxy, iPort); - StrAllocCopy(MKhttps_proxy, text); - iPort=0; - } - else - FREE_AND_CLEAR(MKhttps_proxy); - } - if (proxy) FREE_AND_CLEAR(proxy); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.news") || - !XP_STRCMP(prefChanged, "network.proxy.news_port")) { - PREF_CopyCharPref("network.proxy.news",&proxy); - if(proxy && *proxy) { - PREF_GetIntPref("network.proxy.news_port",&iPort); - sprintf(text,"%s:%d", proxy, iPort); - StrAllocCopy(MKnews_proxy, text); - iPort=0; - } - else - FREE_AND_CLEAR(MKnews_proxy); - } - if (proxy) FREE_AND_CLEAR(proxy); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.wais") || - !XP_STRCMP(prefChanged, "network.proxy.wais_port")) { - PREF_CopyCharPref("network.proxy.wais",&proxy); - if(proxy && *proxy) { - PREF_GetIntPref("network.proxy.wais_port",&iPort); - sprintf(text,"%s:%d", proxy, iPort); - StrAllocCopy(MKwais_proxy, text); - iPort=0; - } - else - FREE_AND_CLEAR(MKwais_proxy); - } - if (proxy) FREE_AND_CLEAR(proxy); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.hosts.socks_server") || - !XP_STRCMP(prefChanged, "network.hosts.socks_serverport")) { - PREF_CopyCharPref("network.hosts.socks_server",&proxy); - if (proxy && *proxy) { - PREF_GetIntPref("network.hosts.socks_serverport",&iPort); - PR_snprintf(text, sizeof(text), "%s:%d", proxy, iPort); - NET_SetSocksHost(text); - } - else { - NET_SetSocksHost(proxy); /* NULL is ok */ - } - iPort=0; - } - if (proxy) FREE_AND_CLEAR(proxy); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.no_proxies_on")) { - PREF_CopyCharPref("network.proxy.no_proxies_on",&proxy); - if(proxy && *proxy) { - StrAllocCopy(MKno_proxy, proxy); - } - else - FREE_AND_CLEAR(MKno_proxy); - } - if (proxy) FREE_AND_CLEAR(proxy); - return; -} - -PUBLIC NET_ProxyStyle -NET_GetProxyStyle(void) -{ - return MKproxy_style; -} - -/* These are used in netlib only for exposing the MKproxy_ac_url - * to proxy autodiscovery stuff in mkpadpac.c */ -MODULE_PRIVATE const char * -net_GetPACUrl(void) { - return MKproxy_ac_url; -} - -MODULE_PRIVATE void -net_SetPACUrl(char *u) { - /* Do a straight assignment, no checking. */ - MKproxy_ac_url=u; -} - -PUBLIC void -NET_SelectProxyStyle(NET_ProxyStyle style) -{ - /* The NET_ProxyStyle enum is defined in net.h. - PROXY_STYLE_UNSET = 0 -- ? - PROXY_STYLE_MANUAL = 1 -- old style proxies - PROXY_STYLE_AUTOMATIC = 2 -- new style proxies - PROXY_STYLE_NONE = 3 -- no proxies, direct connection - */ - char * proxy=0; - - if (MKproxy_style != style) { - NET_ProxyAcLoaded = FALSE; - } - - MKproxy_style = style; - - if (MKproxy_style == PROXY_STYLE_MANUAL) { - /* Get the manual info */ - NET_UpdateManualProxyInfo(NULL); - } - - if (MKproxy_style == PROXY_STYLE_AUTOMATIC) { - /* Get the autoconfig url */ - PREF_CopyCharPref("network.proxy.autoconfig_url",&proxy); - if (proxy && *proxy) { - StrAllocCopy(MKproxy_ac_url, proxy); - NET_ProxyAcLoaded = FALSE; - } - if (proxy) FREE_AND_CLEAR(proxy); - } - - /* If we're not in automatic or manual style, clear un-needed internal info */ - if (MKproxy_style != PROXY_STYLE_AUTOMATIC) { - FREE_AND_CLEAR(MKproxy_ac_url); - NET_ProxyAcLoaded = FALSE; - } - - /* If we're not in manual (proxies) clear the un-needed internal info. */ - if (MKproxy_style != PROXY_STYLE_MANUAL) { - FREE_AND_CLEAR(MKftp_proxy); - FREE_AND_CLEAR(MKgopher_proxy); - FREE_AND_CLEAR(MKhttp_proxy); - FREE_AND_CLEAR(MKhttps_proxy); - FREE_AND_CLEAR(MKwais_proxy); - FREE_AND_CLEAR(MKnews_proxy); - FREE_AND_CLEAR(MKno_proxy); - - NET_SetSocksHost(NULL); - } -} - -/* this function loads the proxy values from the various preferences and -sets up the internal cached values...It is called during Init and whenever -a proxy pref is changed...If no specific pref is passed, it sets them all -up */ - -PUBLIC void -NET_SetupPrefs(const char * prefChanged) -{ - XP_Bool bSetupAll=FALSE; - char * proxy = NULL; - - /* if prefChanged is null the following XP_STRCMP's are never executed because the - || statement never gets that far because when prefChanged is null bSetupAll is - set to true and is always checked first in the if statement. Don't set prefChanged - to "" if it is null because the UpdateManualProxyInfo below needs null not "" if - prefChanged was originally null. */ - if (!prefChanged) - bSetupAll = TRUE; - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.sendRefererHeader")) { - Bool b; - PREF_GetBoolPref("network.sendRefererHeader", &b); - NET_SetSendRefererHeader(b); - } - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.dnsCacheExpiration")) { - int32 n; - PREF_GetIntPref("network.dnsCacheExpiration",&n); - NET_SetDNSExpirationPref(n); - } - - if (bSetupAll || !XP_STRCMP(prefChanged,"browser.prefetch")) { - XP_Bool enabled; - PREF_GetBoolPref("browser.prefetch",&enabled); - PRE_Enable(enabled); - } - - if (bSetupAll || !XP_STRCMP(prefChanged,"browser.cache.memory_cache_size")) { - int32 nMemCache; - PREF_GetIntPref("browser.cache.memory_cache_size",&nMemCache); - NET_SetMemoryCacheSize(nMemCache * 1024); - } - - if (bSetupAll || !XP_STRCMP(prefChanged,"browser.cache.disk_cache_size")) { - int32 nDiskCache; - PREF_GetIntPref("browser.cache.disk_cache_size",&nDiskCache); - NET_SetDiskCacheSize(nDiskCache * 1024); - } - - if (bSetupAll || !XP_STRCMP(prefChanged, "browser.cache.check_doc_frequency")) { - int32 nDocReqFreq; - PREF_GetIntPref("browser.cache.check_doc_frequency" ,&nDocReqFreq); - NET_SetCacheUseMethod((CacheUseEnum)nDocReqFreq); - } - - if (bSetupAll || !XP_STRCMP(prefChanged,"browser.cache.disk_cache_ssl")) { - XP_Bool prefBool; - PREF_GetBoolPref("browser.cache.disk_cache_ssl",&prefBool); - NET_DontDiskCacheSSL(!prefBool); - } -#ifdef MOZ_MAIL_NEWS - if (bSetupAll || !XP_STRCMP(prefChanged,"mail.allow_at_sign_in_user_name")) { - XP_Bool prefBool; - PREF_GetBoolPref("mail.allow_at_sign_in_user_name",&prefBool); - NET_SetAllowAtSignInMailUserName (prefBool); - } -#endif /* MOZ_MAIL_NEWS */ - - if (bSetupAll || !XP_STRCMP(prefChanged,"network.proxy.autoconfig_url")) { - PREF_CopyCharPref("network.proxy.autoconfig_url",&proxy); - if (proxy && *proxy) { - StrAllocCopy(MKproxy_ac_url, proxy); - NET_ProxyAcLoaded = FALSE; - } - else - FREE_AND_CLEAR(MKproxy_ac_url); - } - if (proxy) FREE_AND_CLEAR(proxy); - - NET_UpdateManualProxyInfo(prefChanged); - - if (bSetupAll || !XP_STRCMP(prefChanged, "network.proxy.type")) { - int32 iType; - PREF_GetIntPref("network.proxy.type",&iType); - NET_SelectProxyStyle((NET_ProxyStyle)iType); - } -} - -/* register preference callbacks for netlib prefs -*/ - -MODULE_PRIVATE int PR_CALLBACK NET_PrefChangedFunc(const char *pref, void *data) { - NET_SetupPrefs(pref); - return TRUE; -} - -/* initialize the netlibrary and set the socket buffer size - */ -PUBLIC int -NET_InitNetLib(int socket_buffer_size, int max_number_of_connections) -{ - int status; - -#if defined(NSPR20) && defined(DEBUG) - if (NETLIB==NULL) - NETLIB = PR_NewLogModule("NETLIB"); -#endif - - TRACEMSG(("Initializing Network library")); - - NET_StartupTime = time(NULL); - - /* seed the random generator - */ - XP_SRANDOM((unsigned int) time(NULL)); - - if(max_number_of_connections < 1) - max_number_of_connections = 1; - -#ifdef XP_UNIX - signal(SIGPIPE, SIG_IGN); -#endif - - - status = NET_ChangeSocketBufferSize(socket_buffer_size); - - NET_ChangeMaxNumberOfConnections(max_number_of_connections); - net_waiting_for_actives_url_list = XP_ListNew(); - net_waiting_for_connection_url_list = XP_ListNew(); - - net_EntryList = XP_ListNew(); - -#ifdef MOZILLA_CLIENT - NET_ReadCacheFAT("", TRUE); - - NET_ReadCookies(""); - - -#endif /* MOZILLA_CLIENT */ - - NET_TotalNumberOfProcessingURLs=0; /* reset */ - -#ifdef XP_UNIX - { - char *ac_url = getenv("AUTOCONF_URL"); - if (ac_url) { - NET_SetProxyServer(PROXY_AUTOCONF_URL, ac_url); - NET_SelectProxyStyle(PROXY_STYLE_AUTOMATIC); - } - } -#endif - -#ifdef JAVA - libnet_asyncIO = PR_NewNamedMonitor("libnet"); -#endif - NET_SetupPrefs(NULL); /* setup initial proxy, socks, dnsExpiration and cache preference info */ - PREF_RegisterCallback("network.proxy",NET_PrefChangedFunc,NULL); - PREF_RegisterCallback("browser.cache",NET_PrefChangedFunc,NULL); - PREF_RegisterCallback("network.hosts.socks_server",NET_PrefChangedFunc,NULL); - PREF_RegisterCallback("network.hosts.socks_serverport",NET_PrefChangedFunc,NULL); - PREF_RegisterCallback("network.dnsCacheExpiration",NET_DNSExpirationPrefChanged,NULL); - NET_RegisterCookiePrefCallbacks(); /* simply inits cookie info in mkaccess.c */ - /* and registers the callbacks */ - /* inits the proxy autodiscovery vars and registers their callbacks. */ - NET_RegisterPadPrefCallbacks(); - NET_RegisterEnableUrlMatchCallback(); - PREF_RegisterCallback("mail.allow_at_sign_in_user_name", NET_PrefChangedFunc, NULL); - - /* initialize protocol modules - * - * eventually this should be done dynamically, - * but first we need to make URL types be dynamically - * registered, and make URL parsing dynamic as well. - * - * Currently, registering them in the most used order is - * very slightly more efficient - */ - NET_InitFileProtocol(); - NET_InitHTTPProtocol(); - NET_InitMemCacProtocol(); - NET_InitFTPProtocol(); - NET_InitAboutProtocol(); - NET_InitGopherProtocol(); - NET_InitMochaProtocol(); - NET_InitNFSProtocol(); - NET_InitURNProtocol(); - NET_InitWAISProtocol(); - NET_InitRemoteProtocol(); - NET_InitDataURLProtocol(); -#ifdef JAVA - NET_InitMarimbaProtocol(); -#endif - NET_InitTotallyRandomStuffPeopleAddedProtocols(); - - NET_InitMailtoProtocol(); /* has a stub for MOZ_MAIL_NEWS */ -#ifdef MOZ_MAIL_NEWS - NET_InitNewsProtocol(); - NET_InitMailboxProtocol(); - NET_InitMsgSearchProtocol(); - NET_InitPop3Protocol(); - NET_InitLDAPProtocol(); - NET_InitCertLdapProtocol(); - NET_InitAddressBookProtocol(); -#endif /* MOZ_MAIL_NEWS */ - - return(status); -} - -/* set the maximum allowable number of open connections at any one - * time regardless of the context - */ -PUBLIC void -NET_ChangeMaxNumberOfConnections(int max_number_of_connections) -{ - - /* if already equal return */ - if(NET_MaxNumberOfOpenConnections == max_number_of_connections) - return; - - if(max_number_of_connections < 1) - max_number_of_connections = 1; - - /* make sure that # conns per context is less than or equal - * to this Max - */ - if(NET_MaxNumberOfOpenConnectionsPerContext > max_number_of_connections) - NET_MaxNumberOfOpenConnectionsPerContext = max_number_of_connections; - - NET_MaxNumberOfOpenConnections = max_number_of_connections; - - /* close any open connections to prevent deadlock - */ - net_cleanup_reg_protocol_impls(); -} - -/* set the maximum allowable number of open connections at any one - * time Per context - */ -PUBLIC void -NET_ChangeMaxNumberOfConnectionsPerContext(int max_number_of_connections) -{ - - /* if already equal return */ - if(NET_MaxNumberOfOpenConnectionsPerContext == max_number_of_connections) - return; - - /* gate the number of max connections to be within 1 and 4 - */ - if(max_number_of_connections < 1) - max_number_of_connections = 1; - - if(max_number_of_connections > 6) - max_number_of_connections = 6; - - NET_MaxNumberOfOpenConnectionsPerContext = max_number_of_connections; - - /* close any open connections to prevent deadlock - */ -/* @@@@ NET_CleanupFTP(); */ -#ifdef MOZILLA_CLIENT -#ifdef MOZ_MAIL_NEWS -/* @@@@ NET_CleanupNews(); */ -#endif /* MOZ_MAIL_NEWS */ -#endif /* MOZILLA_CLIENT */ - -} - -/* check the date and set off the timebomb if necessary - * - * Calls FE_Alert with a message and then disables - * all network calls to hosts not in our domains, - * except for FTP connects. - */ -PUBLIC Bool -NET_CheckForTimeBomb(MWContext *context) -{ - static Bool done = FALSE; - time_t cur_time; - time_t timebomb_time = 0; - time_t timebomb_warning_time = 0; - - int32 relative_timebomb_days = 0; - int32 relative_timebomb_warning_days = 0; - time_t relative_timebomb_start_date = 0; - char *relative_timebomb_prefs_name; - time_t relative_timebomb_time = 0; - time_t relative_timebomb_warning_time = 0; - Bool have_relative_timebomb = FALSE; - Bool just_started_relative_timebomb = FALSE; - - if(done) - return(NET_TimeBombActive); - - /* - * Check if any timebomb is enabled - */ - PREF_GetConfigInt("timebomb.expiration_time",(int32 *)&timebomb_time); - PREF_GetConfigInt("timebomb.relative_timebomb_days", - (int32 *)&relative_timebomb_days); - - if (relative_timebomb_days >= 1) - have_relative_timebomb = TRUE; - - done = TRUE; - - if ((timebomb_time < 1) && (have_relative_timebomb == FALSE)) - return FALSE; - - cur_time = XP_TIME(); - - /* - * check the absolute timebomb - */ - TRACEMSG(("current time is: %ld %s", cur_time, ctime(&cur_time))); - TRACEMSG(("Timebomb time is: %ld %s", timebomb_time,ctime(&timebomb_time))); - if ((timebomb_time >= 1) && (cur_time > timebomb_time)) - { - char * alert = NET_ExplainErrorDetails(MK_TIMEBOMB_MESSAGE); - - FE_Alert(context, alert); - FREE(alert); - - NET_TimeBombActive = TRUE; - - return(TRUE); - } - - /* - * check the relative timebomb - * (note: we store the start date in prefs using a "secret" name ) - */ - if (have_relative_timebomb) { - TRACEMSG(("Relative timebomb days = %ld", relative_timebomb_days)); - relative_timebomb_prefs_name = NULL; - PREF_CopyConfigString("timebomb.relative_timebomb_secret_name", - &relative_timebomb_prefs_name); - if (relative_timebomb_prefs_name == NULL) - relative_timebomb_prefs_name = - XP_STRDUP("general.bproxy_cert_digest"); - relative_timebomb_start_date = 0; - PREF_GetIntPref(relative_timebomb_prefs_name, - (int32 *)&relative_timebomb_start_date); - - if (relative_timebomb_start_date < 1) - { - /* if no value must be first time so set start date */ - just_started_relative_timebomb = TRUE; - relative_timebomb_start_date = cur_time; - PREF_SetIntPref(relative_timebomb_prefs_name, - (int32)relative_timebomb_start_date); - } - XP_FREE(relative_timebomb_prefs_name); - relative_timebomb_time = relative_timebomb_start_date + - (relative_timebomb_days * 24 * 60 * 60); - if (cur_time > relative_timebomb_time) - { - char *alert = NET_ExplainErrorDetails(MK_RELATIVE_TIMEBOMB_MESSAGE); - - FE_Alert(context, alert); - FREE(alert); - - NET_TimeBombActive = TRUE; - - return(TRUE); - } - } - - /* - * check the absolute timebomb warning - */ - PREF_GetConfigInt("timebomb.warning_time",(int32 *)&timebomb_warning_time); - TRACEMSG(("Timebomb warning time is: %ld %s", timebomb_warning_time, - ctime(&timebomb_warning_time))); - if ((timebomb_warning_time >= 1) && (cur_time > timebomb_warning_time)) - { - char * alert = NET_ExplainErrorDetails( MK_TIMEBOMB_WARNING_MESSAGE, - INTL_ctime(context, &timebomb_time)); - FE_Alert(context, alert); - FREE(alert); - - NET_TimeBombActive = FALSE; - - return(FALSE); - } - - /* - * check the relative timebomb warning - * also: on first use warn user this is timebombed - */ - if (have_relative_timebomb) { - relative_timebomb_warning_days = 0; - PREF_GetConfigInt("timebomb.relative_timebomb_warning_days", - (int32 *)&relative_timebomb_warning_days); - TRACEMSG(("Relative timebomb warning days = %ld", - relative_timebomb_warning_days)); - if (relative_timebomb_warning_days >= 1) - relative_timebomb_warning_time = relative_timebomb_start_date + - (relative_timebomb_warning_days * 24 * 60 * 60); - else - relative_timebomb_warning_time = cur_time; - if (just_started_relative_timebomb || - (cur_time > relative_timebomb_warning_time)) - { - char * alert = NET_ExplainErrorDetails( - MK_RELATIVE_TIMEBOMB_WARNING_MESSAGE, - INTL_ctime(context, &relative_timebomb_time)); - FE_Alert(context, alert); - FREE(alert); - - NET_TimeBombActive = FALSE; - - return(FALSE); - } - } - - return(FALSE); -} - -/* set the way the cache should be used - */ -PUBLIC void -NET_SetCacheUseMethod(CacheUseEnum method) -{ - NET_CacheUseMethod = method; -} - -PRIVATE void -net_CallExitRoutine(Net_GetUrlExitFunc *exit_routine, - URL_Struct *URL_s, - int status, - FO_Present_Types format_out, - MWContext *window_id) -{ -#ifdef EDITOR - /* History_entry * his; */ - /* Change all references to "about:editfilenew" into "file:///Untitled" */ - /* Do this for both Browser and Editor windows */ - if( /* EDT_IS_EDITOR(window_id) && */ - URL_s && URL_s->address && - 0 == XP_STRCMP(URL_s->address, XP_NEW_DOC_URL) ) - { - XP_FREE(URL_s->address); - URL_s->address = XP_STRDUP(XP_NEW_DOC_NAME); - - /* Not sure if this is the best place to do this, - * but it needs to go someplace! - */ - LO_SetBaseURL(window_id, XP_NEW_DOC_NAME); - - /* Setting context title to NULL will trigger - * Windows front end to use the URL address and set - * doc and window title to "Untitled" - * Do all front ends do this? - * If not, they will have to use EDT_IS_NEW_DOCUMENT - * to test for new doc and update title (in exit_routine) - */ - if ( window_id->title ) { - XP_FREE(window_id->title); - window_id->title = NULL; - } - /* Note: We replace "about:editfilenew" with "file:///Untitled" - * in SHIST_AddDocument(), so we don't need to mess with - * History data here. - */ - - /* Set window_id->is_new_document flag appropriately - * This flag allows quicker response for often-called - * status queries at front end - */ - if ( EDT_IS_EDITOR(window_id) ) { - EDT_NEW_DOCUMENT(window_id, TRUE); - } - } -#endif /* EDITOR */ -#if defined(XP_WIN) || defined (XP_MAC) || defined (XP_OS2) - FE_URLEcho(URL_s, status, window_id); -#endif /* XP_WIN/MAC/OS2 */ - - if (!URL_s->load_background) - FE_EnableClicking(window_id); - -#ifdef MOZILLA_CLIENT - if(URL_s->refresh_url && status != MK_INTERRUPTED) - FE_SetRefreshURLTimer(window_id, URL_s->refresh, URL_s->refresh_url); -#endif /* MOZILLA_CLIENT */ - - if (URL_s->pre_exit_fn) - { - Net_GetUrlExitFunc *per = URL_s->pre_exit_fn; - URL_s->pre_exit_fn = 0; - (*per) (URL_s, status, window_id); - } - /* byrd: plugin specific stuff, where we've added our own exit routine: */ - if ((URL_s->owner_data != NULL) && - (URL_s->owner_id == 0x0000BAC0)){ - NPL_URLExit(URL_s,status,window_id); - } - - if ( exit_routine != NULL ) { - (*exit_routine) (URL_s, status, window_id); - } -} - -PRIVATE XP_Bool -net_does_url_require_socket_limit(int urltype) -{ - if( urltype == HTTP_TYPE_URL - || urltype == SECURE_HTTP_TYPE_URL - || urltype == FTP_TYPE_URL - || urltype == NEWS_TYPE_URL - || urltype == GOPHER_TYPE_URL) - return TRUE; - - return(FALSE); -} - - -PRIVATE XP_Bool -net_is_one_url_allowed_to_run(MWContext *context, int url_type) -{ - /* put a limit on the total number of open connections - */ - if(NET_TotalNumberOfOpenConnections < NET_MaxNumberOfOpenConnectionsPerContext - || !net_does_url_require_socket_limit(url_type)) - { - return(TRUE); - } - else if(NET_TotalNumberOfOpenConnections >= NET_MaxNumberOfOpenConnections) - { - return(FALSE); - } - else - { - XP_List * list_ptr; - ActiveEntry * tmpEntry; - int32 cur_win_id = FE_GetContextID(context); - int real_number_of_connections = 0; - - - /* run through the list of running URLs and check - * for open connections only for this context. - * This will allow for the Total number of open - * connections to only apply to each window not - * to the whole program - */ - list_ptr = net_EntryList; - while((tmpEntry = (ActiveEntry *) XP_ListNextObject(list_ptr)) != NULL) - { - if(cur_win_id == FE_GetContextID(tmpEntry->window_id) - && net_does_url_require_socket_limit(url_type)) - { - real_number_of_connections++; - } - } /* end while */ - - /* pause it if the number of connections per context - * is higher than the per context limit or - */ - if(real_number_of_connections >= NET_MaxNumberOfOpenConnectionsPerContext) - - { - return(FALSE); - } - } - - return(TRUE); -} - -static int -net_push_url_on_wait_queue(int url_type, - URL_Struct *URL_s, - FO_Present_Types format_out, - MWContext *context, - Net_GetUrlExitFunc exit_routine) -{ - - WaitingURLStruct * wus = XP_NEW(WaitingURLStruct); - - TRACEMSG(("Pushing URL on wait queue with %d open connections", - NET_TotalNumberOfOpenConnections )); - if(!wus) - { - net_CallExitRoutine(exit_routine, - URL_s, - MK_OUT_OF_MEMORY, - format_out, - context); - return(MK_OUT_OF_MEMORY); - } - - wus->type = url_type; - wus->URL_s = URL_s; - wus->format_out = format_out; - wus->window_id = context; - wus->exit_routine = exit_routine; - - /* add "text/ *" to beginning of list so it gets processed first */ - if (CLEAR_CACHE_BIT(format_out) == FO_INTERNAL_IMAGE) - /* low priority */ - XP_ListAddObjectToEnd(net_waiting_for_connection_url_list, wus); - else - /* higher priority */ - XP_ListAddObject(net_waiting_for_connection_url_list, wus); - - return(0); -} - -/* returns a malloc'd string that has a bunch of netlib - * status info in it. - * - * please free the pointer when done. - */ -PUBLIC char * -NET_PrintNetlibStatus() -{ - char small_buf[128]; - XP_List * list_ptr; - ActiveEntry *tmpEntry; - char *rv=0; - - LIBNET_LOCK(); - list_ptr = net_EntryList; - - sprintf(small_buf, XP_GetString( XP_URLS_WAITING_FOR_AN_OPEN_SOCKET ), - XP_ListCount(net_waiting_for_connection_url_list), - NET_MaxNumberOfOpenConnectionsPerContext); - StrAllocCat(rv, small_buf); - - sprintf(small_buf, XP_GetString( XP_URLS_WAITING_FOR_FEWER_ACTIVE_URLS ), - XP_ListCount(net_waiting_for_actives_url_list)); - StrAllocCat(rv, small_buf); - - sprintf(small_buf, XP_GetString( XP_CONNECTIONS_OPEN ), - NET_TotalNumberOfOpenConnections); - StrAllocCat(rv, small_buf); - - sprintf(small_buf, XP_GetString( XP_ACTIVE_URLS ), - NET_TotalNumberOfProcessingURLs); - StrAllocCat(rv, small_buf); - - while((tmpEntry = (ActiveEntry *)XP_ListNextObject(list_ptr)) != 0) - { - sprintf(small_buf, "------------------------------------\nURL:"); - StrAllocCat(rv, small_buf); - StrAllocCat(rv, tmpEntry->URL_s->address); - StrAllocCat(rv, "\n"); - - sprintf(small_buf, XP_GetString(XP_SOCK_CON_SOCK_PROTOCOL), - tmpEntry->socket, tmpEntry->con_sock, tmpEntry->protocol); - StrAllocCat(rv, small_buf); - } - -#if defined(DEBUG) && defined(JAVA) - { - static int loggingOn = 0; -#ifndef NSPR20 - NETLIBLog.level = (loggingOn ? PRLogLevel_none : PRLogLevel_debug); - NETLIBLog.depth = 0; /* keep it from auto-initializing */ -#else - NETLIB->level = (loggingOn ? PR_LOG_NONE : PR_LOG_DEBUG); -#endif /* NSPR20 */ - loggingOn = !loggingOn; - } -#endif /* defined(DEBUG) && defined(JAVA) */ - - LIBNET_UNLOCK(); - return(rv); -} - -#define RELEASE_PREFERRED_URLS TRUE -#define RELEASE_PREFERRED_OR_NON_PREFERRED FALSE -#define RELEASE_PREFETCH_URLS TRUE -#define DONT_RELEASE_PREFETCH_URLS FALSE -PRIVATE void -net_release_urls_for_processing(XP_Bool release_prefered, XP_Bool release_prefetch) -{ - XP_List * list_ptr = net_waiting_for_connection_url_list; - WaitingURLStruct * wus; - - while((wus = (WaitingURLStruct *) - XP_ListNextObject(list_ptr)) != NULL) - { - - if(!release_prefered - || ( (wus->format_out != FO_INTERNAL_IMAGE - && wus->format_out != FO_CACHE_AND_INTERNAL_IMAGE) -#ifdef MOZILLA_CLIENT - || IL_PreferredStream(wus->URL_s) ) ) -#else - ) ) -#endif /* MOZILLA_CLIENT */ - { - /* if the type passed in NOT Prefetch_priority then only - * release URL's that are NOT Prefetch_priority - */ - if(release_prefetch || wus->URL_s->priority != Prefetch_priority) - { - XP_ListRemoveObject(net_waiting_for_connection_url_list, wus); - - /* change prefetch to active prefetch to allow it to load */ - if(wus->URL_s->priority == Prefetch_priority) - wus->URL_s->priority = CurrentlyPrefetching_priority; - - NET_GetURL(wus->URL_s, - wus->format_out, - wus->window_id, - wus->exit_routine); - FREE(wus); - break; - } - } - } -} - -PRIVATE void -net_release_prefetch_urls_for_processing(void) -{ - /* for now release just one url at a time to give the best possibility - * of individual URL's completeing before the user interrupts things - */ - net_release_urls_for_processing(RELEASE_PREFERRED_OR_NON_PREFERRED, - RELEASE_PREFETCH_URLS); - -} - -/* - * Must be called under the cover of the LIBNET_LOCK! - * - * The was_background parameter is used to determine when to call - * FE_AllConnectionsComplete. It should only be called if we've just - * completed processing a URL that's *not* a background loading URL. - * A background URL is one that loads without UI activity e.g. no - * status bar and thermo activity. - * This ensures that looping animations don't call - * FE_AllConnectionsComplete on every loop cycle. -*/ -PRIVATE void -net_CheckForWaitingURL(MWContext * window_id, int protocol, Bool was_background) -{ -#ifdef NSPR - XP_ASSERT(LIBNET_IS_LOCKED()); -#endif - - /* decrement here since this function is called - * after every exit_routine - */ - NET_TotalNumberOfProcessingURLs--; - - if(NET_TotalNumberOfProcessingURLs < 0) - { - FE_Alert(window_id, XP_GetString(XP_ALERT_URLS_LESSZERO)); - NET_TotalNumberOfProcessingURLs = 0; - } - - if(NET_TotalNumberOfOpenConnections < 0) - { - FE_Alert(window_id, XP_GetString(XP_ALERT_CONNECTION_LESSZERO)); - NET_TotalNumberOfOpenConnections = 0; - } - - TRACEMSG(("In: net_CheckForWaitingURL with %d connection waiting URL's, %d active waiting URL's and %d open connections", - XP_ListCount(net_waiting_for_connection_url_list), - XP_ListCount(net_waiting_for_actives_url_list), - NET_TotalNumberOfOpenConnections)); - - /* release preferred streams first */ - net_release_urls_for_processing(RELEASE_PREFERRED_URLS, - DONT_RELEASE_PREFETCH_URLS); - - /* release non-prefered streams */ - net_release_urls_for_processing(RELEASE_PREFERRED_OR_NON_PREFERRED, - DONT_RELEASE_PREFETCH_URLS); - - - if(!NET_AreThereActiveConnectionsForWindow(window_id)) - { - /* if there are prefetch URL's in the queue then we - * arn't quite done yet - */ - net_release_prefetch_urls_for_processing(); - - if(!was_background) - { - ET_SendLoadEvent(window_id, EVENT_XFER_DONE, - NULL, NULL, LO_DOCUMENT_LAYER_ID, - FALSE); - FE_AllConnectionsComplete(window_id); - } - } - -} - -PRIVATE int -net_AbortWaitingURL(MWContext * window_id, Bool all, XP_List *list) -{ - XP_List * list_ptr; /* Can't initialize here as list might be null */ - XP_List * prev_list_ptr = list; - XP_List * tmp_list_ptr; - WaitingURLStruct * wus; - int32 cur_win_id=0; - int number_killed = 0; - - /* make sure we actually got a list of things to Abort */ - if (!list) - return(number_killed); - - /* Now initialize the list pointer */ - list_ptr = list->next; - - if(!all && window_id) - cur_win_id = FE_GetContextID(window_id); - - while(list_ptr) - { - wus = (WaitingURLStruct *)list_ptr->object; - - if(all || (window_id && cur_win_id == FE_GetContextID(wus->window_id))) - { - TRACEMSG(("killing waiting URL")); - - /* call exit routine since we are done */ - net_CallExitRoutine(wus->exit_routine, - wus->URL_s, - MK_INTERRUPTED, - wus->format_out, - wus->window_id); - - number_killed += 1; - - tmp_list_ptr = list_ptr; - list_ptr = list_ptr->next; - - /* remove the element from the list - * - * we have to use the function since it does - * funky doubly linked list stuff. - */ - XP_ListRemoveObject(list, wus); - - FREE(wus); - } - else - { - prev_list_ptr = list_ptr; - list_ptr = list_ptr->next; - } - } - - return(number_killed); -} - - -/* Helper function for NET_SanityCheckDNS() */ -PRIVATE Bool -net_IsHostResolvable (CONST char *hostname, MWContext *context) -{ -#ifdef XP_UNIX - int rv; - PRHostEnt hpbuf; - char dbbuf[PR_NETDB_BUF_SIZE]; -#ifndef NSPR20 - rv = (PR_gethostbyname(hostname, &hpbuf, dbbuf, sizeof(dbbuf), 0) - ? TRUE : FALSE); -#else - if (PR_GetHostByName(hostname, dbbuf, sizeof(dbbuf), &hpbuf) == PR_FAILURE) - rv = FALSE; - else - rv = TRUE; -#endif - return rv; -#else - return(FALSE); -#endif -} - - -#if defined(__sun) && !defined(__svr4__) -/* From xfe/dns-stub.o or xfe/nis-stub.o, depending. Gag. */ -extern int fe_HaveDNS; -#endif - - -PUBLIC void -NET_SanityCheckDNS (MWContext *context) -{ -#ifdef XP_UNIX - - char *proxy = MKhttp_proxy; - char *socks = NET_SocksHostName; - char *test_host_1 = "home.netscape.com"; - char *test_host_2 = "home6.netscape.com"; - char *test_host_3 = "internic.net"; - char *message; -#if defined(__sun) && !defined(__svr4__) - char temp[1000]; -#endif - - static Bool done; - if (done) return; - done = TRUE; - - message = (char *) XP_ALLOC (3000); - if (! message) - return; - *message = 0; - - if (proxy) - proxy = XP_STRDUP (proxy); - if (socks) - socks = XP_STRDUP (socks); - - /* Strip off everything after last colon. */ - { - char *s; - if (proxy && (s = XP_STRRCHR (proxy, ':'))) - *s = 0; - if (socks && (s = XP_STRRCHR (socks, ':'))) - *s = 0; - } - - if (proxy) - proxy = XP_StripLine (proxy); /* in case it was "hostname: 80" */ - if (socks) - socks = XP_StripLine (socks); - - /* If the hosts are specified as IP numbers, don't try and resolve them. - (Yes, hostnames can't begin with digits.) */ - if (proxy && proxy[0] >= '0' && proxy[0] <= '9') - XP_FREE (proxy), proxy = 0; - if (socks && socks[0] >= '0' && socks[0] <= '9') - XP_FREE (socks), socks = 0; - - if (proxy && *proxy) - { - /* If there is an HTTP proxy, then we shouldn't try to resolve any - other hosts at all, because they might legitimately be unresolvable. - The HTTP proxy will do all lookups. - */ - if (!net_IsHostResolvable (proxy, context)) - { - sprintf(message, XP_GetString(XP_UNKNOWN_HTTP_PROXY), proxy); - } - } - else - { - /* There is not an HTTP proxy specified. So check the other hosts. - */ - - if (socks && *socks && !net_IsHostResolvable (socks, context)) - { - sprintf(message, XP_GetString(XP_UNKNOWN_SOCKS_HOST), socks); -#ifdef XP_UNIX - XP_STRCAT (message, XP_GetString(XP_SOCKS_NS_ENV_VAR)); - /* Only Unix has the $SOCKS_NS environment variable. */ -#endif /* XP_UNIX */ - XP_STRCAT (message, XP_GetString(XP_CONSULT_SYS_ADMIN)); - } - else - { - /* At this point, we're not using a proxy, and either we're not - using a SOCKS host or we're using a resolvable SOCKS host. - So that means that all the usual host names should be resolvable, - and the world is broken if they're not. - */ - char *losers [10]; - int loser_count = 0; - -#ifdef XP_UNIX - char local [255], *local2; - PRHostEnt *hent, hpbuf; - char dbbuf[PR_NETDB_BUF_SIZE]; - - if (gethostname (local, sizeof (local) - 1)) - local [0] = 0; - - /* gethostname() and gethostbyname() often return different data - - on many systems, the former is basename, the latter is FQDN. */ -#ifndef NSPR20 - if (local && - (hent = PR_gethostbyname (local, &hpbuf, dbbuf, sizeof(dbbuf), 0)) && - XP_STRCMP (local, hent->h_name)) - local2 = XP_STRDUP (hent->h_name); - else - local2 = 0; -#else - local2 = 0; - if (local && - (PR_GetHostByName (local, dbbuf, sizeof(dbbuf), &hpbuf) == PR_SUCCESS)) { - hent = &hpbuf; - if (XP_STRCMP (local, hent->h_name)) - local2 = XP_STRDUP (hent->h_name); - } -#endif - if (local && *local && !net_IsHostResolvable (local, context)) - losers [loser_count++] = local; - if (local2 && *local2 && !net_IsHostResolvable (local2, context)) - losers [loser_count++] = local2; -#endif /* XP_UNIX */ - - if (!net_IsHostResolvable (test_host_1, context)) - losers [loser_count++] = test_host_1; - if (!net_IsHostResolvable (test_host_2, context)) - losers [loser_count++] = test_host_2; - if (!net_IsHostResolvable (test_host_3, context)) - losers [loser_count++] = test_host_3; - - if (loser_count > 0) - { - if (loser_count > 1) - { - int i; - sprintf(message, XP_GetString(XP_UNKNOWN_HOSTS)); - for (i = 0; i < loser_count; i++) - { - XP_STRCAT (message, " "); - XP_STRCAT (message, losers [i]); - XP_STRCAT (message, "\n"); - } - } - else - { - sprintf(message, XP_GetString(XP_UNKNOWN_HOST), losers[0]); - } - XP_STRCAT (message, XP_GetString(XP_SOME_HOSTS_UNREACHABLE)); -#ifdef XP_UNIX -# if defined(__sun) && !defined(__svr4__) /* compiled on SunOS 4.1.3 */ - if (fe_HaveDNS) - /* Don't talk about $SOCKS_NS in the YP/NIS version. */ -# endif - XP_STRCAT (message, XP_GetString(XP_SOCKS_NS_ENV_VAR)); - -#if defined(__sun) && !defined(__svr4__) /* compiled on SunOS 4.1.3 */ - assert (XP_AppName); - if (fe_HaveDNS) - { - sprintf(temp, XP_GetString(XP_THIS_IS_DNS_VERSION), - XP_AppName); - } - else - { - sprintf(temp, XP_GetString(XP_THIS_IS_YP_VERSION), - XP_AppName); - } - XP_STRCAT(message, temp); -# endif /* SunOS 4.* */ -#endif /* XP_UNIX */ - XP_STRCAT (message, XP_GetString(XP_CONSULT_SYS_ADMIN)); - } - -#ifdef XP_UNIX - if (local2) XP_FREE (local2); -#endif /* XP_UNIX */ - } - } - - if (proxy) XP_FREE (proxy); - if (socks) XP_FREE (socks); - - if (*message) - FE_Alert (context, message); - XP_FREE (message); -#endif /* XP_UNIX full function wrap */ -} - - -/* shutdown the netlibrary, cancel all - * conections and free all - * memory - */ -PUBLIC void -NET_ShutdownNetLib(void) -{ - ActiveEntry *tmpEntry; - -/* #ifdef XP_WIN */ -#ifdef JAVA - if (libnet_asyncIO) LIBNET_LOCK(); -#else - LIBNET_LOCK(); -#endif - - if(net_waiting_for_actives_url_list) { - net_AbortWaitingURL(0, TRUE, net_waiting_for_actives_url_list); - XP_ListDestroy(net_waiting_for_actives_url_list); - net_waiting_for_actives_url_list = 0; - } - - if(net_waiting_for_connection_url_list) { - net_AbortWaitingURL(0, TRUE, net_waiting_for_connection_url_list); - XP_ListDestroy(net_waiting_for_connection_url_list); - net_waiting_for_connection_url_list = 0; - } - - /* run through list of - * connections - */ - while((tmpEntry = (ActiveEntry *)XP_ListRemoveTopObject(net_EntryList)) != 0) - { - - if(tmpEntry->proto_impl) - { - (*tmpEntry->proto_impl->interrupt)(tmpEntry); - } - else - { - XP_ASSERT(0); - } - - /* XP_OS2_FIX IBM-MAS: limit length of output to keep from blowing trace buffer! */ - TRACEMSG(("End of transfer, entry (soc=%d, con=%d) being removed from list with %d status: %-.1900s", - tmpEntry->socket, tmpEntry->con_sock, tmpEntry->status, tmpEntry->URL_s->address)); - - /* call exit routine since we know we are done */ - net_CallExitRoutine(tmpEntry->exit_routine, - tmpEntry->URL_s, - tmpEntry->status, - tmpEntry->format_out, - tmpEntry->window_id); - XP_FREE(tmpEntry); /* free the no longer active entry */ - } - - XP_ListDestroy(net_EntryList); - net_EntryList = 0; - - /* free any memory in the protocol modules - */ - net_cleanup_reg_protocol_impls(); - -#ifdef MOZILLA_CLIENT - NET_SaveCookies(""); - GH_SaveGlobalHistory(); -#endif /* MOZILLA_CLIENT */ - - /* purge existing cache files */ - - /* free memory in the tcp routines - */ - NET_CleanupTCP(); - -#ifdef MOZILLA_CLIENT - NET_CleanupCache(""); - NET_SetMemoryCacheSize(0); /* free memory cache */ - -#endif /* MOZILLA_CLIENT */ - -#ifdef XP_UNIX - NET_CleanupFileFormat(NULL); -#else - NET_CleanupFileFormat(); -#endif - -/* #ifdef XP_WIN */ -#ifdef JAVA - if (libnet_asyncIO) LIBNET_UNLOCK(); -#else - LIBNET_UNLOCK(); -#endif -} - -static PRBool warn_on_mailto_post = PR_TRUE; - -extern void -NET_WarnOnMailtoPost(PRBool warn) -{ - warn_on_mailto_post = warn; - return; -} - -/* use a small static array for speed of traversal. - * We rely on the fact that we dont expect ton's of - * protocol implementations to be dynamically added - * so a static size is managable for now. - * - * URL types should really be dynamic so that we dont have - * to define types in net.h - */ -#define MAX_NUMBER_OF_PROTOCOL_IMPLS LAST_URL_TYPE - -typedef struct { - NET_ProtoImpl *impl; - int url_type; -} net_ProtoImplAndTypeAssoc; - -PRIVATE net_ProtoImplAndTypeAssoc net_proto_impls[MAX_NUMBER_OF_PROTOCOL_IMPLS]; -PRIVATE net_number_of_proto_impls = 0; - -/* registers a protocol impelementation for a particular url_type - * see NET_URL_Type() for types - */ -void NET_RegisterProtocolImplementation(NET_ProtoImpl *impl, int for_url_type) -{ - - if(!impl || for_url_type < 0 || for_url_type > LAST_URL_TYPE) - { - XP_ASSERT(0); - return; - } - - net_proto_impls[net_number_of_proto_impls].impl = impl; - net_proto_impls[net_number_of_proto_impls].url_type = for_url_type; - - net_number_of_proto_impls++; -} - -/* get a handle to a protocol implemenation - */ -NET_ProtoImpl * -net_get_protocol_impl(int for_url_type) -{ - int count=0; - - /* if we ever get around to doing dynamic protocol loading - * this would be a good place to plug it in. - * just load a DLL with the implementation and - * return the handle. - * The integer URL_TYPE would need to be replaced with - * strings or some other identifier so that it can all be - * handled dynamically - */ - - for(; count < net_number_of_proto_impls; count++) - { - if(net_proto_impls[count].url_type == for_url_type) - return net_proto_impls[count].impl; - } - - XP_ASSERT(0); /* should always find one */ - return NULL; -} - -void -net_cleanup_reg_protocol_impls(void) -{ - int count=0; - - for(; count < net_number_of_proto_impls; count++) - { - (*net_proto_impls[count].impl->cleanup)(); - } - -} - -/* register and begin a transfer. - * - * returns negative if the transfer errored or finished during the call - * otherwise returns 0 or greater. - * - * A URL, an output format, a window context pointer, and a callback routine - * should be passed in. - */ - -PUBLIC int -NET_GetURL (URL_Struct *URL_s, - FO_Present_Types output_format, - MWContext *window_id, - Net_GetUrlExitFunc* exit_routine) -{ - int status=MK_MALFORMED_URL_ERROR; - int pacf_status=TRUE; - int type; - int cache_method=0; - ActiveEntry *this_entry=0; /* a new entry */ - char *new_address; - int processcallbacks = 0; - Bool confirm; - Bool load_background; - char *confirmstring; - TRACEMSG(("Entering NET_GetURL")); - LIBNET_LOCK(); - -#if !defined(NSPR20_DISABLED) && defined(XP_UNIX) - /* temporarily use busy poll to ease transition */ - NET_SetCallNetlibAllTheTime(window_id, "mkgeturl"); -#endif - -#ifdef XP_WIN - /* this runs a timer to periodically call the netlib - * so that we still get events even when OnIdle is never - * called - */ - NET_SetNetlibSlowKickTimer(TRUE); -#endif - - XP_ASSERT (URL_s && URL_s->address); -#ifdef MOZILLA_CLIENT - if ( URL_s->mailto_post && warn_on_mailto_post) { - confirmstring = NULL; - confirm = FALSE; - - StrAllocCopy(confirmstring, XP_GetString(XP_CONFIRM_MAILTO_POST_1)); - StrAllocCat(confirmstring, XP_GetString(XP_CONFIRM_MAILTO_POST_2)); - - if ( confirmstring ) { - confirm = FE_Confirm(window_id, confirmstring); - XP_FREE(confirmstring); - } - - if ( !confirm ) { - /* abort url - */ - net_CallExitRoutine(exit_routine, - URL_s, - MK_INTERRUPTED, - output_format, - window_id); - LIBNET_UNLOCK_AND_RETURN(MK_INTERRUPTED); - } - } -#endif /* MOZILLA_CLIENT */ -#ifdef EDITOR - /* First time here - get our strings out of XP_MSG */ - if (XP_NEW_DOC_URL == NULL) { - StrAllocCopy(XP_NEW_DOC_URL, XP_GetString(XP_EDIT_NEW_DOC_URL)); - } - if (XP_NEW_DOC_NAME == NULL) { - StrAllocCopy(XP_NEW_DOC_NAME, XP_GetString(XP_EDIT_NEW_DOC_NAME)); - } - - /* Test for "Untitled" URL */ - if( 0 == XP_STRCMP(URL_s->address, XP_NEW_DOC_NAME) ) { - /* Change request to load "file:///Untitled" into "about:editfilenew" */ - XP_FREE(URL_s->address); - URL_s->address = XP_STRDUP(XP_NEW_DOC_URL); - /* Set flag so FE can quickly detect new doc */ - window_id->is_new_document = TRUE; - } - else if( 0 == XP_STRCMP(URL_s->address, XP_NEW_DOC_URL) ) { - window_id->is_new_document = TRUE; - } - else { - /* Be sure this is FALSE if not a new document */ - window_id->is_new_document = FALSE; - } - /* Hack to allow special URL for new Editor doc - * and still allow filtering of non-editable doc types - * All editor GetUrl calls should use FO_CACHE_AND_EDIT - * except in the case of the new document URL - */ - if( EDT_IS_EDITOR(window_id) && window_id->is_new_document ) { - output_format = FO_CACHE_AND_PRESENT; - } -#endif -#ifdef MOZILLA_CLIENT - - /* Hack. Proxy AutoDiscovery. If we want to use proxy autodiscovery - * simply point the MKproxy_ac_url to the MK_padpacURL and use all - * all the same logic. */ - if(!MKproxy_ac_url && NET_UsingPadPac()) { - NET_SetNoProxyFailover(); - MKproxy_ac_url=MK_padPacURL; - } - - /* Initialize global/auto proxy codepath. This gets called for every - * NET_GetURL() call. */ - if ( -#ifdef MOZ_OFFLINE - !NET_IsOffline() && -#endif /* MOZ_OFFLINE */ - /* Do we even have auto config urls set? If not, don't bother - * continuing. See mkautocf.c for more info. */ - (MKglobal_config_url || MKproxy_ac_url) - && (CLEAR_CACHE_BIT(output_format) == FO_PRESENT) - && (!(type = NET_URL_Type(URL_s->address)) - || type == HTTP_TYPE_URL - || type == SECURE_HTTP_TYPE_URL - || type == GOPHER_TYPE_URL - || type == FTP_TYPE_URL - || type == WAIS_TYPE_URL - || type == URN_TYPE_URL - || type == NFS_TYPE_URL - || type == POP3_TYPE_URL - || (type == NEWS_TYPE_URL && !strncasecomp(URL_s->address, "snews:", 6))) - ) { - int status=-1; - /* Figure out which auto config we're dealing (global or pac file - * with and load it. - * If the status is other than -1, the load started and the - * originally requested url will be loaded by the pre_exit_fn() - * that is in the proxy auto config URL_Struct. */ - if(MKglobal_config_url && !NET_GlobalAcLoaded) { - NET_GlobalAcLoaded=TRUE; - status=NET_LoadProxyConfig(MKglobal_config_url, - URL_s, - output_format, - window_id, - exit_routine); - } - /* else we know we're dealing with a proxyACL (the other - * possibility in the above if statement) so see if it's - * loaded or not. Also make sure we want to use it (i.e. style is - * automatic or if we want to use a proxy autodiscovery url). */ - else if(!NET_ProxyAcLoaded - && ( (MKproxy_style == PROXY_STYLE_AUTOMATIC) - || !MKproxy_style - || NET_UsingPadPac() ) ) { - NET_ProxyAcLoaded=TRUE; - status=NET_LoadProxyConfig(MKproxy_ac_url, - URL_s, - output_format, - window_id, - exit_routine); - } - if(status != -1) - LIBNET_UNLOCK_AND_RETURN(status); - } /* End big proxy if */ - -#endif /* MOZILLA_CLIENT */ - - load_background = URL_s->load_background; - - /* kill leading and trailing spaces in the URL address - */ - new_address = XP_StripLine(URL_s->address); - if(new_address != URL_s->address) - { - XP_MEMMOVE(URL_s->address, new_address, XP_STRLEN(new_address)+1); - } - - /* get the protocol type - */ - type = NET_URL_Type(URL_s->address); - - if (URL_s->method == URL_HEAD_METHOD && - type != HTTP_TYPE_URL && type != SECURE_HTTP_TYPE_URL && type != FILE_TYPE_URL) { - /* We can only do HEAD on http connections. */ - net_CallExitRoutine(exit_routine, - URL_s, - MK_MALFORMED_URL_ERROR, /* Is this right? ### */ - output_format, - window_id); - /* increment since it will get decremented */ - NET_TotalNumberOfProcessingURLs++; - net_CheckForWaitingURL(window_id, 0, load_background); - - LIBNET_UNLOCK_AND_RETURN(MK_MALFORMED_URL_ERROR); - } - - /* XP_OS2_FIX IBM-MAS:limit length of output to keep from blowing trace buffer! */ - TRACEMSG(("Called NET_GetURL with FO: %d URL %-.1900s --", output_format, URL_s->address)); - TRACEMSG(("with method: %d, and post headers: %s", URL_s->method, - URL_s->post_headers ? URL_s->post_headers : "none")); - - /* if this URL is for prefetching, put it on the wait queue until - * everything else is done - */ - if(URL_s->priority == Prefetch_priority) - { - LIBNET_UNLOCK_AND_RETURN(net_push_url_on_wait_queue(type, - URL_s, - output_format, - window_id, - exit_routine)); - } - - /* put a limit on the total number of active urls - */ - if((NET_TotalNumberOfProcessingURLs >= MAX_NUMBER_OF_PROCESSING_URLS) && - ((output_format & FO_ONLY_FROM_CACHE) == 0)) - { - LIBNET_UNLOCK_AND_RETURN(net_push_url_on_wait_queue(type, - URL_s, - output_format, - window_id, - exit_routine)); - } - - /* if we get this far then we should add the URL - * to the number of processing URL's - */ - NET_TotalNumberOfProcessingURLs++; - - if(type == VIEW_SOURCE_TYPE_URL) - { - /* this is a view-source: URL - * strip off the front stuff - */ - char *new_address=0; - /* the colon is guarenteed to be there */ - StrAllocCopy(new_address, XP_STRCHR(URL_s->address, ':')+1); - FREE(URL_s->address); - URL_s->address = new_address; - - type = NET_URL_Type(URL_s->address); - - /* remap the format out for the fo_present type - */ - if(CLEAR_CACHE_BIT(output_format) == FO_PRESENT) - output_format = FO_VIEW_SOURCE; - } - - if(type == MARIMBA_TYPE_URL) - { - /* If this a castanet URL, and Netcaster is not installed, try http:// - * Otherwise, we let the castanet protocol handler do its thing. - */ - if( ! FE_IsNetcasterInstalled() ) - { - char *new_address; - /* Replace castanet:// with http:// */ - /* Allocate space for 'http' + the rest of the string */ - new_address = XP_ALLOC(XP_STRLEN(XP_STRCHR(URL_s->address, ':'))+5); - - XP_ASSERT(new_address); - *new_address=0; - XP_STRCAT(new_address,"http"); - XP_STRCAT(new_address,XP_STRCHR(URL_s->address, ':')); - - FREE(URL_s->address); - URL_s->address = new_address; - - type = NET_URL_Type(URL_s->address); - } - } - - if(type == NETHELP_TYPE_URL) - { - /* this is a nethelp: URL - * separate into its component parts, the mapping file in URL_s->address, - * and the topic in URL_s->fe_data - */ - - if (NET_ParseNetHelpURL(URL_s) == MK_OUT_OF_MEMORY) { - LIBNET_UNLOCK_AND_RETURN(MK_OUT_OF_MEMORY); - } - - type = NET_URL_Type(URL_s->address); - - output_format = FO_LOAD_HTML_HELP_MAP_FILE; - } - -#ifdef MOZILLA_CLIENT - if( -#if defined(XP_WIN) || defined(XP_MAC) || defined(XP_OS2) - FE_UseExternalProtocolModule(window_id, output_format, URL_s, exit_routine) || -#endif - NPL_HandleURL(window_id, output_format, URL_s, exit_routine)) - { - /* don't call the exit routine since the - * External protocol module will call it - */ - net_CheckForWaitingURL(window_id, 0, load_background); - - LIBNET_UNLOCK_AND_RETURN(-1); /* all done */ - } - - if(NET_TimeBombActive) - { - /* Timebomb has gone off!! - * - * limit URL's to FTP and anything in our domains - */ - if(type != FTP_TYPE_URL - && type != ABOUT_TYPE_URL - && type != FILE_TYPE_URL - && type != MAILBOX_TYPE_URL - && type != IMAP_TYPE_URL - && type != POP3_TYPE_URL - && type != MOCHA_TYPE_URL - && type != DATA_TYPE_URL - && type != HTML_DIALOG_HANDLER_TYPE_URL - && type != HTML_PANEL_HANDLER_TYPE_URL - && type != INTERNAL_SECLIB_TYPE_URL - - && !strcasestr(URL_s->address, "mcom.com") - && !strcasestr(URL_s->address, "netscape.com")) - { - char * alert = NET_ExplainErrorDetails(MK_TIMEBOMB_URL_PROHIBIT); - - FE_Alert(window_id, alert); - FREE(alert); - - /* we need at least an address - * if we don't have it exit this routine - */ - net_CallExitRoutine(exit_routine, - URL_s, - MK_TIMEBOMB_URL_PROHIBIT, - output_format, - window_id); - - net_CheckForWaitingURL(window_id, 0, load_background); - - LIBNET_UNLOCK_AND_RETURN(MK_TIMEBOMB_URL_PROHIBIT); - } - } - - /* put up security dialog boxes to tell the user - * about transitions - * - * only do this for FO_PRESENT objects and objects - * not coming out of history - * and also make sure that the object is not being asked - * for twice via the "304 use local copy" method - */ - if(output_format == FO_CACHE_AND_PRESENT - && !URL_s->history_num - && !URL_s->use_local_copy) - { - Bool continue_loading_url = TRUE; - History_entry * h = SHIST_GetCurrent(&window_id->hist); - - /* this is some protection against the "mail document" - * feature popping up a dialog warning about an insecure - * post. - * If the type is MAILTO and the first post header - * begins with "Content-type" then it is a post from - * inside a form, otherwise it is just a normal MAILTO - * - * And, of course, anything not a MAILTO link will fall - * into the if as well. - */ - if(type != MAILTO_TYPE_URL - || !URL_s->post_headers - || !XP_STRNCMP("Content-type", URL_s->post_headers, 12)) - { - if(h && h->security_on) - { - /* if this is not a secure transaction */ - if(type != SECURE_HTTP_TYPE_URL - && !(type == NEWS_TYPE_URL && - toupper(*URL_s->address) == 'S') ) - { - if(URL_s->method == URL_POST_METHOD) - { - continue_loading_url = (Bool)SECNAV_SecurityDialog(window_id, - SD_INSECURE_POST_FROM_SECURE_DOC); - } - else if(!URL_s->redirecting_url - && type != MAILTO_TYPE_URL - && type != ABOUT_TYPE_URL - && type != MOCHA_TYPE_URL) - { - /* don't put up in case of redirect or mocha - */ - continue_loading_url = (Bool)SECNAV_SecurityDialog(window_id, - SD_LEAVING_SECURE_SPACE); - } - } - } - else - { - /* put up a dialog for all insecure posts - * except news and mail posts - */ - if(URL_s->method == URL_POST_METHOD - && type != SECURE_HTTP_TYPE_URL - && type != INTERNAL_NEWS_TYPE_URL - && type != NEWS_TYPE_URL - && type != HTML_DIALOG_HANDLER_TYPE_URL - && type != HTML_PANEL_HANDLER_TYPE_URL - && type != INTERNAL_SECLIB_TYPE_URL - && type != MAILTO_TYPE_URL) - { - continue_loading_url = (Bool)SECNAV_SecurityDialog(window_id, - SD_INSECURE_POST_FROM_INSECURE_DOC); - } - } - - if(!continue_loading_url) - { - /* abort url - */ - net_CallExitRoutine(exit_routine, - URL_s, - MK_INTERRUPTED, - output_format, - window_id); - net_CheckForWaitingURL(window_id, 0, load_background); - - LIBNET_UNLOCK_AND_RETURN(MK_INTERRUPTED); - } - } - } -#endif /* MOZILLA_CLIENT */ - - /* - * if the string is not a valid URL we are just going - * to punt, so we may as well try it as http - */ - if(type==0) - { - char *munged; - -#define INT_SEARCH_URL "http://cgi.netscape.com/cgi-bin/url_search.cgi?search=" -#define INT_SEARCH_URL_TYPE HTTP_TYPE_URL - - if(!(munged = (char*) XP_ALLOC(XP_STRLEN(URL_s->address)+20))) - { - net_CallExitRoutine(exit_routine, - URL_s, - MK_OUT_OF_MEMORY, - output_format, - window_id); - - LIBNET_UNLOCK_AND_RETURN(MK_OUT_OF_MEMORY); - } - -#ifdef EDITOR - /* Some platforms resize a window while creating it. An example is - * Windows in Communicator 4.0. On these platforms, - * the Composer View Document Source window can end up here with a - * bizarre (and potentially localized) URL of "View Document Source". - * If we allow this URL to be resolved, it will cause a search engine - * to be triggered. - * Fortunately, edit_view_source_hack is TRUE iff the context is - * a Composer View Document Source window. - */ - if ( window_id->edit_view_source_hack ){ - net_CallExitRoutine(exit_routine, - URL_s, - MK_INTERRUPTED, - output_format, - window_id); - LIBNET_UNLOCK_AND_RETURN(MK_INTERRUPTED); - } -#endif - - /* if it starts with a question mark or has a space it's - * a search URL - */ - if(*URL_s->address == '?' || XP_STRCHR(URL_s->address, ' ')) - { - /* URL contains spaces. Treat it as search text. */ - char *escaped; - - if(*URL_s->address == '?') - escaped = NET_Escape(URL_s->address+1, URL_XPALPHAS); - else - escaped = NET_Escape(URL_s->address, URL_XPALPHAS); - - if(escaped) - { - char *pUrl; - PREF_CopyCharPref("network.search.url",&pUrl); - FREE(munged); - if (pUrl) { - munged = PR_smprintf("%s%s", pUrl, escaped); - FREE(escaped); - XP_FREE(pUrl); - } - type = INT_SEARCH_URL_TYPE; - } - } - else - { - if(*URL_s->address == '/') - { - XP_STRCPY(munged, "file:"); - type = FILE_TYPE_URL; - } - else if(!strncasecomp(URL_s->address, "ftp", 3)) - { - XP_STRCPY(munged, "ftp://"); - type = FTP_TYPE_URL; - } - else if(!strncasecomp(URL_s->address, "gopher", 6)) - { - XP_STRCPY(munged, "gopher://"); - type = GOPHER_TYPE_URL; - } - else if(!strncasecomp(URL_s->address, "news", 4) - || !strncasecomp(URL_s->address, "nntp", 4)) - { - XP_STRCPY(munged, "news://"); - type = NEWS_TYPE_URL; - } - else - { - XP_STRCPY(munged, "http://"); - type = HTTP_TYPE_URL; - } - - XP_STRCAT(munged, URL_s->address); - } - - XP_FREE(URL_s->address); - URL_s->address = munged; - -#ifdef MOZILLA_CLIENT - /* Try the external protocol handlers again, since with the - * newly appended protocol, they might work this time. - */ - if( - #if defined(XP_WIN) || defined(XP_MAC) - FE_UseExternalProtocolModule(window_id, output_format, URL_s, exit_routine) || - #endif - NPL_HandleURL(window_id, output_format, URL_s, exit_routine)) - { - /* don't call the exit routine since the - * External protocol module will call it - */ - net_CheckForWaitingURL(window_id, 0, load_background); - - LIBNET_UNLOCK_AND_RETURN(-1); /* all done */ - } -#endif /* MOZILLA_CLIENT */ - } - - if(type == HTTP_TYPE_URL || type == FILE_TYPE_URL || - type == SECURE_HTTP_TYPE_URL || type == GOPHER_TYPE_URL -#ifdef JAVA - /* Castanet URLs don't work when there's no Java */ - || type == MARIMBA_TYPE_URL -#endif - ) - add_slash_to_URL(URL_s); - -#ifdef MOZILLA_CLIENT - /* - * If this is a resize-reload OR a view-source URL, try to use the - * URL's wysiwyg: counterpart. - */ - URL_s->resize_reload = (URL_s->force_reload == NET_RESIZE_RELOAD); - if(URL_s->wysiwyg_url && - (URL_s->resize_reload == TRUE || - CLEAR_CACHE_BIT(output_format) == FO_VIEW_SOURCE)) - { - StrAllocCopy(URL_s->address, URL_s->wysiwyg_url); - type = WYSIWYG_TYPE_URL; - } - - /* the FE's were screwing up the use of force_reload - * to get around a bug in the scroll to named anchor - * code. So I gave them an enum NET_RESIZE_RELOAD - * that they could use instead. NET_RESIZE_RELOAD - * should be treated just like NET_DONT_RELOAD within - * the netlib - */ - if((URL_s->force_reload == NET_RESIZE_RELOAD) || - (URL_s->force_reload == NET_CACHE_ONLY_RELOAD)) - URL_s->force_reload = NET_DONT_RELOAD; - - /* check for the url in the cache - */ - cache_method = NET_FindURLInCache(URL_s, window_id); - - if (!cache_method) - { - /* cache testing stuff */ - if(NET_CacheTraceOn) - { - char *buf = 0; - StrAllocCopy(buf, XP_GetString(XP_URL_NOT_FOUND_IN_CACHE)); - StrAllocCat(buf, URL_s->address); - FE_Alert(window_id, buf); - FREE(buf); - } - - /* if wysiwyg, there must be a cache entry or we retry the real url */ - if(type == WYSIWYG_TYPE_URL) - { - const char *real_url = LM_SkipWysiwygURLPrefix(URL_s->address); - - /* XXX can't use StrAllocCopy because it frees dest first */ - if (real_url && (new_address = XP_STRDUP(real_url)) != NULL) - { - /* cache miss: we must clear this flag so scripts rerun */ - URL_s->resize_reload = FALSE; - - XP_FREE(URL_s->address); - URL_s->address = new_address; - FREE_AND_CLEAR(URL_s->wysiwyg_url); - /* - * Since the call to NET_GetURL will increment the - * following counter again, we decrement it so as not - * to overcount. - */ - NET_TotalNumberOfProcessingURLs--; - LIBNET_UNLOCK_AND_RETURN( - NET_GetURL(URL_s, output_format, window_id, exit_routine) - ); - } - } - } - - /* if cache_method is non zero then we have this URL cached. Use - * the bogus cache url type - * - * This nasty bit of logic figures out if we really - * need to reload it or if we can use the cached copy - */ - else - { - if(URL_s->use_local_copy || output_format & FO_ONLY_FROM_CACHE) - { - /* the cached file is valid so use it unilaterally - */ - type = cache_method; - } - else if(URL_s->real_content_length > URL_s->content_length) - { - /* cache testing stuff */ - if(NET_CacheTraceOn) - { - char *buf = 0; - StrAllocCopy(buf, XP_GetString(XP_PARTIAL_CACHE_ENTRY)); - StrAllocCat(buf, URL_s->address); - FE_Alert(window_id, buf); - FREE(buf); - } - - URL_s->memory_copy = 0; - cache_method = 0; - TRACEMSG(("Getting the rest of a partial cache file")); - } - else if (URL_s->force_reload != NET_DONT_RELOAD) - { - TRACEMSG(("Force reload flag set. Checking server to see if modified")); - /* cache testing stuff */ - if(NET_CacheTraceOn) - { - char *buf = 0; - StrAllocCopy(buf, XP_GetString(XP_CHECKING_SERVER__FORCE_RELOAD)); - StrAllocCat(buf, URL_s->address); - FE_Alert(window_id, buf); - FREE(buf); - } - - /* strip the cache file and - * memory pointer - */ - if (type == WYSIWYG_TYPE_URL) - type = cache_method; - else - { - FREE_AND_CLEAR(URL_s->cache_file); - URL_s->memory_copy = 0; - cache_method = 0; - } - } - else if(URL_s->expires) - { - time_t cur_time = time(NULL); - - if(cur_time > URL_s->expires) - { - FREE_AND_CLEAR(URL_s->cache_file); - URL_s->memory_copy = 0; - URL_s->expires = 0; /* remove cache reference */ - cache_method = 0; - - /* cache testing stuff */ - if(NET_CacheTraceOn) - { - char *buf = 0; - StrAllocCopy(buf, XP_GetString(XP_OBJECT_HAS_EXPIRED)); - StrAllocCat(buf, URL_s->address); - FE_Alert(window_id, buf); - FREE(buf); - } - } - else - { - /* the cached file is valid so use it unilaterally - */ - type = cache_method; - } - } - else if((NET_CacheUseMethod == CU_NEVER_CHECK || URL_s->history_num) - && !URL_s->expires) - { - type = cache_method; - } - else if(NET_CacheUseMethod == CU_CHECK_ALL_THE_TIME - && CLEAR_CACHE_BIT(output_format) == FO_PRESENT - && (type == HTTP_TYPE_URL || type == SECURE_HTTP_TYPE_URL) - && !URL_s->expires) - { - /* cache testing stuff */ - if(NET_CacheTraceOn) - { - char *buf = 0; - StrAllocCopy(buf, XP_GetString(XP_CHECKING_SERVER_CACHE_ENTRY)); - StrAllocCat(buf, URL_s->address); - FE_Alert(window_id, buf); - FREE(buf); - } - - /* if it's an HTTP URL and its not an Internal image - * and it's not being asked for with ONLY FROM CACHE - * and it's not coming out of the history - * and it doesn't have an expiration date... - * FORCE Reload it - */ - TRACEMSG(("Non history http file found. Force reloading it ")); - /* strip the cache file and - * memory pointer - */ - FREE_AND_CLEAR(URL_s->cache_file); - URL_s->memory_copy = 0; - cache_method = 0; - - } - else if(!URL_s->last_modified - && CLEAR_CACHE_BIT(output_format) == FO_PRESENT - && (type == HTTP_TYPE_URL || type == SECURE_HTTP_TYPE_URL) -#ifdef MOZ_OFFLINE - && !NET_IsOffline() -#endif /* MOZ_OFFLINE */ - ) /* *X* check for is offline */ - { - TRACEMSG(("Non history cgi script found (probably)." - " Force reloading it ")); - /* cache testing stuff */ - if(NET_CacheTraceOn) - { - char *buf = 0; - StrAllocCopy(buf, XP_GetString(XP_CHECKING_SERVER__LASTMOD_MISS)); - StrAllocCat(buf, URL_s->address); - FE_Alert(window_id, buf); - FREE(buf); - } - - /* strip the cache file and - * memory pointer - */ - FREE_AND_CLEAR(URL_s->cache_file); - URL_s->memory_copy = 0; - URL_s->expires = 0; /* remove cache reference */ - cache_method = 0; - } - else - { - /* the cached file is valid so use it unilaterally - */ - type = cache_method; - } - } -#endif /* MOZILLA_CLIENT */ - - /* - * If the object should only come out of the cache - * we should abort now if there is not a cache object - */ - if(output_format & FO_ONLY_FROM_CACHE) - { - TRACEMSG(("object called with ONLY_FROM_CACHE format out")); - - if(!cache_method) - { - net_CallExitRoutine(exit_routine, - URL_s, - MK_OBJECT_NOT_IN_CACHE, - output_format, - window_id); - net_CheckForWaitingURL(window_id, type, load_background); - - LIBNET_UNLOCK_AND_RETURN(MK_OBJECT_NOT_IN_CACHE); - } - else - { - /* remove the ONLY_FROM_CACHE designation and replace - * it with CACHE_AND.. so that we go through the cacheing - * module again so that we can memory cache disk objects - * and do the right thing in general - */ - output_format = CLEAR_PRESENT_BIT(output_format,FO_ONLY_FROM_CACHE); - output_format = SET_PRESENT_BIT(output_format,FO_CACHE_ONLY); - } - } - - /* put a limit on the total number of open connections - */ - if(!net_is_one_url_allowed_to_run(window_id, type)) - { - NET_TotalNumberOfProcessingURLs--; /* waiting not processing */ - LIBNET_UNLOCK_AND_RETURN(net_push_url_on_wait_queue(type, - URL_s, - output_format, - window_id, - exit_routine)); - } - - /* start a new entry */ - this_entry = XP_NEW(ActiveEntry); - if(!this_entry) - { - net_CallExitRoutine(exit_routine, - URL_s, - MK_OUT_OF_MEMORY, - output_format, - window_id); - - LIBNET_UNLOCK_AND_RETURN(MK_OUT_OF_MEMORY); - } - - /* init new entry */ - XP_MEMSET(this_entry, 0, sizeof(ActiveEntry)); - this_entry->URL_s = URL_s; - this_entry->socket = NULL; - this_entry->con_sock = NULL; - this_entry->exit_routine = exit_routine; - this_entry->window_id = window_id; - this_entry->protocol = type; - - /* set the format out for the entry - */ - this_entry->format_out = output_format; - - /* set it busy */ - this_entry->busy = TRUE; - - /* add it to the processing list now - */ - XP_ListAddObjectToEnd(net_EntryList, this_entry); - - /* this will protect against multiple posts unknown to the - * user - * - * check if the method is post and it came from the - * history and it isn't coming from the cache - */ - if(URL_s->method == URL_POST_METHOD - && !URL_s->expires - && !cache_method - && URL_s->history_num) - { - if(URL_s->force_reload != NET_DONT_RELOAD) - { - if(!FE_Confirm(window_id, XP_GetString(XP_CONFIRM_REPOST_FORMDATA))) - { - XP_ListRemoveObject(net_EntryList, this_entry); - net_CallExitRoutine(exit_routine, - URL_s, - MK_INTERRUPTED, - output_format, - window_id); - /* will get decremented */ - net_CheckForWaitingURL(window_id, this_entry->protocol, - load_background); - - XP_FREE(this_entry); /* not needed any more */ - - LIBNET_UNLOCK_AND_RETURN(MK_INTERRUPTED); - } - /* otherwise fall through and repost - */ - } - else - { - NET_StreamClass * stream; - char buffer[1000]; - - StrAllocCopy(URL_s->content_type, TEXT_HTML); - stream = NET_StreamBuilder(CLEAR_CACHE_BIT(output_format), - URL_s, - window_id); - if(stream) - { - XP_STRCPY(buffer, XP_GetString(XP_HTML_MISSING_REPLYDATA)); - (*stream->put_block)(stream, - buffer, - XP_STRLEN(buffer)); - (*stream->complete)(stream); - } - - XP_ListRemoveObject(net_EntryList, this_entry); - - net_CallExitRoutine(exit_routine, - URL_s, - MK_INTERRUPTED, - output_format, - window_id); - net_CheckForWaitingURL(window_id, this_entry->protocol, - load_background); - - XP_FREE(this_entry); /* not needed any more */ - - LIBNET_UNLOCK_AND_RETURN(MK_INTERRUPTED); - } - } - -redo_load_switch: /* come here on file/ftp retry */ - - /* This code path handles the case when a pac/global file has been loaded - * and we now want to use it in for a request. If we find a proxy/socks - * server to use, we call NET_HTTPLoad here, skipping the below switch. - * See mkautocf.c for more info. */ - pacf_status = TRUE; - if ((NET_ProxyAcLoaded || NET_GlobalAcLoaded) - && (this_entry->protocol == HTTP_TYPE_URL - || this_entry->protocol == SECURE_HTTP_TYPE_URL - || this_entry->protocol == GOPHER_TYPE_URL - || this_entry->protocol == FTP_TYPE_URL - || this_entry->protocol == WAIS_TYPE_URL - || this_entry->protocol == URN_TYPE_URL - || this_entry->protocol == NFS_TYPE_URL - || (this_entry->protocol == NEWS_TYPE_URL - && !strncasecomp(URL_s->address, "snews:", 6) - ) - ) - && (this_entry->proxy_conf = - pacf_find_proxies_for_url(window_id, URL_s)) != NULL - && (pacf_status = pacf_get_proxy_addr(window_id, - this_entry->proxy_conf, - &this_entry->proxy_addr, - &this_entry->socks_host, - &this_entry->socks_port)) - && this_entry->proxy_addr - ) - { - TRACEMSG(("PAC returned \"%s\" for \"%s\".", this_entry->proxy_conf, URL_s->address)); - /* Secure protocols need to be kept in their own protocol - * to make SSL tunneling happen. */ - if (this_entry->protocol != SECURE_HTTP_TYPE_URL - && this_entry->protocol != NEWS_TYPE_URL) { - this_entry->protocol = HTTP_TYPE_URL; - } - - /* Everything else except SNEWS gets loaded by HTTP loader, - * including HTTPS. */ - if (this_entry->protocol != NEWS_TYPE_URL) { - this_entry->proto_impl = net_get_protocol_impl(HTTP_TYPE_URL); - } else { - this_entry->proto_impl = net_get_protocol_impl(NEWS_TYPE_URL); - } - - if(this_entry->proto_impl) - status = (*this_entry->proto_impl->init)(this_entry); - } - else if ( pacf_status == FALSE && NET_GetNoProxyFailover() == TRUE ) - { - status = MK_UNABLE_TO_LOCATE_PROXY; - FE_Alert(window_id, XP_GetString(XP_BAD_AUTOCONFIG_NO_FAILOVER)); - } - else - { - char *proxy_address = NET_FindProxyHostForUrl(type, this_entry->URL_s->address); - - if(proxy_address) - { - this_entry->protocol = HTTP_TYPE_URL; - this_entry->proxy_addr = proxy_address; - } - - this_entry->proto_impl = net_get_protocol_impl(this_entry->protocol); - - if(this_entry->proto_impl) - { - status = (*this_entry->proto_impl->init)(this_entry); - } - else - { - /* bad url */ - URL_s->error_msg = - NET_ExplainErrorDetails(MK_MALFORMED_URL_ERROR, - this_entry->URL_s->address); - status = MK_MALFORMED_URL_ERROR; - this_entry->status = MK_MALFORMED_URL_ERROR; - } - } - - /* the entry is no longer busy - */ - this_entry->busy = FALSE; - -#ifdef MOZILLA_CLIENT - /* OH NASTY A GOTO! - * If we went into load file and what we really wanted to do - * was use FTP, LoadFile will return MK_USE_FTP_INSTEAD so - * we will go back up to the beginning of the switch and - * use ftp instead - */ - if(status == MK_USE_FTP_INSTEAD) - { - type = FTP_TYPE_URL; - this_entry->protocol = type; /* change protocol designator */ - this_entry->status = 0; /* reset */ - goto redo_load_switch; - } - else -#endif /* MOZILLA_CLIENT */ - if(this_entry->status == MK_USE_COPY_FROM_CACHE) - { - TRACEMSG(("304 Not modified recieved using cached entry\n")); - -#ifdef MOZILLA_CLIENT - NET_RefreshCacheFileExpiration(this_entry->URL_s); -#endif /* MOZILLA_CLIENT */ - - /* turn off force reload by telling it to use local copy - */ - this_entry->URL_s->use_local_copy = TRUE; - - /* restart the transfer - */ - XP_ListRemoveObject(net_EntryList, this_entry); - status = NET_GetURL(this_entry->URL_s, - this_entry->format_out, - this_entry->window_id, - this_entry->exit_routine); - - net_CheckForWaitingURL(this_entry->window_id, - this_entry->protocol, - this_entry->URL_s->load_background); - - XP_FREE(this_entry); - LIBNET_UNLOCK_AND_RETURN(0); - } - else if(this_entry->status == MK_DO_REDIRECT) - { - /* this redirect should just call GetURL again - */ - int status; - XP_ListRemoveObject(net_EntryList, this_entry); - status =NET_GetURL(this_entry->URL_s, - this_entry->format_out, - this_entry->window_id, - this_entry->exit_routine); - net_CheckForWaitingURL(this_entry->window_id, - this_entry->protocol, - load_background); - XP_FREE(this_entry); /* not needed any more */ - LIBNET_UNLOCK_AND_RETURN(0); - } - else if(this_entry->status == MK_TOO_MANY_OPEN_FILES) - { - /* Queue this URL so it gets tried again - */ - XP_ListRemoveObject(net_EntryList, this_entry); - status = net_push_url_on_wait_queue( - NET_URL_Type(this_entry->URL_s->address), - this_entry->URL_s, - this_entry->format_out, - this_entry->window_id, - this_entry->exit_routine); - NET_TotalNumberOfProcessingURLs--; - XP_FREE(this_entry); - LIBNET_UNLOCK_AND_RETURN(status); - } - else if(this_entry->status == MK_OFFLINE) - { - /* Stop the stars and put up a nice message - */ - XP_ListRemoveObject(net_EntryList, this_entry); - { - if (window_id->type != MWContextMail && window_id->type != MWContextMailMsg && - (CLEAR_CACHE_BIT(output_format) != FO_INTERNAL_IMAGE) && - (CLEAR_CACHE_BIT(output_format) != FO_EMBED) && - (CLEAR_CACHE_BIT(output_format) != FO_PLUGIN) && - (CLEAR_CACHE_BIT(output_format) != FO_DO_JAVA)) - { - /* We only display the message for top-level items (i.e., not for - inline images, plugins, or java classes */ - - char * alert = XP_STRDUP(XP_GetString(XP_ALERT_OFFLINE_MODE_SELECTED)); - FE_Alert(window_id, alert); - FREE(alert); - } - } - - net_CallExitRoutine(this_entry->exit_routine, - this_entry->URL_s, - this_entry->status, - this_entry->format_out, - this_entry->window_id); - - - /* Check for WaitingURL decrements TotalNumberofProcessingURLS */ - net_CheckForWaitingURL(this_entry->window_id, - this_entry->protocol, - load_background); - - XP_FREE(this_entry); - LIBNET_UNLOCK_AND_RETURN(MK_OFFLINE); - } - - if(status < 0) /* check for finished state */ - { - - /* XP_OS2_FIX IBM-MAS: limit length of output string to keep from blowing trace buffer */ - TRACEMSG(("End of transfer, entry (soc=%d, con=%d) being removed from list with %d status: %-.1900s", - this_entry->socket, this_entry->con_sock, this_entry->status, - this_entry->URL_s->address)); - - XP_ListRemoveObject(net_EntryList, this_entry); - - net_CallExitRoutine(this_entry->exit_routine, - this_entry->URL_s, - this_entry->status, - this_entry->format_out, - this_entry->window_id); - net_CheckForWaitingURL(this_entry->window_id, - this_entry->protocol, - load_background); - XP_FREE(this_entry); /* not needed any more */ - } - - TRACEMSG(("Leaving GetURL with %d items in list", - XP_ListCount(net_EntryList))); - - /* XXX - hack for chromeless windows - jsw 10/27/95 */ - LIBNET_UNLOCK(); - if ( processcallbacks ) { - NET_ProcessExitCallbacks(); - } - - return status; - -#ifdef NOTDEF /* this is the real code here */ - LIBNET_UNLOCK_AND_RETURN(status); -#endif -} - -/* process_net is called from the client's main event loop and - * causes connections to be read and processed. Multiple - * connections can be processed simultaneously. - */ -PUBLIC int NET_ProcessNet (PRFileDesc *ready_fd, int fd_type) -{ - ActiveEntry * tmpEntry; - XP_List * list_item; - int rv= -1; - Bool load_background; - -#ifdef XP_OS2_FIX - /* assume no local files in net_EntryList. - see "Thrash Optomization", below */ - int localfiles = 0; -#endif - - TRACEMSG(("Entering ProcessNet! ready_fd: %d", ready_fd)); - LIBNET_LOCK(); - - if(XP_ListIsEmpty(net_EntryList)) - { - TRACEMSG(("Invalid call to NET_ProcessNet with fd: %d - No active entries\n", ready_fd)); - -#ifdef MOZILLA_CLIENT - if (fd_type == NET_EVERYTIME_TYPE) - { - MWContext *c = XP_FindContextOfType(0, MWContextBrowser); - if (!c) c = XP_FindContextOfType(0, MWContextMail); - if (!c) c = XP_FindContextOfType(0, MWContextNews); - if (!c) c = XP_FindContextOfType(0, MWContextMessageComposition); - if (!c) c = XP_FindContextOfType(0, MWContextMailMsg); - if (!c) c = XP_FindContextOfType(0, MWContextPane); - - if (c) - { - if(NET_IsCallNetlibAllTheTimeSet(c, NULL)) - { - NET_ClearCallNetlibAllTheTime(c, "mkgeturl"); - } - NET_SetNetlibSlowKickTimer(FALSE); - } - } -#endif /* MOZILLA_CLIENT */ - - LIBNET_UNLOCK_AND_RETURN(0); /* no entries to process */ - } - - if(NET_InGetHostByName) - { - TRACEMSG(("call to processnet while doing gethostbyname call")); - XP_ASSERT(0); - LIBNET_UNLOCK_AND_RETURN(1); - } - - /* - * if -1 is passed into ProcessNet use select to - * figure out if a socket is ready - */ - if(ready_fd == NULL) - { - /* try and find a socket ready for reading - */ -#define MAX_SIMULTANIOUS_SOCKETS 100 - /* should never have more than MAX sockets */ - PRPollDesc poll_desc_array[MAX_SIMULTANIOUS_SOCKETS]; - unsigned int fd_set_size=0; - - /* reorder the list so that we get a round robin effect */ - XP_ListMoveTopToBottom(net_EntryList); - - fd_type = NET_SOCKET_FD; - - /* process one socket ready for reading */ - list_item = net_EntryList; - while((tmpEntry = (ActiveEntry *) XP_ListNextObject(list_item)) != 0) - { - - if(tmpEntry->busy) - continue; - - if(!tmpEntry->local_file && !tmpEntry->memory_file) - { - if (tmpEntry->socket != NULL) - { - - if(tmpEntry->con_sock) - { - poll_desc_array[fd_set_size].fd = tmpEntry->con_sock; - poll_desc_array[fd_set_size].in_flags = PR_POLL_READ | PR_POLL_EXCEPT | PR_POLL_WRITE; - } - else - { - poll_desc_array[fd_set_size].fd = tmpEntry->socket; - poll_desc_array[fd_set_size].in_flags = PR_POLL_READ | PR_POLL_EXCEPT; - } - - fd_set_size++; - XP_ASSERT(fd_set_size < MAX_SIMULTANIOUS_SOCKETS); - } - } - else if(tmpEntry == - (ActiveEntry *) XP_ListGetObjectNum(net_EntryList, 1)) - { - /* if this is the very first object in the list - * and it's a local file or a memory cache copy - * then use this one entry and skip the select call - * we won't deadlock because we reorder the list - * with every call to net process net. - */ - fd_type = NET_LOCAL_FILE_FD; - ready_fd = tmpEntry->socket; /* it's actually going to be NULL in this case */ - - /* call yeild to let other thread do something */ - PR_Sleep(PR_INTERVAL_NO_WAIT); - - break; /* exit while */ - } - } - - if(fd_type == NET_SOCKET_FD) /* in case we set it for the local file type above */ - { - int count=0; - int ret; - -#ifndef NSPR20_DISABLED - PR_Sleep(PR_INTERVAL_NO_WAIT); /* thread yeild */ -#endif - - ret = PR_Poll(poll_desc_array, - fd_set_size, - 0); - - if(ret < 1) - { - - TRACEMSG(("Select returned no active sockets! " - "WASTED CALL TO PROCESS NET")); - LIBNET_UNLOCK_AND_RETURN(XP_ListIsEmpty(net_EntryList) ? 0 : 1); - } - - /* process one socket ready for reading, - * find the first one ready - */ - list_item = net_EntryList; - while((tmpEntry=(ActiveEntry *) XP_ListNextObject(list_item)) != 0) - { - - if(tmpEntry->busy) - continue; - - if(!tmpEntry->local_file && !tmpEntry->memory_file) - { - /* count should line up to the appropriate socket since - * it was added in the same order - */ - XP_ASSERT(poll_desc_array[count].fd == tmpEntry->socket - || poll_desc_array[count].fd == tmpEntry->con_sock); - if(poll_desc_array[count].out_flags & (PR_POLL_READ | PR_POLL_WRITE | PR_POLL_EXCEPT)) - { - ready_fd = tmpEntry->socket; - break; - } - count++; - } - } - - if(!ready_fd) - { - /* couldn't find the active socket. Shouldn't ever happen */ - XP_ASSERT(0); - LIBNET_UNLOCK_AND_RETURN(XP_ListIsEmpty(net_EntryList) ? 0 : 1); - } - - } - } - - list_item = net_EntryList; - - /* process one socket ready for reading - * - * find the ready socket in the active entry list - */ - while((tmpEntry = (ActiveEntry *) XP_ListNextObject(list_item)) != 0) - { - TRACEMSG(("Found item in Active Entry List. sock #%d con_sock #%d", - tmpEntry->socket, tmpEntry->con_sock)); - - if(tmpEntry->busy) - { - /* I guess this is alright since one of the streams - * (Play audio for instance) may put up a modal dialog - * box which causes the main event loop to get called - * from within the stream - * - * FE_Alert(tmpEntry->window_id, "reentrant call to Process Net"); - */ - } - /* this will activate local and memory files as well since the ready_fd - * will be zero and will match the NULL socket ID. - * - * We won't have starvation because the list is reordered every time - */ - else if(ready_fd == tmpEntry->socket - || ready_fd == tmpEntry->con_sock) - { - - tmpEntry->busy = TRUE; - - TRACEMSG(("Item has data ready for read")); - - rv = (*tmpEntry->proto_impl->process)(tmpEntry); - - tmpEntry->busy = FALSE; - - /* check for done status on transfer and call - * exit routine if done. - */ - if(rv < 0) - { - - XP_ListRemoveObject(net_EntryList, tmpEntry); - - if(tmpEntry->status == MK_USE_COPY_FROM_CACHE) - { - TRACEMSG(("304 Not modified recieved using cached entry\n")); - #ifdef MOZILLA_CLIENT - NET_RefreshCacheFileExpiration(tmpEntry->URL_s); - #endif /* MOZILLA_CLIENT */ - - /* turn off force reload by telling it to use local copy - */ - tmpEntry->URL_s->use_local_copy = TRUE; - - /* restart the transfer - */ - NET_GetURL(tmpEntry->URL_s, - tmpEntry->format_out, - tmpEntry->window_id, - tmpEntry->exit_routine); - - net_CheckForWaitingURL(tmpEntry->window_id, - tmpEntry->protocol, - tmpEntry->URL_s->load_background); - - } - else if(tmpEntry->status == MK_DO_REDIRECT) - { - TRACEMSG(("Doing redirect part in ProcessNet")); - - /* restart the whole transfer */ - NET_GetURL(tmpEntry->URL_s, - tmpEntry->format_out, - tmpEntry->window_id, - tmpEntry->exit_routine); - - net_CheckForWaitingURL(tmpEntry->window_id, - tmpEntry->protocol, - tmpEntry->URL_s->load_background); - } - else if(tmpEntry->status == MK_TOO_MANY_OPEN_FILES) - { - /* Queue this URL so it gets tried again - */ - LIBNET_UNLOCK_AND_RETURN(net_push_url_on_wait_queue( - NET_URL_Type(tmpEntry->URL_s->address), - tmpEntry->URL_s, - tmpEntry->format_out, - tmpEntry->window_id, - tmpEntry->exit_routine)); - } - else if(tmpEntry->status < 0 - && !tmpEntry->URL_s->use_local_copy - && XP_GetError() != SSL_ERROR_BAD_CERTIFICATE - && (tmpEntry->status == MK_CONNECTION_REFUSED - || tmpEntry->status == MK_CONNECTION_TIMED_OUT - || tmpEntry->status == MK_UNABLE_TO_CREATE_SOCKET - || tmpEntry->status == MK_UNABLE_TO_LOCATE_HOST - || tmpEntry->status == MK_UNABLE_TO_CONNECT) - && (NET_IsURLInDiskCache(tmpEntry->URL_s) - || NET_IsURLInMemCache(tmpEntry->URL_s))) - { - /* if the status is negative something went wrong - * with the load. If last_modified is set - * then we probably have a cache file, - * but it might be a broken image so - * make sure "use_local_copy" is not - * set. - * - * Only do this when we can't connect to the - * server. - */ - - /* if we had a cache file and got a load - * error, go ahead and use it anyways - */ - - /* turn off force reload by telling it to use local copy - */ - tmpEntry->URL_s->use_local_copy = TRUE; - - if(CLEAR_CACHE_BIT(tmpEntry->format_out) == FO_PRESENT) - { - StrAllocCat(tmpEntry->URL_s->error_msg, - XP_GetString( XP_USING_PREVIOUSLY_CACHED_COPY_INSTEAD ) ); - - FE_Alert(tmpEntry->window_id, - tmpEntry->URL_s->error_msg); - } - - FREE_AND_CLEAR(tmpEntry->URL_s->error_msg); - - /* restart the transfer - */ - NET_GetURL(tmpEntry->URL_s, - tmpEntry->format_out, - tmpEntry->window_id, - tmpEntry->exit_routine); - - net_CheckForWaitingURL(tmpEntry->window_id, - tmpEntry->protocol, - tmpEntry->URL_s->load_background); - } - else - { - /* XP_OS2_FIX IBM-MAS: limit size of URL string to 100 to keep from blowing trace message buffer! */ - TRACEMSG(("End of transfer, entry (soc=%d, con=%d) being removed from list with %d status: %-.1900s", - tmpEntry->socket, tmpEntry->con_sock, tmpEntry->status, - (tmpEntry->URL_s->address ? tmpEntry->URL_s->address : ""))); - - /* catch out of memory errors at the lowest - * level since we don't do it at all the out - * of memory condition spots - */ - if(tmpEntry->status == MK_OUT_OF_MEMORY - && !tmpEntry->URL_s->error_msg) - { - tmpEntry->URL_s->error_msg = - NET_ExplainErrorDetails(MK_OUT_OF_MEMORY); - } - - load_background = tmpEntry->URL_s->load_background; - /* run the exit routine - */ - net_CallExitRoutine(tmpEntry->exit_routine, - tmpEntry->URL_s, - tmpEntry->status, - tmpEntry->format_out, - tmpEntry->window_id); - - net_CheckForWaitingURL(tmpEntry->window_id, - tmpEntry->protocol, - load_background); - - #ifdef MILAN - /* if the error was caused by a NETWORK DOWN - * then interrupt the window. This - * could still be a problem since another - * window may be active, but it should get - * the same error - */ - if(SOCKET_ERRNO == XP_ERRNO_ENETDOWN) - { - NET_SilentInterruptWindow(tmpEntry->window_id); - } - #endif /* MILAN */ - } - - XP_FREE(tmpEntry); /* free the now non active entry */ - - } /* end if rv < 0 */ - - TRACEMSG(("Leaving process net with %d items in list", - XP_ListCount(net_EntryList))); - - LIBNET_UNLOCK_AND_RETURN(XP_ListIsEmpty(net_EntryList) ? 0 : 1); /* all done */ - - } /* end if */ - - } /* end while */ - - - /* the active socket wasn't found in the list :( - */ - TRACEMSG(("Invalid call to NET_ProcessNet: Active item with passed in fd: %d not found\n", ready_fd)); - - LIBNET_UNLOCK_AND_RETURN(XP_ListIsEmpty(net_EntryList) ? 0 : 1); -} - -/* - * net_InterruptActiveStream - * Kills a single stream given its ActiveEntry* - * * FrontEndCancel -> NetInterruptWindow -> net_InterruptActiveStream - * * LayoutNewDoc -> KillOtherLayouts -> net_InterruptActiveStream - * - * Also removes the entry from the active list and frees it. - * Also allows waiting urls into the active list. - */ -PRIVATE int -net_InterruptActiveStream (ActiveEntry *entry) -{ - TRACEMSG(("Terminating transfer on port #%d, proto: %d", - entry->socket, entry->protocol)); - - /* remove it from the active list first to prevent - * reentrant problem - */ - XP_ListRemoveObject(net_EntryList, entry); - - if(entry->proto_impl) - { - (*entry->proto_impl->interrupt)(entry); - } - else - { - XP_ASSERT(0); - } - - /* XP_OS2_FIX IBM-MAS: limit length of output string to keep from blowing trace buffer */ - TRACEMSG(("End of transfer, entry (soc=%d, con=%d) being removed from list with %d status: %-.1900s", - entry->socket, entry->con_sock, entry->status, entry->URL_s->address)); - - /* call exit routine since we know we are done */ - net_CallExitRoutine(entry->exit_routine, - entry->URL_s, - entry->status, - entry->format_out, - entry->window_id); - - /* decrement here since we don't call checkForWaitingURL's - */ - NET_TotalNumberOfProcessingURLs--; - - if(!NET_AreThereActiveConnectionsForWindow(entry->window_id)) - FE_AllConnectionsComplete(entry->window_id); - - /* free the no longer active entry */ - XP_FREE(entry); - - return 0; -} - -/* use a URL struct to find an active entry - * The netlib lock must be held prior to calling this - * returns NULL if not found - */ -PRIVATE ActiveEntry * -net_find_ac_from_url(URL_Struct *nurl) -{ - XP_List * iter = net_EntryList; - ActiveEntry *tmpEntry = NULL, *rv = NULL; - - while ((tmpEntry = (ActiveEntry *) XP_ListNextObject(iter)) != NULL) - { - if (tmpEntry->URL_s == nurl) - { - rv = tmpEntry; - break; - } - } - - return(rv); -} - -PUBLIC Bool -NET_SetActiveEntryBusyStatus(URL_Struct *nurl, Bool set_busy) -{ - ActiveEntry *entry = NULL; - - entry = net_find_ac_from_url(nurl); - - if(entry) - entry->busy = set_busy; - - return (entry != 0); -} - -/* - * NET_InterruptStream kills just stream associated with an URL. - */ -PUBLIC int -NET_InterruptStream (URL_Struct *nurl) -{ - /* Find the ActiveEntry structure for this URL */ - ActiveEntry *entryToKill = NULL; - int status; - - TRACEMSG(("Entering NET_InterruptStream")); - LIBNET_LOCK(); - - if(NET_InGetHostByName) - { - TRACEMSG(("call to InterrruptStream while doing gethostbyname call")); - LIBNET_UNLOCK_AND_RETURN(1); - } - - entryToKill = net_find_ac_from_url(nurl); - -/* assert (entryToKill);*/ - /* Kill it & free it */ - if (entryToKill) - status = net_InterruptActiveStream (entryToKill); - else - status = -1; - - LIBNET_UNLOCK_AND_RETURN(status); -} - - -/* interrupt a LoadURL action by using a socket number as - * an index. NOTE: that this cannot interrupt non-socket - * based operations such as file or memory cache loads - * - * returns -1 on error. - */ -PUBLIC int -NET_InterruptSocket (PRFileDesc *socket) -{ - /* Find the ActiveEntry structure for this URL */ - ActiveEntry *tmpEntry = NULL, *entryToKill = NULL; - XP_List * iter; - int status; - - TRACEMSG(("Entering NET_InterruptSocket")); - LIBNET_LOCK(); - iter = net_EntryList; - - if(NET_InGetHostByName) - { - TRACEMSG(("call to InterrruptStream while doing gethostbyname call")); - LIBNET_UNLOCK_AND_RETURN(1); - } - - while ((tmpEntry = (ActiveEntry *) XP_ListNextObject(iter)) != NULL) { - if (tmpEntry->con_sock == socket || tmpEntry->socket == socket) { - entryToKill = tmpEntry; - break; - } - } - - if (entryToKill) - status = net_InterruptActiveStream (entryToKill); - else - status = -1; - - LIBNET_UNLOCK_AND_RETURN(status); -} - -/* - * NET_SetNewContext changes the context associated with a URL Struct. - * can also change the url exit routine, which causes the old one to be - * called with a status of MK_CHANGING_CONTEXT - */ -PUBLIC int -NET_SetNewContext(URL_Struct *URL_s, MWContext * new_context, Net_GetUrlExitFunc *exit_routine) -{ - /* Find the ActiveEntry structure for this URL */ - ActiveEntry *tmpEntry = NULL; - XP_List * iter; - MWContext *old_window_id; - - LIBNET_LOCK(); - iter = net_EntryList; - - while ((tmpEntry = (ActiveEntry *) XP_ListNextObject(iter)) != NULL) - { - if (tmpEntry->URL_s == URL_s) - { - /* call the old exit routine now with the old context */ - /* call with MK_CHANGING_CONTEXT, FE shouldn't free URL_s */ - net_CallExitRoutine(tmpEntry->exit_routine, - URL_s, - MK_CHANGING_CONTEXT, - 0, - tmpEntry->window_id); - - /* see if we're changing exit routines */ - if(exit_routine != NULL) { - /* okay to change now. */ - tmpEntry->exit_routine = exit_routine; - } - old_window_id = tmpEntry->window_id; - tmpEntry->window_id = new_context; - -#ifdef XP_WIN - /* - * Windows needs a way to know when a URL switches contexts, - * so that it can keep the NCAPI progress messages - * specific to a URL loading and not specific to the - * context attempting to load. - * So sue me. GAB 10-16-95 - */ - FE_UrlChangedContext(URL_s, old_window_id, new_context); -#endif /* XP_WIN */ - - /* if there are no more connections in the old context, we - * need to call AllConnectionsComplete - */ - if(!NET_AreThereActiveConnectionsForWindow(old_window_id)) - FE_AllConnectionsComplete(old_window_id); - - LIBNET_UNLOCK(); - return(0); - } - } - - /* couldn't find it :( */ - XP_ASSERT (0); - - LIBNET_UNLOCK(); - return(-1); -} - -/* returns true if the stream is safe for setting up a new - * context and using a separate window. - * - * This will return FALSE in multipart/mixed cases where - * it is impossible to use separate windows for the - * same stream. - */ -PUBLIC Bool -NET_IsSafeForNewContext(URL_Struct *URL_s) -{ - if(!URL_s || URL_s->is_active) - return(FALSE); - - return(TRUE); -} - - -/* NET_InterruptTransfer - * - * Interrupts all transfers in progress that have the same window id as - * the one passed in. - */ -PRIVATE int -net_InternalInterruptWindow(MWContext * window_id, Bool show_warning) -{ - int starting_list_count; - ActiveEntry * tmpEntry; - ActiveEntry * tmpEntry2; - XP_List * list_item; - int32 cur_win_id = FE_GetContextID(window_id); - int number_killed=0; - XP_Bool call_all_connections_complete = TRUE; - - TRACEMSG(("-------Interrupt Transfer called!")); - - LIBNET_LOCK(); - list_item = net_EntryList; - starting_list_count = XP_ListCount(net_EntryList); - -#ifdef DEBUG - if(NET_InGetHostByName) - { - TRACEMSG(("call to InterrruptWindow while doing gethostbyname call")); - LIBNET_UNLOCK_AND_RETURN(1); - } -#endif /* DEBUG */ - - number_killed = net_AbortWaitingURL(window_id, - FALSE, - net_waiting_for_actives_url_list); - number_killed += net_AbortWaitingURL(window_id, - FALSE, - net_waiting_for_connection_url_list); - - /* run through the whole list of connections and - * interrupt any of them that have a matching window - * id. - */ - tmpEntry = (ActiveEntry *) XP_ListNextObject(list_item); - - while(tmpEntry) - { - /* advance to the next item NOW in case we free this one */ - tmpEntry2 = (ActiveEntry *) XP_ListNextObject(list_item); - - if(FE_GetContextID(tmpEntry->window_id) == cur_win_id) - { - if(tmpEntry->busy) - { - if(show_warning) - { - TRACEMSG(("AAAACK, reentrant protection kicking in.!!!")); -#ifdef DEBUG - FE_Alert(tmpEntry->window_id, XP_GetString(XP_ALERT_INTERRUPT_WINDOW)); -#endif /* DEBUG */ - } - } - else - { - FE_EnableClicking(window_id); - net_InterruptActiveStream (tmpEntry); - number_killed += 1; - - /* unset call_all_connections_complete here - * since InterruptActiveStream will already - * call all_connections_complete when it detects - * that there are no more active connections - * going on for the window. - */ - call_all_connections_complete = FALSE; - } - } /* end if cur_win_id */ - - tmpEntry = tmpEntry2; - } /* end while */ - - /* If all_connection_complete was called, FE might have destroyed - * the context. So dont call FE_EnableClicking() if - * call_all_connections_complete was already called. - */ - if (call_all_connections_complete) - FE_EnableClicking(window_id); - - /* we are sure that all connections are complete - * but only call it if we killed one. - */ - if(number_killed && call_all_connections_complete) - FE_AllConnectionsComplete(window_id); - - - TRACEMSG(("Leaving Interrupt transfer with %d items in list", - XP_ListCount(net_EntryList))); - - LIBNET_UNLOCK_AND_RETURN(starting_list_count - XP_ListCount(net_EntryList)); - -} - -/* - * Interrupts all transfers in progress that have the same window id as - * the one passed in. - */ -PUBLIC int -NET_InterruptWindow(MWContext * window_id) -{ -/* call interruptwindow twice so that things we interrupt that call NET_GetURL - * will be interrupted as well - */ - - int rv = net_InternalInterruptWindow(window_id, TRUE); - #ifdef XP_MAC - /* pchen - Fix bug #72831. On Mac, continuously call - * net_InternalInterruptWindow while - * NET_AreThereNonBusyActiveConnectionsForWindow returns true - */ - while(NET_AreThereNonBusyActiveConnectionsForWindow(window_id)) - #endif /* XP_MAC */ - rv += net_InternalInterruptWindow(window_id, TRUE); - return(rv); -} - -/* - * Silently Interrupts all transfers in progress that have the same - * window id as the one passed in. - */ -MODULE_PRIVATE int -NET_SilentInterruptWindow(MWContext * window_id) -{ - return(net_InternalInterruptWindow(window_id, FALSE)); -} - -/* check for any active URL transfers in progress for the given - * window Id - * - * It is possible that there exist URL's on the wait queue that - * will not be returned by this function. It is recommended - * that you call NET_InterruptWindow(MWContext * window_id) - * when FALSE is returned to make sure that the wait queue is - * cleared as well. - * - * It is also possible that some URLs will be explicitly marked as - * "background" URLs that are not identified as active, even though - * they are. - */ -PUBLIC Bool -NET_AreThereActiveConnectionsForWindow(MWContext * window_id) -{ - ActiveEntry * tmpEntry; - int32 cur_win_id = FE_GetContextID(window_id); - XP_List * list_ptr; - WaitingURLStruct * wus; - - LIBNET_LOCK(); - - TRACEMSG(("-------NET_AreThereActiveConnectionsForWindow called!")); - - /* check for connections in the wait queue - */ - list_ptr = net_waiting_for_actives_url_list; - while((wus = (WaitingURLStruct*) XP_ListNextObject(list_ptr)) != NULL) - { - if(cur_win_id == FE_GetContextID(wus->window_id) && - !wus->URL_s->load_background) - { - LIBNET_UNLOCK(); - return(TRUE); - } - } - - /* check for connections in the connections wait queue - */ - list_ptr = net_waiting_for_connection_url_list; - while((wus = (WaitingURLStruct*) XP_ListNextObject(list_ptr)) != NULL) - { - if(cur_win_id == FE_GetContextID(wus->window_id) && - !wus->URL_s->load_background) - { - LIBNET_UNLOCK(); - return(TRUE); - } - } - - /* run through the whole list of active connections and - * return true if any of them have the passed in window id - */ - list_ptr = net_EntryList; - while((tmpEntry = (ActiveEntry *) XP_ListNextObject(list_ptr)) != NULL) - { - if(cur_win_id == FE_GetContextID(tmpEntry->window_id) && - !tmpEntry->URL_s->load_background) - { - LIBNET_UNLOCK(); - return(TRUE); - } - - } /* end while */ - - LIBNET_UNLOCK(); - return(FALSE); -} - -#ifdef XP_MAC -/* pchen - Fix bug #72831. Same as NET_AreThereActiveConnectionsForWindow - * except that it will return false if there is an active connection that - * is busy. - */ -PUBLIC Bool -NET_AreThereNonBusyActiveConnectionsForWindow(MWContext * window_id) -{ - ActiveEntry * tmpEntry; - int32 cur_win_id = FE_GetContextID(window_id); - XP_List * list_ptr; - WaitingURLStruct * wus; - - LIBNET_LOCK(); - - TRACEMSG(("-------NET_AreThereActiveConnectionsForWindow called!")); - - /* check for connections in the wait queue - */ - list_ptr = net_waiting_for_actives_url_list; - while((wus = (WaitingURLStruct*) XP_ListNextObject(list_ptr)) != NULL) - { - if(cur_win_id == FE_GetContextID(wus->window_id) && - !wus->URL_s->load_background) - { - LIBNET_UNLOCK(); - return(TRUE); - } - } - - /* check for connections in the connections wait queue - */ - list_ptr = net_waiting_for_connection_url_list; - while((wus = (WaitingURLStruct*) XP_ListNextObject(list_ptr)) != NULL) - { - if(cur_win_id == FE_GetContextID(wus->window_id) && - !wus->URL_s->load_background) - { - LIBNET_UNLOCK(); - return(TRUE); - } - } - - /* run through the whole list of active connections and - * return true if any of them have the passed in window id - */ - list_ptr = net_EntryList; - while((tmpEntry = (ActiveEntry *) XP_ListNextObject(list_ptr)) != NULL) - { - if(cur_win_id == FE_GetContextID(tmpEntry->window_id) && - !tmpEntry->URL_s->load_background && - !tmpEntry->busy) - { - LIBNET_UNLOCK(); - return(TRUE); - } - - } /* end while */ - - LIBNET_UNLOCK(); - return(FALSE); -} -#endif /* XP_MAC */ - -/* KM - Are there other ActiveEntry structures being processed with the same - context? */ -/* fix Mac warning for missing prototype */ -PUBLIC Bool -NET_AreThereActiveConnectionsForWindowWithOtherActiveEntry(ActiveEntry *thisEntry); - -PUBLIC Bool -NET_AreThereActiveConnectionsForWindowWithOtherActiveEntry(ActiveEntry *thisEntry) -{ - ActiveEntry * tmpEntry; - int32 cur_win_id = FE_GetContextID(thisEntry->window_id); - XP_List * list_ptr; - - LIBNET_LOCK(); - - /* run through the whole list of active connections and - * return true if any of them have the passed in window id - * with a different entry - */ - list_ptr = net_EntryList; - while((tmpEntry = (ActiveEntry *) XP_ListNextObject(list_ptr)) != NULL) - { - if((cur_win_id == FE_GetContextID(tmpEntry->window_id)) && - (tmpEntry != thisEntry)) - { - LIBNET_UNLOCK(); - return(TRUE); - } - - } /* end while */ - - LIBNET_UNLOCK(); - return(FALSE); -} - - -/* - * GAB 04-23-96 - * We're interested in knowing if there are any operations which - * will cause activity of the said type, in the said context. - * This is in the interests of PE, where they desire a world of - * dial on demand (hanging up the phone when we're not doing anything - * on the network). - * - * Args: - * window_id The said context to check. - * If NULL, check them all (disregard). - * waiting Include waiting queues in check if TRUE. - * Note that waiting queues do not know thier type - * yet (local, cache, or net), thus type can not - * be correctly checked. I can only assume that - * we have the technology to mostly decide this - * before the fact, but I see no facility available. - * background Include background activity in the check if TRUE. - * Returns: - * Bool TRUE, there is chance of activity of said type. - * FALSE, that particular type of activity is not present. - * - */ -PUBLIC Bool -NET_HasNetworkActivity(MWContext * window_id, Bool waiting, Bool background) -{ - ActiveEntry * tmpEntry; - XP_List * list_ptr; - WaitingURLStruct * wus; - - LIBNET_LOCK(); - - TRACEMSG(("-------NET_HasNetworkActivity called!")); - - /* check for connections in the wait queue - */ - if(waiting) - { - list_ptr = net_waiting_for_actives_url_list; - while((wus = (WaitingURLStruct*) XP_ListNextObject(list_ptr)) != NULL) - { - if((window_id == NULL || - FE_GetContextID(window_id) == - FE_GetContextID(wus->window_id)) && - (background || !wus->URL_s->load_background)) - { - LIBNET_UNLOCK(); - return(TRUE); - } - } - - /* check for connections in the connections wait queue - */ - list_ptr = net_waiting_for_connection_url_list; - while((wus = (WaitingURLStruct*) XP_ListNextObject(list_ptr)) != NULL) - { - if((window_id == NULL || - FE_GetContextID(window_id) == - FE_GetContextID(wus->window_id)) && - (background || !wus->URL_s->load_background)) - { - LIBNET_UNLOCK(); - return(TRUE); - } - } - } - - /* run through the whole list of active connections - */ - list_ptr = net_EntryList; - while((tmpEntry = (ActiveEntry *) XP_ListNextObject(list_ptr)) != NULL) - { - if((window_id == NULL || - FE_GetContextID(window_id) == - FE_GetContextID(tmpEntry->window_id)) && - (background || !tmpEntry->URL_s->load_background) && - !tmpEntry->memory_file && - !tmpEntry->local_file) - { - LIBNET_UNLOCK(); - return(TRUE); - } - - } /* end while */ - - LIBNET_UNLOCK(); - return(FALSE); -} - - -/* malloc, init, and set the URL structure used - * for the network library - */ -PUBLIC URL_Struct * -NET_CreateURLStruct (CONST char *url, NET_ReloadMethod force_reload) -{ - uint32 all_headers_size; - URL_Struct * URL_s = XP_NEW(URL_Struct); - - if(!URL_s) - { - return NULL; - } - - /* zap the whole structure */ - XP_MEMSET (URL_s, 0, sizeof (URL_Struct)); - - URL_s->SARCache = NULL; - - /* we haven't modified the address at all (since we are just creating it)*/ - URL_s->address_modified=NO; - - URL_s->method = URL_GET_METHOD; - - URL_s->force_reload = force_reload; - - URL_s->load_background = FALSE; - - URL_s->ref_count = 1; - - /* Allocate space for pointers to hold message (http, news etc) headers */ - all_headers_size = - INITIAL_MAX_ALL_HEADERS * sizeof (URL_s->all_headers.key[0]); - URL_s->all_headers.key = (char **) XP_ALLOC(all_headers_size); - if(!URL_s->all_headers.key) - { - NET_FreeURLStruct(URL_s); - return NULL; - } - XP_MEMSET (URL_s->all_headers.key, 0, all_headers_size); - - all_headers_size = - INITIAL_MAX_ALL_HEADERS * sizeof (URL_s->all_headers.value[0]); - URL_s->all_headers.value = (char **) XP_ALLOC(all_headers_size); - if(!URL_s->all_headers.value) - { - NET_FreeURLStruct(URL_s); - return NULL; - } - XP_MEMSET (URL_s->all_headers.value, 0, all_headers_size); - - URL_s->all_headers.max_index = INITIAL_MAX_ALL_HEADERS; - - URL_s->owner_data = NULL; - URL_s->owner_id = 0; - - /* set the passed in value */ - StrAllocCopy(URL_s->address, url); - if (!URL_s->address) { - /* out of memory, clean up previously allocated objects */ - NET_FreeURLStruct(URL_s); - URL_s = NULL; - } - - return(URL_s); -} - -/* Increase the size of AllHeaders in URL_struct - */ -PRIVATE Bool -net_EnlargeURLAllHeaders (URL_Struct * URL_s) -{ - uint32 number_of_entries = - URL_s->all_headers.empty_index * MULT_ALL_HEADER_COUNT; - uint32 realloc_size = - number_of_entries * sizeof (URL_s->all_headers.key[0]); - char **temp; - - if (number_of_entries < MAX_ALL_HEADER_COUNT) { - - temp = (char **) XP_REALLOC(URL_s->all_headers.key, realloc_size); - if (temp) { - URL_s->all_headers.key = temp; - - temp = (char **) XP_REALLOC(URL_s->all_headers.value, realloc_size); - if (temp) { - URL_s->all_headers.value = temp; - - URL_s->all_headers.max_index = number_of_entries; - return(TRUE); - } - } - } - net_FreeURLAllHeaders(URL_s); - return(FALSE); -} - - -/* Append Key, Value pair into AllHeaders list of URL_struct - */ -PUBLIC Bool -NET_AddToAllHeaders(URL_Struct * URL_s, char *name, char *value) -{ - char *key_ptr; - char *value_ptr; - - XP_ASSERT(URL_s); - XP_ASSERT(name); - XP_ASSERT(value); - - if ((URL_s->all_headers.empty_index >= URL_s->all_headers.max_index) && - (!net_EnlargeURLAllHeaders(URL_s))) { - return(FALSE); - } - - key_ptr = URL_s->all_headers.key[URL_s->all_headers.empty_index] = - XP_STRDUP(name); - if (!key_ptr) { - net_FreeURLAllHeaders(URL_s); - return(FALSE); - } - - value_ptr = URL_s->all_headers.value[URL_s->all_headers.empty_index] = - XP_STRDUP(value); - if (!value_ptr) { - XP_FREE(key_ptr); - URL_s->all_headers.key[URL_s->all_headers.empty_index] = NULL; - net_FreeURLAllHeaders(URL_s); - return(FALSE); - } - URL_s->all_headers.empty_index++; - return(TRUE); -} - -/* Set the option IPAddressString field - * This field overrides the hostname when doing the connect, - * and allows Java to specify a spelling of an IP number. - * Out of memory condition will cause the URL_struct to be destroyed. - */ -PUBLIC int -NET_SetURLIPAddressString (URL_Struct * URL_s, CONST char *ip_string) -{ - XP_ASSERT(URL_s); - - FREEIF(URL_s->IPAddressString); - URL_s->IPAddressString = NULL; - - /* set the passed in value */ - StrAllocCopy(URL_s->IPAddressString, ip_string); - return NULL == URL_s->IPAddressString; -} - -PUBLIC URL_Struct * -NET_HoldURLStruct (URL_Struct * URL_s) -{ - if(URL_s) { - XP_ASSERT(URL_s->ref_count > 0); - URL_s->ref_count++; - } - return URL_s; -} - - -/* free the contents and the URL structure when finished - */ -PUBLIC void -NET_FreeURLStruct (URL_Struct * URL_s) -{ - if(!URL_s) - return; - - /* if someone is holding onto a pointer to us don't die */ - XP_ASSERT(URL_s->ref_count > 0); - URL_s->ref_count--; - if(URL_s->ref_count > 0) - return; - - FREEIF(URL_s->address); - FREEIF(URL_s->username); - FREEIF(URL_s->password); - FREEIF(URL_s->IPAddressString); - FREEIF(URL_s->referer); - FREEIF(URL_s->post_data); - FREEIF(URL_s->post_headers); - FREEIF(URL_s->content_type); - FREEIF(URL_s->content_encoding); - FREEIF(URL_s->x_mac_type); - FREEIF(URL_s->x_mac_creator); - FREEIF(URL_s->charset); - FREEIF(URL_s->boundary); - FREEIF(URL_s->redirecting_url); - FREEIF(URL_s->authenticate); - FREEIF(URL_s->protection_template); - FREEIF(URL_s->http_headers); - FREEIF(URL_s->cache_file); - FREEIF(URL_s->window_target); - FREEIF(URL_s->window_chrome); - FREEIF(URL_s->refresh_url); - FREEIF(URL_s->wysiwyg_url); - FREEIF(URL_s->error_msg); - - FREEIF(URL_s->key_cipher); - FREEIF(URL_s->key_issuer); - FREEIF(URL_s->key_subject); - if ( URL_s->certificate ) { - CERT_DestroyCertificate(URL_s->certificate); - } - - if ( URL_s->redirecting_cert ) { - CERT_DestroyCertificate(URL_s->redirecting_cert); - } - - /* Free all memory associated with header information */ - net_FreeURLAllHeaders(URL_s); - - if(URL_s->files_to_post) - { - /* free a null terminated array of filenames - */ - int i=0; - for(i=0; URL_s->files_to_post[i] != NULL; i++) - { - FREE(URL_s->files_to_post[i]); /* free the filenames */ - } - FREE(URL_s->files_to_post); /* free the array */ - } - - /* Like files_to_post. */ - if(URL_s->post_to) - { - /* free a null terminated array of filenames - */ - int i=0; - for(i=0; URL_s->post_to[i] != NULL; i++) - { - FREE(URL_s->post_to[i]); /* free the URLs */ - } - FREE(URL_s->post_to); /* free the array */ - } - - - /* free the array */ - XP_FREEIF(URL_s->add_crlf); - - XP_FREEIF(URL_s->page_services_url); - - XP_FREE(URL_s); - -} - -/* free the contents of AllHeader structure that is part of URL_Struct - */ -PRIVATE void -net_FreeURLAllHeaders (URL_Struct * URL_s) -{ - uint32 i=0; - - /* Free all memory associated with header information */ - for (i = 0; i < URL_s->all_headers.empty_index; i++) { - if (URL_s->all_headers.key) { - FREEIF(URL_s->all_headers.key[i]); - } - if (URL_s->all_headers.value) { - FREEIF(URL_s->all_headers.value[i]); - } - } - URL_s->all_headers.empty_index = URL_s->all_headers.max_index = 0; - - FREEIF(URL_s->all_headers.key); - FREEIF(URL_s->all_headers.value); - URL_s->all_headers.key = URL_s->all_headers.value = NULL; -} - - -/* if there is no slash in a URL besides the two that specify a host - * then add one to the end. - */ -PRIVATE void add_slash_to_URL (URL_Struct *URL_s) -{ - char *colon=XP_STRCHR(URL_s->address,':'); /* must find colon */ - char *slash; - - /* make sure there is a hostname - */ - if(*(colon+1) == '/' && *(colon+2) == '/') - slash = XP_STRCHR(colon+3,'/'); - else - return; - - if(slash==NULL) - { - TRACEMSG(("GetURL: URL %-.1900s changed to ",URL_s->address)); - -#ifdef MOZILLA_CLIENT - /* add it now to the Global history since we can't get this - * name back :( this is a bug because we are not sure - * that the link will actually work. - */ - GH_UpdateGlobalHistory(URL_s); -#endif /* MOZILLA_CLIENT */ - - StrAllocCat(URL_s->address, "/"); - URL_s->address_modified = YES; - - TRACEMSG(("%-.1900s",URL_s->address)); - } -} - -#ifdef MOZILLA_CLIENT -PRIVATE void -net_OutputURLDocInfo(MWContext *ctxt, char *which, char **data, int32 *length) -{ - char *output=0; - URL_Struct *URL_s = NET_CreateURLStruct(which, NET_DONT_RELOAD); - struct tm *tm_struct_p; - char buf[64]; - char *tmp=0; - char *sec_msg, *il_msg; - - NET_FindURLInCache(URL_s, ctxt); - -#define CELL_TOP \ - StrAllocCat(output, \ - ""); -#define CELL_TITLE(title) \ - StrAllocCat(output, title); -#define CELL_MIDDLE \ - StrAllocCat(output, \ - "" \ - ""); -#define CELL_BODY(body) \ - StrAllocCat(output, body); -#define CELL_END \ - StrAllocCat(output, \ - ""); -#define ADD_CELL(c_title, c_body) \ - CELL_TOP; \ - CELL_TITLE(c_title); \ - CELL_MIDDLE; \ - CELL_BODY(c_body); \ - CELL_END; - - StrAllocCopy(output, ""); - - StrAllocCopy(tmp, "address); - StrAllocCat(tmp, "\">"); - StrAllocCat(tmp, URL_s->address); - StrAllocCat(tmp, ""); - if(URL_s->is_netsite) - { - ADD_CELL(XP_GetString(XP_NETSITE_), tmp); - } - else - { - ADD_CELL(XP_GetString(XP_LOCATION_), tmp); - } - FREE(tmp); - - ADD_CELL(XP_GetString(XP_FILE_MIME_TYPE_), - URL_s->content_type ? URL_s->content_type : XP_GetString(XP_CURRENTLY_UNKNOWN)); - ADD_CELL(XP_GetString(XP_SOURCE_), URL_s->cache_file - ? XP_GetString(XP_CURRENTLY_IN_DISK_CACHE) - : URL_s->memory_copy ? - XP_GetString(XP_CURRENTLY_IN_MEM_CACHE) - : XP_GetString(XP_CURRENTLY_NO_CACHE)); - - ADD_CELL(XP_GetString(XP_LOCAL_CACHE_FILE_), URL_s->cache_file - ? URL_s->cache_file - : XP_GetString(XP_NONE)); - - tm_struct_p = localtime(&URL_s->last_modified); - - if(tm_struct_p) - { -#ifdef XP_UNIX - strftime(buf, 64, XP_GetString(XP_LOCAL_TIME_FMT), - tm_struct_p); -#else - char tmpbuf[64]; - XP_StrfTime(ctxt,tmpbuf,64,XP_LONG_DATE_TIME_FORMAT, - tm_struct_p); - /* NOTE: XP_LOCAL_TIME_FMT is different depend on platform */ - PR_snprintf(buf, 64, XP_GetString(XP_LOCAL_TIME_FMT), tmpbuf); -#endif - } - else - { - buf[0] = 0; - } - ADD_CELL(XP_GetString(XP_LAST_MODIFIED), URL_s->last_modified ? buf : XP_GetString(XP_MSG_UNKNOWN)); - - tm_struct_p = gmtime(&URL_s->last_modified); - - if(tm_struct_p) - { -#ifdef XP_UNIX - strftime(buf, 64, XP_GetString(XP_GMT_TIME_FMT), - tm_struct_p); -#else - char tmpbuf[64]; - XP_StrfTime(ctxt,tmpbuf,64,XP_LONG_DATE_TIME_FORMAT, - tm_struct_p); - /* NOTE: XP_GMT_TIME_FMT is different depend on platform */ - PR_snprintf(buf, 64, XP_GetString(XP_GMT_TIME_FMT), tmpbuf); -#endif - } - else - { - buf[0] = 0; - } - - ADD_CELL(XP_GetString(XP_LAST_MODIFIED), URL_s->last_modified ? buf : XP_GetString(XP_MSG_UNKNOWN)); - -#ifdef DEBUG - PR_snprintf(buf, 64, "%lu seconds since 1-1-70 GMT", URL_s->last_modified); - ADD_CELL("Last Modified:", URL_s->last_modified ? buf : "Unknown"); -#endif - - XP_SPRINTF(buf, "%lu", URL_s->content_length); - ADD_CELL(XP_GetString(XP_CONTENT_LENGTH_), URL_s->content_length - ? buf - : XP_GetString(XP_MSG_UNKNOWN)); - ADD_CELL(XP_GetString(XP_EXPIRES_), URL_s->expires > 0 - ? INTL_ctime(ctxt, &URL_s->expires) - : XP_GetString(XP_NO_DATE_GIVEN)); - - if (URL_s->x_mac_type && *URL_s->x_mac_type) - { - ADD_CELL(XP_GetString(XP_MAC_TYPE_), URL_s->x_mac_type); - } - if (URL_s->x_mac_creator && *URL_s->x_mac_creator) - { - ADD_CELL(XP_GetString(XP_MAC_CREATOR_), URL_s->x_mac_creator); - } - - if (URL_s->charset) - { - ADD_CELL(XP_GetString(XP_CHARSET_), URL_s->charset); - } - else - { - ADD_CELL(XP_GetString(XP_CHARSET_), XP_GetString(XP_MSG_UNKNOWN)); - } - - if(URL_s->cache_file || URL_s->memory_copy) - sec_msg = XP_PrettySecurityStatus(URL_s->security_on, - URL_s->key_cipher, - URL_s->key_size, - URL_s->key_secret_size); - else - sec_msg = XP_STRDUP(XP_GetString(XP_STATUS_UNKNOWN)); - - if(sec_msg) - { - ADD_CELL(XP_GetString(XP_SECURITY_), sec_msg); - FREE(sec_msg); - } - - if(URL_s->certificate) - sec_msg = CERT_HTMLCertInfo(URL_s->certificate, PR_TRUE, - PR_TRUE); - else - sec_msg = 0; - - if(sec_msg) - { - char *extstring; - extstring = SECNAV_MakeCertButtonString(URL_s->certificate); - if ( extstring ) { - StrAllocCat(sec_msg, extstring); - XP_FREE(extstring); - } - ADD_CELL(XP_GetString(XP_CERTIFICATE_), sec_msg); - FREE(sec_msg); - } - StrAllocCat(output, "
"); - - if(URL_s->content_type - && !strncasecomp(URL_s->content_type, "image", 5)) - { - /* Have a seat. Lie down. Tell me about yourself. */ - il_msg = IL_HTMLImageInfo(URL_s->address); - if (il_msg) { - StrAllocCat(output, "
\n"); - StrAllocCat(output, il_msg); - XP_FREE(il_msg); - } - } - - *data = output; - *length = XP_STRLEN(output); - - NET_FreeURLStruct(URL_s); - return; -} - -/* prints information about a context usint HTML. - * - * The context passed in as arg2 is the context that - * we are printing info about and the context that - * is in the ActiveEntry is the window we are displaying - * within - */ -PRIVATE -int -net_PrintContextInfo(ActiveEntry *cur_entry, MWContext *context) -{ - History_entry *his; - NET_StreamClass *stream; - char buf[64]; - char *tmp; - - /* get the current history entry and - * extract the URL from it. That has - * the top level document URL and the title - */ - his = SHIST_GetCurrent (&context->hist); - - cur_entry->format_out = CLEAR_CACHE_BIT(cur_entry->format_out); - StrAllocCopy(cur_entry->URL_s->content_type, TEXT_HTML); - stream = NET_StreamBuilder(cur_entry->format_out, - cur_entry->URL_s, cur_entry->window_id); - - if(!stream) - return(MK_UNABLE_TO_CONVERT); - - XP_STRCPY(buf, ""); - (*stream->put_block)(stream, buf, XP_STRLEN(buf)); - - if(his && his->title) - tmp = XP_STRDUP(his->title); - else - tmp = XP_STRDUP(XP_GetString(XP_UNTITLED_DOCUMENT)); - - (*stream->put_block)(stream, tmp, XP_STRLEN(tmp)); - - XP_STRCPY(buf, XP_GetString(XP_HAS_THE_FOLLOWING_STRUCT)); - (*stream->put_block)(stream, buf, XP_STRLEN(buf)); - - LO_DocumentInfo(context, stream); - - (*stream->complete)(stream); - cur_entry->status = MK_DATA_LOADED; - cur_entry->status = MK_DATA_LOADED; - - return(-1); -} -#endif /* MOZILLA_CLIENT */ - -#define PICS_SUPPORT - -PRIVATE char * -net_gen_pics_document(ActiveEntry *cur_entry) -{ - char *rv = NULL; -#ifdef PICS_SUPPORT - char *help_dir = FE_GetNetHelpDir(); - - if(help_dir) - { - if (help_dir[XP_STRLEN(help_dir)-1] != '/') - StrAllocCat(help_dir, "/"); - - if (!help_dir) - return NULL; - -#define PICS_HTML " \ -XXXXXXXXXXXXXXX \ - \ - \ - \ -" - - rv = PR_smprintf(PICS_HTML, help_dir); - - FREE(help_dir); - } - -#endif /* PICS_SUPPORT */ - - return rv; -} - -/* print out silly about type URL - */ -PRIVATE int net_output_about_url(ActiveEntry * cur_entry) -{ - NET_StreamClass * stream; - char * data=0; - char * content_type=0; - int32 length; - char * which = cur_entry->URL_s->address; - char * colon = strchr (which, ':'); - void * fe_data = NULL; - Bool uses_fe_data=FALSE; - - - if (colon) - which = colon + 1; - - if(0) - { - /* placeholder to make ifdef's easier */ - } -#ifdef MOZILLA_CLIENT - else if(NET_URL_Type(which)) - { - /* this url is asking for document info about this - * URL. - * Call a NET function to generate the HTML block - */ - net_OutputURLDocInfo(cur_entry->window_id, which, &data, &length); - StrAllocCopy(content_type, TEXT_HTML); - } - else if(!strncasecomp(which, "pics", 4)) - { - data = net_gen_pics_document(cur_entry); - if (data) { - length = XP_STRLEN(data); - content_type = XP_STRDUP(TEXT_HTML); - uses_fe_data = FALSE; - } - } - else if(!strcasecomp(which, "cookies")) - { - NET_DisplayCookieInfoAsHTML(cur_entry); - return(-1); - } - else if(!strncasecomp(which, "cache", 5)) - { - NET_DisplayCacheInfoAsHTML(cur_entry); - return(-1); - } - else if(!strcasecomp(which, "memory-cache")) - { - NET_DisplayMemCacheInfoAsHTML(cur_entry); - return(-1); - } - else if(!strcasecomp(which, "image-cache")) - { - IL_DisplayMemCacheInfoAsHTML(cur_entry->format_out, cur_entry->URL_s, - cur_entry->window_id); - return(-1); - } -#ifdef DEBUG - else if(!strcasecomp(which, "streams")) - { - NET_DisplayStreamInfoAsHTML(cur_entry); - return(-1); - } -#endif /* DEBUG */ - else if(!strcasecomp(which, "document")) - { - char buf[64]; - History_entry *his; - MWContext *context; - - /* output a Grid here with the first grid - * cell containing an about: url with the - * context pointer as the argument. - * - * also put the context pointer in as the post data - * if it's not there already so that history will - * do the right thing. - * - * also output blank string for all FO's not view source - * and save - */ - - /* if there is post data then a context ID is hiding - * in there. Get it and verify it - */ - if(cur_entry->URL_s->post_data) - { -#if defined(__sun) && !defined(SVR4) /* sun 4.1.3 */ - sscanf(cur_entry->URL_s->post_data, "%lu", &context); -#else - sscanf(cur_entry->URL_s->post_data, "%p", &context); -#endif - if(!XP_IsContextInList(context)) - context = cur_entry->window_id; - } - else - { - context = cur_entry->window_id; - } - - /* get the current history entry and - * extract the URL from it. That has - * the top level document URL - */ - his = SHIST_GetCurrent (&context->hist); - - StrAllocCat(data, ""); - StrAllocCat(data, XP_GetString(XP_DOCUMENT_INFO)); - StrAllocCat(data, "" - "" - "URL_s->window_target, "%DocInfoWindow"); - /* add a Chrome Struct so that we can control the window */ - cur_entry->URL_s->window_chrome = XP_NEW(Chrome); - - if(cur_entry->URL_s->window_chrome) - { - XP_MEMSET(cur_entry->URL_s->window_chrome, 0, sizeof(Chrome)); - /* it should be MWContextDialog - * but X isn't ready for it yet... - */ -/* X is ready for MWContextDialog now... - *#ifdef XP_UNIX - * cur_entry->URL_s->window_chrome->type = MWContextBrowser; - *#else - */ - cur_entry->URL_s->window_chrome->type = MWContextDialog; -/* - *#endif - */ - cur_entry->URL_s->window_chrome->show_scrollbar = TRUE; - cur_entry->URL_s->window_chrome->allow_resize = TRUE; - cur_entry->URL_s->window_chrome->allow_close = TRUE; - } - - /* don't let people really view the source of this... */ - if(FO_PRESENT != CLEAR_CACHE_BIT(cur_entry->format_out)) - { - StrAllocCat(data, "blank"); - } - else - { - StrAllocCat(data, "FeCoNtExT="); - - if(!cur_entry->URL_s->post_data) - { -#if defined(__sun) && !defined(SVR4) /* sun 4.1.3 */ - XP_SPRINTF(buf, "%lu", context); -#else - XP_SPRINTF(buf, "%p", context); -#endif - StrAllocCat(data, buf); - StrAllocCopy(cur_entry->URL_s->post_data, buf); - } - else - { - StrAllocCat(data, cur_entry->URL_s->post_data); - } - } - - StrAllocCat(data, ">address) - StrAllocCat(data, his->address); - else - StrAllocCat(data, "blank"); - - StrAllocCat(data, ">"); - - length = XP_STRLEN(data); - StrAllocCopy(content_type, TEXT_HTML); - } - else if(!strncasecomp(which, "Global", 6)) - { - cur_entry->status = NET_DisplayGlobalHistoryInfoAsHTML( - cur_entry->window_id, - cur_entry->URL_s, - cur_entry->format_out); - - return(-1); - - } - else if(!XP_STRNCMP(which, "FeCoNtExT=", 10)) - { - MWContext *old_ctxt; - -#if defined(__sun) && !defined(SVR4) /* sun 4.1.3 */ - sscanf(which+10, "%lu", &old_ctxt); -#else - sscanf(which+10, "%p", &old_ctxt); -#endif - - /* verify that we have the right context - * - */ - if(!XP_IsContextInList(old_ctxt)) - { - StrAllocCopy(data, XP_GetString(XP_THE_WINDOW_IS_NOW_INACTIVE)); - } - else - { - return(net_PrintContextInfo(cur_entry, old_ctxt)); - } - - length = XP_STRLEN(data); - StrAllocCopy(content_type, TEXT_HTML); - - } -#endif /* MOZILLA_CLIENT */ - else if(!strncasecomp(which, "authors", 7)) - { - static const char *d = - ("Mozilla Über Alles" - "" - "
" - "about:authors " - "removed.
"); - data = XP_STRDUP(d); - length = (d ? XP_STRLEN(d) : 0); - content_type = XP_STRDUP(TEXT_HTML); - uses_fe_data = FALSE; - } - /* Admin Kit/xp prefs diagnostic support */ - else if (!strncasecomp(which, "config", 6)) - { - data = PREF_AboutConfig(); - if (data) { - length = XP_STRLEN(data); - content_type = XP_STRDUP(TEXT_HTML); - } - } -#ifdef XP_UNIX - else if (!strncasecomp(which, "minibuffer", 10)) - { - extern void FE_ShowMinibuffer(MWContext *); - - FE_ShowMinibuffer(cur_entry->window_id); - } -#endif -#ifdef WEBFONTS - else if (!strncasecomp(which, "fonts", 5)) - { - NF_AboutFonts(cur_entry->window_id, which); - return (-1); - } -#endif /* WEBFONTS */ - else - { - fe_data = FE_AboutData(which, &data, &length, &content_type); - uses_fe_data=TRUE; - } - - if (!data || !content_type) - { - cur_entry->status = MK_MALFORMED_URL_ERROR; - } - else - { - int status; - StrAllocCopy(cur_entry->URL_s->content_type, content_type); - - cur_entry->format_out = CLEAR_CACHE_BIT(cur_entry->format_out); - - stream = NET_StreamBuilder(cur_entry->format_out, - cur_entry->URL_s, cur_entry->window_id); - - if(!stream) - { - cur_entry->status = MK_UNABLE_TO_CONVERT; - return(MK_UNABLE_TO_CONVERT); - } - - status = (*stream->put_block)(stream, data, length); - - if (status >= 0) { - /* Append optional Admin Kit-specified about page text */ - char* custom_text = NULL; - if (XP_STRCMP(which, "") == 0 && - PREF_CopyConfigString("about_text", &custom_text) == PREF_NOERROR) { - (*stream->put_block)(stream, custom_text, XP_STRLEN(custom_text)); - } - - (*stream->complete) (stream); - - FREEIF(custom_text); - } - else - (*stream->abort) (stream, status); - - cur_entry->status = status; - - FREE(stream); - } - - if(uses_fe_data) - { -#if defined(XP_MAC) || defined(XP_UNIX) || defined (XP_WIN) - FE_FreeAboutData (fe_data, which); -#endif /* XP_MAC || XP_UNIX */ - } - else - { - FREE(data); - FREE(content_type); - } - - - return(-1); -} - -#ifdef MOZILLA_CLIENT -/* print out security URL - */ -PRIVATE int net_output_security_url(ActiveEntry * cur_entry, MWContext *cx) -{ - NET_StreamClass * stream; - char * content_type; - char * which = cur_entry->URL_s->address; - char * colon = XP_STRCHR (which, ':'); - - if (colon) - { - /* found the first colon; now find the question mark - (as in "about:security?certs"). */ - which = colon + 1; - colon = XP_STRCHR (which, '?'); - if (colon) - which = colon + 1; - else - which = which + XP_STRLEN (which); /* give it "" */ - } - - content_type = SECNAV_SecURLContentType(which); - if (!content_type) { - cur_entry->status = MK_MALFORMED_URL_ERROR; - - } else if (!strcasecomp(content_type, "advisor")) { - cur_entry->status = SECNAV_SecHandleSecurityAdvisorURL(cx, which); - - } else { - int status; - - StrAllocCopy(cur_entry->URL_s->content_type, content_type); - - cur_entry->format_out = CLEAR_CACHE_BIT(cur_entry->format_out); - - stream = NET_StreamBuilder(cur_entry->format_out, - cur_entry->URL_s, cur_entry->window_id); - - if (!stream) - return(MK_UNABLE_TO_CONVERT); - - status = SECNAV_SecURLData(which, stream, cx); - - if (status >= 0) { - (*stream->complete) (stream); - } else { - (*stream->abort) (stream, status); - } - - cur_entry->status = status; - - FREE(stream); - } - - return(-1); -} - -PRIVATE int32 -net_SecurityURLLoad(ActiveEntry *ce) -{ - if(ce->URL_s) - StrAllocCopy(ce->URL_s->charset, INTL_ResourceCharSet()); - return net_output_security_url(ce, ce->window_id); -} - -PRIVATE int32 -net_SeclibURLLoad(ActiveEntry *ce) -{ - if(ce->URL_s) - StrAllocCopy(ce->URL_s->charset, INTL_ResourceCharSet()); - SECNAV_HandleInternalSecURL(ce->URL_s, ce->window_id); - return -1; -} - -PRIVATE int32 -net_HTMLPanelLoad(ActiveEntry *ce) -{ - if(ce->URL_s) - StrAllocCopy(ce->URL_s->charset, INTL_ResourceCharSet()); - XP_HandleHTMLPanel(ce->URL_s); - return -1; -} - -PRIVATE int32 -net_HTMLDialogLoad(ActiveEntry *ce) -{ - if(ce->URL_s) - StrAllocCopy(ce->URL_s->charset, INTL_ResourceCharSet()); - XP_HandleHTMLDialog(ce->URL_s); - return -1; -} - -PRIVATE int32 -net_WysiwygLoad(ActiveEntry *ce) -{ - const char *real_url = LM_SkipWysiwygURLPrefix(ce->URL_s->address); - char *new_address; - - /* XXX can't use StrAllocCopy because it frees dest first */ - if (real_url && (new_address = XP_STRDUP(real_url)) != NULL) - { - XP_FREE(ce->URL_s->address); - ce->URL_s->address = new_address; - FREE_AND_CLEAR(ce->URL_s->wysiwyg_url); - } - - /* no need to free real_url */ - - ce->status = MK_DO_REDIRECT; - return MK_DO_REDIRECT; -} - -PRIVATE int32 -net_ProtoMainStub(ActiveEntry *ce) -{ -#ifdef DO_ANNOYING_ASSERTS_IN_STUBS - XP_ASSERT(0); -#endif - return -1; -} - -PRIVATE void -net_ProtoCleanupStub(void) -{ -} - -PRIVATE void -net_reg_random_protocol(NET_ProtoInitFunc *LoadRoutine, int type) -{ - NET_ProtoImpl *random_proto_impl; - - random_proto_impl = XP_NEW(NET_ProtoImpl); - - if(!random_proto_impl) - return; - - random_proto_impl->init = LoadRoutine; - random_proto_impl->process = net_ProtoMainStub; - random_proto_impl->interrupt = net_ProtoMainStub; - random_proto_impl->cleanup = net_ProtoCleanupStub; - - NET_RegisterProtocolImplementation(random_proto_impl, type); -} - -/* don't you just hate it when people come along and hack this - * kind of stuff into your code. - * - * @@@ clean this up some time - */ -PRIVATE void -NET_InitTotallyRandomStuffPeopleAddedProtocols(void) -{ - net_reg_random_protocol(net_SecurityURLLoad, SECURITY_TYPE_URL); - net_reg_random_protocol(net_SeclibURLLoad, INTERNAL_SECLIB_TYPE_URL); - net_reg_random_protocol(net_HTMLPanelLoad, HTML_PANEL_HANDLER_TYPE_URL); - net_reg_random_protocol(net_HTMLDialogLoad, HTML_DIALOG_HANDLER_TYPE_URL); - net_reg_random_protocol(net_WysiwygLoad, WYSIWYG_TYPE_URL); -} - -#endif /* MOZILLA_CLIENT */ - -PRIVATE Bool net_about_kludge(URL_Struct *URL_s) -{ - unsigned char *url = (unsigned char *) URL_s->address; - unsigned char *user = (unsigned char *) XP_STRDUP ((char*)(url + 6)); - unsigned char *tmp; - - if (user == NULL) - return FALSE; - - for (tmp = user; *tmp; tmp++) *tmp += 23; - - if ( !XP_STRCMP((char*)user, "\170\202\202\170\205\170") || /* akkana */ - !XP_STRCMP((char*)user, "\170\211\200") || /* ari */ - !XP_STRCMP((char*)user, "\170\211\212\177\170\173") || /* arshad */ - !XP_STRCMP((char*)user, "\170\213\206\213\200\172") || /* atotic */ - !XP_STRCMP((char*)user, "\171\176\170\220") || /* bgay */ - !XP_STRCMP((char*)user, "\171\201\206\205\174\212") || /* bjones */ - !XP_STRCMP((char*)user, "\171\203\220\213\177\174") || /* blythe */ - !XP_STRCMP((char*)user, "\171\205\174\203\212\206\205") || /* bnelson */ - !XP_STRCMP((char*)user, "\171\206\171") || /* bob */ - !XP_STRCMP((char*)user, "\171\206\171\201") || /* bobj */ - !XP_STRCMP((char*)user, "\171\211\170\173\174") || /* brade */ - !XP_STRCMP((char*)user, "\171\211\200\170\205\206") || /* briano */ - !XP_STRCMP((char*)user, "\171\211\200\173\176\174") || /* bridge */ - !XP_STRCMP((char*)user, "\172\170\213\177\203\174\174\204") || /* cathleen */ - !XP_STRCMP((char*)user, "\172\177\206\214\172\202") || /* chouck */ - !XP_STRCMP((char*)user, "\172\177\211\200\212\175") || /* chrisf */ - !XP_STRCMP((char*)user, "\172\202\211\200\213\221\174\211") || /* ckritzer */ - !XP_STRCMP((char*)user, "\172\204\170\205\212\202\174") || /* cmanske */ - !XP_STRCMP((char*)user, "\172\206\205\215\174\211\212\174") || /* converse */ - !XP_STRCMP((char*)user, "\172\206\211\171\170\205") || /* corban */ - !XP_STRCMP((char*)user, "\172\217\214\174") || /* cxue */ - !XP_STRCMP((char*)user, "\172\220\174\177") || /* cyeh */ - !XP_STRCMP((char*)user, "\173\170\205\173\170") || /* danda */ - !XP_STRCMP((char*)user, "\173\170\205\204") || /* danm */ - !XP_STRCMP((char*)user, "\173\170\215\200\173\204") || /* davidm */ - !XP_STRCMP((char*)user, "\173\174\172\170\212\213\211\200") || /* decastri */ - !XP_STRCMP((char*)user, "\173\201\216") || /* djw */ - !XP_STRCMP((char*)user, "\173\202\170\211\203\213\206\205") || /* dkarlton */ - !XP_STRCMP((char*)user, "\173\204\206\212\174") || /* dmose */ - !XP_STRCMP((char*)user, "\173\206\205") || /* don */ - !XP_STRCMP((char*)user, "\173\206\211\170") || /* dora */ - !XP_STRCMP((char*)user, "\173\206\214\176") || /* doug */ - !XP_STRCMP((char*)user, "\173\207") || /* dp */ - !XP_STRCMP((char*)user, "\174\171\200\205\170") || /* ebina */ - !XP_STRCMP((char*)user, "\174\204\170\173\174\211") || /* emader */ - !XP_STRCMP((char*)user, "\174\211\200\202") || /* erik */ - !XP_STRCMP((char*)user, "\175\211\200\174\173\204\170\205") || /* friedman */ - !XP_STRCMP((char*)user, "\175\213\170\205\176") || /* ftang */ - !XP_STRCMP((char*)user, "\175\214\171\200\205\200") || /* fubini */ - !XP_STRCMP((char*)user, "\175\214\211") || /* fur */ - !XP_STRCMP((char*)user, "\176\170\176\170\205") || /* gagan */ - !XP_STRCMP((char*)user, "\176\203\220\205\205") || /* glynn */\ - !XP_STRCMP((char*)user, "\176\211\206\216\203\213\200\176\174\211") || /* growltiger */\ - !XP_STRCMP((char*)user, "\177\170\176\170\205") || /* hagan */ - !XP_STRCMP((char*)user, "\177\170\211\173\213\212") || /* hardts */ - !XP_STRCMP((char*)user, "\177\212\177\170\216") || /* hshaw */ - !XP_STRCMP((char*)user, "\177\220\170\213\213") || /* hyatt */ - !XP_STRCMP((char*)user, "\200\211\174\205\174") || /* irene */ - !XP_STRCMP((char*)user, "\201\170\211") || /* jar */ - !XP_STRCMP((char*)user, "\201\174\175\175") || /* jeff */ - !XP_STRCMP((char*)user, "\201\174\215\174\211\200\205\176") || /* jevering */ - !XP_STRCMP((char*)user, "\201\176") || /* jg */ - !XP_STRCMP((char*)user, "\201\176\174\203\203\204\170\205") || /* jgellman */ - !XP_STRCMP((char*)user, "\201\201") || /* jj */ - !XP_STRCMP((char*)user, "\201\206\174\211\214\175\175") || /* joeruff */ - !XP_STRCMP((char*)user, "\201\206\202\200") || /* joki */ - !XP_STRCMP((char*)user, "\201\206\205\170\212") || /* jonas */ - !XP_STRCMP((char*)user, "\201\207\204") || /* jpm */ - !XP_STRCMP((char*)user, "\201\212\216") || /* jsw */ - !XP_STRCMP((char*)user, "\201\216\221") || /* jwz */ - !XP_STRCMP((char*)user, "\202\170\177\174\211\205") || /* kahern */ - !XP_STRCMP((char*)user, "\202\170\211\203\213\206\205") || /* karlton */ - !XP_STRCMP((char*)user, "\202\200\207\207") || /* kipp */ - !XP_STRCMP((char*)user, "\202\204\172\174\205\213\174\174") || /* kmcentee */ - !XP_STRCMP((char*)user, "\202\206\174\177\204") || /* koehm */ - !XP_STRCMP((char*)user, "\202\211\200\212\213\200\205") || /* kristin */ - !XP_STRCMP((char*)user, "\203\170\211\214\171\171\200\206") || /* larubbio */ - !XP_STRCMP((char*)user, "\203\170\216") || /* law */ - !XP_STRCMP((char*)user, "\203\174\205\221") || /* lenz */ - !XP_STRCMP((char*)user, "\203\206\211\200\202") || /* lorik */ - !XP_STRCMP((char*)user, "\203\213\170\171\171") || /* ltabb */ - !XP_STRCMP((char*)user, "\204\170\203\204\174\211") || /* malmer */ - !XP_STRCMP((char*)user, "\204\170\211\172\170") || /* marca */ - !XP_STRCMP((char*)user, "\204\170\213\213") || /* matt */ - !XP_STRCMP((char*)user, "\204\172\170\175\174\174") || /* mcafee */ - !XP_STRCMP((char*)user, "\204\172\204\214\203\203\174\205") || /* mcmullen */ - !XP_STRCMP((char*)user, "\204\174\173\200\213\170\213\200\206\205") || /* meditation */ - !XP_STRCMP((char*)user, "\204\203\204") || /* mlm */ - !XP_STRCMP((char*)user, "\204\206\205\200\210\214\174") || /* monique */ - !XP_STRCMP((char*)user, "\204\206\205\213\214\203\203\200")|| /* montulli */ - !XP_STRCMP((char*)user, "\204\206\211\212\174") || /* morse */ - !XP_STRCMP((char*)user, "\204\206\214\211\174\220")|| /* mourey */ - !XP_STRCMP((char*)user, "\204\213\206\220") || /* mtoy */ - !XP_STRCMP((char*)user, "\204\216\174\203\172\177") || /* mwelch */ - !XP_STRCMP((char*)user, "\205\174\203\212\206\205\171") || /* nelsonb */ - !XP_STRCMP((char*)user, "\205\200\212\177\174\174\213\177") || /* nisheeth */ - !XP_STRCMP((char*)user, "\206\200\205\202") || /* oink */ - !XP_STRCMP((char*)user, "\207\170\203\174\215\200\172\177") || /* palevich */ - !XP_STRCMP((char*)user, "\207\170\210\214\200\205") || /* paquin */ - !XP_STRCMP((char*)user, "\207\170\214\203\173") || /* pauld */ - !XP_STRCMP((char*)user, "\207\172\177\174\205") || /* pchen */ - !XP_STRCMP((char*)user, "\207\200\174\211\211\174") || /* pierre */ - !XP_STRCMP((char*)user, "\207\200\176\203\174\213") || /* piglet */ - !XP_STRCMP((char*)user, "\207\200\205\202\174\211\213\206\205") || /* pinkerton */ - !XP_STRCMP((char*)user, "\211\170\204\170\205") || /* raman */ - !XP_STRCMP((char*)user, "\211\170\204\200\211\206") || /* ramiro */ - !XP_STRCMP((char*)user, "\211\174\172\214\211\212\200\206\205") || /* recursion */ - !XP_STRCMP((char*)user, "\211\174\207\202\170") || /* repka */ - !XP_STRCMP((char*)user, "\211\200\172\170\211\173\206\171") || /* ricardob */ - !XP_STRCMP((char*)user, "\211\201\172") || /* rjc */ - !XP_STRCMP((char*)user, "\211\204\216") || /* rmw */ - !XP_STRCMP((char*)user, "\211\170\204\211\170\201") || /* ramraj */ - !XP_STRCMP((char*)user, "\211\206\171\204") || /* robm */ - !XP_STRCMP((char*)user, "\211\206\174\171\174\211") || /* roeber */ - !XP_STRCMP((char*)user, "\211\207\206\213\213\212") || /* rpotts */ - !XP_STRCMP((char*)user, "\211\214\212\203\170\205") || /* ruslan */ - !XP_STRCMP((char*)user, "\212\172\172") || /* scc */ - !XP_STRCMP((char*)user, "\212\173\170\176\203\174\220") || /* sdagley */ - !XP_STRCMP((char*)user, "\212\177\170\211\206\205\200") || /* sharoni */ - !XP_STRCMP((char*)user, "\212\177\214\170\205\176") || /* shuang */ - !XP_STRCMP((char*)user, "\212\202") || /* sk */ - !XP_STRCMP((char*)user, "\212\202\220\174") || /* skye */ - !XP_STRCMP((char*)user, "\212\203\170\204\204") || /* slamm */ - !XP_STRCMP((char*)user, "\212\204\212\200\203\215\174\211") || /* smsilver */ - !XP_STRCMP((char*)user, "\212\207\174\205\172\174") || /* spence */ - !XP_STRCMP((char*)user, "\212\207\200\173\174\211") || /* spider */ - !XP_STRCMP((char*)user, "\212\212\207\200\213\221\174\211") || /* sspitzer */ - !XP_STRCMP((char*)user, "\212\213\174\211\205") || /* stern */ - !XP_STRCMP((char*)user, "\213\170\211\170\177") || /* tarah */ - !XP_STRCMP((char*)user, "\213\174\211\211\220") || /* terry */ - !XP_STRCMP((char*)user, "\213\175\203\200\205\213") || /* tflint */ - !XP_STRCMP((char*)user, "\213\200\204\204") || /* timm */ - !XP_STRCMP((char*)user, "\213\206\212\177\206\202") || /* toshok */ - !XP_STRCMP((char*)user, "\213\211\170\172\220") || /* tracy */ - !XP_STRCMP((char*)user, "\213\211\200\212\213\170\205") || /* tristan */ - !XP_STRCMP((char*)user, "\213\211\214\173\174\203\203\174") || /* trudelle */ - !XP_STRCMP((char*)user, "\215\170\203\174\212\202\200") || /* valeski */ - !XP_STRCMP((char*)user, "\216\170\211\211\174\205") || /* warren */ - !XP_STRCMP((char*)user, "\216\201\212") ) /* wjs */ - { - /* "http://people.netscape.com/" */ - char *head = ("\177\213\213\207\121\106\106\207\174\206\207\203\174\105" - "\205\174\213\212\172\170\207\174\105\172\206\204\106"); - unsigned char *location = (unsigned char *) - XP_ALLOC (XP_STRLEN ((char *) head) + XP_STRLEN ((char *) user) + 2); - if (! location) - { - XP_FREE (user); - return FALSE; - } - XP_STRCPY ((char *) location, (char *) head); - XP_STRCAT ((char *) location, (char *) user); - for (tmp = location; *tmp; tmp++) *tmp -= 23; - XP_STRCAT ((char *) location, "/"); - XP_FREE (user); - XP_FREE (URL_s->address); - URL_s->address = (char *) location; - URL_s->address_modified = TRUE; - return TRUE; - } - else - { - XP_FREE (user); - return FALSE; - } -} - -PRIVATE int32 -net_AboutLoad(ActiveEntry *ce) -{ - if(net_about_kludge (ce->URL_s)) - { - ce->status = MK_DO_REDIRECT; - return MK_DO_REDIRECT; - } - - return net_output_about_url(ce); -} - -PRIVATE int32 -net_AboutStub(ActiveEntry *ce) -{ -#ifdef DO_ANNOYING_ASSERTS_IN_STUBS - XP_ASSERT(0); -#endif - return -1; -} - -PRIVATE void -net_CleanupAbout(void) -{ -} - -PRIVATE void -NET_InitAboutProtocol(void) -{ - static NET_ProtoImpl about_proto_impl; - - about_proto_impl.init = net_AboutLoad; - about_proto_impl.process = net_AboutStub; - about_proto_impl.interrupt = net_AboutStub; - about_proto_impl.cleanup = net_CleanupAbout; - - NET_RegisterProtocolImplementation(&about_proto_impl, ABOUT_TYPE_URL); -} - -/* - * Check the no_proxy environment variable to get the list - * of hosts for which proxy server is not consulted. - * - * no_proxy is a comma- or space-separated list of machine - * or domain names, with optional :port part. If no :port - * part is present, it applies to all ports on that domain. - * - * Example: "netscape.com,some.domain:8001" - * - */ -PRIVATE Bool override_proxy (CONST char * URL) -{ - char * p = NULL; - char * host = NULL; - int port = 0; - int h_len = 0; - char *no_proxy = MKno_proxy; - - if(no_proxy==NULL) - return(FALSE); - - if (!(host = NET_ParseURL(URL, GET_HOST_PART))) - return NO; - - if (!*host) - { - XP_FREE(host); - return NO; - } - - p = XP_STRCHR(host, ':'); - if (p) /* Port specified */ - { - *p++ = 0; /* Chop off port */ - port = atoi(p); - } - else - { /* Use default port */ - char * access = NET_ParseURL(URL, GET_PROTOCOL_PART); - if (access) { - if (!XP_STRCMP(access,"http")) port = 80; - else if (!XP_STRCMP(access,"gopher")) port = 70; - else if (!XP_STRCMP(access,"ftp")) port = 21; - XP_FREE(access); - } - } - if (!port) port = 80; /* Default */ - h_len = XP_STRLEN(host); - - while (*no_proxy) { - char * end; - char * colon = NULL; - int templ_port = 0; - int t_len; - - while (*no_proxy && (isspace(*no_proxy) || *no_proxy==',')) - no_proxy++; /* Skip whitespace and separators */ - - end = no_proxy; - while (*end && !isspace(*end) && *end != ',') /* Find separator */ - { - if (*end==':') colon = end; /* Port number given */ - end++; - } - - if (colon) - { - templ_port = atoi(colon+1); - t_len = colon - no_proxy; - } - else - { - t_len = end - no_proxy; - } - - /* don't worry about case when comparing the requested host to the proxies in the - no proxy list, i.e. use XP_STRNCASECMP */ - if ((!templ_port || templ_port == port) && (t_len > 0 && t_len <= h_len && - !XP_STRNCASECMP(host + h_len - t_len, no_proxy, t_len))) - { - XP_FREE(host); - return YES; - } - if (*end) - no_proxy = end+1; - else - break; - } - - XP_FREE(host); - return NO; -} - -PUBLIC void -NET_SetProxyServer(NET_ProxyType type, const char * org_host_port) -{ - char *host_port = 0; - - if(org_host_port && *org_host_port) { - host_port = XP_STRDUP(org_host_port); - - if(!host_port) - return; - - /* limit the size of host_port to within MAXHOSTNAMELEN */ - if(XP_STRLEN(host_port) > MAXHOSTNAMELEN) - host_port[MAXHOSTNAMELEN] = '\0'; - } - - TRACEMSG(("NET_SetProxyServer called with host: %-.1900s", - host_port ? host_port : "(null)")); - - switch(type) - { - case PROXY_AUTOCONF_URL: - if (host_port) { - if (!MKproxy_ac_url || XP_STRCMP(MKproxy_ac_url, org_host_port)) { - StrAllocCopy(MKproxy_ac_url, org_host_port); - NET_ProxyAcLoaded = FALSE; - } - } - else { - if (MKproxy_ac_url) { - FREE_AND_CLEAR(MKproxy_ac_url); - NET_ProxyAcLoaded = FALSE; - } - } - break; - - case FTP_PROXY: - if(host_port) - StrAllocCopy(MKftp_proxy, host_port); - else - FREE_AND_CLEAR(MKftp_proxy); - break; - case GOPHER_PROXY: - if(host_port) - StrAllocCopy(MKgopher_proxy, host_port); - else - FREE_AND_CLEAR(MKgopher_proxy); - break; - case HTTP_PROXY: - if(host_port) - StrAllocCopy(MKhttp_proxy, host_port); - else - FREE_AND_CLEAR(MKhttp_proxy); - break; - case HTTPS_PROXY: - if(host_port) - StrAllocCopy(MKhttps_proxy, host_port); - else - FREE_AND_CLEAR(MKhttps_proxy); - break; - case NEWS_PROXY: - if(host_port) - StrAllocCopy(MKnews_proxy, host_port); - else - FREE_AND_CLEAR(MKnews_proxy); - break; - case WAIS_PROXY: - if(host_port) - StrAllocCopy(MKwais_proxy, host_port); - else - FREE_AND_CLEAR(MKno_proxy); - break; - - case NO_PROXY: - if(host_port) - StrAllocCopy(MKno_proxy, org_host_port); - break; - - default: - /* ignore */ - break; - } - - FREEIF(host_port); -} - -/* return a proxy server host and port to the caller or NULL - * - * all this proxy bussiness should be rewritten to be generalized - * and not switch() based [LJM] - */ -MODULE_PRIVATE char * -NET_FindProxyHostForUrl(int url_type, char *url_address) -{ - - if(override_proxy(url_address)) - return NULL; - - switch(url_type) - { - case FTP_TYPE_URL: - return MKftp_proxy; - break; - - case GOPHER_TYPE_URL: - return(MKgopher_proxy); - break; - - case HTTP_TYPE_URL: - case URN_TYPE_URL: - case NFS_TYPE_URL: - return(MKhttp_proxy); - break; - - case SECURE_HTTP_TYPE_URL: - return(MKhttps_proxy); - break; - - case NEWS_TYPE_URL: - case INTERNAL_NEWS_TYPE_URL: - return(MKnews_proxy); - break; - - case WAIS_TYPE_URL: - return(MKwais_proxy); - break; - - default: - /* ignore */ - break; - } - - return NULL; -} - -/* Force it to reload automatic proxy config. - * This function simply sets a flag so the config will be - * reloaded during the next geturl. It doesn't actually - * do the reloading here. */ -#ifdef MOZILLA_CLIENT -PUBLIC void -NET_ReloadProxyConfig(MWContext *window_id) -{ - /* if we have a global config load it */ - if (MKglobal_config_url) - NET_GlobalAcLoaded = FALSE; - /* else if we have an old style proxy config and we are set on automatic...load it - * , or if we're using the old style proxy config that is actually a proxy autodiscovery - * url, reload it also */ - else if( (MKproxy_ac_url && (!MKproxy_style || MKproxy_style == PROXY_STYLE_AUTOMATIC)) - || (NET_UsingPadPac()) ) - NET_ProxyAcLoaded = FALSE; -} -#endif /* MOZILLA_CLIENT */ - - -/* Debugging routine prints an URL (and string "header") - */ -#ifdef DEBUG -void TraceURL (URL_Struct *url, char *header) -{ - TRACEMSG(("URL %-.1900s", header)); - if (url->address) TRACEMSG((" address %s", url->address)); - if (url->content_length) TRACEMSG((" content_length %i", url->content_length)); - if (url->content_type) TRACEMSG((" content_type %s", url->content_type)); - if (url->content_encoding) TRACEMSG((" content_encoding %s", url->content_encoding)); -} -#endif - -/* This function's existance was prompted by the front end desiring the ability to put the - client in kiosk mode. The function removes any potentially sensitive information from the - background: passwords, caches, histories, cookies. */ -/* fix Mac warning of missing prototype */ -PUBLIC void -NET_DestroyEvidence(); - -PUBLIC void -NET_DestroyEvidence() -{ - int32 oldSize = 0; - - /* Handle authorizations */ - NET_RemoveAllAuthorizations(); - - /* Handle global history */ - GH_ClearGlobalHistory(); - - /* Handle Session History */ - - /* Handle cookies */ - NET_RemoveAllCookies(); - - /* Handle disk cache */ - oldSize = NET_GetDiskCacheSize(); - NET_SetDiskCacheSize(0); /* zero it out */ - NET_SetDiskCacheSize(oldSize); /* set it back up */ - - /* Handle memory cache */ - oldSize = NET_GetMemoryCacheSize(); - NET_SetMemoryCacheSize(0); /* zero it out */ - NET_SetMemoryCacheSize(oldSize); /* set it back up */ -} - -#ifndef MOZ_MAIL_NEWS - -/* this whole mess should get moved to the mksmtp.c file - * where it can share the InitMailtoProtocol function - * since that is what it is trying to replace - * - * for now InitMailto will be duplicated inside the ifdef. - */ - -#define CE_URL_S cur_entry->URL_s -#define CE_STATUS cur_entry->status - -extern void FE_AlternateCompose( - char * from, char * reply_to, char * to, char * cc, char * bcc, - char * fcc, char * newsgroups, char * followup_to, - char * organization, char * subject, char * references, - char * other_random_headers, char * priority, - char * attachment, char * newspost_url, char * body); - -MODULE_PRIVATE -int32 net_MailtoLoad (ActiveEntry * cur_entry) -{ - char *parms = NET_ParseURL (CE_URL_S->address, GET_SEARCH_PART); - char *rest = parms; - char *from = 0; /* internal only */ - char *reply_to = 0; /* internal only */ - char *to = 0; - char *cc = 0; - char *bcc = 0; - char *fcc = 0; /* internal only */ - char *newsgroups = 0; - char *followup_to = 0; - char *html_part = 0; /* internal only */ - char *organization = 0; /* internal only */ - char *subject = 0; - char *references = 0; - char *attachment = 0; /* internal only */ - char *body = 0; - char *other_random_headers = 0; /* unused (for now) */ - char *priority = 0; - char *newshost = 0; /* internal only */ - XP_Bool encrypt_p = FALSE; - XP_Bool sign_p = FALSE; /* internal only */ - char *newspost_url = 0; - XP_Bool force_plain_text = FALSE; - to = NET_ParseURL (CE_URL_S->address, GET_PATH_PART); - if (rest && *rest == '?') - { - /* start past the '?' */ - rest++; - rest = XP_STRTOK (rest, "&"); - while (rest && *rest) - { - char *token = rest; - char *value = 0; - char *eq = XP_STRCHR (token, '='); - if (eq) - { - value = eq+1; - *eq = 0; - } - switch (*token) - { - case 'A': case 'a': - if (!strcasecomp (token, "attachment") && - CE_URL_S->internal_url) - StrAllocCopy (attachment, value); - break; - case 'B': case 'b': - if (!strcasecomp (token, "bcc")) - { - if (bcc && *bcc) - { - StrAllocCat (bcc, ", "); - StrAllocCat (bcc, value); - } - else - { - StrAllocCopy (bcc, value); - } - } - else if (!strcasecomp (token, "body")) - { - if (body && *body) - { - StrAllocCat (body, "\n"); - StrAllocCat (body, value); - } - else - { - StrAllocCopy (body, value); - } - } - break; - case 'C': case 'c': - if (!strcasecomp (token, "cc")) - { - if (cc && *cc) - { - StrAllocCat (cc, ", "); - StrAllocCat (cc, value); - } - else - { - StrAllocCopy (cc, value); - } - } - break; - case 'E': case 'e': - if (!strcasecomp (token, "encrypt") || - !strcasecomp (token, "encrypted")) - encrypt_p = (!strcasecomp(value, "true") || - !strcasecomp(value, "yes")); - break; - case 'F': case 'f': - if (!strcasecomp (token, "followup-to")) - StrAllocCopy (followup_to, value); - else if (!strcasecomp (token, "from") && - CE_URL_S->internal_url) - StrAllocCopy (from, value); - else if (!strcasecomp (token, "force-plain-text") && - CE_URL_S->internal_url) - force_plain_text = TRUE; - break; - case 'H': case 'h': - if (!strcasecomp(token, "html-part") && - CE_URL_S->internal_url) { - StrAllocCopy(html_part, value); - } - case 'N': case 'n': - if (!strcasecomp (token, "newsgroups")) - StrAllocCopy (newsgroups, value); - else if (!strcasecomp (token, "newshost") && - CE_URL_S->internal_url) - StrAllocCopy (newshost, value); - break; - case 'O': case 'o': - if (!strcasecomp (token, "organization") && - CE_URL_S->internal_url) - StrAllocCopy (organization, value); - break; - case 'R': case 'r': - if (!strcasecomp (token, "references")) - StrAllocCopy (references, value); - else if (!strcasecomp (token, "reply-to") && - CE_URL_S->internal_url) - StrAllocCopy (reply_to, value); - break; - case 'S': case 's': - if(!strcasecomp (token, "subject")) - StrAllocCopy (subject, value); - else if ((!strcasecomp (token, "sign") || - !strcasecomp (token, "signed")) && - CE_URL_S->internal_url) - sign_p = (!strcasecomp(value, "true") || - !strcasecomp(value, "yes")); - break; - case 'P': case 'p': - if (!strcasecomp (token, "priority")) - StrAllocCopy (priority, value); - break; - case 'T': case 't': - if (!strcasecomp (token, "to")) - { - if (to && *to) - { - StrAllocCat (to, ", "); - StrAllocCat (to, value); - } - else - { - StrAllocCopy (to, value); - } - } - break; - } - if (eq) - *eq = '='; /* put it back */ - rest = XP_STRTOK (0, "&"); - } - } - - FREEIF (parms); - if (to) - NET_UnEscape (to); - if (cc) - NET_UnEscape (cc); - if (subject) - NET_UnEscape (subject); - if (newsgroups) - NET_UnEscape (newsgroups); - if (references) - NET_UnEscape (references); - if (attachment) - NET_UnEscape (attachment); - if (body) - NET_UnEscape (body); - if (newshost) - NET_UnEscape (newshost); - - if(newshost) - { - char *prefix = "news://"; - char *slash = XP_STRRCHR (newshost, '/'); - if (slash && !strcasecomp (slash, "/secure")) - { - *slash = 0; - prefix = "snews://"; - } - newspost_url = (char *) XP_ALLOC (XP_STRLEN (prefix) + - XP_STRLEN (newshost) + 10); - if (newspost_url) - { - XP_STRCPY (newspost_url, prefix); - XP_STRCAT (newspost_url, newshost); - XP_STRCAT (newspost_url, "/"); - } - } - else - { - XP_Bool newsServerIsSecure = FALSE; - PREF_GetBoolPref("news.server_is_secure", &newsServerIsSecure); - - if (newsServerIsSecure) - newspost_url = XP_STRDUP("snews:"); - else - newspost_url = XP_STRDUP ("news:"); - } - -#if defined(XP_WIN) /* other FE's add here when Front end code added */ - FE_AlternateCompose( - from, reply_to, to, cc, bcc, fcc, - newsgroups, followup_to, organization, - subject, references, other_random_headers, - priority, attachment, newspost_url, body ); -#endif /* XP_WIN */ - - FREEIF(from); - FREEIF(reply_to); - FREEIF(to); - FREEIF(cc); - FREEIF(bcc); - FREEIF(fcc); - FREEIF(newsgroups); - FREEIF(followup_to); - FREEIF(html_part); - FREEIF(organization); - FREEIF(subject); - FREEIF(references); - FREEIF(attachment); - FREEIF(body); - FREEIF(other_random_headers); - FREEIF(newshost); - FREEIF(priority); - FREEIF(newspost_url); - - CE_STATUS = MK_NO_DATA; - return(-1); -} - -PRIVATE int32 -net_MailtoStub(ActiveEntry *ce) -{ -#ifdef DO_ANNOYING_ASSERTS_IN_STUBS - XP_ASSERT(0); -#endif - return(0); /* Well the function definition says it returns SOMETHING! */ -} -PRIVATE void -net_CleanupMailtoStub(void) -{ -#ifdef DO_ANNOYING_ASSERTS_IN_STUBS - XP_ASSERT(0); -#endif -} - -MODULE_PRIVATE void -NET_InitMailtoProtocol(void) -{ - static NET_ProtoImpl mailto_proto_impl; - - mailto_proto_impl.init = net_MailtoLoad; - mailto_proto_impl.process = net_MailtoStub; - mailto_proto_impl.interrupt = net_MailtoStub; - mailto_proto_impl.cleanup = net_CleanupMailtoStub; - - NET_RegisterProtocolImplementation(&mailto_proto_impl, MAILTO_TYPE_URL); -} - -#endif /* MOZ_MAIL_NEWS */ - -#ifdef PROFILE -#pragma profile off -#endif - diff --git a/mozilla/modules/softupdt/Makefile b/mozilla/modules/softupdt/Makefile deleted file mode 100644 index f4033573b26..00000000000 --- a/mozilla/modules/softupdt/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -#!gmake -# -# The contents of this file are subject to the Netscape Public License -# Version 1.0 (the "NPL"); you may not use this file except in -# compliance with the NPL. You may obtain a copy of the NPL at -# http://www.mozilla.org/NPL/ -# -# Software distributed under the NPL is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL -# for the specific language governing rights and limitations under the -# NPL. -# -# The Initial Developer of this code under the NPL is Netscape -# Communications Corporation. Portions created by Netscape are -# Copyright (C) 1998 Netscape Communications Corporation. All Rights -# Reserved. - -DEPTH = ../.. -DIRS = classes src include - -include $(DEPTH)/config/rules.mk diff --git a/mozilla/xpcom/glue/nsID.cpp b/mozilla/xpcom/glue/nsID.cpp deleted file mode 100644 index 1484d4de667..00000000000 --- a/mozilla/xpcom/glue/nsID.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#include -#include "nsID.h" - -const static char gIDFormat[] = - "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}"; - -/* - * Turns a {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} string into - * an nsID - */ - -PRBool nsID::Parse(char *aIDStr) { - int count, n1, n2, n3[8]; - long int n0; - - count = sscanf(aIDStr, gIDFormat, - &n0, &n1, &n2, - &n3[0],&n3[1],&n3[2],&n3[3], - &n3[4],&n3[5],&n3[6],&n3[7]); - - m0 = (PRInt32) n0; - m1 = (PRInt16) n1; - m2 = (PRInt16) n2; - for (int i = 0; i < 8; i++) { - m3[i] = (PRInt8) n3[i]; - } - - return (PRBool) (count == 11); -} - -/* - * Returns an allocated string in {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} - * format. Caller should delete [] the string. - */ - -char *nsID::ToString() const -{ - char *res = new char[39]; - - if (res != NULL) { - sprintf(res, gIDFormat, - (long int) m0, (int) m1, (int) m2, - (int) m3[0], (int) m3[1], (int) m3[2], (int) m3[3], - (int) m3[4], (int) m3[5], (int) m3[6], (int) m3[7]); - } - return res; -} -