Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Просто загрузить и вывести txt файл по http 
:(
    Опции темы
Валерия
Дата 25.4.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Интересует аналог
Код

<?
readfile("http://ya.ru");
?>

На C++ ©
Под никсы.
PM MAIL   Вверх
bilbobagginz
Дата 25.4.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



если вопрос о програмном перекаче - выбирается нужная библиотека, и на ней катаешься. напр. libcurl (она на C, но есть какая-то бета для C++ - curlcpp )
если просто командой нужно притащить файл, смотри следующий совет.





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
JackYF
Дата 25.4.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



netcat

Добавлено через 17 секунд
`wget <url> -O-`


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Валерия
Дата 25.4.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



А из чегото стандартного, что бы не ставить дополнительно библиотек?
PM MAIL   Вверх
MAKCim
Дата 25.4.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  25.4.2008,  21:37 Найти цитируемый пост)
А из чегото стандартного, что бы не ставить дополнительно библиотек? 

а из стандартного только сокеты домена AF_INET типа SOCK_STREAM
но в этом случае тебе будет нужно самой формировать HTTP-запрос


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 25.4.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Спасибо smile
Та формирывать мне влень, просто со сниффера http заголовков скопирую, уже fsockopen/fputs/fgets в php юзала smile
А можно примерчик или сцылочку?)
А то я находила максимум как просто подсоедениться кудато на какойто айпи и порт и всё)

Это сообщение отредактировал(а) Валерия - 25.4.2008, 22:07
PM MAIL   Вверх
bilbobagginz
Дата 25.4.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



Цитата(Валерия @  25.4.2008,  22:06 Найти цитируемый пост)
А можно примерчик или сцылочку?)

качай libcurl, и там есть примерчиков по самое не хочу.
также есть программка wget, её сорс тоже можно скачать (open source)




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
MAKCim
Дата 25.4.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  25.4.2008,  22:06 Найти цитируемый пост)
А можно примерчик или сцылочку?)

Код

struct sockaddr_in addr;
struct hostent * hostent;
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
hostent = gethostbyname("ya.ru");
addr.sin_addr.s_addr = *(u_int32_t*)hostent -> h_addr;
connect(socket_fd, (const struct sockaddr*)&addr, sizeof(struct sockaddr_in));
/* формируем HTTP-запрос в buffer */
char buffer[4096];
size_t size;
...
write(socket_fd, buffer, size); /* запрос */
read(socket_fd, buffer, 4096); /* получение ответа */




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 25.4.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Делаю так.
Код

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>



int main(){
 

struct sockaddr_in addr;
struct hostent * hostent;
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
hostent = gethostbyname("ya.ru");
addr.sin_addr.s_addr = *(u_int32_t*)hostent -> h_addr;
connect(socket_fd, (const struct sockaddr*)&addr, sizeof(struct sockaddr_in));

char buffer[4096] = "GET / HTTP/1.1\r\nHost: ya.ru\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nAccept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\nAccept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nIf-Modified-Since: Thu, 20 Mar 2008 15:25:24 GMT\r\nCache-Control: max-age=0\r\n\r\n";
char buffer2[4096];

write(socket_fd, buffer, 4096);
read(socket_fd, buffer2, 4096);
printf("%s", buffer2);

return 0;
}

Но всё зависает нафик, причем если не делаю read то норм заканчиваеться. Т.е не выходит вытянуть ответ.

Это сообщение отредактировал(а) Валерия - 25.4.2008, 23:52
PM MAIL   Вверх
MAKCim
Дата 26.4.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Валерия, 
Код

write(socket_fd, buffer, strlen(buffer));
read(socket_fd, buffer2, 4096);
printf("%s", buffer2);




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 26.4.2008, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Спасибо, я до этого использовала сайз оф
А какая функция альтернативы feof для сокетов?
Т.е мне нужно в буфер забрасывать по 4096 пока не дойдет до конца
PM MAIL   Вверх
MAKCim
Дата 26.4.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  26.4.2008,  01:25 Найти цитируемый пост)
А какая функция альтернативы feof для сокетов?

read() возвращает 0
Цитата(Валерия @  26.4.2008,  01:25 Найти цитируемый пост)
Т.е мне нужно в буфер забрасывать по 4096 пока не дойдет до конца 

в рамках одного HTTP-запроса?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 26.4.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Валерия, 
Для сокетов лучше юзать send/recv

Добавлено через 10 минут и 17 секунд
Далее.
Нельзя писать ВЕСЬ буфер. Нужно посчитать длину строки (strlen) и записывать полученное количество байт. Плюс я ещё бы добавил shutdown, но это на любителя...

Добавлено через 13 минут и 27 секунд
Да, ещё, для HTTP/1.1 простого чтения ответа недостаточно. Там есть такая вещь, как "кусочковая передача" (извините, не знаю как по-русски "chunked" smile )

Это сообщение отредактировал(а) GrayCardinal - 26.4.2008, 16:37


--------------------
PM MAIL WWW   Вверх
Валерия
Дата 26.4.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(MAKCim @  26.4.2008,  09:33 Найти цитируемый пост)
в рамках одного HTTP-запроса?

да.
Цитата(GrayCardinal @  26.4.2008,  16:30 Найти цитируемый пост)
Для сокетов лучше юзать send/recv

чем лучше?
PM MAIL   Вверх
MAKCim
Дата 26.4.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  26.4.2008,  21:53 Найти цитируемый пост)
да.

Код

int flags = MSG_MORE;
while (1) {
    if (<все передали>)
        break;
    send(socket_fd, <данные>, <размер данных>, flags);
    if (<осталось вызвать send один раз>)
        flags = 0;
}





--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 27.4.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Валерия, 
Тем что они для этого предназначены smile


--------------------
PM MAIL WWW   Вверх
Валерия
Дата 27.4.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Так что поповоду того что бы вывести не 4096 байт а все?
Даже если я подряд пишу несколько раз read  - выводит одно и тоже, заголовок и кусочек html
PM MAIL   Вверх
MAKCim
Дата 27.4.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  27.4.2008,  14:35 Найти цитируемый пост)
Так что поповоду того что бы вывести не 4096 байт а все?

Код

ssize_t size;
while ((size = read(socket_fd, buffer2, 4096)) > 0)
    write(STDOUT_FILENO, buffer2, size);



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 27.4.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Разобралась, всем спасибо, особенно MAKCim))
Еще такой вопрос в догонку, если я не знаю сколько будет весить страничка, то что бы не выделять сильно много буфера, как при каждом записывании n байт в него, всё время увеличивать значение all?
PM MAIL   Вверх
MAKCim
Дата 27.4.2008, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  27.4.2008,  19:49 Найти цитируемый пост)
как при каждом записывании n байт в него, всё время увеличивать значение all? 

что за all?
что за буфер?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 27.4.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(MAKCim @  27.4.2008,  20:19 Найти цитируемый пост)
что за all?что за буфер?

Упс, я до этого сообщение набрала что не получалось, но потом сама разобралась и не отправила smile
Код

    char host[] = "ya.ru";
    char path[] = "/";

    struct sockaddr_in addr;
    struct hostent * hostent;
    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    hostent = gethostbyname(host);
    addr.sin_addr.s_addr = *(u_int32_t*)hostent -> h_addr;
    connect(socket_fd, (const struct sockaddr*)&addr, sizeof(struct sockaddr_in));


    char all[100000] = "";
    char buffer[4096] = "";
    strcat(buffer, "GET ");
    strcat(buffer, path);
    strcat(buffer, " HTTP/1.1\r\n");
    strcat(buffer, "Host: ");
    strcat(buffer, host);
    strcat(buffer, "\r\n\r\n");

    char buffer2[4096]; 

    ssize_t size;
    send(socket_fd, buffer, strlen(buffer), 0);

    while ((size = recv(socket_fd, buffer2, 4096, 0)) > 0 ){
        strcat(all, buffer2);
    }
    printf("%s", all);
    return 0;

Так вот, если я пишу all[100000] то выделяет 100 кб под это дело, а мне нужно что бы переменная all по мере забития в неё bufer2 постоянно увеличивалась)
Да и оператор new не пашет(
Для него подключать нужно что то?
И вообще, лучше всего киньте ссылкой на е-книгу на русском по программингу под линукс, а то я раньше писала под dos на турбо си, так не всё катит здесь что катило там...
PM MAIL   Вверх
MAKCim
Дата 28.4.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  27.4.2008,  21:19 Найти цитируемый пост)
Так вот, если я пишу all[100000] то выделяет 100 кб под это дело, а мне нужно что бы переменная all по мере забития в неё bufer2 постоянно увеличивалась)

обязательно все данные записывать в массив?
можно по мере их поступления осуществлять вывод

Цитата(Валерия @  27.4.2008,  21:19 Найти цитируемый пост)
Да и оператор new не пашет(

да ну?  smile 

используй malloc() и связный список буферов
Цитата(Валерия @  27.4.2008,  21:19 Найти цитируемый пост)
И вообще, лучше всего киньте ссылкой на е-книгу на русском по программингу под линукс, а то я раньше писала под dos на турбо си, так не всё катит здесь что катило там... 

воспользуйся поиском, не раз тема поднималась


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 28.4.2008, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Валерия, 
1. В данном случае нельзя юзать strcat
2. Да и оператор new не пашет
Скорее всего используется gcc (Си компилер), вместо g++ (Си++ компилер).
3 Так вот, если я пишу all[100000] то выделяет 100 кб под это дело, а мне нужно что бы переменная all по мере забития в неё bufer2 постоянно увеличивалась)
Кто мешает написать примитивную функтяру изменения размера с сохранением данных ? 
Я, правда, в данном случае (HTTP GET) просто использовал временный файл.

Цитата

используй malloc() и связный список буферов

Тоже вариант.

Это сообщение отредактировал(а) GrayCardinal - 28.4.2008, 09:50


--------------------
PM MAIL WWW   Вверх
GrayCardinal
Дата 28.4.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



ЗЫ
код возврата системных вызовов лучше всё-таки проверять smile


--------------------
PM MAIL WWW   Вверх
Валерия
Дата 28.4.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Спасибо smile
Тут кстати проблемка возникла:

Код

            struct sockaddr_in addr;
    struct hostent * hostent;
    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    hostent = gethostbyname(host);
    addr.sin_addr.s_addr = *(u_int32_t*)hostent -> h_addr;
    connect(socket_fd, (const struct sockaddr*)&addr, sizeof(struct sockaddr_in));

    char big[100000]="";
    char request[4096] = "";
    strcat(request, "GET ");
    strcat(request, path);
    strcat(request, " HTTP/1.1\r\n");
    strcat(request, "Host: ");
    strcat(request, host);
    strcat(request, "\r\n\r\n");

    char buffer2[4096]; 

    ssize_t size;
    send(socket_fd, request, strlen(request), 0);

    while ((size = recv(socket_fd, buffer2, 4096, 0)) > 0 ){
        strcat(big, buffer2);
    }


Работает но с багом, если страница больше 4х килобайт, то последний блок два раза запишет в big.

Добавлено через 5 минут и 39 секунд
И кстати, есть под си какаято библиотека с нормальной работой строк?
Ну тоесть

string mystr;
string s="dddd";
mystr = "abb" + s + "bbb";
типа такого)
PM MAIL   Вверх
MAKCim
Дата 28.4.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  28.4.2008,  18:03 Найти цитируемый пост)
Работает но с багом, если страница больше 4х килобайт, то последний блок два раза запишет в big.

на каждой итерации нужно записывать в big size байт
Код

void * ptr = big;
while ((size = recv(socket_fd, buffer2, 4096, 0)) > 0 ){
        memcpy(ptr, buffer2, size);
        ptr += size;
}
*(char*)ptr = '\0';



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 28.4.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(Валерия @  28.4.2008,  17:03 Найти цитируемый пост)
mystr = "abb" + s + "bbb";
типа такого) 

в Си нет объектов и перегрузки операторов smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
kirjanov
  Дата 28.4.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

Репутация: 3
Всего: 15



Цитата(JackYF @  28.4.2008,  19:52 Найти цитируемый пост)
в Си нет объектов

А поименованную область памяти в C можно назвать объектом?)

string можно и через препроцессор сделать, а вместо '+' макрос добавить с подходящим именем smile

Это сообщение отредактировал(а) kirjanov - 28.4.2008, 21:18
PM MAIL   Вверх
quasi
  Дата 6.5.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007

Репутация: нет
Всего: 0



А как получить файлики определенного типа, например графические gif. jpg, png... etc Т.е. всю страничку не нужно, нужно только файлики нттп запросом, подскажите?!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.