亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? netcam_ftp.c

?? motion motion
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***      Much of the FTP code was inspired by the nanoftp.c module from*      libxml2 (Copyright Daniel Veillard, 2003).  The routines have been*      modified to fit the needs of the Motion project.**      Copyright 2005, William M. Brack*      This software is distributed under the GNU Public license Version 2.*      See also the file 'COPYING'.**/#include "motion.h"  /* needs to come first, because _GNU_SOURCE_ set there */#include <ctype.h>//#include <errno.h>//#include <fcntl.h>#include <netdb.h>#include <regex.h>//#include <stdarg.h>//#include <stdlib.h>//#include <stdio.h>//#include <string.h>//#include <syslog.h>//#include <unistd.h>#include <sys/socket.h>//#include <sys/stat.h>//#include <sys/types.h>#include <netinet/in.h>#include "netcam_ftp.h"/*** ftp_new_context**      Create a new FTP context structure** Parameters**       None** Returns:     Pointer to the newly-created structure, NULL if error**/ftp_context_pointer ftp_new_context(void){	ftp_context_pointer ret;	/* note that mymalloc will exit on any problem */	ret = mymalloc(sizeof(ftp_context));	memset(ret, 0, sizeof(ftp_context));	ret->control_file_desc = -1;                /* no control connection yet */	ret->data_file_desc = -1;                   /* no data connection yet */	return ret;}/*** ftp_free_context**      Free the resources allocated for this context** Parameters**      ctxt    Pointer to the ftp_context structure** Returns:     Nothing**/void ftp_free_context(ftp_context_pointer ctxt){	if (ctxt == NULL)		return;	if (ctxt->path != NULL)		free(ctxt->path);	if (ctxt->user)		free(ctxt->user);	if (ctxt->passwd)		free(ctxt->passwd);	if (ctxt->control_file_desc >= 0)		close(ctxt->control_file_desc);	free(ctxt);}/*** ftp_parse_response**      Parses the answer from the server, extracting the numeric code.** Parameters:**      buf     the buffer containing the response*      len     the buffer length** Returns:*     0 for errors*     +XXX for last line of response*     -XXX for response to be continued*/static int ftp_parse_response(char *buf, int len) {	int val = 0;	if (len < 3)		return(-1);	if ((*buf >= '0') && (*buf <= '9'))		val = val * 10 + (*buf - '0');	else		return(0);	buf++;	if ((*buf >= '0') && (*buf <= '9'))		val = val * 10 + (*buf - '0');	else		return(0);	buf++;	if ((*buf >= '0') && (*buf <= '9'))		val = val * 10 + (*buf - '0');	else		return(0);	buf++;	if (*buf == '-')		return(-val);	return(val);}/*** ftp_get_more**      Read more information from the FTP control connection** Parameters:**      ctxt    pointer to an FTP context** Returns the number of bytes read, < 0 indicates an error*/static int ftp_get_more(ftp_context_pointer ctxt) {	int len;	int size;	/* Validate that our context structure is valid */	if ((ctxt == NULL) || (ctxt->control_file_desc < 0))		return(-1);	if ((ctxt->control_buffer_index < 0) || (ctxt->control_buffer_index > FTP_BUF_SIZE))		return(-1);	if ((ctxt->control_buffer_used < 0) || (ctxt->control_buffer_used > FTP_BUF_SIZE))		return(-1);	if (ctxt->control_buffer_index > ctxt->control_buffer_used)		return(-1);	/*	* First pack the control buffer	*/	if (ctxt->control_buffer_index > 0) {		memmove(&ctxt->control_buffer[0],		&ctxt->control_buffer[ctxt->control_buffer_index],		ctxt->control_buffer_used - ctxt->control_buffer_index);		ctxt->control_buffer_used -= ctxt->control_buffer_index;		ctxt->control_buffer_index = 0;	}	size = FTP_BUF_SIZE - ctxt->control_buffer_used;	if (size == 0) {		return(0);	}	/*	* Read the amount left on the control connection	*/	if ((len = recv(ctxt->control_file_desc,	&ctxt->control_buffer[ctxt->control_buffer_index],	size, 0)) < 0) {		motion_log(LOG_ERR, 1, "recv failed in ftp_get_more");		close(ctxt->control_file_desc);		ctxt->control_file_desc = -1;		return(-1);	}	ctxt->control_buffer_used += len;	ctxt->control_buffer[ctxt->control_buffer_used] = 0;	return(len);}/*** ftp_get_response**      Read the response from the FTP server after a command.** Parameters**      ctxt    pointer to an FTP context** Returns the code number*/static int ftp_get_response(ftp_context_pointer ctxt) {	char *ptr, *end;	int len;	int res = -1, cur = -1;	if ((ctxt == NULL) || (ctxt->control_file_desc < 0))	return(-1);	get_more:	/*	* Assumes everything up to control_buffer[control_buffer_index] has been read	* and analyzed.	*/	len = ftp_get_more(ctxt);	if (len < 0) {		return(-1);	}	if ((ctxt->control_buffer_used == 0) && (len == 0)) {		return(-1);	}	ptr = &ctxt->control_buffer[ctxt->control_buffer_index];	end = &ctxt->control_buffer[ctxt->control_buffer_used];	while (ptr < end) {		cur = ftp_parse_response(ptr, end - ptr);		if (cur > 0) {			/*			* Successfully scanned the control code, skip			* till the end of the line, but keep the index to be			* able to analyze the result if needed.			*/			res = cur;			ptr += 3;			ctxt->control_buffer_answer = ptr - ctxt->control_buffer;			while ((ptr < end) && (*ptr != '\n')) ptr++;			if (*ptr == '\n') ptr++;			if (*ptr == '\r') ptr++;			break;		}		while ((ptr < end) && (*ptr != '\n'))		ptr++;		if (ptr >= end) {			ctxt->control_buffer_index = ctxt->control_buffer_used;			goto get_more;		}		if (*ptr != '\r') ptr++;	}	if (res < 0)	goto get_more;	ctxt->control_buffer_index = ptr - ctxt->control_buffer;	return(res / 100);}/*** Send the user authentication*/static int ftp_send_user(ftp_context_pointer ctxt) {	char buf[200];	int len;	int res;	if (ctxt->user == NULL)	snprintf(buf, sizeof(buf), "USER anonymous\r\n");	else	snprintf(buf, sizeof(buf), "USER %s\r\n", ctxt->user);	buf[sizeof(buf) - 1] = 0;	len = strlen(buf);	res = send(ctxt->control_file_desc, buf, len, 0);	if (res < 0) {		motion_log(LOG_ERR, 1, "send failed in ftp_send_user");		return(res);	}	return(0);}/*** Send the password authentication*/static int ftp_send_passwd(ftp_context_pointer ctxt) {	char buf[200];	int len;	int res;	if (ctxt->passwd == NULL)	snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");	else	snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);	buf[sizeof(buf) - 1] = 0;	len = strlen(buf);	res = send(ctxt->control_file_desc, buf, len, 0);	if (res < 0) {		motion_log(LOG_ERR, 1, "send failed in ftp_send_passwd");		return(res);	}	return(0);}/*** ftp_quit**      Send a QUIT command to the server** Parameters:**      ctxt    pointer to an FTP context** Returns -1 in case of error, 0 otherwise*/static int ftp_quit(ftp_context_pointer ctxt) {	char buf[200];	int len, res;	if ((ctxt == NULL) || (ctxt->control_file_desc < 0))	return(-1);	snprintf(buf, sizeof(buf), "QUIT\r\n");	len = strlen(buf);	res = send(ctxt->control_file_desc, buf, len, 0);	if (res < 0) {		motion_log(LOG_ERR, 1, "send failed in ftp_quit");		return(res);	}	return(0);}/*** ftp_connect**      Tries to open a control connection** Parameters:**      ctxt    an FTP context** Returns -1 in case of error, 0 otherwise*/int ftp_connect(netcam_context_ptr netcam) {	ftp_context_pointer ctxt;	struct hostent *hp;	int port;	int res;	int addrlen = sizeof (struct sockaddr_in);	if (netcam == NULL)	return -1;	ctxt = netcam->ftp;	if (ctxt == NULL)	return(-1);	if (netcam->connect_host == NULL)	return(-1);	/*	* do the blocking DNS query.	*/	port = netcam->connect_port;	if (port == 0)	port = 21;	memset (&ctxt->ftp_address, 0, sizeof(ctxt->ftp_address));	hp = gethostbyname (netcam->connect_host);	if (hp == NULL) {		motion_log(LOG_ERR, 1, "gethostbyname failed in ftp_connect");		return (-1);	}	if ((unsigned int) hp->h_length >	sizeof(((struct sockaddr_in *)&ctxt->ftp_address)->sin_addr)) {		motion_log(LOG_ERR, 1, "gethostbyname address mismatch "		"in ftp_connect");		return (-1);	}	/*	* Prepare the socket	*/	((struct sockaddr_in *)&ctxt->ftp_address)->sin_family = AF_INET;	memcpy (&((struct sockaddr_in *)&ctxt->ftp_address)->sin_addr,	hp->h_addr_list[0], hp->h_length);	((struct sockaddr_in *)&ctxt->ftp_address)->sin_port =	(u_short)htons ((unsigned short)port);	ctxt->control_file_desc = socket (AF_INET, SOCK_STREAM, 0);	addrlen = sizeof (struct sockaddr_in);	if (ctxt->control_file_desc < 0) {		motion_log(LOG_ERR, 1, "socket failed");		return(-1);	}	/*	* Do the connect.	*/	if (connect(ctxt->control_file_desc, (struct sockaddr *) &ctxt->ftp_address,	addrlen) < 0) {		motion_log(LOG_ERR, 1, "Failed to create a connection");		close(ctxt->control_file_desc);		ctxt->control_file_desc = -1;		return(-1);	}	/*	* Wait for the HELLO from the server.	*/	res = ftp_get_response(ctxt);	if (res != 2) {		close(ctxt->control_file_desc);		ctxt->control_file_desc = -1;		return(-1);	}	/*	* Do the authentication	*/	res = ftp_send_user(ctxt);	if (res < 0) {		close(ctxt->control_file_desc);		ctxt->control_file_desc = -1;		return(-1);	}	res = ftp_get_response(ctxt);	switch (res) {		case 2:		return(0);		case 3:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产女人18毛片水真多成人如厕| 日韩一区二区在线播放| 亚洲国产激情av| 成人污视频在线观看| 国产视频亚洲色图| 盗摄精品av一区二区三区| 国产女同互慰高潮91漫画| av成人免费在线观看| 亚洲午夜日本在线观看| 911国产精品| 国产一区二区三区在线观看免费| 国产女主播在线一区二区| 色综合亚洲欧洲| 日韩二区在线观看| 久久久蜜桃精品| 日本乱人伦一区| 麻豆中文一区二区| 欧美国产成人精品| 欧美日韩一二区| 九九视频精品免费| 亚洲人成亚洲人成在线观看图片| 欧美在线免费视屏| 久久99久久久欧美国产| 国产精品久久免费看| 欧美天堂亚洲电影院在线播放| 久久成人免费网| 国产精品国产三级国产| 欧美日韩亚州综合| 国产精品影视天天线| 亚洲天堂a在线| 欧美一级欧美三级在线观看| 成人免费视频网站在线观看| 香蕉影视欧美成人| 亚洲国产精品ⅴa在线观看| 欧美女孩性生活视频| 国产成人免费视频一区| 午夜精品久久久久久久99水蜜桃 | 亚洲天堂免费看| 91 com成人网| 91色porny| 黄一区二区三区| 亚洲香蕉伊在人在线观| 中文字幕电影一区| 国产精品久久久久久久久晋中| 欧美精品777| 色哟哟国产精品| 国产传媒日韩欧美成人| 麻豆精品在线视频| 亚洲国产精品一区二区久久| 国产精品美女久久久久久| 日韩美女一区二区三区四区| 欧美自拍偷拍一区| 99久久国产综合精品色伊| 精品一区二区三区在线播放| 亚洲123区在线观看| 亚洲精品视频一区| 国产欧美日韩另类视频免费观看| 欧美成人r级一区二区三区| 欧美性猛片aaaaaaa做受| 99国产麻豆精品| 岛国精品在线播放| 国产成人精品亚洲777人妖| 激情五月婷婷综合| 韩国中文字幕2020精品| 麻豆精品久久久| 美女在线视频一区| 蜜臀av性久久久久av蜜臀妖精| 亚洲成人久久影院| 日日噜噜夜夜狠狠视频欧美人| 一区二区视频在线| 亚洲欧美偷拍卡通变态| 中文字幕一区二区三中文字幕| 国产偷国产偷精品高清尤物| 亚洲精品在线免费播放| 日韩欧美成人一区| 久久亚洲一区二区三区四区| 欧美高清激情brazzers| 欧美日本韩国一区二区三区视频| 在线观看免费成人| 欧美自拍丝袜亚洲| 欧美精品自拍偷拍| 日韩一区二区三区视频| 欧美成人猛片aaaaaaa| 欧美精品一区二区在线观看| 日韩欧美高清一区| 久久综合99re88久久爱| 国产日韩精品一区二区三区 | 国产.精品.日韩.另类.中文.在线.播放| 裸体一区二区三区| 久久精品国产久精国产| 在线看一区二区| 欧美日韩国产美| 欧美一级在线观看| 久久久精品免费免费| 中文字幕av一区 二区| 成人欧美一区二区三区1314| 亚洲制服丝袜一区| 蜜芽一区二区三区| 国产高清精品久久久久| 91欧美一区二区| 欧美日本一区二区三区四区| 精品国产91乱码一区二区三区| 久久亚洲欧美国产精品乐播| 亚洲欧洲日韩综合一区二区| 午夜视频久久久久久| 狠狠色综合日日| 91蜜桃视频在线| 欧美日本在线看| 欧美韩国一区二区| 午夜欧美视频在线观看| 国产剧情一区二区| 日本高清不卡在线观看| 欧美一级搡bbbb搡bbbb| 国产精品电影院| 日本大胆欧美人术艺术动态| 国产麻豆精品theporn| 91福利国产精品| 精品少妇一区二区三区日产乱码 | 91精品国产综合久久久久久久| 欧美精品一区二区久久久| 亚洲另类一区二区| 国模冰冰炮一区二区| 色香色香欲天天天影视综合网| 日韩欧美123| 综合激情网...| 国产精品一区专区| 91久久免费观看| 国产喂奶挤奶一区二区三区| 亚洲一二三四在线观看| 成人免费毛片片v| 日韩欧美一区在线| 一区二区三区自拍| 成人丝袜视频网| 日韩欧美高清在线| 午夜精品久久一牛影视| 91免费版在线| 久久精品一区二区| 蜜桃av一区二区三区电影| 91国内精品野花午夜精品| 国产精品视频一二三区| 美女被吸乳得到大胸91| 欧美日韩一本到| 亚洲黄色免费网站| 99久久夜色精品国产网站| 久久婷婷国产综合国色天香 | 日本sm残虐另类| 欧美在线观看禁18| 亚洲女性喷水在线观看一区| 国产河南妇女毛片精品久久久 | 久久久美女艺术照精彩视频福利播放| 亚洲444eee在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 欧美va亚洲va香蕉在线| 秋霞午夜av一区二区三区| 欧美三区在线观看| 亚洲主播在线播放| 欧美亚洲国产怡红院影院| 亚洲欧美另类小说| 91热门视频在线观看| 亚洲欧美日本在线| 色婷婷综合久久久久中文| 中文字幕日韩一区二区| caoporn国产一区二区| 国产三级久久久| 大美女一区二区三区| 欧美国产欧美综合| 成人av动漫在线| 亚洲免费成人av| 在线中文字幕一区二区| 亚洲第一狼人社区| 欧美久久婷婷综合色| 蜜臀av性久久久久av蜜臀妖精| 日韩欧美中文一区二区| 激情欧美日韩一区二区| 久久久精品2019中文字幕之3| 国产精品系列在线观看| 亚洲国产成人午夜在线一区| 成人国产精品免费观看| 亚洲欧洲综合另类| 欧美日韩中文一区| 男男视频亚洲欧美| 久久久www免费人成精品| 国产69精品久久久久777| 亚洲日本在线视频观看| 欧美少妇性性性| 日本sm残虐另类| 久久精品夜夜夜夜久久| 成人高清免费在线播放| 一区二区三区精密机械公司| 欧美美女一区二区在线观看| 久久不见久久见免费视频7| 亚洲国产精华液网站w| 在线观看亚洲a| 韩国女主播一区二区三区| 中文字幕在线不卡一区二区三区| 欧美午夜精品久久久久久孕妇| 日韩电影免费在线看| 国产精品天干天干在观线| 欧美色涩在线第一页| 国产黑丝在线一区二区三区|