/* * File: main.c * Author: ivan * * Created on 21 Август 2007 г., 20:17 */ #include #include #include #include #include #include #include #include #include #include #include "kach.h" char* GetString(); int main(int argc, char** argv) { // ИНИЦИАЛИЗАЦИЯ FILE *fp = fopen("ulist","r"); if(fp==NULL) { printf("Не могу открыть файл со списком URL!\n"); exit(1); } printf("%s","Читаю файл URL...\n"); struct Zakachka zCur; size_t L,zCount; struct Zakachka zAr[MAXURLs]; int index = 0; char *url,*user,*pass; url=malloc(MAXLINE); while (fgets(url,MAXLINE,fp)!=NULL) { if(index==MAXURLs) { printf("Ссылок больше %d! Последняя используемая ссылка: %s",MAXURLs,zAr[MAXURLs-1].URL); break; } L=strlen(url); if((int)url[L-1]==(int)'\n') url[L-1]=0; if(url==NULL) continue; if(strncmp(url,"%",1)==0) { // строка с логином и паролем url++; // убрать первый символ char *tokens=strtok(url,UPASS_DELIM); if((tokens==NULL)||(*tokens==(int)'\n')) { if(user!=NULL) { free(user); user=""; } if(pass!=NULL) { free(pass); pass=""; } continue; } char *u=tokens; char *p=strtok(NULL,UPASS_DELIM); if((p==NULL)||(*p==(int)'\n')) { if(pass!=NULL) { free(pass); pass=""; } continue; } L=strlen(u); user=malloc(L); strncpy(user,u,L); L=strlen(p); pass=malloc(L); strncpy(pass,p,L); continue; } printf("%s\n",url); L=strlen(url); zCur.URL=malloc(L+1); strncpy(zCur.URL,url,L); // найдем домен... char *domen,*tmp; L=strlen(url); tmp=malloc(L+1); strncpy(tmp,url,L); domen=strtok(tmp,"/"); if(domen==NULL) domen=url; if(strcmp(domen,"http:")==0) domen=strtok(NULL,"/"); free(tmp); L=strlen(domen); zCur.Domen=(char *)malloc(L+1); strncpy(zCur.Domen,domen,L); // вычислим короткое название файл // далее... if(user!="") { L=strlen(user); zCur.User=(char *)malloc(L+1); strncpy(zCur.User,user,L); } if(pass!="") { L=strlen(pass); zCur.Password=(char *)malloc(L+1); strncpy(zCur.Password,pass,L); } zCur.Path=""; zCur.ArchiveStatus=0; zCur.Tries=0; zAr[index]=zCur; index++; } fclose(fp); zCount=index; printf("Найдено %d ссылок для скачивания\n",zCount); // CКАЧИВАНИЕ struct sockaddr_in servadd; // номер запроса struct hostent *hp; // используется для получения номера int sock_id; //,sock_fd; // сокет и его дескриптор char message[BUFSIZ]; int messlen; int i; for(i=0; ih_addr,(struct sockaddr *)&servadd.sin_addr,hp->h_length); servadd.sin_port=htons(atoi("80")); // занести номер порта servadd.sin_family=AF_INET; if(connect(sock_id,(struct sockaddr *)&servadd,sizeof(servadd))!=0) { printf("Не соединились с %s\n",url); continue; } // Connect // Передача данных messlen=read(sock_id,message,BUFSIZ); if(messlen==-1) { printf("Не могу получить данные с %s\n",url); continue; } if(write(1,message,messlen)!=messlen) { printf("Не могу записать файл с %s\n",url); continue; } // запись на stdout close(sock_id); printf("Файл %s скачан, длина %d\n",url,messlen); // записать в лог... } // ВЫХОД // Очистка памяти for(i=0; i