Opened 2 hours ago
Closed 20 minutes ago
#470 closed баг (invalid)
символ # не мэтчится в "маршрутах SIP"
| Reported by: | roman_zhur | Owned by: | alx |
|---|---|---|---|
| Priority: | средний | Milestone: | 2 очередь |
| Component: | VE-02 | Keywords: | |
| Cc: |
Description
При использование символа # (решетка) в "Регулярное выражение target URI" на вкладке "Маршруты SIP" не находится совпадений.
Предполагалось, что можно использовать символы, расположенные на телефоне.
Предлагаю обеспечить возможность использования символа # в маршрутах SIP.
Ревизия прошивки VE-02: 63
Attachments (7)
Change History (9)
by , 2 hours ago
by , 2 hours ago
by , 2 hours ago
| Attachment: | tcpdump_1.txt added |
|---|
by , 2 hours ago
| Attachment: | tcpdump_2.txt added |
|---|
by , 2 hours ago
| Attachment: | tcpdump_3.txt added |
|---|
by , 111 minutes ago
by , 111 minutes ago
| Attachment: | config-export-VE-02.xml added |
|---|
comment:1 by , 106 minutes ago
comment:2 by , 20 minutes ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
Replying to roman_zhur:
Предлагаю обеспечить возможность использования символа # в маршрутах SIP.
Такая возможность уже есть.
Согласно разделу 21.1 RFC:3261, пользовательская часть URI имеет следующий формат:
user = 1*( unreserved / escaped / user-unreserved )
unreserved = alphanum / mark
mark = "-" / "_" / "." / "!" / "~" / "*" / "'" / "(" / ")"
user-unreserved = "&" / "=" / "+" / "$" / "," / ";" / "?" / "/"
alphanum = ALPHA / DIGIT
escaped = "%" HEXDIG HEXDIG
Как следует из приведенной цитаты, символ '#' не является ни unreserved, ни user-unreserved и, следовательно, не может присутствовать в URI "как есть", а должен быть подвергнуть ESCAPE-кодированию. Таким образом, при вызове (наборе номера) 2# формируется URI 2%23@domain.tld. Именно такой URI и должен мэтчиться с регулярным выражением маршрута.
Я провел эксперимент: создал маршрут, указав %23 в качестве регулярного выражения и * в качестве замены. Вот результат вызова номера 2#2:
Jan 19 09:33:10 comcerto daemon.info sip_ua[391]: fxs.cpp:272: ts 127: dialing 2#2 ... Jan 19 09:33:10 comcerto daemon.info sip_ua[416]: user_agent.cpp:2289: INVITE received: sip:2*2@127.0.0.1:6060;transport=udp (Call-ID: 830664082@(null))
Как видно в последней строке приведенного лога, замена в соответствии с заданным маршрутом была выполнена.
Также замечу, что на многих телефонных аппаратах символ # имеет специальное назначение - он означает завершение набора, то есть при нажатии соответствующей клавиши немедленно (без ожидания таймаута) выполняется вызов набранных до этого символов номера. Таким образом, ввести символ # как часть вызываемого номера пользователь такого аппарата не сможет, или это может оказаться затруднительно (потребует каких-то особых дополнительных действий). Поэтому использования символа # в номерах абонентов лучше избегать.

При попытке позвонить с 11@ на 2#@, чтобы маршрут перенаправил запрос на 22@, происходит ошибка "404 Not Found".