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

📄 cgi.c

📁 linux下摄象头截取代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			printf ("%s'\">\n", cgi_script_name());	}	if (cgi_stylesheet) {		printf ("\t<LINK rel=stylesheet href=\"%s\">\n", cgi_stylesheet);	}	printf ("</HEAD>\n");	printf ("<BODY");	if (cgi_background) {		if (*cgi_background == '/') {			printf (" background=\"%s\"", cgi_background);		} else {			printf (" bgcolor=\"%s\"", cgi_background);		}	}	if (cgi_foreground)		printf (" text=\"%s\"", cgi_foreground);	printf (">\n");}/* */voidcgi_html_end (const char *s){	if (s) {		printf ("%s\n", s);	}	if (cgi_bottomline) {		printf ("%s\n", cgi_bottomline);	}	printf ("</BODY>\n</HTML>\n");}/* */const char *cgi_sourceURL (void){	return (cgi_source_url);}/* */const char *cgi_logdir (void){	return (cgi_loggingdir);}/* */const char *cgi_defaultMTA (void){	return (cgi_defaultmta);}/* */intcgi_init (const char *pname){#	define CFG_bg	"background"#	define CFG_fg	"foreground"#	define CFG_css	"stylesheet"#	define CFG_src	"source_url"#	define CFG_log	"loggingdir"#	define CFG_btl	"bottomline"#	define CFG_mta	"detaultMTA"#	define CFG_desc	"meta_desc"#	define CFG_keyw	"meta_keyw"	char cfgfile[PATH_MAX+1];	char buff[MAX_LINE], *p;	char key[256], value[256];	FILE *fp;	int len;	int cfg_num = 0;	prog_wp = pname;	program = strrchr (pname, '/');	if (program) program++;	else program = (char *)pname;	if (strstr (program, "nph-"))		run_as_nph = 1;	strcpy (cfgfile, pname);	strcat (cfgfile, ".scf");	fp = fopen (cfgfile, "rb");	if (!fp) {		return (0);	}	while (fgets (buff, MAX_LINE, fp) != NULL) {		p = buff;		while (*p && (*p == ' ' || *p == '\t'))			p++;		if (*p == '#')			continue;		*value = EMPTY;		sscanf (p, " %[^= \t] = %[^\n]", key, value);		if (*value) {			len = strlen (value);			if (len > 0) {				if (*value == '"') {					/* remove quote chars */					memmove (value, value+1, len + 1);					p = strrchr (value, '"');					if (p)						*p = EMPTY;				} else {					/* use last white char as end point */					p = strchr (value, '\t');					if (p)						*p = EMPTY;					else {						p = strchr (value, ' ');						if (p)							*p = EMPTY;					}				}			}		} else {			continue;		}#ifdef DEBUG		fprintf (stderr, "key=%s, value=%s\n", key, value);#endif		len = strlen (key);		if ((len == strlen (CFG_bg)) && (strcmp (key, CFG_bg) ==0)) {			cgi_background = (char *) malloc (strlen (value) +1);			strcpy (cgi_background, value);		} else		if ((len == strlen (CFG_fg)) && (strcmp (key, CFG_fg) ==0)) {			cgi_foreground = (char *) malloc (strlen (value) +1);			strcpy (cgi_foreground, value);		} else		if ((len == strlen (CFG_css)) && (strcmp (key, CFG_css) ==0)) {			cgi_stylesheet = (char *) malloc (strlen (value) +1);			strcpy (cgi_stylesheet, value);		} else		if ((len == strlen (CFG_src)) && (strcmp (key, CFG_src) ==0)) {			cgi_source_url = (char *) malloc (strlen (value) +1);			strcpy (cgi_source_url, value);		} else		if ((len == strlen (CFG_log)) && (strcmp (key, CFG_log) ==0)) {			cgi_loggingdir = (char *) malloc (strlen (value) +1);			strcpy (cgi_loggingdir, value);		} else		if ((len == strlen (CFG_btl)) && (strcmp (key, CFG_btl) ==0)) {			cgi_bottomline = (char *) malloc (strlen (value) +1);			strcpy (cgi_bottomline, value);		} else		if ((len == strlen (CFG_mta)) && (strcmp (key, CFG_mta) ==0)) {			cgi_defaultmta = (char *) malloc (strlen (value) +1);			strcpy (cgi_defaultmta, value);		} else		if ((len == strlen (CFG_desc)) && (strcmp (key, CFG_desc) ==0)) {			cgi_meta_desc = (char *) malloc (strlen (value) +1);			strcpy (cgi_meta_desc, value);		} else		if ((len == strlen (CFG_keyw)) && (strcmp (key, CFG_keyw) ==0)) {			cgi_meta_keyw = (char *) malloc (strlen (value) +1);			strcpy (cgi_meta_keyw, value);		} else {			/* private configuration data			 */			cfg_num += 2;			if (cfg_num == 2) {	/* first time */				cgi_cfg = calloc (3, sizeof(char *));			} else {				cgi_cfg = realloc (cgi_cfg, (cfg_num+1) * sizeof (char *));			}			cgi_cfg[cfg_num-2] = strdup (key);			cgi_cfg[cfg_num-1] = strdup (value);			cgi_cfg[cfg_num] = NULL;		}	}	fclose (fp);	return (1);}/* */intcgi_content (void){	char *c;	c = getenv ("CONTENT_TYPE");	if (c) {		if (strstr (c, "multipart/form-data"))			return (MULTIPART_FORM);	}	return (0);}/* * returns the method: CGI_METHOD_{GET|POST|PUT} */intcgi_method (void){	const char *method;	int rc = 0;	method = getenv ("REQUEST_METHOD");	if (method) {		if (strcmp (method, "GET") == 0)			rc = CGI_METHOD_GET;		else if (strcmp (method, "POST") == 0)			rc = CGI_METHOD_POST;		else if (strcmp (method, "PUT") == 0)			rc = CGI_METHOD_PUT;		else if (strcmp (method, "DELETE") == 0)			rc = CGI_METHOD_DELETE;	}	return (rc);}/* */static char *hex_to_asc (const char *str, int len){	char *p, *s;	char buff[4];	int chr;	if (!str)		return (NULL);	s = (char *) malloc (len + 1);	p = s;	buff[2] = '\0';	while (*str && len) {		if (*str == '%') {			strncpy (buff, str+1, 2);			sscanf (buff, "%02X", &chr);			*p = (unsigned char) chr;			str += 3;			len -= 3;		} else {			if (*str == '+')				*p = ' ';			else				*p = *str;			str++;			len--;		}		p++;	}	*p = '\0';	return (s);}/* */char **cgi_parse_string (const char *str){	char **kv = NULL;	const char *p, *end;	int num = 1, i;	int len;	if (!str)		return (NULL);	p = str;	while ((p = strchr (p, '&')) != NULL) {		num++;		p++;	}	kv = (char **) calloc ((num * 2 +1), sizeof (char **));	p = str;	i = 0;	do {		len = 0;		if (*p == '&') {			p++;		}		end = p;		while ((*end != '=') && (*end != '\0') && (*end != '&')) {			len++;			end++;		}		kv[i] = hex_to_asc (p, len);		if (*end == '&') {			/* variable has no value .. */			p += len;			i++;			continue;		}		p += len+1;		end = p;		i++;		len = 0;		while ((*end != '&') && (*end != '\0')) {			len++;			end++;		}		kv[i] = hex_to_asc (p, len);		if (len > 0)			p++;		i++;	} while ((p = strchr (p, '&')) != NULL);	return (kv);}/* * return content length as int */intcgi_content_length (void){	const char *len_env;	int len = 0;	len_env = getenv ("CONTENT_LENGTH");	if (!len_env)		return (0);	sscanf (len_env, " %d ", &len);	return (len);}/* * read multipart request * still not ready! */mime **cgi_parse_multipart (void){	mime **mpart = NULL;	char *boundary;	char line[MAX_LINE];	int len, sl, read = 0, max = MAX_LINE;	boundary = getenv("CONTENT_TYPE");	boundary = strstr (boundary, "boundary=");	len = cgi_content_length ();	if (!boundary || !len)		return (NULL);	if (len < MAX_LINE)		max = len;	boundary += 9;	do {		/* find the start boundary		 */		fgets (line, max, stdin);		read += strlen (line);		if (strstr (line, boundary))			break;	} while (read < len);	printf ("found\n");	do {		fgets (line, max, stdin);		sl = strlen (line);		if (sl >= 20) {			if (strncasecmp (line, "content-disposition:", 20)) {			}		}		read += sl;	} while (read < len);	return (mpart);}/* * read stdin and encode query data */char **cgi_parse_stdin (void){	char **form = NULL;	char *buff;	int len;	len = cgi_content_length();	if (!len)		return (NULL);	buff = (char *) malloc (len+1);	buff[len] = '\0';	fread (buff, 1, len, stdin);	form = cgi_parse_string(buff);	free (buff);	return (form);}/* */char **cgi_parse_query (void){	char *qs = getenv ("QUERY_STRING");	if (!qs)		return (NULL);	return (cgi_parse_string (qs));}/* * parse a formular, not depending on the request method * PUT method not done until now */char **cgi_parse_form (void){	int method;	/* changes globals! (cgi_form) */	method = cgi_method();	if (method == CGI_METHOD_POST) {		if (cgi_content() == MULTIPART_FORM)			cgi_form = (char **) cgi_parse_multipart ();		else			cgi_form = cgi_parse_stdin();	} else if (method == CGI_METHOD_GET)		cgi_form = cgi_parse_query();	else		cgi_form = NULL;	return (cgi_form);}/* * return the corresponding value for a given key */char *cgi_form_value (const char *key){	char **form;	if (!key)		return (NULL);	if (!cgi_form)		return (NULL);	form = cgi_form;	while (*form) {		if (strcmp (key, *form) == 0)			return (*(form+1));		form += 2;	}	return (NULL);}/* * return the corresponding value for a given key */char *cgi_cfg_value (const char *key){	char **cfg;	if (!key)		return (NULL);	if (!cgi_cfg)		return (NULL);	cfg = cgi_cfg;	while (*cfg) {		if (strcmp (key, *cfg) == 0)			return (*(cfg+1));		cfg += 2;	}	return (NULL);}/* * set refresh time, use 0 to disable */voidcgi_refresh (int t, char *url){	cgi_refresh_time = t;	cgi_refresh_url = url;}

⌨️ 快捷键说明

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