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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ftp.c

?? 站點映像程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*    sitecopy, for managing remote web sites. Generic(ish) FTP routines.   Copyright (C) 1998-99, Joe Orton <joe@orton.demon.co.uk> (except   where otherwise indicated).                                                                        This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.     This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.     You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.     $Id: ftp.c,v 1.12.2.6 1999/08/19 10:26:07 joe Exp $*//* This contains an FTP client implementation. * It performs transparent connection management - it it dies, * it will be reconnected automagically. */#include <config.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/stat.h>#include <netinet/in.h>#include <ctype.h>#include <errno.h>#include <fcntl.h>#include <stdio.h>#include <time.h>#ifdef HAVE_STRING_H#include <string.h>#endif#ifdef HAVE_STRINGS_H#include <strings.h>#endif #ifdef HAVE_STDLIB_H#include <stdlib.h>#endif /* HAVE_STDLIB_H */#ifdef HAVE_UNISTD_H#include <unistd.h>#endif /* HAVE_UNISTD_H */#ifndef HAVE_SNPRINTF#include "snprintf.h"#endif#include "common.h"#include "frontend.h"#include "ftp.h"#include "protocol.h"#include "socket.h"char ftp_error[BUFSIZ];bool ftp_use_passive = true; /* whether we use PASV mode or not *//* The address of the server for the DTP connection -  * this goes here because it's got from ftp_read() rather than in a decent * manner */unsigned short ftp_dtp_port;struct in_addr ftp_dtp_addr;int ftp_dtp_socket;struct in_addr ftp_pi_addr;unsigned short ftp_pi_port;int ftp_pi_socket;bool ftp_connection; /* true when open *//* Reply codes - these are returned by internal functions, * ftp_exec and ftp_open mainly. */#define FTP_OK 0#define FTP_NEEDPASSWORD 1#define FTP_PASSIVE 2#define FTP_READY 3#define FTP_FILEMORE 4#define FTP_MODTIME 5#define FTP_SENT 6#define FTP_CLOSED 101#define FTP_FILEBAD 102#define FTP_CONNECT 992#define FTP_HELLO 993#define FTP_LOGIN 994#define FTP_BROKEN 995#define FTP_DENIED 996#define FTP_UNSUPPORTED 997#define FTP_NOPASSIVE 998#define FTP_ERROR 999/* time from MDTM response */time_t ftp_modtime;/* remember these... we may have to log in more than once. */char *ftp_username, *ftp_password;/* Stores the current transfer type is: *  -1: Unknown *   0: Binary *   1: ASCII */int ftp_using_ascii;/* Opens the control connection if necessary. * Returns: *   FTP_OK on success *   FTP_CONNECT on failed socket connect *   FTP_HELLO if the greeting message couldn't be read *   FTP_LOGIN on failed login */int ftp_open( void );int ftp_close( void );int ftp_fetch_gettree( const char *startdir, struct proto_file_t **files );int ftp_fetch_walktree( const char *rotodir, struct proto_file_t *files );int ftp_login( void ); /* Performs the login procedure */int ftp_settype( bool ascii );int ftp_active_open(const char * );int ftp_data_open( const char * ); /* Opens the data connection */int ftp_data_close( void ); /* Closes the data connection */int ftp_connect_pasv( void );int ftp_read_pasv( const char * ); /* Used by ftp_response to get the remote IP */int ftp_read_mdtm( const char *response );int ftp_response( const char *, const int ); /* Gets the return code */int get_reply_code( const char * ); /* Used by ftp_response to get the actual code */int ftp_exec( const char * ); /* Executes given command, reads response */int ftp_read( void );/* Initializes the driver + connection. * Returns PROTO_OK on success, or PROTO_LOOKUP if the hostname * could not be resolved. */int ftp_init( const char *remote_root, 	      struct proto_host_t *server, struct proto_host_t *proxy ) {    ftp_pi_port = server->port;    fe_connection( fe_namelookup );    if( host_lookup( server->hostname, &ftp_pi_addr ) )	return PROTO_LOOKUP;    ftp_username = server->username;    ftp_password = server->password;    ftp_connection = false;    ftp_using_ascii = -1; /* unknown */    switch( ftp_open() ) {    case FTP_CONNECT:    case FTP_HELLO:	return PROTO_CONNECT;    case FTP_LOGIN:	return PROTO_AUTH;    default:	return PROTO_OK;    }}/* Cleans up and closes the control connection. * Returns PROTO_OK if the connection is closed, else PROTO_ERROR; */int ftp_finish( void ) {    if( ftp_connection )	if( ftp_close( ) != FTP_CLOSED )	    return PROTO_ERROR;    return PROTO_OK;}/* Closes the PI connection. */int ftp_close( ) {    int ret;    ret = ftp_exec( "QUIT" );    close( ftp_pi_socket );    ftp_connection = false; /* although it should have been done already */    return ret;}/* Creates the given directory * FTP state response */int ftp_mkdir( const char *dir ) {    char command[BUFSIZ];    snprintf( command, BUFSIZ, "MKD %s", dir );    if( ftp_exec( command ) == FTP_OK ) {	return PROTO_OK;    } else {	return PROTO_ERROR;    }} /* Renames or moves a file */int ftp_move( const char *from, const char *to ) {    char command[BUFSIZ];    snprintf( command, BUFSIZ, "RNFR %s", from );    if( ftp_exec( command ) == FTP_FILEMORE ) {	snprintf( command, BUFSIZ, "RNTO %s", to );	if( ftp_exec( command ) == PROTO_OK ) {	    return PROTO_OK;	}    }    return PROTO_ERROR;}int ftp_delete( const char *filename ) {    char command[BUFSIZ];    snprintf( command, BUFSIZ, "DELE %s", filename );    if( ftp_exec( command ) == FTP_OK ) {	return PROTO_OK;    } else {	return PROTO_ERROR;    }}int ftp_rmdir( const char *filename ) {    char command[BUFSIZ];    snprintf( command, BUFSIZ, "RMD %s", filename );    if( ftp_exec( command ) == FTP_OK ) {	return PROTO_OK;    } else {	return PROTO_ERROR;    }}/* FTP non-PASV mode open */int ftp_active_open(const char *command) {    char *a, *p;    int ret;    ksize_t slen;    int listener;    char cmd[BUFSIZ];    struct sockaddr_in gotaddr;    struct sockaddr_in localaddr;    if( ftp_open( ) != FTP_OK ) return FTP_ERROR;        slen = sizeof( localaddr );    if( getsockname( ftp_pi_socket, (struct sockaddr *)&localaddr, &slen ) < 0 ) {	ftp_seterror_err( "Could not get socket name" );	return FTP_ERROR;    }    /* But let bind pick a random port for us to use */    localaddr.sin_port = 0;    /* Create a local socket to accept the connection on */    listener = socket( AF_INET, SOCK_STREAM, 0 );    if ( listener < 0 ) {	ftp_seterror_err( "Could not create socket" );	return FTP_ERROR;    }    /* Bind it to a port. */    if ( bind(listener, (struct sockaddr *)&localaddr, sizeof(struct sockaddr_in)) < 0 ) {	ftp_seterror_err( "Could not bind socket." );	close( listener );	return FTP_ERROR;    }    slen = sizeof( struct sockaddr_in );    if (getsockname(listener, (struct sockaddr *)&gotaddr, &slen) < 0) {	ftp_seterror_err( "Could get get name of socket" );	close( listener );	return FTP_ERROR;    }    if (listen(listener, 1) < 0) {	ftp_seterror_err( "Could not listen for connection" );	close( listener );	return FTP_ERROR;    }    /* Let the remote end know the address of our port.     * Q(joe): Will this actually work on differently-endian machines?      */#define	UC(b)	(((int)b)&0xff)    a = (char *)&gotaddr.sin_addr.s_addr;    p = (char *)&gotaddr.sin_port;        snprintf(cmd, BUFSIZ, "PORT %d,%d,%d,%d,%d,%d",	     UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),	     UC(p[0]), UC(p[1]) );    /* Execute the PORT command */    ret = ftp_exec(cmd);    if( ret != FTP_OK ) {	/* Failed to execute the PORT command - close the socket */	DEBUG( DEBUG_FTP, "PORT command failed.\n" );	close( listener );	return ret;    }    /* Send the command.  This will make the remote end     * initiate the connection.     */    ret = ftp_exec(command);        if( ret != FTP_READY ) {	/* Do they want it? */	DEBUG( DEBUG_FTP, "Command failed.\n" );	close( listener );	return ret;    }    /* Now wait for a connection from the remote end.     */    ftp_dtp_socket = accept( listener, NULL, NULL );    if (ftp_dtp_socket < 0) {	close( listener );	ftp_seterror_err( "Could not accept connection" );	return FTP_ERROR;    }    close( listener );        return ret;}int ftp_chmod( const char *filename, const mode_t mode ) {    char command[BUFSIZ];    snprintf( command, BUFSIZ, "SITE CHMOD %3o %s", mode & 0777, filename );    if( ftp_exec( command ) == FTP_OK ) {	return PROTO_OK;    } else {	return PROTO_ERROR;    }}int ftp_data_open( const char *command ) {    int ret;    if( ftp_use_passive ) {	ret = ftp_exec( "PASV" );	if( ret == FTP_PASSIVE ) {	    if( ftp_connect_pasv( ) ) {		return ftp_exec( command );	    } else {		return FTP_ERROR;	    }	} else {	    return FTP_NOPASSIVE;	}    } else {	/* we are not using passive mode. */	return ftp_active_open(command);    }}/* Closes the data connection */int ftp_data_close( ) {    /* Read the response line */    if( close( ftp_dtp_socket ) < 0 ) {	ftp_seterror_err( "Error closing data socket" );	return FTP_ERROR;    } else {	return ftp_read();    }}/* Set the transfer type appropriately. * Only set it if it *needs* setting, though. * Returns FTP_OK on success, or something else otherwise. */int ftp_settype( bool ascii ) {    int newascii, ret;    newascii = ascii?1:0;    if( (ftp_using_ascii == -1) || (newascii != ftp_using_ascii ) ) {	ret = ftp_exec( ascii?"TYPE A":"TYPE I" );	if( ret == FTP_OK ) {	    ftp_using_ascii = newascii;	} else {	    ftp_using_ascii = -1; /* unknown */	}    } else {	ret = FTP_OK;    }    return ret;}/* upload the given file */int ftp_put( const char *localfile, const char *remotefile, const bool ascii ) {    char command[BUFSIZ];    /* Set the transfer type correctly */    if( ftp_settype( ascii ) != FTP_OK )	return PROTO_ERROR;    snprintf( command, BUFSIZ, "STOR %s", remotefile );    if( ftp_data_open( command ) == FTP_READY ) {	int ret;	/* Send the file. FIXME: We rely on the server's return	 * code to determine whether the transfer was successful. */	if( ascii ) {	    ret = send_file_ascii( ftp_dtp_socket, localfile );	} else {	    ret = send_file_binary( ftp_dtp_socket, localfile );	}	if( ret > 0 ) { 	    DEBUG( DEBUG_FTP, "Error sending file... ignoring.\n" );	}	if( ftp_data_close( ) == FTP_SENT ) {	    return PROTO_OK;	}    }    return PROTO_ERROR;}/* Slightly dodgy ftp_get in that you need to know the remote file * size. Works, but not very generic. */int ftp_get( const char *localfile, const char *remotefile, 	     const int remotesize, const bool ascii ) {    char command[BUFSIZ];    int ret;    if(ascii) strcpy( command, "TYPE A" );    else strcpy( command, "TYPE I");    ret = ftp_exec( command );    snprintf( command, BUFSIZ, "RETR %s", remotefile );    if( ftp_data_open( command ) == FTP_READY ) {	/* send the file */	recv_file( ftp_dtp_socket, localfile, remotesize );	if( ftp_data_close( ) == FTP_SENT ) {	    return PROTO_OK;	}    }    return PROTO_ERROR;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费va视频| 久久久久国产免费免费| 91精品国产91久久久久久最新毛片| 欧美一区二区高清| 一区二区高清免费观看影视大全| 秋霞电影网一区二区| 99久久精品国产导航| 久久奇米777| 丝袜美腿亚洲一区二区图片| 91看片淫黄大片一级| 日韩精品一区二| 喷白浆一区二区| 欧美精品高清视频| 亚洲成人自拍一区| 一本一道波多野结衣一区二区| 久久久精品欧美丰满| 精品亚洲porn| 91精品国产乱码| 亚洲福中文字幕伊人影院| 99久久伊人精品| 欧美极品aⅴ影院| 国v精品久久久网| 精品国产一区二区三区不卡| 日韩国产欧美在线视频| 欧美日韩在线综合| 亚洲国产精品一区二区久久恐怖片 | 欧美精品aⅴ在线视频| 中文字幕中文字幕一区| 国产91对白在线观看九色| 26uuu另类欧美| 久久福利资源站| 日韩欧美中文字幕制服| 日韩av午夜在线观看| 欧美人伦禁忌dvd放荡欲情| 亚洲国产精品久久一线不卡| 欧洲色大大久久| 亚洲午夜国产一区99re久久| 欧美亚洲动漫制服丝袜| 午夜精品久久一牛影视| 日韩一区二区三区在线观看| 美女视频黄免费的久久 | 欧美日韩一区在线观看| 一区二区三区日本| 欧美日韩一区二区三区在线| 天堂av在线一区| 欧美变态口味重另类| 国产麻豆精品一区二区| 欧美激情一区二区三区蜜桃视频 | 在线免费不卡电影| 亚洲成av人片| 欧美精品一区二区三区久久久| 麻豆精品视频在线观看免费| 久久精品夜夜夜夜久久| 99久久综合色| 午夜精品免费在线观看| 久久综合久久综合亚洲| av网站免费线看精品| 午夜激情一区二区| 久久嫩草精品久久久精品一| 99久久综合狠狠综合久久| 亚洲国产视频a| 久久久.com| 一本到三区不卡视频| 日韩高清不卡一区| 国产精品久久久久影院老司| 欧美日韩精品一区二区三区| 激情五月激情综合网| 亚洲婷婷综合久久一本伊一区 | 北岛玲一区二区三区四区| 亚洲一区二区在线视频| 精品免费一区二区三区| 国产不卡在线播放| 日韩av电影天堂| 日本一区二区视频在线| 欧美视频在线播放| 岛国精品一区二区| 日韩成人免费电影| 中文字幕在线不卡一区| 欧美一卡在线观看| 91国偷自产一区二区使用方法| 国产电影一区在线| 日本最新不卡在线| 一区二区三区国产精品| 久久久三级国产网站| 欧美日韩精品一区二区三区四区| 粉嫩在线一区二区三区视频| 青青草原综合久久大伊人精品优势 | 日韩欧美一级精品久久| 色综合久久久久久久| 国产一区二区毛片| 青青青爽久久午夜综合久久午夜| 亚洲色图色小说| 欧美高清在线视频| 欧美成人精精品一区二区频| 欧美日韩激情一区二区三区| 91香蕉国产在线观看软件| 国产suv精品一区二区三区| 免费xxxx性欧美18vr| 一区二区三区中文字幕| 国产精品久久毛片av大全日韩| 欧美一区二区三区精品| 色就色 综合激情| 亚洲大型综合色站| 日韩电影免费在线看| 国产精品欧美一级免费| 欧美电影免费提供在线观看| 欧美精品一卡两卡| 欧美性受xxxx黑人xyx性爽| a级高清视频欧美日韩| 国产精品综合一区二区| 激情五月婷婷综合| 国产一区二区三区高清播放| 精品亚洲国内自在自线福利| 精品在线播放午夜| 精品夜夜嗨av一区二区三区| 另类中文字幕网| 激情综合色播五月| 麻豆91在线看| 国内精品伊人久久久久av一坑 | 国产欧美精品日韩区二区麻豆天美| 欧美一级久久久久久久大片| 欧美丰满少妇xxxbbb| 69堂国产成人免费视频| 91精品国产福利在线观看| 精品欧美久久久| 欧美激情在线一区二区三区| 中文字幕高清不卡| 中文字幕亚洲区| 亚洲一区二区三区四区不卡| 午夜久久福利影院| 久久精品久久99精品久久| 国产乱理伦片在线观看夜一区 | 国产中文字幕一区| 岛国一区二区在线观看| 色拍拍在线精品视频8848| 欧美男男青年gay1069videost| 欧美一区二区三区公司| 久久精品人人做人人综合| 中文字幕亚洲视频| 日韩二区在线观看| 国产精品 欧美精品| 色偷偷久久人人79超碰人人澡| 欧美日韩国产a| 久久精品无码一区二区三区| 亚洲欧美日韩中文播放 | 亚洲六月丁香色婷婷综合久久 | 成人蜜臀av电影| 日本道色综合久久| 精品成人一区二区三区四区| 中文成人av在线| 五月天精品一区二区三区| 国产精品资源站在线| 欧美视频在线一区二区三区 | 伊人开心综合网| 日本不卡高清视频| www.日韩精品| 欧美一级日韩不卡播放免费| 国产精品久久久一区麻豆最新章节| 一区二区三区精品在线观看| 国内精品久久久久影院色| 欧美午夜在线一二页| 国产欧美一区二区精品性色超碰| 亚洲精品一卡二卡| 国产成人精品一区二区三区网站观看 | 成人手机在线视频| 91精品国产丝袜白色高跟鞋| 国产精品灌醉下药二区| 蜜臀av国产精品久久久久| 91一区在线观看| 欧美精品一区二| 日本 国产 欧美色综合| 日本精品免费观看高清观看| 欧美激情一区二区三区全黄| 美国毛片一区二区三区| 欧美日韩精品福利| 亚洲欧美区自拍先锋| 成人在线视频一区| 欧美精品一区二区三区在线播放 | 亚洲天堂a在线| 国产精品一区二区你懂的| 欧美精品1区2区3区| 一区二区三区不卡视频| 播五月开心婷婷综合| 国产日韩精品一区| 麻豆精品视频在线观看视频| 欧美日韩极品在线观看一区| 亚洲老司机在线| 色综合久久中文字幕综合网| 欧美国产在线观看| 国产成人8x视频一区二区 | 中文字幕亚洲综合久久菠萝蜜| 激情六月婷婷久久| 91精品国产高清一区二区三区| 亚洲国产精品久久不卡毛片| 色嗨嗨av一区二区三区| 亚洲欧美日韩国产一区二区三区 | 91精品国产色综合久久不卡电影| 亚洲电影第三页| 欧美唯美清纯偷拍| 亚洲国产综合人成综合网站|