myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему

> Свой Dc++ Клиент, Нужен второй разработчик

Теги
Нет тегов для показа
Kinjal
сообщение 4.3.2009, 1:25
Сообщение #1


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 4.3.2009
Пользователь №: 2 467
Спасибо сказали: 0 раз




Всем привет.

Пару дней назад появилось желание написать свой клиент, отличный от стронга и его клонов(в том числе визуально, по меню настроек, и даже в используемом языке программирования :-)). Немного урезанный по функциональности(в стронге достаточно функций которыми я не пользуюсь), но и со своими фишками.

И в общем, дело такое, что нужен второй разработчик - дизайнер-программер на Делфе который бы хотел поучавствовать в проекте, т.к. у меня совершенно нет вкуса - нужен человек который бы сделал оформление для программы и меню настроек.

Ну и прикладываю скриншот(на нем - законченная серверная часть(client<->hub)), чтобы показать, что разговор не на пустом месте, а есть определенные наработки.
Прикрепленные файлы
Прикрепленный файл  client.jpg ( 116.36 килобайт ) Кол-во скачиваний: 252
 
Go to the top of the page
+Quote Post
Setuper
сообщение 4.3.2009, 1:30
Сообщение #2


Lua-master
**************

Группа: Модераторы
Сообщений: 4 064
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1388 раз




Нет ли желания у автора сделать консольную версию клиента? В этом случае и дизайнера не нужно будет искать, и актуальная программа получится. Хотя можно сделать и консольную версию и версию с GUI.
Go to the top of the page
+Quote Post
Kinjal
сообщение 4.3.2009, 3:39
Сообщение #3


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 4.3.2009
Пользователь №: 2 467
Спасибо сказали: 0 раз




Ну эм, консольную сделать так то не сложно, вот только не пойму зачем?
Go to the top of the page
+Quote Post
mariner
сообщение 4.3.2009, 11:09
Сообщение #4


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 865
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 176 раз




для работы как служба. на файловом сервенре. тут как бэ все ясно
Go to the top of the page
+Quote Post
dmvn
сообщение 5.3.2009, 12:04
Сообщение #5


Активный участник
***

Группа: Пользователи
Сообщений: 83
Регистрация: 26.2.2009
Пользователь №: 2 377
Спасибо сказали: 6 раз




Я в своё время написал на C некоторую консольную штуковину для линковки чатов двух хабов -- она подключается к двум хабам одновременно и перекидывает сообщения с одного на другой (и наоборот). В принципе, можно ее расширить и сделать полноценный консольный ДЦ-клиент.
Причем у меня она собирается и работает как под мастдаем, так и под Linux... у меня наверное времени на настоящий клиент сейчас не хватит, но все сырцы могу выдать) допиливайте ))

P.S. по теме: но почему на Delphi?! это же кхм... недоязык. к тому же автоматически лишаемся кросс-платформенности. Уж тогда на C++ и на каком-нить Qt...
Go to the top of the page
+Quote Post
Setuper
сообщение 5.3.2009, 17:50
Сообщение #6


Lua-master
**************

Группа: Модераторы
Сообщений: 4 064
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1388 раз




Линковать хабы и справляться с функциями клиента - это очень разные вещи, поэтому для написания полноценного клиента не думаю, что код линковщика поможет, разве что итак известные механизмы обработки команд оттуда можно взять. Исходники выкладывай - посмотим)))
Go to the top of the page
+Quote Post
dmvn
сообщение 5.3.2009, 23:29
Сообщение #7


Активный участник
***

Группа: Пользователи
Сообщений: 83
Регистрация: 26.2.2009
Пользователь №: 2 377
Спасибо сказали: 6 раз




ну в общем да, не оригинальность тут никто и не претендует big_smile.gif
сырцы тут: http://big.vip-zone.su/files/hublink/hublink.zip
там была сделана попытка написать библиотеку функций для работы с DC-хабом ( hubconn.{cpp,h} ). естественно, в ней есть только обработка команд, связанных с чатом + буферизация и разбор команд из сокета (в некотором приближении).
но уж что есть то есть, может кому пригодится -- вдруг кто саму идею разовьет и дополнит...
Go to the top of the page
+Quote Post
SerJo
сообщение 6.3.2009, 22:58
Сообщение #8


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 27.1.2009
Пользователь №: 1 995
Спасибо сказали: 0 раз




По части дизайна могу помочь. Тебя интересует сами иконки программы?
Ну как по мне то тут надо много единомышленников задействовать, потому что как не как новый движок ДС++ и он естественно довольно сырой
Go to the top of the page
+Quote Post
Setuper
сообщение 7.3.2009, 3:58
Сообщение #9


Lua-master
**************

Группа: Модераторы
Сообщений: 4 064
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1388 раз




Самое главное, лично для меня, так это чтобы клиент был кросс-платформенным, быстрым (без всяких лишних наворотов), маленьким, консольным и с открытом С++ кодом.
Если бы данный клиент подходит по этим параметрам, то я бы посодействовал в его создании)))


Спасибо сказали:
Go to the top of the page
+Quote Post
Stribog
сообщение 7.3.2009, 11:55
Сообщение #10


Участник
**

Группа: Пользователи
Сообщений: 46
Регистрация: 11.2.2009
Пользователь №: 2 187
Спасибо сказали: 2 раза




Здравствуйте форучане, может мне кто-нибудь помочь?
Я хочу написать программу на С++, что-то похожее на DC++ клиента, но я не знаю как организовать процедуру "рукопожатия хаба с клиентом" ( какой посылать ответ на $lock ) .
Помогите кто чем может !!!

P.S не стал создавать новую тему, т.к. эта тема подходит по тематике
Go to the top of the page
+Quote Post
PomanoB
сообщение 7.3.2009, 12:43
Сообщение #11


AmxModx Scripter
*****

Группа: Пользователи
Сообщений: 301
Регистрация: 2.12.2008
Из: Королев
Пользователь №: 1 283
Спасибо сказали: 118 раз




http://mydc.ru/topic915.html

Вообще на $Lock можно отправлять любой $Key ))
По крайней мере у меня это прокатывало
Go to the top of the page
+Quote Post
dmvn
сообщение 7.3.2009, 12:46
Сообщение #12


Активный участник
***

Группа: Пользователи
Сообщений: 83
Регистрация: 26.2.2009
Пользователь №: 2 377
Спасибо сказали: 6 раз




Да что ты говоришь? может быть ты на таком глупом хабе проверял, который это не контролирует? big_smile.gif

вот кусочек преобразования Lock в Key. 100% работоспособен, выдран из исходников выложенного чуть выше в этой теме моего hublink.
Код
string HubConn::lockToKey(const string& lock)
{
    int len = lock.length();
    char *key = new char[len+1];
    
    for(int i = 1; i < len; i++) key[i] = lock[i] ^ lock[i-1];
    key[0] = lock[0] ^ lock[len-1] ^ lock[len-2] ^ 5;

    for(int i = 0; i < len; i++) key[i] = ((key[i]<<4) & 0xF0) | ((key[i]>>4) & 0x0F);

    string result;
    for (int i = 0; i < len; i++)
    {
        char c = key[i];
        if (c == 0 || c == 5 || c == 36 || c == 96 || c == 124 || c == 126)
        {
            char buf[16];
#ifdef _WIN32
            sprintf_s(buf, 16, "/%%DCN%03d%%/", key[i]);
#else
            sprintf(buf, "/%%DCN%03d%%/", key[i]);
#endif
               result += buf;
        }
        else result += c;
    }
    delete key;
    return result;
}


UPD:
Для С++ Builder вместо sprintf_s юзаем обычный sprintf, также как и для не-win32.
для MSVC очень старых версий (6.0 и ниже)-- тоже.
А вообще это просто safe-вариант этой функции, в котором явно указана максимальная длина буфера, куда он будет фигачить результат.
Go to the top of the page
+Quote Post
PomanoB
сообщение 7.3.2009, 13:24
Сообщение #13


AmxModx Scripter
*****

Группа: Пользователи
Сообщений: 301
Регистрация: 2.12.2008
Из: Королев
Пользователь №: 1 283
Спасибо сказали: 118 раз




Да, PtokaX, YnHub , VerliHub - очень глупые хабы да)
Go to the top of the page
+Quote Post
mariner
сообщение 7.3.2009, 13:26
Сообщение #14


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 865
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 176 раз




ахаха, dmvn, у него внешний бот от CS есть. Заходит на хаб как клиент. ДУмаю Романов знает кое в чем толк.
Go to the top of the page
+Quote Post
Stribog
сообщение 7.3.2009, 13:34
Сообщение #15


Участник
**

Группа: Пользователи
Сообщений: 46
Регистрация: 11.2.2009
Пользователь №: 2 187
Спасибо сказали: 2 раза




Цитата(dmvn @ 7.3.2009, 11:46) *
вот кусочек преобразования Lock в Key. 100% работоспособен, выдран из исходников выложенного чуть выше в этой теме моего hublink.


Спасибо конечно big_smile.gif , если честно то я как раз хотел из него взять, но у меня не понимает команду sprintf_s и при компиляции выдает ошибку E2268 Call to undefined function 'sprintf_s'

Искал в гугле, но он ничего вразумительного про sprintf_s не сказал...
Компилировал CodeGear™ C++Builder® 2009 Version 12.0.3170.16989

dmvn, вы не могли бы пояснить мне что это за функция (sprintf_s) или чем её можно заменить?

Вот такая вот проблема...

Цитата(PomanoB @ 7.3.2009, 11:43) *
http://mydc.ru/topic915.html

Вообще на $Lock можно отправлять любой $Key ))
По крайней мере у меня это прокатывало

PomanoB, я видел этот пост и там не описан алгоритм ответа на $lock. А что касается "Вообще на $Lock можно отправлять любой $Key" - это точно не вариант.
Go to the top of the page
+Quote Post
Setuper
сообщение 7.3.2009, 13:50
Сообщение #16


Lua-master
**************

Группа: Модераторы
Сообщений: 4 064
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1388 раз




На некоторых хабах проверка ключа $lock может быть отключена, но, как говориться раз на раз не приходится. На одном хабе отключена, на другом включена, поэтому при написании клиента делать механизм отсылки хабу ключа $lock нужно обязательно!

Код
void cDCProto::Lock2Key(const string &Lock, string &Key)
{
    int count = 0, len = Lock.size(), offset = 0;
    char *key = 0, *tkey= 0;
    char * lock = new char[len+1];
    UnEscapeChars(Lock, lock, len, true);
    
    key = new char[len+1];
    
    key[0] = lock[0] ^ lock[len - 1] ^ lock[len - 2] ^ 5;
    while(++count < len) key[count] = lock[count] ^ lock[count - 1];
    key[len]=0;
    
    count = 0;
    while(count++ < len)
        key[count - 1] = ((key[count - 1] << 4)) | ((key[count - 1] >> 4));
    
    
    EscapeChars(key, len, Key, true);
    delete [] key;
    delete [] lock;
}

void cDCProto::UnEscapeChars(const string &src, char *dst, int &len ,bool WithDCN)
{
    size_t pos, pos2 = 0;
    string start, end;
    unsigned char c;
    int i = 0;
    
    if (!WithDCN) {
        start = "$#";
        end =";";
    } else {
        start = "/%DCN";
        end = "%/";
    }
    
    pos = src.find(start);
    while ((pos != src.npos) && (i < src.size()))
    {
        if (pos > pos2) {
            memcpy(dst + i, src.c_str() + pos2, pos - pos2);
            i += pos - pos2;
        }
        pos2 = src.find(end, pos);
        if ((pos2 != src.npos) &&
            ((pos2 - pos) <= (start.size()+3))) {
                c = atoi(src.substr(pos + start.size(), 3).c_str());
                dst[i++] = c;
                pos2 += end.size();
        }
        pos = src.find(start, pos + 1);
    }
    if (pos2 < src.size()) {
        memcpy(dst + i, src.c_str() + pos2, src.size() - pos2 + 1);
        i += src.size() - pos2;
    }
    len = i;
}

void cDCProto::EscapeChars(const char *buf, int len, string &dest, bool WithDCN)
{
    dest ="";
    unsigned char c;
    ostringstream os;
    while(len-- > 0)
    {
        c = *(buf++);
        switch(c)
        {
            case 0: case 5: case 36: case 96: case 124: case 126:
                os.str("");
                if (! WithDCN) os << "&#" << unsigned(c) << ";";
                else {
                    os.fill('0');
                    os << "/%DCN" << unsigned(c);
                    os.width(0);
                    os << "%/";
                }
                dest += os.str();
                break;
            default: dest += c; break;
        };
    }
}


sprintf_s - это функция VS, в билдере её нету. Что делает эта функция можно догадаться, а вообще у нас тут не форум для разъяснения синтаксиса языка С++. В интернете этого добра полно, поэтому по поводу синтаксиса языка С++ спрашивай на специализированных форумах.

Всё же советую перейти на VS, так как в подавляющем большинстве крупных компаний всё пишется именно на VS.
Go to the top of the page
+Quote Post
Kinjal
сообщение 7.3.2009, 22:51
Сообщение #17


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 4.3.2009
Пользователь №: 2 467
Спасибо сказали: 0 раз




>но почему на Delphi?!
1. Потому что мне его возможностей за глаза.
2. Он не популярен в сравнении с Си, от того чувствешь себя частью небольшой, но очень гордой семьи big_smile.gif
3. На нем удобно делать визуальные компоненты и скиновые "движочки" с необходимой функциональностью для софтины.

>это же кхм... недоязык.
Ну что за детсад... базовые арифметические операции(+, -, /, *, целочисленное диление, остаток целочисленного деления, булевые операции, логические поразрядные операции), классы(с поддержкой наследования и полиморфизма, разумеется) и вариации объявления их методов(public, protected, private, property, перекрытие(override), конструкторы, деструкторы, помошники класса), for-while-repeat(плюс операторы прерывания циклов: break, continue, exit, abort)/if-else/switch-case-with/процедуры-функции(а так же вариации их объявления: предварительное, интерфейсное, внешнее, типовое, "перегрузочное"(overload), встраиваемое(inline), небезопасное(unsafe), анонимное), /основные типы(порядковые, булевые, символьные, неизвестные типы, структурные типы, целые типы, действительные типы(имеющие дробную часть), встроенные типы и типы определяемые пользователем)/приведение типов/ссылки-указатели/структуры(а так же перечисления, множества)/константы-типизированные константы/использование блоков ассемблера/try..except..finally/массивы(статические, динамические, одномерные, многомерные)/интерфейсы, перегрузка операций(операторов)/шаблоны(generics).
Возможно что-то забыл.

Считаете, выше перечисленного вам не хватит для создания полноценного Direct Connect клиента?
Лично мне - за глаза.

Но если есть претензии к IDE, а не к языку, то могу согласится что официальная борландовская/кодгировская ИДЕ - багнутая и её поведение не всегда предсказуемо.

>к тому же автоматически лишаемся кросс-платформенности.
А мне на неё пофик - я кроме виндоуса других операционок не признаю.

>на каком-нить Qt...
У меня свой скиновой движок - с теми функциями, которые мне нужны, и ничего лишнего. Просто потому что мне в этом плане проще написать своё, чем капатся в чужом.

>По части дизайна могу помочь. Тебя интересует сами иконки программы?
Не только иконки, но и в целом само оформление программы. Например... логотип, или "окно чата будет тут, такой расцевткой, такой формы, форма табов такая, список юзеров будет тут, форма у него будет этакая, табы у него будут там-то" big_smile.gif

>Ну как по мне то тут надо много единомышленников задействовать,
Совсем не зачем, я с технической частью сам легко справлюсь, разве что потом надо будет собрать народ и дружно потестить клиент в разных условиях(в частности чтобы какой-нить админ хаба его потестил с разными настройками хабов, т.к. на хабах, которые у меня установлены локально для тестинга, стоят стандартные настройки, с которыми и тестирую клиент) и на разных хабах(я тестю тока на YnHub, и иногда на Ptokax). Для проекта, и всего задуманного мною для него функционала, двух человек достаточно. Один - отвечает за всё то, что связано с технической частью клиента, второй - с интерфейсом(визуальные компоненты(типа там - окошко чата с поддержкой табов) и картинки(лого, иконки, ...)). Но у меня ещё есть два кореша, которые по надобности помогут с внутренним тестингом и какой-нить мелкой функциональностью, так что программеры как таковые есть, но нету дизайнера big_smile.gif

>потому что как не как новый движок ДС++ и он естественно довольно сырой
Разработка хоть и не второй год ведётся, но на данный момент у меня клиент очень даже стабилен, хотя и умеет не так много как стронг, но я просто основательно тестю у него каждую функцию. С ним уже сейчас можно спокойно бегать по хабам и общатцо. Плюс важнейшая часть ДЦ - высчитывание TTH - у меня реализовано на уровне стронга в плане скорости, причем судя по тестам, которые мне сделали по просьбе - высчитывает наровне со стронгом.
Правда, с другой стороны, мне не совсем понятны две вещи стронга - его функция сегментная закачка(а именно её технический аспект - каким образом работает эта функция), и каким образом стронг определяет пассивность/активность юзера(если только по галке на "Passive" в опциях Connection и невозможность открыть заданный порт - то вопрос отпадает).

>Вообще на $Lock можно отправлять любой $Key ))
>По крайней мере у меня это прокатывало
Не совсем так. Такое возможно тока в случае если, на примере YnHub'a, не стоит галка на "kick user if key invalid".
Go to the top of the page
+Quote Post
Setuper
сообщение 7.3.2009, 23:25
Сообщение #18


Lua-master
**************

Группа: Модераторы
Сообщений: 4 064
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1388 раз




Исходники будут открыты?
Go to the top of the page
+Quote Post
mariner
сообщение 8.3.2009, 0:00
Сообщение #19


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 865
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 176 раз




Цитата
>к тому же автоматически лишаемся кросс-платформенности.
А мне на неё пофик - я кроме виндоуса других операционок не признаю.


Тут ты ошибаешься, Брат. Не признавя другие ОСи ты страдаешь фимозом кругозора. Я, например, сисадмин (ну работаю), а значит тоже по своему программист - пишу системные скрипты и под вин и под никс (в них низя добиться кросплатформенности). Но если писать (а ты пишешь) программу и хочешь (возможно) стать давольно известным - то стоит писать на кросплатформенном языке программирования, ибо тогда (как это сделали создалели qutIM) можно добиться успеха. У меня все.
Go to the top of the page
+Quote Post
Kinjal
сообщение 8.3.2009, 0:01
Сообщение #20


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 4.3.2009
Пользователь №: 2 467
Спасибо сказали: 0 раз




>Исходники будут открыты?
Кому они будут нужны? Они ж на делфе будут написаны, на недоязыке big_smile.gif

Ну а если по сути - это будет зависеть от популярности клиента. Если клиент будет не популярен - сорцы будут открыты, если популярен - то закрыты, чтобы предотвратить атаку клонов (основная причина по которой я делаю свой клиент - бесит монополия стронга и его "изменено только лого-название"-клонов).

>Не признавя другие ОСи ты страдаешь фимозом кругозора.
А вот тут ты ошибаешься, брат. Я начинаю разработку каждого своего проекта по принципу "меня бесит". Есть стронг и его клоны - меня бесят его клоны. Меня убогость его интерфейса и общее неудобство да и в целом дискомфорт который я получаю пользуясь им. Меня бесит что в нем есть много функций который мне нафик не нужны, и при этом нет нескольких которые мне очень нужны. Меня бесит что клоны на него основе - побольшому счету ничем не отличаются от него самого.
В плане кроссплатформености - аналогично. Меня винда - абсолютно устраивает. Меня она _ничем_ не бесит, в результате чего - я не заглядываюсь на альтернативы, и как следствие - не задаюсь вопросом кроссплатформенности.

>и хочешь (возможно) стать давольно известным
Ну, спорить не буду - для моего самолюбия осозновать себя в какой-то мере знаменитостью, если мой дц клиент будет успешным, будет приятно. Но это не самоцель - т.к. клиент я делаю в первую очередь для себя, чтобы мне было удобно сидеть на хабе локальной сети моего провайдера. А если он понравится другим - тоже будет приятно.
Go to the top of the page
+Quote Post

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
Closed Объединю свой хаб с другими
11 Ameet 291 17.5.2012, 10:08 Посл. сообщение: Setuper
No new Topic has attachmentsDDD++ – лёгкий и быстрый DC++ клиент
Преднастроенный клиент с готовыми списками хабов
110 Damaks 14 447 17.1.2012, 21:23 Посл. сообщение: Damaks
No new Topic has attachmentsSmall DC HubList (Хаблист) Создай свой хаблист.
CMS для создания хаблиста.
62 Stribog 10 080 14.10.2011, 18:45 Посл. сообщение: KT315
No New Posts От: DDD++ - первый мультипиринговый dc-клиент
От темы с ID: 4706
2 Damaks 460 25.6.2011, 12:53 Посл. сообщение: Damaks
No new Клиент FGlink DC++
Обновление
18 TiGRpp 5 210 30.4.2011, 10:16 Посл. сообщение: OCTAGRAM
No new votes Опрос: Topic has attachmentsМобильный Dc Клиент
JAVA
22 Wariner 5 599 15.3.2011, 13:02 Посл. сообщение: САМАЭЛЬ
Closed Как сделать свой DC++?
22 GaZz-BenziNa 4 300 30.10.2010, 15:23 Посл. сообщение: Saymon21
No New Posts Папка в которую сохраняются сгенерированные страницы - как укажи свой путь на ftp
как укажи свой путь на ftp
0 bahodiruz 741 12.10.2010, 20:46 Посл. сообщение: bahodiruz
No new ВАЖНО: Клиент: Flylinkdc++
23 Setuper 10 656 24.9.2010, 17:20 Посл. сообщение: roflDDDD
No New Posts От: Клиент: Strongdc++
От темы с ID: 419
0 TommyKaira 686 12.7.2010, 0:04 Посл. сообщение: TommyKaira
Closed Если кому нужно переместить своих ХАБ клиентов, могу предоставить свой хаб
6 Seruy 1 936 20.6.2010, 16:13 Посл. сообщение: bot9ra
No New Posts От: Если кому нужно переместить своих ХАБ клиентов, могу предоставить свой хаб
От темы с ID: 3550
0 bot9ra 761 18.6.2010, 22:48 Посл. сообщение: bot9ra
No New Posts От: Если кому нужно переместить своих ХАБ клиентов, могу предоставить свой хаб
От темы с ID: 3550
0 Ksan 711 16.6.2010, 17:11 Посл. сообщение: Ksan
No New Posts От: Если кому нужно переместить своих ХАБ клиентов, могу предоставить свой хаб
От темы с ID: 3550
2 -=FugeN=- 2 970 16.6.2010, 14:07 Посл. сообщение: TROJAN
No New Posts ВАЖНО: Клиент: Strongdc++
4 Setuper 4 779 1.6.2010, 23:25 Посл. сообщение: Санёк

 



RSS Сейчас: 22.5.2012, 16:39