Программирование >>  Формирование пользовательского контейнера 

1 ... 66 67 68 [ 69 ] 70 71 72 ... 156


функция ishttpO

jCaK отмечалось, в зафузчике файлов из Интернета поддерживается только загрузка файлов с помошью протокола HTTP. В классе Download для подтверждения указания этого протокола в URL-адресе используется приведенная далее функция ishttpO.

Подтверждает, что в URL-адресе задан HTTP, jjool Download: : ishttp(char *url) { char str[5] =

Получает первые 4 символа из URL. stmcpy(str, url, 4);

Преобразует их в нижний регистр

for (char *p=str; *р; р++) *р = tolower(*р);

return IstrcitpChttp , str);

Действия функции ishttpO понятны. Она просто проверяет, содержат ли первые четыре символа в URL-адресе строку http . Если это так, функция возврашает true, в противном случае - false.

Функция httpverOKO

функция httpverOKO, приведенная далее, проверяет, поддерживает ли протокол HTTP версии 1Л сервер, обрабатывающий запрос.

Возвращает true, если у протокола HTTP версия 1.1 или больше, bool Download: :httpverOK(HINTERNET hlurl) {

char str[80];

unsigned long len =79;

Получает версию протокола HTTP.

if (HttpQueryinfо(hlurl, HTTP QUERY VERSION, &str, &len, NULL)) return false;

Сначала проверяет главный номер версии HTTP, char *р = strchr(str, /);

P++;

if(*p == -О) return false; не может использовать HTTP 0.x



Теперь находит начало младшего номера версии http.

р = strchr(str, .);

Р++;

Преобразует в тип int. int minorVerNuiti = atoi (p) ;

if (minorVerNLun > 0) return true; return false;

Функции httpverOKO передается дескриптор URL-адреса. Далее извлекается

версия HTTP (в строковой форме) с помощью вызова функции HttpQueryinfoo

для этого дескриптора и задания константы http query version, которая запрашивает информацию о версии. Этот запрос сохраняет строку с номером версии в переменной str. В случае протокола HTTP версии 1.1 строка будет выглядеть следующим образом:

НТТР/1.1

функция устанавливает переменную р для указания на символ / с помощью вызова функции strchr о из стандартной библиотеки. Та, в свою очередь, увеличивает указатель р на единицу и подтверждает, что он ссылается на цифру, отличную от нуля. Далее находится указатель на точку, отделяющую номер главной версии от номера подверсии, и затем указатель перемещается для ссылки на начало числа, следующего за точкой. В завершение, это строковое значение с помощью стандартной библиотечной функции atoi о преобразуется в целое число. Если номер подверсии не меньше 1, версия протокола HTTP не меньше 1.1.

Функция getfnameO

Функция getfnameO, Приведенная далее, извлекает имя файла из URL-адреса.

Выделяет имя файла из url-адреса. Возвращает false, если

имя файла не может быть найдено.

bool Download::getfname(char *url, char *fname) {

Находит последний слэш (/).

char *p = strrchr(url, /);

Копирует имя файла после последнего знака /. if(р && (Strlen(p) < max filename size)) {



Функция openfileO

Функция openfileO открывает на диске файл, в который будет записан файл, зафужаемый из Интернета. Она также возврашает длину любого уже имеющегося на диске файла с тем же именем. Далее приведен код функции.

Открывает файл вьюода, инициализирует поток

вывода и возврашает длину файла. Если

reload имеет значение true, сначала укорачивается

до нуля любой уже существующий файл.

unsigned long Download::openfile(char *url,

bool reload,

ofstream &fout) {

char fname[MAX FILENAME SIZE] ;

if {! getfname (url, fname))

throw DLExc( File name error. );

if(reload)

fout.open(fname, ios:: binary ios::out ios::app ios::ate);

else

fout.open(fname, ios::binary ios::out ios: : trxmc) ;

if(!fout)

Р++;

strcpy (fname, р) ; return true;

else

return false;

В функцию передается указатель на строку, содержащую URL-адрес, и указатель на символьный массив, в котором будет храниться имя файла после завершения функции. Предполагается, что имя файла - это часть URL-адреса между последним символом / и концом строки. Функция возвращает true в случае успешного завершения, и false, если имя файла не может быть найдено.



1 ... 66 67 68 [ 69 ] 70 71 72 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика