?? ftphttp.c
字號:
static char rcsid[] = "$Id:";/* $Log: FtpHTTP.c,v $ * Revision 5.0 1995/12/10 10:28:38 orel * LIBFTP Version 5.0 (Distributed revision) * * Revision 1.2 1995/12/02 11:23:07 orel * *** empty log message *** * * Revision 1.1 1995/11/21 21:44:20 orel * Initial revision **//* Library for ftpd clients.(libftp) Copyright by Oleg Orel All rights reserved. This library is desined for free, non-commercial software creation. It is changeable and can be improved. The author would greatly appreciate any advises, new components and patches of the existing programs.Commercial usage is also possible with participation of it's author.*/#include "FtpLibrary.h"#include <sys/file.h>static char ContextLenght[]="Content-Length: ";STATUS FtpHttpGet(char* server,int port,char *spec, char *newfile){ struct sockaddr_in unit; register struct hostent *host; register int new_socket; char buf[16*1024]; register int n; FILE *fp, *sock; register char *p; register int counter; int ContextLenghtLenght=strlen(ContextLenght); int LenghtOfFile=-1; if ((host=FtpGetHost(server))==NULL) return QUIT; unit.sin_family = host -> h_addrtype; /* AF_INET */ bcopy(host-> h_addr_list[0],(char *)&unit.sin_addr,host->h_length); if ( ( new_socket = socket ( unit.sin_family , SOCK_STREAM , 0)) < 0) return QUIT; unit.sin_port = htons(port); while ( connect ( new_socket , (struct sockaddr*) &unit , sizeof unit ) < 0 ) { host -> h_addr_list ++; if (host -> h_addr_list[0]==NULL) { close(new_socket); return QUIT; } bcopy(host -> h_addr_list[0],(char *)&unit,host->h_length); close(new_socket); if ( ( new_socket = socket ( unit.sin_family , SOCK_STREAM , 0)) < 0) { close(new_socket); return QUIT; } } sock=fdopen(new_socket,"r+"); if (fprintf(sock, "GET %s HTTP/1.0\r\nAccept: */*\r\nUserAgent: LIBFTP\r\n\r\n", spec)!=0) { shutdown(new_socket,2); fclose(sock); return QUIT; } fflush(sock); p=strrchr(spec,'/'); if ( ((newfile==NULL) || !*newfile) && p!=NULL) strcpy(newfile,++p); if ((fp=fopen(newfile,"w+"))==NULL) { shutdown(new_socket,2); close(new_socket); return LQUIT; } while ( (fgets(buf,sizeof buf,sock))!=NULL ) { if (FtpInit.debug!=NULL) printf("%s",buf); if (strstr(buf,"Internal error")!=NULL) return ENOENT; if (!strncmp(ContextLenght,buf,ContextLenghtLenght)) { sscanf (buf,"Context-Lenght: %d",&LenghtOfFile); } if (buf[0]==Ctrl('M') && buf[1]=='\n' && buf[2]==0) break; } for (counter=0; (n=getc(sock))!=EOF ; counter++) if (putc(n,fp)==EOF) { fclose(fp); shutdown(new_socket,2); fclose(sock); return LQUIT; } fclose(fp); shutdown(new_socket,2); fclose(sock); if (counter==LenghtOfFile || LenghtOfFile == -1 ) return OK; return QUIT;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -