⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proxy.c

📁 linux下网络下载软件的源码
💻 C
字号:
/*      Get and Resume Elite EDition source codeGet and Resume Elite EDition (GREED)Copyright (C) 1999  Anoakie TurnerThis program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.For more information on the GPL, please go to:http://www.gnu.org/copyleft/gpl.html        Contact:  Anoakie Turner                  Anoakie.Turner@asu.edu                  13240 N. 94th Pl.                  Scottsdale, AZ 85260*/#include "main.h"/* New code +len, patch+ */#include <pwd.h>#include <sys/types.h>/* End */void Proxy(int NEWRC){/*	char *file; */	/* Patched by len. */	char *rcfile;	/* Patched by len. */	char *buffer;/*	char *home; */	/* Patched by len. */	char *homerc;	/* Patched by len. */	struct stat st;	struct passwd *pw_ent;	/* Patched by len. */	char *temp = NULL;	FILE *tempfp;	char *http_proxy = getenv("HTTP_PROXY");	int rc_exists = 0;	int filesize = 0;/* New code added */	/* Don't trust user's HOME environment variable. Look up by uid. */	pw_ent = getpwuid(getuid());	if(pw_ent == 0)	{       fprintf(stderr, "greed: fatal: cannot lookup user data.\n");	        exit(-1);	}	homerc = malloc(strlen(pw_ent->pw_dir) + strlen("/.greedrc") + 1);	if(homerc == 0)	{	printf("greed: Home directory not found, " 			"using current directory.\n");		homerc = ".greedrc"; 	} 	else	{       strcpy(homerc, pw_ent->pw_dir);	        strcat(homerc, "/.greedrc");	}	rcfile = homerc;/* End new code *//* Patched by len.	home = malloc(strlen(getenv("HOME")) + strlen("/.greedrc") + 1);	strcpy(home, getenv("HOME"));	if (home == NULL)	{	printf("Non fatal error: Home directory not found, "			"using current directory.\n");		file = home = ".greedrc";	}	else		file = strcat(home, "/.greedrc");*//* .8+ STABLE patch *//*	filesize = 1; /**/	/* Patched by len *//* Add new code */	rc_exists = 1;	if (stat(homerc, &st) != 0)	{	if (stat("/etc/greedrc", &st) != 0)/*			filesize = 0; */	/* Patched by len */			rc_exists = 0;		/* Patched by len */		else/*			file = "/etc/greedrc"; */	/* Patched by len */			rcfile = "/etc/greedrc";	/* Patched by len */	}/* Add new code */	if (NEWRC == 0)	{	if (http_proxy == NULL)			http_proxy = getenv("http_proxy");  		if (http_proxy != NULL)		{	temp = malloc(strlen(http_proxy));	/* DOCUMENTED MEMORY LEAK! :) */			strcpy(temp, http_proxy);			PROXY = temp + 7;			if (strchr(temp, ':') == NULL)				PROXYPORT = "8080";			else			{	PROXYPORT = strchr(temp, ':') + 1;				PROXY[strchr(PROXY, ':') - PROXY] = '\0';			}		} else		{	PROXY = malloc(1);			PROXY[0] = '\0';		}		DEFAULT_DIR = NULL;	}/* else */	if (NEWRC)	{	tempfp = fopen(rcfile, "w+b");/* End new code *//* Patched by len	if (filesize == 0)	{	tempfp = fopen(file, "w+b");*/		CreateNewRC(tempfp);		printf("Configuration file %s created!\n\nRestart greed for the new configuration"/*			" to take effect!\n", file); */	/* Patched by len */			" to take effect!\n", rcfile);	/* Patched by len */		fclose (tempfp);		exit(EXIT_SUCCESS);	} else if (rc_exists) /*!NEWRC) *//*	{	tempfp = fopen(file, "r+b"); */	/* Patched by len */	{	tempfp = fopen(rcfile, "r+b");	/* Patched by len */		fseek(tempfp, 0L, SEEK_END);		filesize = ftell(tempfp);		buffer = malloc(filesize+1);		rewind(tempfp);		fread(buffer, filesize, 1, tempfp);		buffer[filesize+1] = '\0';		PROXY = ReadString2(strstr(buffer, "\nSERVER=") + 8, '\n');		PROXYPORT = ReadString2(strstr(buffer, "\nPORT=") + 6, '\n');		if (PROXY == NULL)		{	if (http_proxy == NULL)				http_proxy = getenv("http_proxy");			if (http_proxy != NULL)			{	strcpy(temp, http_proxy);				PROXY = temp + 7;				if (strchr(temp, ':') == NULL)					PROXYPORT = "8080";				else				{	PROXYPORT = strchr(temp, ':') + 1;					PROXY[strchr(PROXY, ':') - PROXY] = '\0';				}			} else			{	PROXY = malloc(1);				PROXY[0] = '\0';			}		}			if (PROXY[0] != 0 && OUTPUT_LEVEL > 5)			printf("Using proxy at %s on port %s.\n", PROXY, PROXYPORT);		ROLLBACK = atol(ReadString2(strstr(buffer, "\nROLLBACK=") + 10, '\n'));		TIMEOUT_SEC = atoi(ReadString2(strstr(buffer, "\nTIMEOUT=") + 9, '\n'));		MINSPEED = atoi(ReadString2(strstr(buffer, "\nMINSPEED=") + 10, '\n'));		WAIT_RETRY = atoi(ReadString2(strstr(buffer, "\nWAIT_RETRY=") + 12, '\n'));		FTP_WAIT_TIME = atoi(ReadString2(strstr(buffer, "\nSPEEDUP_FTP=") + 13, '\n'));		if (strstr(buffer, "\nDEFAULT_DIR") != NULL)		{	DEFAULT_DIR = ReadString2(strstr(buffer, "\nDEFAULT_DIR=\"") + 14, '"');			if (DEFAULT_DIR != NULL)				chdir(DEFAULT_DIR);		}		if (tempfp)			fclose (tempfp);	}}void CreateNewRC(FILE* fp){	fwrite("##\n",3,1,fp);	fwrite("## This is the default .greedrc for greed.\n",43,1,fp);	fwrite("## Edit this file how you like, then rename it to .greedrc\n",59,1,fp);	fwrite("##  and drop it in your home directory (or your /etc/greedrc if you want a global config)\n",90,1,fp);	fwrite("##\n",3,1,fp);	fwrite("## ",3,1,fp);	fwrite(CURRENT_VERSION,strlen(CURRENT_VERSION),1,fp);	fwrite(" - By: Anoakie Turner\n",22,1,fp);	fwrite("##\n\n",4,1,fp);	fwrite("# Proxy server's IP (leave empty if none)\nSERVER=\n\n# Proxy server's PORT\nPORT=8080\n\n",84,1,fp);	fwrite("# Amount of bytes to download at a time (MUST BE > 1024)\nROLLBACK=4096\n\n# Time out (in ",87,1,fp);	fwrite("seconds)\nTIMEOUT=300\n\n# Don't download faster then X k/sec (0 for no limit)\nMINSPEED=0",86,1,fp);	fwrite("\n\n# Time to wait before retrying (in seconds)\nWAIT_RETRY=10\n\n",61,1,fp);	fwrite("# Speeds up FTP connections by waiting X seconds to send data, a higher number means:\n",86,1,fp);	fwrite("# higher compatibility, lower speed. (default is 0)\nSPEEDUP_FTP=0\n\n",67,1,fp);	fwrite("# Sets the default download directory (\"\" = current dir)\n# DO NOT SET IF YOU ARE USING ",87,1,fp);	fwrite("THIS AS A GLOBAL (/etc/greedrc) GREED CONFIGURATION FILE!\nDEFAULT_DIR=\"\"\n\n",74,1,fp);	/*      123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890   */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -