On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



ссылка на сообщение  Отправлено: 26.02.15 19:15. Заголовок: Можно обойтись без Telnet'a? Чистый http api, GET, POST?


Подскажите коллеги, а куда копать, чтобы подружить crestron с оборудованием, не поддерживающим telnet?

Надо:
1) Отправить крестрону GET или POST запрос формата http://[ip_address_of_crestron]:[port]/?[some_key1]=[some_value1]&[some_key2]=[some_value2]
2) Получить от него осознанное действие. Например, включить свет.

Прошу подсказать, возможен ли такой функционал и где почитать. Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 41 , стр: 1 2 3 All [только новые]


постоянный участник




ссылка на сообщение  Отправлено: 26.02.15 19:20. Заголовок: Такой вариант связи ..


Такой вариант связи возможен.
Из проткола HTTP для передачи команды нужно испольтзовать GET.

Именно так прекрасно управляются плееры DUNE, XMBC, AppleTV, видеокамеры и другие устройства BOSCH NG тд.
Внешне это выглядит так, как буд-то Crestron отправляет запрос вместо браузера, обратно идет XML или HTML код, который можно разобрать.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 26.02.15 19:22. Заголовок: Нет, мне надо в обра..


Нет, мне надо в обратную сторону. Крестрону отправить GET и вызвать заложенный алгоритм действий.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




ссылка на сообщение  Отправлено: 26.02.15 19:24. Заголовок: Нет проблем, Сrestro..


Нет проблем, Сrestron поймет любой запрос по UDP/TCP IP, в чистом виде, без GET И вообще ничего из HTTP не нужно.


Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 26.02.15 19:25. Заголовок: Вот как раз только H..


Вот как раз только HTTP и нужно. Возможности отправлять RAW TCP/IP нет.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




ссылка на сообщение  Отправлено: 26.02.15 19:30. Заголовок: Отправляйте, анализи..


Отправляйте, анализируйте и запускайте внутренние алгоритмы. Нет проблем.
Процессор Crestron это не Web-сервер, смотрите на него как на узел в сети с портом 80, как в вашем случае.
Из строки поиска браузера команды отправлять собираетесь?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 26.02.15 23:41. Заголовок: Игорь K. пишет: Из ..


Игорь K. пишет:

 цитата:
Из строки поиска браузера команды отправлять собираетесь?


Нет, ajax.

Спасибо за ответы. Так где почитать можно про http api Crestron'a? Все, что я нашел - это как с помощью Крестрона управлять чем-то. Наоборот - только telnet. HTTP API это секретная документация?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 27.02.15 08:17. Заголовок: Нет,HTTP API, как та..


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

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 27.02.15 18:32. Заголовок: Источник происхожден..


Источник происхождения вопроса - надо связать Crestron и специальный аппаратный сервер.
Сервер имеет HTTP API, но Telnet'ом работать не может (закрыт).
Crestron, как мы сейчас выяснили, не имеет HTTP API.
Тогда вопрос снимается. Не имеет так не имеет. Будем работать через RS-232. Оно есть у обоих.
Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 27.02.15 20:40. Заголовок: Так если есть RS232,..


Так если есть RS232, почему вообще осбуждались костыли???

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




ссылка на сообщение  Отправлено: 27.02.15 22:11. Заголовок: p.vladi, разведка, а..


p.vladi, разведка, а может просто Маркет ресерч.

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 28.02.15 11:09. Заголовок: dougthehead пишет: ..


dougthehead пишет:

 цитата:
Странно, что Крестрон такие очевидные вещи не поддерживает.


Да, Crestron вообще отстой. Так и написано в пресс-релизе Хвайчонг Дзайбинь Хоум Контроль Ко.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.02.15 12:15. Заголовок: Так у вас еще и непо..


Так у вас еще и непонимание разницы между клиентом и сервером. Вам на Крестроне нужен клиент. Что несколько снижает температуру ада...

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 17.03.15 16:42. Заголовок: Чтобы не плодить тем..


Чтобы не плодить темы, имеется рекордер Epiphan. Не могу сформулировать команду старт записи, подозреваю что дело в синтаксисе команды.
Инструкция гласит

 цитата:
3. To start recording:
wget --http-user=admin --http-passwd=pass123 http://192.30.23.45/admin/set_params.cgi?rec_enabled=on


Я же посылаю в TX TCP\IP сокета на порт 80 команду вида

 цитата:
GET /admin/set_params.cgi?http-user=admin&http-passwd=1234&rec_enabled=on HTTP/1.0\nHost: 192.168.0.4\n\n


Но рекордер все равно ругается на авторизацию. Как изменить команду?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 17.03.15 20:51. Заголовок: А если использовать authorization: basic


А если использовать authorization:basic ? Помнится, я использовала это для спутникового ресивера dreambox.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 18.03.15 14:22. Заголовок: Отвечу сам на свой в..


Отвечу сам на свой вопрос

 цитата:
GET /admin/set_params.cgi?rec_enabled=on HTTP/1.0\nHost: 192.168.0.4\nAuthorization: Basic YWRtaW46MTIzNA==\n\n
GET /admin/set_params.cgi?rec_enabled="" HTTP/1.0\nHost: 192.168.0.4\nAuthorization: Basic YWRtaW46MTIzNA==\n\n


Авторизация для admin:1234. Почему-то Epiphan предлагает примеры HTTP запросов для WGET. Установил wget и послал рекомендованный запрос, посмотрел wireshark'ом какой запрос GET формируется. Собственно сам запрос больше, но я выкинул из него лишнее типа User agent и тд

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 22.03.15 09:02. Заголовок: Друзья помогите. на ..


Друзья помогите.
на cp2e есть реле которое замыкает провод на 2 секунды, так вот требуется активировать это реле через get или telnet. не подскажете как это сделать?

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 25.03.15 10:45. Заголовок: Подскажите, пытаюсь ..


Подскажите, пытаюсь послать POST, дебаггер ругается "CANNOT TRANSMIT PACKET [blablabla] Packet is too large" надо как-то разбить его?
------
Отправлять по частям. После \n\n будет ответ.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 30.03.15 23:33. Заголовок: dougthehead пишет: ..


dougthehead пишет:
dougthehead пишет:

 цитата:
Спасибо за ответы. Так где почитать можно про http api Crestron'a? Все, что я нашел - это как с помощью Крестрона управлять чем-то. Наоборот - только telnet. HTTP API это секретная документация?

[quote]`

Протокол HTTP описан в стандартах RFC и находится в свободном доступе. Реализовать примитивный сервер, который примет запрос GET, дело максимум часа работы. В простейшем случае реализация GET-запроса - это открытие TCP-сервера, прием пары строк текста до первой пустой строки, отправка пары строк текста в ответ, закрытие сервера, открытие сервера и все заново. В случае POST чуть сложнее, но тем не менее все равно примитивно.

P.S. Для меня тоже странно, что в библиотеке нет готового модуля : )

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 12.08.16 13:17. Заголовок: Добрый день, коллеги..


Добрый день, коллеги, а можно, более подробно про команды POST?
Задача: Управление Сервером Cisco MCU с CP3.
MCU понимает команды xml-RPC, т.е. нужно посылать команды POST HTTP на http:ipaddr/RPC2.

Если я правильно понимаю, то в первую очередь создаем клиент TCP\IP по 80 порту,
Далее посылаем текстовые команды, ...только вот в каком формате так и не разобрался.

Исходник команды выглядит примерно так:

POST /RPC2 HTTP/1.1
<methodCall>
<methodName>conference.status</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>authenticationUser</name>
<value>
<string>admin</string>
</value>
</member>
<member>
<name>authenticationPassword</name>
<value>
<string>password</string>
</value>
</member>
<member>
<name>conferenceName</name>
<value>
<string>9555</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

НО что бы не посылал, ответ один: 201 operation failed.
пробовал тот же код через тестовые программы напрямую кидать - все получается, а через крестрон - никак.

подскажите, пожалуйста, куда копать?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 12.08.16 15:08. Заголовок: Тыц..

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 12.08.16 15:17. Заголовок: gosha Спасибо! Уже с..


gosha Спасибо! Уже смотрел, но вопрос у меня в другом:
Как весь запрос (пример ниже) закинуть через контроллер? Сворачивание в одну строчку - не помогает

POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181


<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>



Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 12.08.16 22:02. Заголовок: Это не пример команд..


Это не пример команды в чистом виде это описание её обязательных или не очень параметров (хотя описание ближе к истинной команде, чем то что можно ввести в строку браузера, который добавит к ней еще всякой служебной инфы). Лучший способ подсмотреть Wireshark-ом пример одной из команд с рабочего варианта коммуникации. При этом символы \r\r смотреть в hex варианте (для Crestron \r\n интерпретируется иначе чем в WireShark. В Crestron \r\n заменить на \n)
Скопировав целиком рабочую команду из Wireshark засовываем её в Simpl+ модуль Crestron (можно выкинуть аккуратно!! всякую чушь типа имени браузера, User-Agent и т.п.)
Обрабатывайте эту команду как строковую переменную, меняя необходимые значения параметров и отправляйте через TCP_CLIENT на MCU.
При этом неизменяемые части типа "POST /RPC2/..."и " HTTP/1.0\n" используете как строковые константы и лепите из них нужную полную строку команды через +
заканчивая каждый параметр \n
добавив в конце +"\n\n";
Можно видимо как тут советуют использовать внешний TCP client, но придется разбивать строки на части не длиннее 255 символов. Я всегда использовал внутренний в SIMPL+ TCP_CLIENT, чтоб не заморачиваться с длиной команды (а она получится достаточно длинная). Боюсь даже предположить, что это можно реализовать на Serial i/o только не используя SIMPL+.(почему смотри ниже)
С большой долей вероятности, придется позаботится еще о расчете параметра Content-Length:xx\n Ведь он (длина команды) будет меняться динамически в зависимости от параметров команды. Если это поле использовать как константу всегда одинаковое (т.е. не пересчитывать длину или не использовать параметр вовсе) то сервер может и не принять такую команду вернув ошибку.
Либо описывать все команды как константы (заменив лишь \r на \n) на все возможные варианты (перехватив только самые нужные). Но это не наш метод ).

+79161734005 Спасибо: 2 
ПрофильЦитата Ответить
постоянный участник




ссылка на сообщение  Отправлено: 14.08.16 23:30. Заголовок: Ответ тут должен быт..


Ответ тут должен быть таким: можно, в соответствии с протоколами и синтаксисом.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 15.08.16 11:17. Заголовок: Вячеслав, Спасибо, з..


Вячеслав, Спасибо, за столь развернутый ответ, попробую написать модуль.
По всей видимости у меня не были соблюдены "\n\" , в довесок команда больше 255 символов

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 15.08.16 22:30. Заголовок: Только говоря про &#..


Только говоря про \n я не имел ввиду параметры xml, я имел ввиду параметры POST запроса для http. Разметку xml по факту в перехваченном пакете. Отправляйте из приложения на ПК по возможности и ловите wireshark с фильтром ip.addr==IP_адрес_MCU
Скопировать ПКМ на пакете Copy->as Printable Text. Но непечатные символы 0d 0a (тоже в wireshark .. или \r\n тоже в Crestron \n) придется добавить в строку Crestron как \x0d\x0a или \n
Вам нужно все начиная с фразы POST и заканчивая .... (\n\n) если блок xml попадает в эти рамки. Иногда данные могут подставляться к конце пакета, уже за символами \n\n
Длину (Content-length:) определяет видимо блок xml начиная от <? и заканчивая последней > включая непечатные символы (\x0d\x0a это два символа даже если вы их запишите как \n)
Длину подставляемую после "Content-length: " легко посчитать применив штатные функции SIMPL+ LEN() и ITOA() Пример: command_length$=ITOA(len("<?......>"));
В качестве значения для параметра "Host: " подставляйте IP адрес MCU.

+79161734005 Спасибо: 1 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 16.08.16 17:08. Заголовок: Вячеслав Еще раз огр..


Вячеслав Еще раз огромное спасибо!

Вообщем, кусок simpl+, который заработал (вдруг кому понадобится):
Push Call_to_Name1
{
BodyLine1 = "\n\n";
BodyLineCMD1 = "<methodCall><methodName>participant.add</methodName><params><param><value><struct>";
BodyLineCMD2 = "<member><name>authenticationUser</name><value><string>admin</string></value></member><member><name>authenticationPassword</name><value><string>password</string></value></member>";
BodyLineCMD3 = "<member><name>conferenceName</name><value><string>666</string></value></member><member><name>participantName</name><value><string>andrei.movi</string></value></member>";
BodyLineCMD4 = "<member><name>address</name><value><string>shatov.movi</string></value></member></struct></value></param></params></methodCall>";
Body = BodyLineCMD1 +BodyLineCMD2 + BodyLineCMD3 +BodyLineCMD4 + BodyLine1;
Header1 = "POST /RPC2 HTTP/1.1\n";
Header2 = "Connection: keep-alive\n";
MAKESTRING (Header3, "Content-Length: %d\n", LEN (Body));
MAKESTRING (Header4, "HOST: %s\n", MCU_IPAddr);
Header5 = "Content-Type: text/html\n";
Header6 = "Accept-Encoding:\nUser-Agent:\nAuthorization:\n\n";
MCU_BODY_OUT = Header1+Header2+Header3+Header4+Header5+Header6+BodyLineCMD1;
MCU_BODY_OUT = BodyLineCMD2;
MCU_BODY_OUT = BodyLineCMD3;
MCU_Body_OUT = BodyLineCMD4+BodyLine1;
}

Как видно, вывожу по строчкам весь код через внешний TCP\IP client,
если коллеги подскажет, как использовать внутренний /*TCP_CLIENT tcpclient80 [20000]; - буду очень благодарен, сам как-то не осилил.


Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 16.08.16 19:48. Заголовок: AndreySh обратите вн..


AndreySh обратите внимания на
 цитата:
Header6 = "Accept-Encoding:\nUser-Agent:\nAuthorization:\n\n";


это не верный формат запроса.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 17.08.16 11:23. Заголовок: Ale4ko А что Вас сму..


Ale4ko А что Вас смущает?

1. Если не заполнены поля с данными, то это "прихоть" MCU. хоть и с пустыми значениями, но строки
Accept-Encoding:
Authorization
должны присутствовать, без них http запрос не обрабатывается и ответ с ошибкой 201 (operation failed)

2. Или же что команда записана в одну строку?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 17.08.16 14:16. Заголовок: Я бы все-таки убрал ..


Я бы все-таки убрал Connection: keep-alive, поменял Content-Type на text/xml, и посмотрел .pcap запроса, который дает 201


Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 18.08.16 08:52. Заголовок: gosha Позже попробую..


gosha Позже попробую проверить, сейчас уже такой возможности нет.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 18.08.16 09:54. Заголовок: AndreySh , два вопро..


AndreySh , два вопроса:
1. Речь о Codian?
2. Раз уж CP3, почему бы не делать все средствами S#? Решение упростится и ускорится в разы.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 18.08.16 10:06. Заголовок: gosha? 1. Да, Codian..


gosha? 1. Да, Codian! (Cisco MCU 4515) 2. пытался, но, к сожалению, знаний не хватает :(

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 19.08.16 13:17. Заголовок: AndreySh пишет: 1. ..


AndreySh пишет:

 цитата:
1. Если не заполнены поля с данными, то это "прихоть" MCU. хоть и с пустыми значениями, но строки
Accept-Encoding:
Authorization
должны присутствовать, без них http запрос не обрабатывается и ответ с ошибкой 201 (operation failed)


странно, я был уверен что такой запрос может выдать ошибку.
не знаю как на счет Authorization скорее всего должно быть заполнини значениями authenticationUser и authenticationPassword из BodyLineCMD2 , а Accept-Encoding и User-Agent желательно заполнить значениями.
Гоша прав 'Content-Type: text/xml' будет правильно.
я бы выбрал вариант:
Header5 = "Content-Type text/xml; charset=utf-8\n";
Header6 = "Accept-Encoding: identity\nUser-Agent: AndreySh\nAuthorization: Basic YWRtaW46cGFzc3dvcmQ=\n\n";

еше более подробно описано тут и тут


Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 23.08.16 09:21. Заголовок: Без претензий на пра..


Без претензий на правильность, но тем не менее рабочий вариант встроенного TCP client:
integer MCU_connected;

Integer_Function connect()
{
return(SocketConnectClient (tcpclient80, MCU_IPAddr, 80, 0));
}

Function disconnect()
{
SocketDisconnectClient (tcpclient80);
}

Function to_MCU(string data)
{
signed_integer iStatus,i;
if (MCU_Connected=0){connect();}
i=0;
while(i<90)
{
if (MCU_Connected=1)
{
iStatus = SocketSend(tcpclient80,data);
if (iStatus < 0)Print("Error Sending to MCU: %d\n", iStatus);
if (iStatus=-5){connect();delay(200);}else {i=100;}
}else
{delay(20);i=i+1;}
}
}

SOCKETCONNECT
tcpclient80
{
MCU_Connected = 1;
}

SOCKETDISCONNECT
tcpclient80
{
MCU_Connected = 0;
}


Спасибо: 1 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 31.01.20 11:32. Заголовок: Добрый день! Подскаж..


Добрый день!
Подскажите, через программу postman отправляю по адресу: http://10.10.10.99/mnc/secure_api.php
Команду: {"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"}
Wireshark видит как:
POST /mnc/secure_api.php HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.22.0
Accept: */*
Cache-Control: no-cache
Postman-Token: 2b7ab1ae-93bb-49fd-975a-ab90603527c2
Host: 10.10.10.99
Accept-Encoding: gzip, deflate, br
Content-Length: 88
Connection: keep-alive

{"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"}

Команда выполнена, ответ SUCCESS

Через Crestron засылаю такого типа команду:
POST /mnc/secure_api.php?{"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"} HTTP/1.0\nHost: 10.10.10.99\nContent-Type: text/json\n\n\n

Выдает Failed, "p_msg":"invalid command"

Это контроллер MUxlab.

Может в строке где синтаксис не верный, подскажите

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 31.01.20 21:11. Заголовок: 1.Начнем с того, что..


1.Начнем с того, что блок json (тот что в фигурных скобках) должен быть в самом конце пакета, за пределами \n\n Ведь в WireShark же так и есть
2.Скорее всего нужно еще и токен получить сначала как то и его тоже отправлять
3.100% нужно считать длину блока json и помещать её в поле Content-Length

Дальше посмотрим )

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 06.03.23 16:58. Заголовок: Коллеги, хочу повтор..


Коллеги, хочу повторить вопрос, заданный в начале этой темы.
Есть устройство (кнопочная панель), которая по нажатию на кнопки генерит простые HTTP запросы (GET, к примеру) по указанному адресу. Нужно как то обрабатывать эти запросы, сходу не смог их получить на контроллере ( TCP/IP сервер с портом 80). В Как получить эти запросы в контроллере?

Спасибо: 0 
ПрофильЦитата Ответить
администратор


ссылка на сообщение  Отправлено: 06.03.23 17:37. Заголовок: Примените TCP/IP Ser..


Примените TCP/IP Server в SIMPL.
Подозреваю, у вас кнопка Sure Button.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 06.03.23 21:46. Заголовок: Admin пишет: Примен..


Admin пишет:

 цитата:
Примените TCP/IP Server в SIMPL


так сходу и не получилось :( в настройка сервера указывать адрес панели?

Спасибо: 0 
ПрофильЦитата Ответить
администратор


ссылка на сообщение  Отправлено: 07.03.23 10:01. Заголовок: В случае, если "..


В случае, если "панель" не может быть сконфигурирована так, чтобы знать IP процессора, схема Клиент-сервер неприменима.
Нет разницы, где клиент и сервер, можно использовать то, что понятно и работает.
Установите связь, например через TCP/IP Client и следите за посылками от панели.
В настройках клиента укажите адрес панели. Должен же он быть где-то обозначен, хотя бы один раз.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 19.03.23 17:47. Заголовок: на контроллере был з..


на контроллере был запущен web сервер, после отключения его всё заработало.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 41 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 47
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет