Description
Issue type:
Bug
Description:
When libpri retransmits a SETUP message, UUI Information Element (IE) that was present in first SETUP is missing in second SETUP.
Operating System detail:
(problem not related to OS)
libpri version:
1.6.0 (should also occur with 1.6.1: involved code unchanged)
Information on any third party software:
Asterisk 18.6.0, dahdi 3.1.0
Frequency and timing of the issue:
Always, when SETUP is repeated after T303 timeout.
Symptoms described in specific detail:
Called party receives second SETUP without UUI, although Asterisk provided a UUI value.
The defect is visible in Asterisk with CLI command "pri set debug on span ".
Steps required to reproduce the issue:
This Issue requires, when using libpri with Asterisk :
- UUI support in Asterisk: compile channels/sig_pri.c with #define SUPPORT_USERUSER
- UUI activation from Asterisk dialplan: set _USERUSERINFO Channel variable before Dial(),
- a SETUP retransmission: it can be reproduced with a slow called equipment, or a very short T303 timer configuration.
Workarounds in detail with specific steps:
No workaround.
Debugging output:
Enable "pri set debug on span " before making the call.
First SETUP carries UUI.
Repeated SETUP, after T303 timeout, does not.
Analysis:
The problem comes from libpri q931.c use of useruserinformation field in q931_call structure as a ephemeral storage field.
In outgoing direction, useruserinformation field is cleared as soon as UUI IE is generated (function transmit_user_user()).
Note: in incoming direction, useruserinformation field is also set while decoding IE, and cleared when libpri generates event for application.
I will try to submit a patch soon.