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)

1.png (55.1 KB ) - added by roman_zhur 2 hours ago.
2.png (44.3 KB ) - added by roman_zhur 2 hours ago.
tcpdump_1.txt (13.7 KB ) - added by roman_zhur 2 hours ago.
tcpdump_2.txt (12.9 KB ) - added by roman_zhur 2 hours ago.
tcpdump_3.txt (18.9 KB ) - added by roman_zhur 2 hours ago.
messages (6.3 KB ) - added by roman_zhur 111 minutes ago.
config-export-VE-02.xml (1.1 KB ) - added by roman_zhur 111 minutes ago.

Download all attachments as: .zip

Change History (9)

by roman_zhur, 2 hours ago

Attachment: 1.png added

by roman_zhur, 2 hours ago

Attachment: 2.png added

by roman_zhur, 2 hours ago

Attachment: tcpdump_1.txt added

by roman_zhur, 2 hours ago

Attachment: tcpdump_2.txt added

by roman_zhur, 2 hours ago

Attachment: tcpdump_3.txt added

by roman_zhur, 111 minutes ago

Attachment: messages added

by roman_zhur, 111 minutes ago

Attachment: config-export-VE-02.xml added

comment:1 by roman_zhur, 106 minutes ago

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



in reply to:  description comment:2 by alx, 20 minutes ago

Resolution: invalid
Status: newclosed

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))

Как видно в последней строке приведенного лога, замена в соответствии с заданным маршрутом была выполнена.

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

Note: See TracTickets for help on using tickets.