Перейти к содержанию
    

Здравствуйте! Пришлось начать дружить с библиотекой lwIP. 
Вроде бы все настроил верно, пользователь с форума еще помог скинув примеры. Но проблема следующего характера, такое ощущение что либа не обрабатывает входящие сообщения, после выполнения ppp_apiconnect происходит следующее:
либа периодично спамит периодично каким то сообщением, первый раз станция на него отвечает сообщением длинною 25 байт, либа съедает это сообщение, но ничего толкового не происходит, продолжается спам сообщением, станция тоже спамит каким-то сообщением. В общем соединение не устанавливается, хотя аппаратную часть настроил как надо.

Как только в UART приходит пакет, я его отправляю через pppos_input_tcpip. Никаких задержек и зависонов тоже не наблюдаю.  Пробовал на симкартах TELE2 и МТС, везде одно и тоже поведение.

ppp phase changed[0]: phase=0
ppp_connect[0]: holdoff=0
ppp phase changed[0]: phase=3
pppos_connect: unit 0: connecting
ppp_start[0]
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=FF FF FF FF
ppp_recv_config[0]
ppp: auth protocols: PAP=0 CHAP=1 CHAP_MD5=1
pppos_write[0]: len=29
ppp_start[0]: finished
pppos_input[0]: got 25 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: got 43 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: got 43 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_write[0]: len=29
pppos_input[0]: got 43 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: got 43 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_write[0]: len=29

Далее одинаковая картина, около минуты продолжается, после чего либа сообщает что соединение разорвано.

 

LCP: timeout sending Config-Requests
ppp phase changed[0]: phase=12
Connection terminated.
ppp_link_terminated[0]
ppp_link_end[0]
ppp phase changed[0]: phase=0
ppp_link_status_cb: PPPERR_CONNECT

 

Я правильно понимаю, что после данной процедуры:

    sys_sem_new(&sem, 0);
    tcpip_init(tcpip_done, &sem);
    sys_sem_wait(sem);
    sys_sem_free(sem);
    ppp = pppapi_pppos_create(&pppos_netif, ppp_output_cb, ppp_link_status_cb, NULL);
    pppapi_set_default(ppp);
    ppp_set_auth(ppp, PPPAUTHTYPE_CHAP, "mts", "mts");
    err_t err = pppapi_connect(ppp,0);

Я должен буду в ppp_pink_status_cb словить PPPERR_NONE , но я ловлю PPPERR_CONNECT , что означает потерю соединения.

 

Еще мне не нравится, что в логах либа сообщает что в pppos_write она отправляет len  = 29 , я так понимаю, это длина сообщения, однако в ppp_output_cb я ловлю 53 байта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проанализировал лог из темы https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=155016
там после того как в логах промелькнет строчка:
ppp: auth protocols: PAP=0 CHAP=1 CHAP_MD5=1

то за ней должна идти 

sent [LCP ConfReq id=0x3 <asyncmap 0x0> <magic 0x61d7a4e7> <pcomp> <accomp>]

а у меня она отсутствует, в логах с другого сайта, тоже такая строчка есть. Может быть это на что то намекнет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 часа назад, Mysteo сказал:

такое ощущение что либа не обрабатывает входящие сообщения, после выполнения ppp_apiconnect происходит следующее:
либа периодично спамит периодично каким то сообщением, первый раз станция на него отвечает сообщением длинною 25 байт, либа съедает это сообщение, но ничего толкового не происходит, продолжается спам сообщением, станция тоже спамит каким-то сообщением.

А какая такая либа ?? Вот сколько не перечитал - так и не понял. Некоторые сообщения очень вредно читать, но все же... И на форуме же находимся.

В смысле она (эта либа) у Вас живет какой-то "своей" жизнью? 

Прямо на сюжет из фантастического фильма похоже. На "Чужого" например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, AleksBak said:

А какая такая либа ?? Вот сколько не перечитал - так и не понял. Некоторые сообщения очень вредно читать, но все же... И на форуме же находимся.

 

Извините что так криво все написал. Суть такова. Настраиваю PPP соединение, с помощью lwIP. 
Вроде бы все настроил. При активации ppp режима  модема и после выполнения данных команд

  sys_sem_new(&sem, 0);
    tcpip_init(tcpip_done, &sem);
    sys_sem_wait(sem);
    sys_sem_free(sem);
    ppp = pppapi_pppos_create(&pppos_netif, ppp_output_cb, ppp_link_status_cb, NULL);
    pppapi_set_default(ppp);
    ppp_set_auth(ppp, PPPAUTHTYPE_CHAP, "mts", "mts");
    err_t err = pppapi_connect(ppp,0);

 не устанавливается  соединение, хотя на первый пакет, сформированный lwIP библиотекой модем отвечает 25 байтным сообщением, данное сообщение скармливаю pppos_input_tcpip() , в логах  вижу, pppos_input got 25 bytes. И далее снова начинается спам каким-то сообщением,  pppos_write[0]: len=29 , но станция на него уже не отвечает, с спамит 43 байтным сообщением

ppp phase changed[0]: phase=0
ppp_connect[0]: holdoff=0
ppp phase changed[0]: phase=3
pppos_connect: unit 0: connecting
ppp_start[0]
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=FF FF FF FF
ppp_recv_config[0]
ppp: auth protocols: PAP=0 CHAP=1 CHAP_MD5=1
pppos_write[0]: len=29
ppp_start[0]: finished
pppos_input[0]: got 25 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: got 43 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: got 43 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_write[0]: len=29
pppos_input[0]: got 43 bytes
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: Dropping ACCM char <0>
pppos_input[0]: got 43 bytes
pppos_write[0]: len=29
LCP: timeout sending Config-Requests
ppp phase changed[0]: phase=12
Connection terminated.
ppp_link_terminated[0]
ppp_link_end[0]
ppp phase changed[0]: phase=0

 

 

 

12 hours ago, x893 said:

А что Вам говорит товарищ отладчик в файле lcp.c ?

 

Я что-то не вижу от него никаких отладочных сообщений,  что то нужно задефайнить помимо этого ? Или Вы что-то другое имели в виду
 

 #define LWIP_DEBUG              1
 #define PPP_DEBUG               LWIP_DBG_ON

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я, как начинающий, делаю так

1. Есть исходный код и всегда можно посмотреть.
2. Есть отдатчик и можно по шагам посмотреть, что приходит и уходит
3. Попробовать разные типа авторизации
  PAP_SUPPORT
  CHAP_SUPPORT
  MSCHAP_SUPPORT
  EAP_SUPPORT
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стесняюсь спросить: не отключен ли случайно в настройках lwIP программный расчет контрольной суммы (макросы CHECKSUM_GEN_xxx и CHECKSUM_CHECK_xxx должны быть установлены в 1), который задумано отключать для MAC у которого есть аппаратный посчет (у УАПП, разумеется, аппаратного подсчета нет и надо включать программный).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Они по дефолту единички, а я их не отключал. Завтра попробую на компьютере поднять PPP сервер, и через COM Port попробовать установи соединение, без участия GSM модема, хотя я не думаю что это в нем дело, и еще на другом компиляторе попробую собрать прошивку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот я конечно дал дрозда , при отправке буфера в ppp_input допустил грубейшую ошибку, сам не понял как там ковычки оказались:

void ppp_input_user (uint8_t* buf, uint16_t size)
{
          pppos_input_tcpip(ppp, "buf", size);

}


Исправил, теперь проблема следующего характера, если выбрана авторизация CHAP , то после обмена парой сообщений все останавливается:
 

 

ppp phase changed[0]: phase=0
ppp_connect[0]: holdoff=0
ppp phase changed[0]: phase=3
pppos_connect: unit 0: connecting
ppp_start[0]
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=FF FF FF FF
ppp_recv_config[0]
ppp: auth protocols: PAP=0 CHAP=1 CHAP_MD5=1 EAP=0
pppos_write[0]: len=24
ppp_start[0]: finished
pppos_input[0]: got 29 bytes
pppos_write[0]: len=24
pppos_input[0]: got 47 bytes
pppos_input[0]: got 43 bytes
pppos_write[0]: len=13
pppos_input[0]: got 46 bytes
pppos_write[0]: len=23
netif_set_mtu[0]: mtu=1500
pppos_send_config[0]: out_accm=0 0 A 0
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]
ppp phase changed[0]: phase=7
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0xf01 proto=0x6234
pppos_input_drop: pbuf len=14, addr 0x20012fcc

 

А если выбрана авторизация PAP, то происходит следующее:
долгий обмен сообщениями, после чего ошибка авторизации выдается:
 

ppp phase changed[0]: phase=0
ppp_connect[0]: holdoff=0
ppp phase changed[0]: phase=3
pppos_connect: unit 0: connecting
ppp_start[0]
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=FF FF FF FF
ppp_recv_config[0]
ppp: auth protocols: PAP=1 CHAP=0 CHAP_MD5=0 EAP=0
pppos_write[0]: len=24
ppp_start[0]: finished
pppos_input[0]: got 29 bytes
pppos_write[0]: len=24
pppos_input[0]: got 45 bytes
pppos_input[0]: got 43 bytes
pppos_write[0]: len=22
netif_set_mtu[0]: mtu=1500
pppos_send_config[0]: out_accm=0 0 A 0
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]
ppp phase changed[0]: phase=7
pppos_write[0]: len=16
pppos_input[0]: got 24 bytes
pppos_input[0]: Dropping bad fcs 0x75f4 proto=0xc023
pppos_input_drop: pbuf len=7, addr 0x20012fcc
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x20012fcc
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x20012fcc
pppos_write[0]: len=16
pppos_input[0]: got 24 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x20012fcc
pppos_input[0]: Dropping bad fcs 0x5c44 proto=0xc023
pppos_input_drop: pbuf len=7, addr 0x20012fcc
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x20012fcc
pppos_write[0]: len=16
pppos_input[0]: got 24 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x20012fcc
pppos_input[0]: Dropping bad fcs 0x44d4 proto=0xc023
pppos_input_drop: pbuf len=7, addr 0x20012fcc
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x20012fcc
pppos_write[0]: len=16
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
pppos_input[0]: got 3 bytes
pppos_input[0]: Dropping bad fcs 0x19cc proto=0xaa5e
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
pppos_write[0]: len=16
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
pppos_write[0]: len=16
pppos_input[0]: got 9 bytes
pppos_input[0]: Dropping bad fcs 0xb174 proto=0xc023
pppos_input_drop: pbuf len=7, addr 0x200135c8
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
pppos_write[0]: len=16
pppos_input[0]: got 9 bytes
pppos_input[0]: Dropping bad fcs 0x98c4 proto=0xc023
pppos_input_drop: pbuf len=7, addr 0x200135c8
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
pppos_input[0]: got 15 bytes
pppos_input[0]: Dropping bad fcs 0x61df proto=0x8021
pppos_input_drop: pbuf len=13, addr 0x200135c8
No response to PAP authenticate-requests
ppp phase changed[0]: phase=11
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]
pppos_write[0]: len=48
pppos_input[0]: got 31 bytes
ppp phase changed[0]: phase=12
Connection terminated.
ppp_link_terminated[0]
ppp_link_end[0]
ppp phase changed[0]: phase=0
ppp_link_status_cb: PPPERR_AUTHFAIL
ppp_link_terminated[0]: finished.


 

Смущает меня появление dropping bad fcs после нескольких сообщений, в справке сказано , что попробовать поменять baudrate , но я его и так минимальный выставил 9600 . 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Mysteo сказал:

в справке сказано , что попробовать поменять baudrate

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

Такое ощущение, что вы либо не все принятные байты передаете в ppp_input_user(), либо процедура приема у вас некторые принятые баты "глотает", либо она затирает старший бит в данных (установление сесии идет в 7-битных ASCII, там это может быть незаметно), либо портятся результаты расчета (но это очень маловероятно). А нет логичекого анализатора, чтобы посмотреть принимаемые от модема данные и сравнить их с передаваемыми в ppp_input_user()?

1 час назад, Mysteo сказал:

сам не понял как там ковычки оказались:

кАвычки. А вот плюсы не позволяют передать адрес строкового литерала через неконстантный указатель. Еще один плюс в пользу плюсов для сомневающихся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

ppp_set_auth_required(ppp, 1);

 

А данная строчка нужна только если ppp сервер поднимаешь ? Просто если я ее использую то картина немного меняется  при CHAP

ppp phase changed[0]: phase=0
ppp_connect[0]: holdoff=0
ppp phase changed[0]: phase=3
pppos_connect: unit 0: connecting
ppp_start[0]
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=FF FF FF FF
ppp_recv_config[0]
ppp: auth protocols: PAP=0 CHAP=1 CHAP_MD5=1 EAP=0
pppos_write[0]: len=29
ppp_start[0]: finished
pppos_input[0]: got 25 bytes
pppos_write[0]: len=24
pppos_input[0]: got 29 bytes
pppos_write[0]: len=24
pppos_input[0]: got 46 bytes
pppos_input[0]: got 43 bytes
pppos_write[0]: len=13
pppos_input[0]: got 46 bytes
pppos_write[0]: len=23
netif_set_mtu[0]: mtu=1500
pppos_send_config[0]: out_accm=0 0 A 0
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]
peer refused to authenticate: terminating link
ppp phase changed[0]: phase=11
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]

 

при PAP

 

ppp phase changed[0]: phase=0
ppp_connect[0]: holdoff=0
ppp phase changed[0]: phase=3
pppos_connect: unit 0: connecting
ppp_start[0]
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=FF FF FF FF
ppp_recv_config[0]
ppp: auth protocols: PAP=1 CHAP=0 CHAP_MD5=0 EAP=0
pppos_write[0]: len=28
ppp_start[0]: finished
pppos_input[0]: got 23 bytes
pppos_write[0]: len=24
pppos_input[0]: got 29 bytes
pppos_write[0]: len=24
pppos_input[0]: got 46 bytes
pppos_input[0]: got 43 bytes
pppos_write[0]: len=22
netif_set_mtu[0]: mtu=1500
pppos_send_config[0]: out_accm=0 0 A 0
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]
peer refused to authenticate: terminating link
ppp phase changed[0]: phase=11
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы при вызове ppp_set_auth() задаете имя пользователя и пароль для авторизации. Они корректные для MTC, а вот корректный ли APN Host name задан с помощью AT+CGDCONT? Какая у вас последовательность AT-команд до запуска LWIP?

 

Ну и выше уже предложили проверить, все ли данные от модема в LWIP пересылаются.  

Изменено пользователем Grigorij

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Последовательность следующая:

AT+CGDCONT=1,"IP","internet.mts.ru"

AT+CGACT=1,1

ATD*99***1#
 

 

ppp_set_auth() я понимаю , что задаешь имя пользователя и пароля а еще есть ppp_set_auth_required ()

А целостность я следующим образом проверил:
подключил RX переходника UART-USB к TX модема, и через слушатель COM_PORT'a смотрю какие пакеты модем отправляет , в последнем пакете почему то ошибка модем отправил 26 байт, а МК передал в ppp_input только 15

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иправил проблему выше, если пакет сообщения содержал 0x00 , то в буфере приемнике возникали проблемы.  Сейчас уже лучше ситуация:
 

ppp phase changed[0]: phase=0
ppp_connect[0]: holdoff=0
ppp phase changed[0]: phase=3
pppos_connect: unit 0: connecting
ppp_start[0]
ppp phase changed[0]: phase=6
pppos_send_config[0]: out_accm=FF FF FF FF
ppp_send_config[0]
pppos_recv_config[0]: in_accm=FF FF FF FF
ppp_recv_config[0]
ppp: auth protocols: PAP=1
pppos_write[0]: len=24
ppp_start[0]: finished
pppos_input[0]: got 29 bytes
pppos_write[0]: len=24
pppos_input[0]: got 46 bytes
pppos_input[0]: got 43 bytes
pppos_write[0]: len=22
netif_set_mtu[0]: mtu=1500
pppos_send_config[0]: out_accm=0 0 A 0
ppp_send_config[0]
pppos_recv_config[0]: in_accm=0 0 A 0
ppp_recv_config[0]
ppp phase changed[0]: phase=7
pppos_write[0]: len=20
pppos_input[0]: got 27 bytes
PAP authentication succeeded
ppp phase changed[0]: phase=9

Далее ловлю зависон , т.к FreeRTOS по какой то причине убивает многие задачи. Завтра буду разбираться почему. Возможно моя функция вывода отладочной информации создает проблемы. Впрочем если отключить LWIP_DEBUG , то после обмена сообщениями модем выдает NO CARRIER и ловлю статус PPPER_CONNECT

 

int16_t uprintf (const char *fmt, ...)
{
    int16_t outsize;
    va_list ap;

    // Вернет ошибку, если формат является указателем NULL:
    if (!fmt) { return -1; }
    // Вернет ошибку, если строка превышает размер буфера, с учетом
    // необходимых дополнительных 2 символов: CR и нулевой терминатор ASCIIZ:
    if (UPRINTF_BUF_SIZE-2 < strlen(fmt)) { return -1; }

    va_start (ap,fmt);
    outsize = vsprintf(strbuf, fmt, ap);
    strbuf[outsize+1] = 0;
    va_end (ap);
    HAL_UART_Transmit(&huart2,strbuf, outsize,1000);
    return outsize;
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...