-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80




Форум на Исходниках.RU


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://forum.sources.ru.
Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

TLS ("thread-local storage", не "transport layer security")

Понедельник, 13 Июля 2020 г. 16:50 + в цитатник
Qraizer: JoeUser, как это что-либо меняет? Накидал вот наконец-то пример:
    // ------------ thrd.h
    extern thread_local int trdLocalVar;
    void g();
    // ------------ src1.cpp
    #include
    #include "thrd.h"
    void g()
    {
    std::cout << "The trdLocalVar is " << trdLocalVar << " now" << std::endl;
    }
    // ------------ src2.cpp
    #include
    #include
    #include
    #include "thrd.h"
    thread_local int trdLocalVar = -1;
    std::mutex mtx;
    void thr(int n)
    {
    std::lock_guard ct(mtx);
    trdLocalVar = n;
    g();
    }
    int main()
    {
    std::thread trd1(thr, 1);
    std::thread trd2(thr, 2);
    std::thread trd3(thr, 3);
    trd1.join();
    trd2.join();
    trd3.join();
    }
Всё компилится и линкуется. Результат ожидаемый:
    The trdLocalVar is 1 now
    The trdLocalVar is 2 now
    The trdLocalVar is 3 now

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834193


Метки:  

Требуется специалист в разработке сайтов

Понедельник, 13 Июля 2020 г. 16:42 + в цитатник
SergeS: Привет, а какой объём работы ?

https://forum.sources.ru/index.php?showtopic=419148&view=findpost&p=3834192


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 15:33 + в цитатник
OpenGL:
Цитата JoeUser @
Погоди, а в моем коде уже проблемы появились?

Я их описывал вообще-то. Сложное сопровождение кода, сложное понимание, и да - утечки ресурсов, т.к. если управление всеми ресурсами отдавать деструкторам, то от утечек это избавляет практически на 100%.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834189


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 15:25 + в цитатник
Wound:
Цитата JoeUser @
1 момент) Я тебе по вызов процедуры закрытия сокета // int shutdown(int sockfd, int how); //, а ты мне про утечки!

Так и я тебе про это, только там наверное close использовать нужно, хотя я хз, в примере используют close: https://man7.org/linux/man-pages/man3/getaddrinfo.3.html но не суть важно.

Цитата JoeUser @
2 момент) Как мне RAII напомнит вызвать freeaddrinfo, тем более что выделял не я, а либа winsock2?

Ну а что ты когда пользуешься функциями/классами - ты по ним вообще доку не читаешь? Потом, зачем тебе юзать RAII - если у тебя не нужно освобождать ресурс руками? Я тебе про это и пишу.

Если ты начинаешь оборачивать ресурс в RAII Обертку - значит он не может сам по себе освободится, для этого RAII и нужен. Ты берешь функцию getaddrinfo, посмотри внимательно на последний ее параметр, он тебя нисколько не смущает? Меня он как раз и смутил:
    ret = getaddrinfo(Host.toLocal8Bit().data(), NULL, &hint, &addrs);

addrs - у тебя неинициализированный указатель, а ты берешь его адрес и передаешь последним параметром в эту функцию, значит тут возможны два варианта - либо ты выхватишь Access Violation прямо внутри этой функции, либо она тебе вернет выделенную память(потому что если функция принимает указатель на указатель, и внутри работает с ним, не выделяя для него память - значит это AV, но обычно когда функция принимает указатель на указатель - практически всегда(ну кроме там исключительных случаев, например там работа с матрицами, двумерными массивами и т.д.) - это делается для того, чтоб выделить память и вернуть ее наружу, т.к. в С/С++ по умолчанию семантика значений, т.е. передай ты просто указатель - будет утечка), лезем в доку: https://man7.org/linux/man-pages/man3/getaddrinfo.3.html
И что мы видим?
Цитата

int getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res);

void freeaddrinfo(struct addrinfo *res);

const char *gai_strerror(int errcode);

Т.е. есть функция освобождения выделенного ресурса, соответственно ее и юзаем для освобождения памяти.
Когда в С работаешь - там нет классов и деструкторов, там все нужно руками освобождать, если не сказано обратное. Соответственно если есть функция, которая возвращает тебе ресурс, логично предположить что должна быть функция освобождения ресурса. В Си по другому не работают.
Допустим в apache есть функции для работы с ним, которым не нужно ресурсы руками освобождать, он сам их освобождает, там об этом прямо сказано, но там и типы соответствующие используются, а не голые указатели.

Ты когда у себя где то пишешь T* ptr = new T - ты потом память не освобождаешь что ли?

Цитата JoeUser @
Это скорее всего указатель на кишки libssh2, и они освободятся когда я вызову libssh2_exit();

Так а какой тогда смысл в переменной fingerprint ? Лишняя строка кода, либо ты ее забыл юзнуть - повод задуматься, либо убрать ее, либо как то юзать в коде, пока она у тебя болтается без какой либо цели и пользы, просто захламляя код. Ты даже ее не проверяешь ни на что.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834187


Метки:  

goto vs break & continue

Понедельник, 13 Июля 2020 г. 05:22 + в цитатник
JoeUser:
Цитата OpenGL @
от проблем же, которые есть в твоём изначальном коде,

Погоди, а в моем коде уже проблемы появились? ;)

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834171


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 19:35 + в цитатник
OpenGL:
Цитата JoeUser @
Но, если честно, если выбирать между советами - мне предложение Кили больше понравилось.

Да ради бога. Мне просто не нравится подобный стиль с deleter-ами, но это исключительно моё субъективное мнение, от проблем же, которые есть в твоём изначальном коде, его решение точно так же защищает.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834165


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 14:18 + в цитатник
D_KEY:
Цитата JoeUser @
OpenGL, ну идея понятна. Благодаря беседе я у себя недочет нашел. Соответственно он и в твоем коде. Забыл про cleanup соединения. Так что еще класс лепить нужно.

Во-первых, если там указатели, то можно просто воспользоваться unique_ptr/shared_ptr (так из примера OpenGL можно убрать Session и заменить на умный указатель).
Во-вторых, еще раз, такой класс-обертку ты напишешь один раз, а использовать его можно много где (в отличие от goto, который придется писать в каждой подобной функции) и везде твой код (самой функции) станет чище и проще.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834159


Метки:  

TLS ("thread-local storage", не "transport layer security")

Воскресенье, 12 Июля 2020 г. 14:14 + в цитатник
JoeUser:
Цитата Qraizer @
Не

Вот народ приводит цитаты из стандарта:

Цитата
When thread_local is applied to a variable of block scope the storage-class-specifier static is implied if it does not appear explicitly

Цитата
All variables declared with the thread_local keyword have thread storage duration. The storage for these entities shall last for the duration of the thread in which they are created. There is a distinct object or reference per thread, and use of the declared name refers to the entity associated with the current thread

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834158


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 14:08 + в цитатник
JoeUser: OpenGL, ну идея понятна. Благодаря беседе я у себя недочет нашел. Соответственно он и в твоем коде. Забыл про cleanup соединения. Так что еще класс лепить нужно. Но, если честно, если выбирать между советами - мне предложение Кили больше понравилось.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834157


Метки:  

Куда двигаться дальше?

Воскресенье, 12 Июля 2020 г. 09:39 + в цитатник
OpenGL:
Цитата D_KEY @
Вот ЕГЭ портит многое, задавая неверный(на мой взгляд) настрой именно на сдачу тестов, а не на образование.

Там уже вроде нет тестов. Да и я понимаю, как можно решить часть С (это про математику, что в остальных предметах - не в курсе) без хорошей соображаловки или читов на экзамене. Задачи-то достаточно заковыристые, и просто по шаблону не решаются, нужно ещё увидеть, что там можно применять тот или иной приём, что зачастую может быть нетривиально.

https://forum.sources.ru/index.php?showtopic=418954&view=findpost&p=3834153


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 08:41 + в цитатник
OpenGL: JoeUser, у нормальных плюсовиков это будет выглядеть хотя бы так
    // Ресурс libssh_init/libssh_exit
    struct SshInit
    {
    bool initialized;
    SshInit(bool init_flag = false) : initialized(init_flag) {}
    SshInit(SshInit &&old) noexcept { old.initialized = false; }
    SshInit &operator=(SshInit &&old) noexcept { old.initialized = false; }
    ~SshInit()
    {
    if (initialized) libssh2_exit();
    }
    };
    // Ресурс socket/close
    struct Socket
    {
    int socket;
    Socket(int s = -1) : socket(s) {}
    Socket(Socket &&old) noexcept
    {
    socket = old.socket;
    old.socket = -1;
    }
    Socket &operator=(Socket &&old) noexcept
    {
    deinit();
    socket = old.socket;
    old.socket = -1;
    return *this;
    }
    ~Socket() { deinit(); }
    void deinit()
    {
    if (socket != -1)
    {
    #ifdef WIN32
    closesocket(sock);
    #else
    close(socket);
    #endif
    }
    }
    };
    // Ресурс libssh_session_init/libssh_session_free
    struct Session
    {
    LIBSSH2_SESSION *session;
    Session(LIBSSH2_SESSION *s) : session(s) {}
    Session(Session &&old) noexcept
    {
    session = old.session;
    old.session = nullptr;
    }
    Session &operator=(Session &&old) noexcept
    {
    deinit();
    session = old.session;
    old.session = nullptr;
    return *this;
    }
    ~Session() { deinit(); }
    void deinit()
    {
    if (session)
    {
    libssh2_session_disconnect(session, "Normal Shutdown, Thank you for playing!");
    libssh2_session_free(session);
    }
    }
    };
    sftp_error slotLoginInternal()
    {
    struct addrinfo hint;
    struct addrinfo *addrs;
    struct sockaddr_in *sin;
    const char *fingerprint;
    struct addrinfo *p;
    int ret;
    bool found;
    // инициализация библиотеки
    if (libssh2_init(0) != 0)
    {
    return sftp_error::libssh2_error
    }
    SshInit local_ssh(true);
    // поиск адреса хоста
    memset(&hint, 0, sizeof(hint));
    hint.ai_flags = AI_NUMERICHOST;
    hint.ai_family = AF_UNSPEC;
    hint.ai_socktype = SOCK_STREAM;
    hint.ai_protocol = IPPROTO_TCP;
    ret = getaddrinfo(Host.toLocal8Bit().data(), NULL, &hint, &addrs);
    if (ret == EAI_NONAME)
    {
    hint.ai_flags = 0;
    ret = getaddrinfo(Host.toLocal8Bit().data(), NULL, &hint, &addrs);
    }
    if (ret != 0)
    {
    return sftp_error::resolve_error;
    }
    found = false;
    for (p = addrs; p != nullptr; p = p->ai_next)
    {
    if (p->ai_family == AF_INET)
    {
    found = true;
    sin = reinterpret_cast(p->ai_addr);
    break;
    }
    }
    if (!found)
    {
    return sftp_error::ip4_error;
    }
    // создание сокета
    int socket_id = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_id == INVALID_SOCKET)
    {
    return sftp_error::socket_error;
    }
    Socket local_socket(socket_id);
    sin->sin_family = AF_INET;
    sin->sin_port = htons(Port);
    // коннект
    ret = ::connect(sock, (struct sockaddr *)(sin), sizeof(struct sockaddr_in));
    if (ret != 0)
    {
    return sftp_error::connect_error;
    }
    // создание сессии
    LIBSSH2_SESSION *session = libssh2_session_init();
    if (!session)
    {
    return sftp_error::session_error;
    }
    Session local_session(session);
    // установка баннера
    if (libssh2_session_banner_set(session, "SSH-2.0-OpenSSH_LIBSSH2_1.9.0") != 0)
    {
    return sftp_error::session_error;
    }
    // рукопожатие
    if (libssh2_session_handshake(session, sock))
    {
    return sftp_error::handshake_error;
    }
    // перевод в неблокируемый режим
    libssh2_session_set_blocking(session, 0);
    // получение отпечатка
    fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
    // авторизация
    if (Auth->authType == auth_type::login)
    {
    while ((ret = libssh2_userauth_password(session, Auth->login.toLocal8Bit().data(),
    Auth->password.toLocal8Bit().data())) ==
    LIBSSH2_ERROR_EAGAIN)
    ;
    if (ret)
    {
    return sftp_error::auth_error;
    }
    }
    else
    {
    while ((ret = libssh2_userauth_publickey_frommemory(
    session, Auth->login.toLocal8Bit().data(), Auth->login.length(),
    Auth->public_array.data(), Auth->public_array.size(),
    Auth->private_array.data(), Auth->private_array.size(),
    Auth->password.toLocal8Bit().data())) == LIBSSH2_ERROR_EAGAIN)
    ;
    if (ret)
    {
    return sftp_error::auth_error;
    }
    }
    // инициализация ftp-сессии
    do
    {
    sftp_session = libssh2_sftp_init(session);
    if (!sftp_session)
    {
    if (libssh2_session_last_errno(session) == LIBSSH2_ERROR_EAGAIN)
    waitsocket(sock, session);
    else
    {
    return sftp_error::auth_error;
    }
    }
    } while (!sftp_session);
    // все четко и дерзко
    sftpState = sftp_state::logged_in;
    // Сохранение локальных ресурсов в переменные класса
    session = std::move(local_session);
    socket = std::move(local_socket);
    ssh_init = std::move(local_ssh);
    return sftp_error::no;
    }
    void mov::qt::sftp_class::slotLogin()
    {
    if (sftpState == sftp_state::ready && Auth->authState == auth_state : k)
    {
    sftpError = slotLoginInternal();
    }
    }

Уже одно это проще в поддержке даже несмотря на то, что тебе нужно учитывать порядок объявления полей ресурсов в классе.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834152


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 03:06 + в цитатник
Qraizer:
Цитата JoeUser @
49 совершенно неправильных строчек - лишили меня дозы адреналина
Видишь ли, JoeUser, ты начал с очень известного и прекрасно себя зарекомендовавшего паттерна для C, который, ввиду того, что переписываешь его на C++, естественно тебе не понравился, ибо в Плюсах его можно переписать архитектурно иначе, и с тобой по этому поводу начали дискуссию, а тут синтезировал совсем другой код, под исходный очень известный и прекрасно себя зарекомендовавший паттерн для C не попадающий. Почему у начавших дискуссию нет желания им заниматься, думаю, удивляться не стоит.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834151


Метки:  

TLS ("thread-local storage", не "transport layer security")

Воскресенье, 12 Июля 2020 г. 02:55 + в цитатник
Qraizer:
Цитата JoeUser @
Короч, оч много слов интуристов! Но, как я понял, описатель thread_local сразу же подразумевает static (не? пруф?)
Не. Пруф прям в цитате: они могут иметь linkage как external, так и internal. Это просто объекты, локальные в потоке. Т.е. каждая нитка, обращаясь к ним по имени, будет ссылаться на свои собственные объекты.
Цитата JoeUser @
Собственно, вопрос: а если заменить все описатели static на аналоги c thread_local, то можно ли данную либу использовать в многопоточной среде (в более чем одном потоке)?
Собсвтенно поэтому и нет. thread_local нужно делать любые глобальные объекты, которые хранят состояния, которые могут быть разрушены гонкой потоков.

https://forum.sources.ru/index.php?showtopic=419143&view=findpost&p=3834150


Метки:  

Куда двигаться дальше?

Воскресенье, 12 Июля 2020 г. 02:20 + в цитатник
swf: Кстати, книжка тех же авторов (Глазков, Ахременкова, Гаиашвили) за 5 класс показалась мне ещё более крутой во 2-й её части, чем за 6 класс.
Скачивайте

и начинайте заниматься прямо завтра :D
У меня внук Мишка прохладно к математике относился первые 4 года, только в 5 классе исключительно благодаря этой книжке почувствовал себя самым крутым в классе, появилась мотивация.
Перейдёте в 7-й - я вам посоветую, как по геометрии заниматься, по каким книжкам. В школе теперь геометрия в полном загоне, т.к. её "оптимизировали" - слили с алгеброй в один предмет.

Нельзя сокращать число высших учебных заведений. Иначе шапки на улице срывать начнут.
(Как мне сказал лет 20 тому назад декан горфака: вы (математики) наших студентов отчисляете, а потом удивляетесь, что с вас на улице шапки срывают.)
Поболтался в университете (бывшем техническом вузе) 4 года, немножко окультурился, по кривой дорожке не пошёл, и на том спасибо.
Тройка, тройка, огуречик - вот и вышел человечек, налогоплательщик, достойный член общества.

https://forum.sources.ru/index.php?showtopic=418954&view=findpost&p=3834149


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 00:31 + в цитатник
D_KEY:
Цитата JoeUser @
Ага! Я за все это время не смог прочитать про RAII, и не смог его стопицот раз осознать?!!

Я не могу знать, что ты там осознал :)
Но пишешь ты так, как будто не понял, да.

Добавлено
Цитата JoeUser @
А я тебе предлагаю переработать свой код - и показать всю красоту красот.

Ты имеешь в виду свой код с goto отсюда?
Ну хорошо, приведу на днях свой вариант.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834148


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 00:20 + в цитатник
Wound:
Цитата JoeUser @
А я тебе предлагаю переработать свой код - и показать всю красоту красот. Есть и реальный код, есть и "синтетика". Все есть в обсуждении - жду пруфы в виде красивого кода. Без кода - буквы читать не буду. Нафик.

Так ты расскажи что в моем коде не так? Ты код korvin что то там критиковал, а на мой не обратил внимания?

Добавлено
Мой код займет меньше твоего по количеству строчек. Туда еще три строчки добавить только осталось чтоб полностью имтировать твой пример ;)

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834147


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 00:19 + в цитатник
JoeUser:
Цитата D_KEY @
oeUser, плохой пример. Прочти про RAII и попробуй сам набросать код. Потом можно тут обсудить будет.

Сразу замечу, что обертку нужно писать(или не нужно, если использовать умные указатели) не на каждый объект ресурса, а только на каждый тип, после чего обертка может быть использована везде, где идет работа с этим ресурсом, и код станет гораздо чище.

Ага! Я за все это время не смог прочитать про RAII, и не смог его стопицот раз осознать?!! Ты это серьезно???

А я тебе предлагаю переработать свой код - и показать всю красоту красот. Есть и реальный код, есть и "синтетика". Все есть в обсуждении - жду пруфы в виде красивого кода. Без кода - буквы читать не буду. Нафик.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834146


Метки:  

Куда двигаться дальше?

Воскресенье, 12 Июля 2020 г. 00:16 + в цитатник
D_KEY:
Цитата swf @
Обычная общеобразовательная районная школа.

У нас тоже. Что-то мне подсказывает, что у вас там нарушения если не законов, то постановлений министерства образования...

Я бы на вашем месте этот вопрос изучил и принял меры, в случае необходимости. Вот тут как раз "идейные соображения" были бы как нельзя кстати.

Добавлено
Цитата swf @
Это у вас какие-то бредовые идеи. ИМХО, конечно. Образование должно быть полностью бесплатно хотя бы первые 9 лет.

Так оно и бесплатно. Просто вас не устраивает уровень этого самого бесплатного образования.
И да, не стоит забывать про то, что бесплатного образования не бывает, фактически речь об оплачиваемом из бюджета (из налогов) образовании. Не стоит об этом забывать.

Но вообще речь была об оплате учи.ру. Это частный ресурс, не государственный, он вам ничего не должен. И работу они проделали немалую.

Добавлено
Цитата swf @
ЕГЭ - великое благо.

По своей задумке вполне может быть. Но мне кажется, что ситуацию с образованностью он ухудшил.

Цитата
Что раньше творились в провинциальных университетах во время вступительных экзаменов

Если честно, я думаю, что в России нужно позакрывать к черту чуть ли не половину ВУЗов. Очень низкое качество образования. Некомпетентные выпускники, которые, собственно, и не собирались работать по специальности. Постепенное снижение престижа высшего образования. И т.п.

Добавлено
Цитата swf @
ЗЫ. Раз уж мы этого коснулись. Я с двумя клоунами-шестиклассниками этот год математикой занималась :jokingly:
Закажите по интернету вот эту книгу:
Глазков, Ахременкова, Гаиашвили
КИМ Математика 6 класс
Шикарная книга! Там в контрольных часть 1 - стандартные задачи для клоунов, а часть 2 - для развития клоуновского мозга
Купите и занимайтесь с сыном, не пожалеете.

Огромное Вам спасибо! :)

https://forum.sources.ru/index.php?showtopic=418954&view=findpost&p=3834145


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 00:11 + в цитатник
D_KEY: JoeUser, плохой пример. Прочти про RAII и попробуй сам набросать код. Потом можно тут обсудить будет.

Сразу замечу, что обертку нужно писать(или не нужно, если использовать умные указатели) не на каждый объект ресурса, а только на каждый тип, после чего обертка может быть использована везде, где идет работа с этим ресурсом, и код станет гораздо чище.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834144


Метки:  

goto vs break & continue

Воскресенье, 12 Июля 2020 г. 00:10 + в цитатник
Wound:
Цитата JoeUser @
Не, не видел ... один свистеж

Ты их критиковал! А теперь говоришь - не видел.

Цитата JoeUser @
Не сдерживай себя - гони по полной! Эти твари, создатели libssh2 тебя явно недостойны, гавнюки!!!
Я то-типа копипастер (рядом стоял), это все они - недостойные!!!

Причем тут они? Ты их код привел? И чего? Он от этого лучше не стал, как был говном - так и остался.
Что ты сказать то хотел, я не понимаю? Ровно такого же кода тонны можно встретить в MSDN - писали там индусы, видимо libssh2 писали тоже индусы :-?

Цитата JoeUser @
Просто у тебя не достаточно опята, чтобы осознать всю красоту ПРЕКРАСНОГО GOTO!!!
Просто не дорос, не прочувствовал, не осознал. Не парься - все это лечит время.

Да? А мне кажется это ты деградировал до уровня, лепить goto туда где он нафиг не упал.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834143


Метки:  

Поиск сообщений в rss_forum_sources_ru
Страницы: 2628 ... 2374 2373 [2372] 2371 2370 ..
.. 1 Календарь