Compare commits
3 Commits
1.4.12
...
1.4.12-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb56a54e24 | ||
|
|
b3d9949d9e | ||
|
|
f387c55588 |
268
ChangeLog
268
ChangeLog
@@ -1,209 +1,6 @@
|
||||
2011-07-05 Leif Madsen <lmadsen@digium.com>
|
||||
2010-11-17 Leif Madsen <lmadsen@digium.com>
|
||||
|
||||
* Release libpri 1.4.12
|
||||
|
||||
2011-05-17 20:13 +0000 [r2266] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c, pri_internal.h, q931.c, libpri.h: Option needed for
|
||||
Q931_IE_TIME_DATE to be optional in CONNECT message. The NEC
|
||||
SV8300 rejects the Q931_IE_TIME_DATE for Q.SIG. Add option to
|
||||
specify if and how much of the current time is put in
|
||||
Q931_IE_TIME_DATE. * Send date/time ie never. * Send date/time ie
|
||||
date only. * Send date/time ie date and hour. * Send date/time ie
|
||||
date, hour, and minute. * Send date/time ie date, hour, minute,
|
||||
and second. * Send date/time ie default: Libpri will send date
|
||||
and hhmm only when in NT PTMP mode to support ISDN phones.
|
||||
(closes issue #19221) Reported by: kenner JIRA SWP-3396
|
||||
|
||||
2011-04-18 19:43 +0000 [r2262] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri_internal.h, q931.c, pri_facility.c, libpri.h: Problems with
|
||||
ISDN MWI to phones. 1) The "controlling user number" is always
|
||||
the number of the voice mail box which is identical with the
|
||||
subscriber number itself. This number which is listed in the ISDN
|
||||
phone MWI menu cannot be called back to contact the voice mail
|
||||
box. The controlling user number should be made configurable. 2)
|
||||
The MWI indication is not restricted to a user (broadcast
|
||||
facility with dummy call reference). A called party IE should be
|
||||
added to address only the relevant MSN. (ETSI 300-196 Section
|
||||
8.3.2.4) JIRA ABE-2738 JIRA SWP-2846
|
||||
|
||||
2011-03-18 01:59 +0000 [r2258] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri_facility.c: CallRerouting response not sent if peer hangs up
|
||||
first. Send the CallRerouting response on the next message
|
||||
instead of only on the DISCONNECT message. The next message is
|
||||
either going to be a DISCONNECT or RELEASE depending on who
|
||||
initiates disconnection first.
|
||||
|
||||
2011-03-01 00:50 +0000 [r2227-2238] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c, pri_internal.h, pri_q931.h, q931.c, libpri.h: Implement
|
||||
the mandatory T312 timer for NT PTMP broadcast SETUP calls. *
|
||||
Fixed stopping T303 too early on a NT PTMP broadcast SETUP call
|
||||
if a subcall just receives a RELEASE_COMPLETE(busy). * Fixed a
|
||||
valgrind reported invalid read/write when hanging up a NT PTMP
|
||||
broadcast SETUP call. JIRA LIBPRI-32 JIRA SWP-2548
|
||||
|
||||
* q931.c, pri_facility.c: Miscellaneous cleanup before T312 branch
|
||||
merge.
|
||||
|
||||
* q931.c: Fix valgrind reported invalid read/write for display text
|
||||
feature.
|
||||
|
||||
* pri.c, pri_internal.h, q931.c, pri_cc.c: Improve the usefulness
|
||||
of pri_dump_info_str() output. * Add BRI and PTMP strings to node
|
||||
type config when configured that way. * Move Q.921 statistics to
|
||||
after configuration settings. * Add call and cc_record debug
|
||||
statistics to pri_dump_info_str().
|
||||
|
||||
* pri.c: Add determined remote node type to pri_dump_info_str().
|
||||
|
||||
2011-02-17 21:12 +0000 [r2202-2207] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* q931.c: B channel lost by incoming call in BRI NT PTMP mode. A
|
||||
phone's RELEASE_COMPLETE as a response to an initial broadcast
|
||||
SETUP blocks one B channel permantly when the call is cancelled.
|
||||
Scenario: A call to the ISDN Bus is acknowledged (ALERTING) by
|
||||
one phone/endpoint and rejected by another phone/endpoint with a
|
||||
RELEASE_COMPLETE. The call is then cancelled by the caller. If
|
||||
the whole procedure is repeated once again then any further call
|
||||
attempt is rejected (WARNING[5666]: app_dial.c:1546
|
||||
dial_exec_full: Unable to create channel of type 'DAHDI' (cause
|
||||
34 - Circuit/channel congestion)). It seems that receiving a
|
||||
RELEASE_COMPLETE in that state blocks one B channel permanently
|
||||
when the call is cancelled by the caller. Background: The ISDN
|
||||
phones (Siemens Gigaset 3035 or CX253) we use for testing
|
||||
additionally contain a DECT base station, which operates as a
|
||||
different endpoint on the ISDN Bus (TEI). If the DECT base
|
||||
station is not in use then there are no DECT phones registered to
|
||||
the base station. The DECT base station responds to an incoming
|
||||
call not directed toward it with (RELEASE_COMPLETE, cause: no
|
||||
user responding). * Made initiate_hangup_if_needed() also hangup
|
||||
the subcall if it is in the NULL state. * Simplified
|
||||
q931_set_subcall_winner(). JIRA ABE-2745 JIRA SWP-2954
|
||||
|
||||
* rose.c: DMS-100 not receiving caller name anymore. Looks like
|
||||
DMS-100 is using the same message as Q.SIG to receive the caller
|
||||
name. Add the ability to decode the ROSE calling name message
|
||||
defined for the Q.SIG switch on the DMS-100 switch. (closes issue
|
||||
#18822) Reported by: cmorford Patches: issue18822_v1.4.patch
|
||||
uploaded by rmudgett (license 664) Tested by: cmorford
|
||||
|
||||
* rose.c, pri_facility.c: * Added switchtype to ROSE invoke
|
||||
operation not handled message. * Reordered NI2 ROSE message table
|
||||
so any conflicts with the pirated Q.SIG messages will be in favor
|
||||
of the NI2 specific messages. This is precautionary only.
|
||||
|
||||
* pri_internal.h, prisched.c: Crash if NFAS swaps D channels on a
|
||||
call with an active timer. If a Q.931 call record related timer
|
||||
is started on one NFAS D channel expires after NFAS swaps to
|
||||
another D channel, then libpri could crash. For example: 1)
|
||||
Hangup a call. 1a) Send a DISCONNECT. 1b) Start the T305
|
||||
retransmit timer on the current D channel. 2) The RELEASE comes
|
||||
in on another D channel. 2a) The found call record switches its
|
||||
assignment to the new D channel. 2b) Attempt to stop T305.
|
||||
Unfortunately, the timer was started on another D channel so the
|
||||
attempt does not find the timer to stop. 3) The hangup sequence
|
||||
continues normally and the call record is freed since there is
|
||||
only one call record pool. 4) T305 expires on the original D
|
||||
channel and crashes the system when it uses the stale call record
|
||||
pointer it has saved. Made each D channel timer pool have a
|
||||
unique range of valid timer identifiers. If a given timer
|
||||
identifier is not in the range for the current NFAS D channel,
|
||||
then search the D channel group for the original D channel. JIRA
|
||||
LIBPRI-58 JIRA SWP-2721
|
||||
|
||||
2011-02-14 23:33 +0000 [r2200] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri_q921.h, q921.c: Fix I-frame retransmission quirks. Revamped
|
||||
the I-frame retransmission queue to better comply with Q.921:
|
||||
Figure B.7/Q.921 (sheet 1 of 10) and Figure B.9/Q.921 (Sheet 5 of
|
||||
5). The changes prevent retransmitting I-frames when the peer is
|
||||
busy (RNR) (Q.921 Section 5.6.5) and eliminate an unnecessary
|
||||
delay sending new I-frames after an I-frame retransmission.
|
||||
Related to JIRA LIBPRI-60
|
||||
|
||||
2011-02-08 16:44 +0000 [r2192] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c: Swap of master/slave in pri_enslave() incorrect. Thank
|
||||
you. All I can say is oops. (closes issue #18769) Reported by:
|
||||
jcollie Patches: libpri-1.4.12-beta3-swap.patch uploaded by
|
||||
jcollie (license 412)
|
||||
|
||||
2011-02-04 19:59 +0000 [r2187-2190] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c, pri_internal.h, q931.c, pri_facility.c, libpri.h: Add
|
||||
display ie text handling options. The display ie handling can be
|
||||
controlled independently in the send and receive directions with
|
||||
the following options: * Block display text data. * Use display
|
||||
text in SETUP/CONNECT messages for name. * Use display text for
|
||||
COLP name updates (FACILITY/NOTIFY as appropriate). * Pass
|
||||
arbitrary display text during a call. Sent in INFORMATION
|
||||
messages. Received from any message that the display text was not
|
||||
used as a name. If the display options are not set then the
|
||||
options default to legacy behavior.
|
||||
|
||||
* q931.c: Add Q931_IE_TIME_DATE to CONNECT message when in network
|
||||
mode. Add the Q931_IE_TIME_DATE with the current date/time of the
|
||||
system to the Q.931 CONNECT message when in network mode. The
|
||||
date/time IE allows attached equipment to synchronize their clock
|
||||
with the network. Most notably, ISDN phones can display the
|
||||
current date/time. See issue #18047 about a concern with
|
||||
non-conforming Siemens terminals. (closes issue #18047) Reported
|
||||
by: wuwu Patches: timedate.patch uploaded by rmudgett (license
|
||||
664) Tested by: rmudgett JIRA SWP-2955 JIRA ABE-2747
|
||||
|
||||
2011-02-01 00:37 +0000 [r2183] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c, pri_internal.h, Makefile, q921.c, q931.c: Enable
|
||||
LIBPRI_COUNTERS code by default. Removed the conditional
|
||||
LIBPRI_COUNTERS to include the code unconditionally. Patches:
|
||||
enable_LIBPRI_COUNTERS_LIBPRI-61.diff uploaded by jbigelow JIRA
|
||||
LIBPRI-61
|
||||
|
||||
2010-12-21 19:46 +0000 [r2169-2175] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c, q931.c: Invalid PTMP redirecting signaling as TE towards
|
||||
NT. * The PTMP redirection signaling (NOTIFY redirection number
|
||||
and notification code, SETUP redirecting number) is also sent in
|
||||
PTMP/TE mode. It should only apply in PTMP/NT mode. The call
|
||||
setup proceeds but the network (Deutsche Telekom) reacts with
|
||||
ugly ISDN STATUS messages. * Don't send the redirecting number ie
|
||||
when PTP is also sending the DivertingLegInformation2 facility.
|
||||
The redirecting number ie is redundant and the network (Deutsche
|
||||
Telekom) complains about it. JIRA LIBPRI-53 JIRA SWP-2543
|
||||
|
||||
* q931.c: Fix Q.931 retried SETUP not sending facility ies. Resend
|
||||
standard facility ies when the SETUP is retried by Q.931.
|
||||
However, one time facility ies are no longer available to add to
|
||||
a retried SETUP message.
|
||||
|
||||
* pri.c, pri_internal.h, q931.c, pri_facility.c, pri_facility.h:
|
||||
Add call transfer exchange of subaddresses support and fix PTMP
|
||||
call transfer signaling. * Add the ability to exchange
|
||||
subaddresses for ETSI PTMP, ETSI PTP, and Q.SIG for call
|
||||
transfer. * Fix ETSI PTMP to send the correct messages depending
|
||||
on the call state for call transfer. NOTE: Some ISDN phones only
|
||||
handle the NOTIFY message that the EN 300-369 spec says should be
|
||||
sent only if the call has not connected yet. JIRA LIBPRI-47 JIRA
|
||||
SWP-2363 Review: https://reviewboard.asterisk.org/r/1051/
|
||||
|
||||
* pri_internal.h, q931.c: Better HOLD/RETRIEVE collision handling.
|
||||
The upper layer is now initiating HOLD/RETRIEVE signaling. These
|
||||
changes are needed to help preserve the correct channel id after
|
||||
a collision.
|
||||
|
||||
* q931.c: Fix regression when reorganized for struct pri and struct
|
||||
q921_link.
|
||||
|
||||
2010-12-14 01:09 +0000 [r2166-2167] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* q931.c: Return error if q931_notify() cannot send NOTIFY.
|
||||
|
||||
* q931.c: Fix bizarre logic to work as originally intended in
|
||||
q931_notify(). In revision 238: Don't allow notification codes
|
||||
outside of the Q.931 spec for switches other than EuroISDN.
|
||||
* libpri 1.4.12-beta3 released.
|
||||
|
||||
2010-11-12 02:31 +0000 [r2113] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
@@ -343,7 +140,7 @@
|
||||
schmoozecom Patches: issue_18032_v1.4.patch uploaded by rmudgett
|
||||
(license 664) Tested by: rmudgett
|
||||
|
||||
2010-10-07 04:00 +0000 [r2009] Tilghman Lesher <tilghman@meg.abyt.es>
|
||||
2010-10-07 04:00 +0000 [r2009] Tilghman Lesher <tlesher@digium.com>
|
||||
|
||||
* Makefile: Minor changes to make libpri build on Mac OS X
|
||||
|
||||
@@ -419,6 +216,10 @@
|
||||
* pri.c: Don't crash in __pri_new_tei() if a GR303 subchannel
|
||||
creation fails.
|
||||
|
||||
2010-08-30 Leif Madsen <lmadsen@digium.com>
|
||||
|
||||
* libpri 1.4.12-beta2 released.
|
||||
|
||||
2010-08-30 20:49 +0000 [r1918-1929] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* q921.c: Reduced fake MDL-ERROR (Z) message severity to be visible
|
||||
@@ -542,6 +343,10 @@
|
||||
happier now that the struct and the variable do not have the same
|
||||
name. (At least for this file.)
|
||||
|
||||
2010-07-26 Leif Madsen <lmadsen@digium.com>
|
||||
|
||||
* libpri 1.4.12-beta1 released
|
||||
|
||||
2010-07-22 17:59 +0000 [r1836] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c, libpri.h: Add pri_new_bri_cb() API - Create BRI D-channel
|
||||
@@ -705,6 +510,57 @@
|
||||
tomaso Tested by: rmudgett JIRA SWP-1493 Review:
|
||||
https://reviewboard.asterisk.org/r/522/
|
||||
|
||||
2010-06-29 Leif Madsen <lmadsen@digium.com>
|
||||
|
||||
* libpri 1.4.11.3 released.
|
||||
|
||||
2010-06-29 11:17 +0000 [r1824] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri_internal.h, q931.c: [regression] Calling Number assignment
|
||||
logic change in libpri 1.4.11. Restored the old behaviour if
|
||||
there is more than one calling number in the incoming SETUP
|
||||
message. A network provided number is reported as ANI. (closes
|
||||
issue #17495) Reported by: ibercom Patches:
|
||||
issue_17495_v1.4.11.2.patch uploaded by rmudgett (license 664)
|
||||
issue_17495_v1.4.patch uploaded by rmudgett (license 664) Tested
|
||||
by: ibercom
|
||||
|
||||
2010-06-02 Leif Madsen <lmadsen@digium.com>
|
||||
|
||||
* libpri 1.4.11.2 released.
|
||||
|
||||
2010-06-04 17:45 +0000 [r1810] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri_facility.c: Q.SIG calling name in FACILITY message not
|
||||
reported to the upper layer. Q.SIG can send the CallingName,
|
||||
CalledName, and ConnectedName in stand alone FACILITY messages.
|
||||
If the CallingName was not sent in the SETUP message, the caller
|
||||
id name was not reported to the upper layer. (closes issue #17458)
|
||||
Reported by: jsmith Patches: issue17458_post_qsig_name.patch uploaded
|
||||
by rmudgett (license 664) issue17458_post_qsig_name_v1.4.11.1.patch
|
||||
uploaded by rmudgett (license 664) Tested by: rmudgett, jsmith
|
||||
|
||||
2010-06-02 Leif Madsen <lmadsen@digium.com>
|
||||
|
||||
* libpri 1.4.11.1 released.
|
||||
|
||||
2010-06-02 11:26 +0000 [r1805-1806] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* pri.c: Inband disconnect setting does nothing on BRI spans.
|
||||
The acceptinbanddisconnect flag is not inherited when creating
|
||||
a new TEI and thus rendering the setting (and its respective
|
||||
equivalent in Asterisk) a no-op on BRI setups. (closes issue
|
||||
#15265) Reported by: paravoid Patches: inband-bri.diff uploaded
|
||||
by paravoid (license 200) Tested by: paravoid
|
||||
|
||||
* q931.c, rose.c, rosetest.c: Multi component FACILITY messages
|
||||
only process the first component. The code was only processing
|
||||
the first ROSE component in the facility message. I also updated
|
||||
rosetest.c to have a multiple component ROSE message test.
|
||||
(closes issue #17428) Reported by: patrol-cz Patches:
|
||||
issue17428.patch uploaded by rmudgett (license 664) Tested by:
|
||||
rmudgett, patrol-cz
|
||||
|
||||
2010-05-20 Russell Bryant <russell@digium.com>
|
||||
|
||||
* libpri 1.4.11 released.
|
||||
|
||||
5
Makefile
5
Makefile
@@ -24,6 +24,9 @@
|
||||
# Uncomment if you want libpri not send PROGRESS_INDICATOR w/ALERTING
|
||||
#ALERTING=-DALERTING_NO_PROGRESS
|
||||
|
||||
# Uncomment if you want libpri to count number of Q921/Q931 sent/received
|
||||
#LIBPRI_COUNTERS=-DLIBPRI_COUNTERS
|
||||
|
||||
CC=gcc
|
||||
GREP=grep
|
||||
AWK=awk
|
||||
@@ -90,7 +93,7 @@ DYNAMIC_OBJS= \
|
||||
rose_qsig_mwi.lo \
|
||||
rose_qsig_name.lo \
|
||||
version.lo
|
||||
CFLAGS=-Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -g -fPIC $(ALERTING) $(LIBPRI_OPT) $(COVERAGE_CFLAGS)
|
||||
CFLAGS=-Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -g -fPIC $(ALERTING) $(LIBPRI_COUNTERS) $(LIBPRI_OPT) $(COVERAGE_CFLAGS)
|
||||
INSTALL_PREFIX=$(DESTDIR)
|
||||
INSTALL_BASE=/usr
|
||||
libdir?=$(INSTALL_BASE)/lib
|
||||
|
||||
157
libpri-1.4.12-beta3-summary.html
Normal file
157
libpri-1.4.12-beta3-summary.html
Normal file
@@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Release Summary - libpri-1.4.12-beta3</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">libpri-1.4.12-beta3</h3>
|
||||
<h3 align="center">Date: 2010-11-17</h3>
|
||||
<h3 align="center"><asteriskteam@digium.com></h3>
|
||||
<hr/>
|
||||
<h2 align="center">Table of Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#summary">Summary</a></li>
|
||||
<li><a href="#contributors">Contributors</a></li>
|
||||
<li><a href="#issues">Closed Issues</a></li>
|
||||
<li><a href="#commits">Other Changes</a></li>
|
||||
<li><a href="#diffstat">Diffstat</a></li>
|
||||
</ol>
|
||||
<hr/>
|
||||
<a name="summary"><h2 align="center">Summary</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This release includes only bug fixes. The changes included were made only to address problems that have been identified in this release series. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous release series are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p>
|
||||
<p>The data in this summary reflects changes that have been made since the previous release, libpri-1.4.12-beta2.</p>
|
||||
<hr/>
|
||||
<a name="contributors"><h2 align="center">Contributors</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
|
||||
<table width="100%" border="0">
|
||||
<tr>
|
||||
<td width="33%"><h3>Coders</h3></td>
|
||||
<td width="33%"><h3>Testers</h3></td>
|
||||
<td width="33%"><h3>Reporters</h3></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
28 rmudgett<br/>
|
||||
1 russell<br/>
|
||||
1 tilghman<br/>
|
||||
</td>
|
||||
<td>
|
||||
4 rmudgett<br/>
|
||||
1 lelio<br/>
|
||||
1 shawkris<br/>
|
||||
1 wimpy<br/>
|
||||
</td>
|
||||
<td>
|
||||
1 bklang<br/>
|
||||
1 gelo<br/>
|
||||
1 jmls<br/>
|
||||
1 lelio<br/>
|
||||
1 schmoozecom<br/>
|
||||
1 shawkris<br/>
|
||||
1 wimpy<br/>
|
||||
1 wuwu<br/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<a name="issues"><h2 align="center">Closed Issues</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p>
|
||||
<h3>Category: Channels/chan_dahdi</h3><br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=17270">#17270</a>: getting warning message every 4 seconds<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2113">2113</a><br/>
|
||||
Reporter: jmls<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<h3>Category: General</h3><br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=17360">#17360</a>: [patch] LibPRI problem with restart of PBX processor (Testing SVN 1688)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1962">1962</a><br/>
|
||||
Reporter: shawkris<br/>
|
||||
Testers: shawkris, rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=17522">#17522</a>: segfault in pri_schedule_del - ctrl invalid value<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2015">2015</a><br/>
|
||||
Reporter: wuwu<br/>
|
||||
Testers: rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=17865">#17865</a>: [patch] BRI NT ptmp: Active channels not cleard when i/f goes down<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1982">1982</a><br/>
|
||||
Reporter: wimpy<br/>
|
||||
Testers: rmudgett, wimpy<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=17968">#17968</a>: [patch] Libpri crashes when receiving Message Type (100)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2021">2021</a><br/>
|
||||
Reporter: gelo<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=18032">#18032</a>: [patch] Asterisk is core dumping with LibPRI<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2015">2015</a><br/>
|
||||
Reporter: schmoozecom<br/>
|
||||
Testers: rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=18232">#18232</a>: [patch] B410P gets incoming call packets on ISDN but DAHDI doesn't generate the call in Asterisk<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2088">2088</a><br/>
|
||||
Reporter: lelio<br/>
|
||||
Testers: lelio<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=18255">#18255</a>: SABME flood on backup D-channel in NFAS configuration<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2111">2111</a><br/>
|
||||
Reporter: bklang<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<hr/>
|
||||
<a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all changes that went into this release that did not directly close an issue from the issue tracker. The commits may have been marked as being related to an issue. If that is the case, the issue numbers are listed here, as well.</p>
|
||||
<table width="100%" border="1">
|
||||
<tr><td><b>Revision</b></td><td><b>Author</b></td><td><b>Summary</b></td><td><b>Issues Referenced</b></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1955">1955</a></td><td>rmudgett</td><td>Don't crash in __pri_new_tei() if a GR303 subchannel creation fails.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1958">1958</a></td><td>rmudgett</td><td>Balance curly braces in post_handle_q931_message().</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1961">1961</a></td><td>rmudgett</td><td>Prevent a CONNECT message from sending a CONNECT ACKNOWLEDGE in the wrong state.</td>
|
||||
<td><a href="https://issues.asterisk.org/view.php?id=17360">#17360</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1965">1965</a></td><td>rmudgett</td><td>Added more parameter checks to pri_set_timer() and pri_get_timer().</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1976">1976</a></td><td>rmudgett</td><td>Fix spelling error in PTMP agent FSM files.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1991">1991</a></td><td>rmudgett</td><td>PRI links do not retain active calls if the link comes back before T309 expires.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2001">2001</a></td><td>russell</td><td>Makefile tweaks to allow building for code coverage analysis.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2009">2009</a></td><td>tilghman</td><td>Minor changes to make libpri build on Mac OS X</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2027">2027</a></td><td>rmudgett</td><td>Create two versions of call ptr verify. One gripes and one does not.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2042">2042</a></td><td>rmudgett</td><td>Dump Q.931 message using the TEI value the message came in with.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2063">2063</a></td><td>rmudgett</td><td>Logically separate Q.921 TEI link processing from D channel control.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2070">2070</a></td><td>rmudgett</td><td>Restructure the Q.931 call record to layer 2 link association.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2077">2077</a></td><td>rmudgett</td><td>Extract the layer 2 link structure out of struct pri.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2078">2078</a></td><td>rmudgett</td><td>Partial support for dynamic interfaces with NFAS.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2079">2079</a></td><td>rmudgett</td><td>Fixes CC agents not automatically clearing if T309 clears the original call.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2098">2098</a></td><td>rmudgett</td><td>Mainly put space after switch and while keywords.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2101">2101</a></td><td>rmudgett</td><td>Remove all TEIs when NT PTMP starts.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2102">2102</a></td><td>rmudgett</td><td>Remove unneeded struct q921_link.mdl_error_state member.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2103">2103</a></td><td>rmudgett</td><td>Convert TEI identity defines to enum and create 2str() function.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2104">2104</a></td><td>rmudgett</td><td>Q.921 TEI assignment procedure corrections.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2105">2105</a></td><td>rmudgett</td><td>Added TEI identity check feature to reclaim dead TEIs.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2109">2109</a></td><td>rmudgett</td><td>Minor MDL handler changes.</td>
|
||||
<td></td></tr></table>
|
||||
<hr/>
|
||||
<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
|
||||
<pre>
|
||||
Makefile | 24
|
||||
doc/cc_ptmp_agent.fsm | 16
|
||||
doc/cc_ptmp_agent_flattened.fsm | 19
|
||||
doc/cc_ptp_agent.fsm | 8
|
||||
doc/cc_ptp_agent_flattened.fsm | 9
|
||||
doc/cc_qsig_agent.fsm | 4
|
||||
doc/cc_qsig_agent_flattened.fsm | 4
|
||||
pri.c | 515 +++++++---
|
||||
pri_aoc.c | 25
|
||||
pri_cc.c | 82 -
|
||||
pri_facility.c | 40
|
||||
pri_internal.h | 134 +-
|
||||
pri_q921.h | 101 +-
|
||||
pri_q931.h | 17
|
||||
prisched.c | 38
|
||||
q921.c | 1988 ++++++++++++++++++++++++----------------
|
||||
q931.c | 788 +++++++++++----
|
||||
17 files changed, 2518 insertions(+), 1294 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
||||
235
libpri-1.4.12-beta3-summary.txt
Normal file
235
libpri-1.4.12-beta3-summary.txt
Normal file
@@ -0,0 +1,235 @@
|
||||
Release Summary
|
||||
|
||||
libpri-1.4.12-beta3
|
||||
|
||||
Date: 2010-11-17
|
||||
|
||||
<asteriskteam@digium.com>
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Summary
|
||||
2. Contributors
|
||||
3. Closed Issues
|
||||
4. Other Changes
|
||||
5. Diffstat
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Summary
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This release includes only bug fixes. The changes included were made only
|
||||
to address problems that have been identified in this release series.
|
||||
Users should be able to safely upgrade to this version if this release
|
||||
series is already in use. Users considering upgrading from a previous
|
||||
release series are strongly encouraged to review the UPGRADE.txt document
|
||||
as well as the CHANGES document for information about upgrading to this
|
||||
release series.
|
||||
|
||||
The data in this summary reflects changes that have been made since the
|
||||
previous release, libpri-1.4.12-beta2.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Contributors
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This table lists the people who have submitted code, those that have
|
||||
tested patches, as well as those that reported issues on the issue tracker
|
||||
that were resolved in this release. For coders, the number is how many of
|
||||
their patches (of any size) were committed into this release. For testers,
|
||||
the number is the number of times their name was listed as assisting with
|
||||
testing a patch. Finally, for reporters, the number is the number of
|
||||
issues that they reported that were closed by commits that went into this
|
||||
release.
|
||||
|
||||
Coders Testers Reporters
|
||||
28 rmudgett 4 rmudgett 1 bklang
|
||||
1 russell 1 lelio 1 gelo
|
||||
1 tilghman 1 shawkris 1 jmls
|
||||
1 wimpy 1 lelio
|
||||
1 schmoozecom
|
||||
1 shawkris
|
||||
1 wimpy
|
||||
1 wuwu
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Closed Issues
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all issues from the issue tracker that were closed by
|
||||
changes that went into this release.
|
||||
|
||||
Category: Channels/chan_dahdi
|
||||
|
||||
#17270: getting warning message every 4 seconds
|
||||
Revision: 2113
|
||||
Reporter: jmls
|
||||
Coders: rmudgett
|
||||
|
||||
Category: General
|
||||
|
||||
#17360: [patch] LibPRI problem with restart of PBX processor (Testing SVN
|
||||
1688)
|
||||
Revision: 1962
|
||||
Reporter: shawkris
|
||||
Testers: shawkris, rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
#17522: segfault in pri_schedule_del - ctrl invalid value
|
||||
Revision: 2015
|
||||
Reporter: wuwu
|
||||
Testers: rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
#17865: [patch] BRI NT ptmp: Active channels not cleard when i/f goes down
|
||||
Revision: 1982
|
||||
Reporter: wimpy
|
||||
Testers: rmudgett, wimpy
|
||||
Coders: rmudgett
|
||||
|
||||
#17968: [patch] Libpri crashes when receiving Message Type (100)
|
||||
Revision: 2021
|
||||
Reporter: gelo
|
||||
Coders: rmudgett
|
||||
|
||||
#18032: [patch] Asterisk is core dumping with LibPRI
|
||||
Revision: 2015
|
||||
Reporter: schmoozecom
|
||||
Testers: rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
#18232: [patch] B410P gets incoming call packets on ISDN but DAHDI doesn't
|
||||
generate the call in Asterisk
|
||||
Revision: 2088
|
||||
Reporter: lelio
|
||||
Testers: lelio
|
||||
Coders: rmudgett
|
||||
|
||||
#18255: SABME flood on backup D-channel in NFAS configuration
|
||||
Revision: 2111
|
||||
Reporter: bklang
|
||||
Coders: rmudgett
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Commits Not Associated with an Issue
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all changes that went into this release that did not
|
||||
directly close an issue from the issue tracker. The commits may have been
|
||||
marked as being related to an issue. If that is the case, the issue
|
||||
numbers are listed here, as well.
|
||||
|
||||
+------------------------------------------------------------------------+
|
||||
| Revision | Author | Summary | Issues |
|
||||
| | | | Referenced |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1955 | rmudgett | Don't crash in __pri_new_tei() if a | |
|
||||
| | | GR303 subchannel creation fails. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1958 | rmudgett | Balance curly braces in | |
|
||||
| | | post_handle_q931_message(). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Prevent a CONNECT message from | |
|
||||
| 1961 | rmudgett | sending a CONNECT ACKNOWLEDGE in | #17360 |
|
||||
| | | the wrong state. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Added more parameter checks to | |
|
||||
| 1965 | rmudgett | pri_set_timer() and | |
|
||||
| | | pri_get_timer(). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1976 | rmudgett | Fix spelling error in PTMP agent | |
|
||||
| | | FSM files. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | PRI links do not retain active | |
|
||||
| 1991 | rmudgett | calls if the link comes back before | |
|
||||
| | | T309 expires. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2001 | russell | Makefile tweaks to allow building | |
|
||||
| | | for code coverage analysis. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2009 | tilghman | Minor changes to make libpri build | |
|
||||
| | | on Mac OS X | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Create two versions of call ptr | |
|
||||
| 2027 | rmudgett | verify. One gripes and one does | |
|
||||
| | | not. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2042 | rmudgett | Dump Q.931 message using the TEI | |
|
||||
| | | value the message came in with. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2063 | rmudgett | Logically separate Q.921 TEI link | |
|
||||
| | | processing from D channel control. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2070 | rmudgett | Restructure the Q.931 call record | |
|
||||
| | | to layer 2 link association. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2077 | rmudgett | Extract the layer 2 link structure | |
|
||||
| | | out of struct pri. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2078 | rmudgett | Partial support for dynamic | |
|
||||
| | | interfaces with NFAS. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Fixes CC agents not automatically | |
|
||||
| 2079 | rmudgett | clearing if T309 clears the | |
|
||||
| | | original call. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2098 | rmudgett | Mainly put space after switch and | |
|
||||
| | | while keywords. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2101 | rmudgett | Remove all TEIs when NT PTMP | |
|
||||
| | | starts. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2102 | rmudgett | Remove unneeded struct | |
|
||||
| | | q921_link.mdl_error_state member. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2103 | rmudgett | Convert TEI identity defines to | |
|
||||
| | | enum and create 2str() function. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2104 | rmudgett | Q.921 TEI assignment procedure | |
|
||||
| | | corrections. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2105 | rmudgett | Added TEI identity check feature to | |
|
||||
| | | reclaim dead TEIs. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2109 | rmudgett | Minor MDL handler changes. | |
|
||||
+------------------------------------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Diffstat Results
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a summary of the changes to the source code that went into this
|
||||
release that was generated using the diffstat utility.
|
||||
|
||||
Makefile | 24
|
||||
doc/cc_ptmp_agent.fsm | 16
|
||||
doc/cc_ptmp_agent_flattened.fsm | 19
|
||||
doc/cc_ptp_agent.fsm | 8
|
||||
doc/cc_ptp_agent_flattened.fsm | 9
|
||||
doc/cc_qsig_agent.fsm | 4
|
||||
doc/cc_qsig_agent_flattened.fsm | 4
|
||||
pri.c | 515 +++++++---
|
||||
pri_aoc.c | 25
|
||||
pri_cc.c | 82 -
|
||||
pri_facility.c | 40
|
||||
pri_internal.h | 134 +-
|
||||
pri_q921.h | 101 +-
|
||||
pri_q931.h | 17
|
||||
prisched.c | 38
|
||||
q921.c | 1988 ++++++++++++++++++++++++----------------
|
||||
q931.c | 788 +++++++++++----
|
||||
17 files changed, 2518 insertions(+), 1294 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
@@ -1,325 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Release Summary - libpri-1.4.12</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">libpri-1.4.12</h3>
|
||||
<h3 align="center">Date: 2011-07-05</h3>
|
||||
<h3 align="center"><asteriskteam@digium.com></h3>
|
||||
<hr/>
|
||||
<h2 align="center">Table of Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#summary">Summary</a></li>
|
||||
<li><a href="#contributors">Contributors</a></li>
|
||||
<li><a href="#issues">Closed Issues</a></li>
|
||||
<li><a href="#commits">Other Changes</a></li>
|
||||
<li><a href="#diffstat">Diffstat</a></li>
|
||||
</ol>
|
||||
<hr/>
|
||||
<a name="summary"><h2 align="center">Summary</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This release includes only bug fixes. The changes included were made only to address problems that have been identified in this release series. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous release series are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p>
|
||||
<p>The data in this summary reflects changes that have been made since the previous release, libpri-1.4.11.</p>
|
||||
<hr/>
|
||||
<a name="contributors"><h2 align="center">Contributors</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
|
||||
<table width="100%" border="0">
|
||||
<tr>
|
||||
<td width="33%"><h3>Coders</h3></td>
|
||||
<td width="33%"><h3>Testers</h3></td>
|
||||
<td width="33%"><h3>Reporters</h3></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
77 rmudgett<br/>
|
||||
1 alecdavis<br/>
|
||||
1 dvossel<br/>
|
||||
1 horape<br/>
|
||||
1 jcollie<br/>
|
||||
1 mattf<br/>
|
||||
1 nic<br/>
|
||||
1 paravoid<br/>
|
||||
1 russell<br/>
|
||||
1 tilghman<br/>
|
||||
</td>
|
||||
<td>
|
||||
10 rmudgett<br/>
|
||||
1 cmorford<br/>
|
||||
1 ibercom<br/>
|
||||
1 jcovert<br/>
|
||||
1 jsmith<br/>
|
||||
1 lelio<br/>
|
||||
1 paravoid<br/>
|
||||
1 patrol-cz<br/>
|
||||
1 shawkris<br/>
|
||||
1 wimpy<br/>
|
||||
</td>
|
||||
<td>
|
||||
2 wuwu<br/>
|
||||
1 alecdavis<br/>
|
||||
1 bklang<br/>
|
||||
1 cmorford<br/>
|
||||
1 gelo<br/>
|
||||
1 horape<br/>
|
||||
1 ibercom<br/>
|
||||
1 jcollie<br/>
|
||||
1 jcovert<br/>
|
||||
1 jims8650<br/>
|
||||
1 jmls<br/>
|
||||
1 jsmith<br/>
|
||||
1 kenner<br/>
|
||||
1 kobaz<br/>
|
||||
1 lelio<br/>
|
||||
1 nic_bellamy<br/>
|
||||
1 paravoid<br/>
|
||||
1 patrol-cz<br/>
|
||||
1 schmoozecom<br/>
|
||||
1 shawkris<br/>
|
||||
1 tomaso<br/>
|
||||
1 wimpy<br/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<a name="issues"><h2 align="center">Closed Issues</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p>
|
||||
<h3>Category: Channels/chan_dahdi</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-16038">ASTERISK-16038</a>: getting warning message every 4 seconds<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2113">2113</a><br/>
|
||||
Reporter: jmls<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<h3>Category: Channels/chan_dahdi/NewFeature</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-13410">ASTERISK-13410</a>: [patch] CCBS/CCNR support for QSIG (libpri & chan_dahdi)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1714">1714</a><br/>
|
||||
Reporter: tomaso<br/>
|
||||
Testers: rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<h3>Category: General</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-102">PRI-102</a>: [patch] [regression] Calling Number assignment logic change in libpri 1.4.11.<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1823">1823</a><br/>
|
||||
Reporter: ibercom<br/>
|
||||
Testers: ibercom<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-103">PRI-103</a>: segfault in pri_schedule_del - ctrl invalid value<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2015">2015</a><br/>
|
||||
Reporter: wuwu<br/>
|
||||
Testers: rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-105">PRI-105</a>: [patch] ISDN BRI does not recover from line faults<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1918">1918</a><br/>
|
||||
Reporter: jcovert<br/>
|
||||
Testers: jcovert, rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-107">PRI-107</a>: [patch] Calling name not successfully processed on inbound QSIG PRI calls from Mitel PBX<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1828">1828</a><br/>
|
||||
Reporter: jims8650<br/>
|
||||
Testers: rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-110">PRI-110</a>: [patch] BRI NT ptmp: Active channels not cleard when i/f goes down<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1982">1982</a><br/>
|
||||
Reporter: wimpy<br/>
|
||||
Testers: rmudgett, wimpy<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-112">PRI-112</a>: [patch] Libpri crashes when receiving Message Type (100)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2021">2021</a><br/>
|
||||
Reporter: gelo<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-113">PRI-113</a>: [patch] Asterisk is core dumping with LibPRI<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2015">2015</a><br/>
|
||||
Reporter: schmoozecom<br/>
|
||||
Testers: rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-114">PRI-114</a>: [patch] add extra IE Q931_IE_TIME_DATE to CONNECT message when in network mode<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2187">2187</a><br/>
|
||||
Reporter: wuwu<br/>
|
||||
Testers: rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-116">PRI-116</a>: [patch] B410P gets incoming call packets on ISDN but DAHDI doesn't generate the call in Asterisk<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2088">2088</a><br/>
|
||||
Reporter: lelio<br/>
|
||||
Testers: lelio<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-117">PRI-117</a>: SABME flood on backup D-channel in NFAS configuration<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2111">2111</a><br/>
|
||||
Reporter: bklang<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-120">PRI-120</a>: [patch] Swap of master/slave in pri_enslave incorrect<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2192">2192</a><br/>
|
||||
Reporter: jcollie<br/>
|
||||
Coders: jcollie<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-121">PRI-121</a>: [patch] Caller ID Name always blank<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2206">2206</a><br/>
|
||||
Reporter: cmorford<br/>
|
||||
Testers: cmorford<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-62">PRI-62</a>: [patch] Inband disconnect setting does nothing<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1794">1794</a><br/>
|
||||
Reporter: paravoid<br/>
|
||||
Testers: paravoid<br/>
|
||||
Coders: paravoid<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-81">PRI-81</a>: [patch] q921_rnr_rx Q921_TIMER_RECOVERY SDL issue<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1845">1845</a><br/>
|
||||
Reporter: alecdavis<br/>
|
||||
Coders: alecdavis<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-94">PRI-94</a>: [patch] pritest hadn't been ported to DAHDI<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1833">1833</a><br/>
|
||||
Reporter: horape<br/>
|
||||
Coders: horape<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-95">PRI-95</a>: [patch] LibPRI problem with restart of PBX processor (Testing SVN 1688)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1962">1962</a><br/>
|
||||
Reporter: shawkris<br/>
|
||||
Testers: shawkris, rmudgett<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-98">PRI-98</a>: [patch] Regression in libpri 1.4.11 - handling ROSE<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1785">1785</a><br/>
|
||||
Reporter: patrol-cz<br/>
|
||||
Testers: rmudgett, patrol-cz<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-99">PRI-99</a>: [patch] CallerID name not transmitted on versions of LibPRI after 1.4.10.2<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1810">1810</a><br/>
|
||||
Reporter: jsmith<br/>
|
||||
Testers: rmudgett, jsmith<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<h3>Category: NewFeature</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-122">PRI-122</a>: Option needed for IE_TIME_DATE to be optional on connect<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2266">2266</a><br/>
|
||||
Reporter: kenner<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/PRI-54">PRI-54</a>: [patch] Add pri_new_bri_cb() API - Create BRI D-channel with user defined I/O callbacks and data<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1836">1836</a><br/>
|
||||
Reporter: nic_bellamy<br/>
|
||||
Coders: nic<br/>
|
||||
<br/>
|
||||
<hr/>
|
||||
<a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all changes that went into this release that did not directly close an issue from the issue tracker. The commits may have been marked as being related to an issue. If that is the case, the issue numbers are listed here, as well.</p>
|
||||
<table width="100%" border="1">
|
||||
<tr><td><b>Revision</b></td><td><b>Author</b></td><td><b>Summary</b></td><td><b>Issues Referenced</b></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1723">1723</a></td><td>rmudgett</td><td>Added ETSI Explicit Call Transfer (ECT) support.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1737">1737</a></td><td>rmudgett</td><td>ETSI Advice Of Charge (AOC) event reporting.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1746">1746</a></td><td>rmudgett</td><td>ETSI Call Waiting support.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1757">1757</a></td><td>rmudgett</td><td>ETSI Malicious Call ID support.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1767">1767</a></td><td>rmudgett</td><td>ETSI Message Waiting Indication (MWI) support.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1776">1776</a></td><td>dvossel</td><td>support for sending ETSI advice of charge</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1829">1829</a></td><td>rmudgett</td><td>Added a libpri version output line as a sanity check for rosetest.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1830">1830</a></td><td>rmudgett</td><td>Only need to output one version of the version message.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1842">1842</a></td><td>rmudgett</td><td>Renamed local struct pri *pri variables to struct pri *ctrl in q921.c.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1848">1848</a></td><td>rmudgett</td><td>Improved Q.921/Q.931 debug output.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1852">1852</a></td><td>rmudgett</td><td>Learn (AGAIN!) why state 7 and state 8 transitions were suppressed.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1853">1853</a></td><td>rmudgett</td><td>No audio on inbound J1 calls.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-35">PRI-35</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1878">1878</a></td><td>mattf</td><td>Add silly fake MDL error Z for kicking L2 to reactivate if a DISC or DM is received in proper states on PTP links.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1883">1883</a></td><td>rmudgett</td><td>Don't silently fail to post our fake MDL-ERROR(Z).</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1884">1884</a></td><td>rmudgett</td><td>Added gripe check to rosetest for invalid operation and error codes.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1894">1894</a></td><td>rmudgett</td><td>Make pri_dump_event() only print the event name.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1904">1904</a></td><td>rmudgett</td><td>Add support to receive ECMA-164 2nd edition OID name ROSE messages.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-37">PRI-37</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1912">1912</a></td><td>rmudgett</td><td>Convert most references of Q931_MAX_TEI to use ARRAY_LEN().</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1923">1923</a></td><td>rmudgett</td><td>Q.921 improvements from comparing Q.921 SDL diagrams with implementation.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1928">1928</a></td><td>rmudgett</td><td>Q.921/Q.931 message debug output improvements.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1929">1929</a></td><td>rmudgett</td><td>Reduced fake MDL-ERROR (Z) message severity to be visible only when debugging enabled.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1955">1955</a></td><td>rmudgett</td><td>Don't crash in __pri_new_tei() if a GR303 subchannel creation fails.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1958">1958</a></td><td>rmudgett</td><td>Balance curly braces in post_handle_q931_message().</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1961">1961</a></td><td>rmudgett</td><td>Prevent a CONNECT message from sending a CONNECT ACKNOWLEDGE in the wrong state.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-95">PRI-95</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1965">1965</a></td><td>rmudgett</td><td>Added more parameter checks to pri_set_timer() and pri_get_timer().</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1976">1976</a></td><td>rmudgett</td><td>Fix spelling error in PTMP agent FSM files.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=1991">1991</a></td><td>rmudgett</td><td>PRI links do not retain active calls if the link comes back before T309 expires.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2001">2001</a></td><td>russell</td><td>Makefile tweaks to allow building for code coverage analysis.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2009">2009</a></td><td>tilghman</td><td>Minor changes to make libpri build on Mac OS X</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2027">2027</a></td><td>rmudgett</td><td>Create two versions of call ptr verify. One gripes and one does not.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2042">2042</a></td><td>rmudgett</td><td>Dump Q.931 message using the TEI value the message came in with.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2063">2063</a></td><td>rmudgett</td><td>Logically separate Q.921 TEI link processing from D channel control.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2070">2070</a></td><td>rmudgett</td><td>Restructure the Q.931 call record to layer 2 link association.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2077">2077</a></td><td>rmudgett</td><td>Extract the layer 2 link structure out of struct pri.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2078">2078</a></td><td>rmudgett</td><td>Partial support for dynamic interfaces with NFAS.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2079">2079</a></td><td>rmudgett</td><td>Fixes CC agents not automatically clearing if T309 clears the original call.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-46">PRI-46</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2098">2098</a></td><td>rmudgett</td><td>Mainly put space after switch and while keywords.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2101">2101</a></td><td>rmudgett</td><td>Remove all TEIs when NT PTMP starts.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-51">PRI-51</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2102">2102</a></td><td>rmudgett</td><td>Remove unneeded struct q921_link.mdl_error_state member.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2103">2103</a></td><td>rmudgett</td><td>Convert TEI identity defines to enum and create 2str() function.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2104">2104</a></td><td>rmudgett</td><td>Q.921 TEI assignment procedure corrections.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2105">2105</a></td><td>rmudgett</td><td>Added TEI identity check feature to reclaim dead TEIs.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-51">PRI-51</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2109">2109</a></td><td>rmudgett</td><td>Minor MDL handler changes.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2166">2166</a></td><td>rmudgett</td><td>Fix bizarre logic to work as originally intended in q931_notify().</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2167">2167</a></td><td>rmudgett</td><td>Return error if q931_notify() cannot send NOTIFY.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2169">2169</a></td><td>rmudgett</td><td>Fix regression when reorganized for struct pri and struct q921_link.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2170">2170</a></td><td>rmudgett</td><td>Better HOLD/RETRIEVE collision handling.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2172">2172</a></td><td>rmudgett</td><td>Add call transfer exchange of subaddresses support and fix PTMP call transfer signaling.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-47">PRI-47</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2174">2174</a></td><td>rmudgett</td><td>Fix Q.931 retried SETUP not sending facility ies.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2175">2175</a></td><td>rmudgett</td><td>Invalid PTMP redirecting signaling as TE towards NT.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-53">PRI-53</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2183">2183</a></td><td>rmudgett</td><td>Enable LIBPRI_COUNTERS code by default.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-61">PRI-61</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2190">2190</a></td><td>rmudgett</td><td>Add display ie text handling options.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2200">2200</a></td><td>rmudgett</td><td>Fix I-frame retransmission quirks.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-60">PRI-60</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2202">2202</a></td><td>rmudgett</td><td>Crash if NFAS swaps D channels on a call with an active timer.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-58">PRI-58</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2204">2204</a></td><td>rmudgett</td><td>* Added switchtype to ROSE invoke operation not handled message.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2207">2207</a></td><td>rmudgett</td><td>B channel lost by incoming call in BRI NT PTMP mode.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2227">2227</a></td><td>rmudgett</td><td>Add determined remote node type to pri_dump_info_str().</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2232">2232</a></td><td>rmudgett</td><td>Improve the usefulness of pri_dump_info_str() output.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2233">2233</a></td><td>rmudgett</td><td>Fix valgrind reported invalid read/write for display text feature.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2236">2236</a></td><td>rmudgett</td><td>Miscellaneous cleanup before T312 branch merge.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2238">2238</a></td><td>rmudgett</td><td>Implement the mandatory T312 timer for NT PTMP broadcast SETUP calls.</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/PRI-32">PRI-32</a></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2258">2258</a></td><td>rmudgett</td><td>CallRerouting response not sent if peer hangs up first.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/libpri/branches/1.4?view=revision&revision=2262">2262</a></td><td>rmudgett</td><td>Problems with ISDN MWI to phones.</td>
|
||||
<td></td></tr></table>
|
||||
<hr/>
|
||||
<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
|
||||
<pre>
|
||||
Makefile | 39
|
||||
doc/cc_ptmp_agent.fsm | 376 +
|
||||
doc/cc_ptmp_agent_flattened.fsm | 494 ++
|
||||
doc/cc_ptmp_monitor.fsm | 181
|
||||
doc/cc_ptmp_monitor_flattened.fsm | 225 +
|
||||
doc/cc_ptp_agent.fsm | 152
|
||||
doc/cc_ptp_agent_flattened.fsm | 200
|
||||
doc/cc_ptp_monitor.fsm | 168
|
||||
doc/cc_ptp_monitor_flattened.fsm | 217 +
|
||||
doc/cc_qsig_agent.fsm | 140
|
||||
doc/cc_qsig_agent_flattened.fsm | 187
|
||||
doc/cc_qsig_monitor.fsm | 249 +
|
||||
doc/cc_qsig_monitor_flattened.fsm | 327 +
|
||||
libpri.h | 900 ++++
|
||||
pri.c | 1151 ++++-
|
||||
pri_aoc.c | 1764 ++++++++
|
||||
pri_cc.c | 7884 ++++++++++++++++++++++++++++++++++++++
|
||||
pri_facility.c | 1823 +++++++-
|
||||
pri_facility.h | 87
|
||||
pri_internal.h | 593 ++
|
||||
pri_q921.h | 115
|
||||
pri_q931.h | 27
|
||||
prisched.c | 228 -
|
||||
pritest.c | 83
|
||||
q921.c | 2942 +++++++++-----
|
||||
q931.c | 3388 ++++++++++++----
|
||||
rose.c | 536 ++
|
||||
rose.h | 856 ++++
|
||||
rose_etsi_aoc.c | 9
|
||||
rose_etsi_cc.c | 1853 ++++++++
|
||||
rose_etsi_mwi.c | 686 +++
|
||||
rose_internal.h | 205
|
||||
rose_qsig_cc.c | 984 ++++
|
||||
rose_qsig_mwi.c | 9
|
||||
rose_qsig_name.c | 1
|
||||
rosetest.c | 919 ++++
|
||||
36 files changed, 27493 insertions(+), 2505 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,483 +0,0 @@
|
||||
Release Summary
|
||||
|
||||
libpri-1.4.12
|
||||
|
||||
Date: 2011-07-05
|
||||
|
||||
<asteriskteam@digium.com>
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Summary
|
||||
2. Contributors
|
||||
3. Closed Issues
|
||||
4. Other Changes
|
||||
5. Diffstat
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Summary
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This release includes only bug fixes. The changes included were made only
|
||||
to address problems that have been identified in this release series.
|
||||
Users should be able to safely upgrade to this version if this release
|
||||
series is already in use. Users considering upgrading from a previous
|
||||
release series are strongly encouraged to review the UPGRADE.txt document
|
||||
as well as the CHANGES document for information about upgrading to this
|
||||
release series.
|
||||
|
||||
The data in this summary reflects changes that have been made since the
|
||||
previous release, libpri-1.4.11.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Contributors
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This table lists the people who have submitted code, those that have
|
||||
tested patches, as well as those that reported issues on the issue tracker
|
||||
that were resolved in this release. For coders, the number is how many of
|
||||
their patches (of any size) were committed into this release. For testers,
|
||||
the number is the number of times their name was listed as assisting with
|
||||
testing a patch. Finally, for reporters, the number is the number of
|
||||
issues that they reported that were closed by commits that went into this
|
||||
release.
|
||||
|
||||
Coders Testers Reporters
|
||||
77 rmudgett 10 rmudgett 2 wuwu
|
||||
1 alecdavis 1 cmorford 1 alecdavis
|
||||
1 dvossel 1 ibercom 1 bklang
|
||||
1 horape 1 jcovert 1 cmorford
|
||||
1 jcollie 1 jsmith 1 gelo
|
||||
1 mattf 1 lelio 1 horape
|
||||
1 nic 1 paravoid 1 ibercom
|
||||
1 paravoid 1 patrol-cz 1 jcollie
|
||||
1 russell 1 shawkris 1 jcovert
|
||||
1 tilghman 1 wimpy 1 jims8650
|
||||
1 jmls
|
||||
1 jsmith
|
||||
1 kenner
|
||||
1 kobaz
|
||||
1 lelio
|
||||
1 nic_bellamy
|
||||
1 paravoid
|
||||
1 patrol-cz
|
||||
1 schmoozecom
|
||||
1 shawkris
|
||||
1 tomaso
|
||||
1 wimpy
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Closed Issues
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all issues from the issue tracker that were closed by
|
||||
changes that went into this release.
|
||||
|
||||
Category: Channels/chan_dahdi
|
||||
|
||||
ASTERISK-16038: getting warning message every 4 seconds
|
||||
Revision: 2113
|
||||
Reporter: jmls
|
||||
Coders: rmudgett
|
||||
|
||||
Category: Channels/chan_dahdi/NewFeature
|
||||
|
||||
ASTERISK-13410: [patch] CCBS/CCNR support for QSIG (libpri & chan_dahdi)
|
||||
Revision: 1714
|
||||
Reporter: tomaso
|
||||
Testers: rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
Category: General
|
||||
|
||||
PRI-102: [patch] [regression] Calling Number assignment logic change in
|
||||
libpri 1.4.11.
|
||||
Revision: 1823
|
||||
Reporter: ibercom
|
||||
Testers: ibercom
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-103: segfault in pri_schedule_del - ctrl invalid value
|
||||
Revision: 2015
|
||||
Reporter: wuwu
|
||||
Testers: rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-105: [patch] ISDN BRI does not recover from line faults
|
||||
Revision: 1918
|
||||
Reporter: jcovert
|
||||
Testers: jcovert, rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-107: [patch] Calling name not successfully processed on inbound QSIG
|
||||
PRI calls from Mitel PBX
|
||||
Revision: 1828
|
||||
Reporter: jims8650
|
||||
Testers: rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-110: [patch] BRI NT ptmp: Active channels not cleard when i/f goes
|
||||
down
|
||||
Revision: 1982
|
||||
Reporter: wimpy
|
||||
Testers: rmudgett, wimpy
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-112: [patch] Libpri crashes when receiving Message Type (100)
|
||||
Revision: 2021
|
||||
Reporter: gelo
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-113: [patch] Asterisk is core dumping with LibPRI
|
||||
Revision: 2015
|
||||
Reporter: schmoozecom
|
||||
Testers: rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-114: [patch] add extra IE Q931_IE_TIME_DATE to CONNECT message when in
|
||||
network mode
|
||||
Revision: 2187
|
||||
Reporter: wuwu
|
||||
Testers: rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-116: [patch] B410P gets incoming call packets on ISDN but DAHDI
|
||||
doesn't generate the call in Asterisk
|
||||
Revision: 2088
|
||||
Reporter: lelio
|
||||
Testers: lelio
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-117: SABME flood on backup D-channel in NFAS configuration
|
||||
Revision: 2111
|
||||
Reporter: bklang
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-120: [patch] Swap of master/slave in pri_enslave incorrect
|
||||
Revision: 2192
|
||||
Reporter: jcollie
|
||||
Coders: jcollie
|
||||
|
||||
PRI-121: [patch] Caller ID Name always blank
|
||||
Revision: 2206
|
||||
Reporter: cmorford
|
||||
Testers: cmorford
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-62: [patch] Inband disconnect setting does nothing
|
||||
Revision: 1794
|
||||
Reporter: paravoid
|
||||
Testers: paravoid
|
||||
Coders: paravoid
|
||||
|
||||
PRI-81: [patch] q921_rnr_rx Q921_TIMER_RECOVERY SDL issue
|
||||
Revision: 1845
|
||||
Reporter: alecdavis
|
||||
Coders: alecdavis
|
||||
|
||||
PRI-94: [patch] pritest hadn't been ported to DAHDI
|
||||
Revision: 1833
|
||||
Reporter: horape
|
||||
Coders: horape
|
||||
|
||||
PRI-95: [patch] LibPRI problem with restart of PBX processor (Testing SVN
|
||||
1688)
|
||||
Revision: 1962
|
||||
Reporter: shawkris
|
||||
Testers: shawkris, rmudgett
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-98: [patch] Regression in libpri 1.4.11 - handling ROSE
|
||||
Revision: 1785
|
||||
Reporter: patrol-cz
|
||||
Testers: rmudgett, patrol-cz
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-99: [patch] CallerID name not transmitted on versions of LibPRI after
|
||||
1.4.10.2
|
||||
Revision: 1810
|
||||
Reporter: jsmith
|
||||
Testers: rmudgett, jsmith
|
||||
Coders: rmudgett
|
||||
|
||||
Category: NewFeature
|
||||
|
||||
PRI-122: Option needed for IE_TIME_DATE to be optional on connect
|
||||
Revision: 2266
|
||||
Reporter: kenner
|
||||
Coders: rmudgett
|
||||
|
||||
PRI-54: [patch] Add pri_new_bri_cb() API - Create BRI D-channel with user
|
||||
defined I/O callbacks and data
|
||||
Revision: 1836
|
||||
Reporter: nic_bellamy
|
||||
Coders: nic
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Commits Not Associated with an Issue
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all changes that went into this release that did not
|
||||
directly close an issue from the issue tracker. The commits may have been
|
||||
marked as being related to an issue. If that is the case, the issue
|
||||
numbers are listed here, as well.
|
||||
|
||||
+------------------------------------------------------------------------+
|
||||
| Revision | Author | Summary | Issues |
|
||||
| | | | Referenced |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1723 | rmudgett | Added ETSI Explicit Call Transfer | |
|
||||
| | | (ECT) support. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1737 | rmudgett | ETSI Advice Of Charge (AOC) event | |
|
||||
| | | reporting. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1746 | rmudgett | ETSI Call Waiting support. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1757 | rmudgett | ETSI Malicious Call ID support. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1767 | rmudgett | ETSI Message Waiting Indication | |
|
||||
| | | (MWI) support. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1776 | dvossel | support for sending ETSI advice of | |
|
||||
| | | charge | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1829 | rmudgett | Added a libpri version output line | |
|
||||
| | | as a sanity check for rosetest. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1830 | rmudgett | Only need to output one version of | |
|
||||
| | | the version message. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Renamed local struct pri *pri | |
|
||||
| 1842 | rmudgett | variables to struct pri *ctrl in | |
|
||||
| | | q921.c. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1848 | rmudgett | Improved Q.921/Q.931 debug output. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Learn (AGAIN!) why state 7 and | |
|
||||
| 1852 | rmudgett | state 8 transitions were | |
|
||||
| | | suppressed. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1853 | rmudgett | No audio on inbound J1 calls. | PRI-35 |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Add silly fake MDL error Z for | |
|
||||
| 1878 | mattf | kicking L2 to reactivate if a DISC | |
|
||||
| | | or DM is received in proper states | |
|
||||
| | | on PTP links. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1883 | rmudgett | Don't silently fail to post our | |
|
||||
| | | fake MDL-ERROR(Z). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1884 | rmudgett | Added gripe check to rosetest for | |
|
||||
| | | invalid operation and error codes. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1894 | rmudgett | Make pri_dump_event() only print | |
|
||||
| | | the event name. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1904 | rmudgett | Add support to receive ECMA-164 2nd | PRI-37 |
|
||||
| | | edition OID name ROSE messages. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1912 | rmudgett | Convert most references of | |
|
||||
| | | Q931_MAX_TEI to use ARRAY_LEN(). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Q.921 improvements from comparing | |
|
||||
| 1923 | rmudgett | Q.921 SDL diagrams with | |
|
||||
| | | implementation. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1928 | rmudgett | Q.921/Q.931 message debug output | |
|
||||
| | | improvements. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Reduced fake MDL-ERROR (Z) message | |
|
||||
| 1929 | rmudgett | severity to be visible only when | |
|
||||
| | | debugging enabled. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1955 | rmudgett | Don't crash in __pri_new_tei() if a | |
|
||||
| | | GR303 subchannel creation fails. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1958 | rmudgett | Balance curly braces in | |
|
||||
| | | post_handle_q931_message(). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Prevent a CONNECT message from | |
|
||||
| 1961 | rmudgett | sending a CONNECT ACKNOWLEDGE in | PRI-95 |
|
||||
| | | the wrong state. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Added more parameter checks to | |
|
||||
| 1965 | rmudgett | pri_set_timer() and | |
|
||||
| | | pri_get_timer(). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 1976 | rmudgett | Fix spelling error in PTMP agent | |
|
||||
| | | FSM files. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | PRI links do not retain active | |
|
||||
| 1991 | rmudgett | calls if the link comes back before | |
|
||||
| | | T309 expires. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2001 | russell | Makefile tweaks to allow building | |
|
||||
| | | for code coverage analysis. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2009 | tilghman | Minor changes to make libpri build | |
|
||||
| | | on Mac OS X | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Create two versions of call ptr | |
|
||||
| 2027 | rmudgett | verify. One gripes and one does | |
|
||||
| | | not. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2042 | rmudgett | Dump Q.931 message using the TEI | |
|
||||
| | | value the message came in with. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2063 | rmudgett | Logically separate Q.921 TEI link | |
|
||||
| | | processing from D channel control. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2070 | rmudgett | Restructure the Q.931 call record | |
|
||||
| | | to layer 2 link association. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2077 | rmudgett | Extract the layer 2 link structure | |
|
||||
| | | out of struct pri. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2078 | rmudgett | Partial support for dynamic | |
|
||||
| | | interfaces with NFAS. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Fixes CC agents not automatically | |
|
||||
| 2079 | rmudgett | clearing if T309 clears the | PRI-46 |
|
||||
| | | original call. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2098 | rmudgett | Mainly put space after switch and | |
|
||||
| | | while keywords. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2101 | rmudgett | Remove all TEIs when NT PTMP | PRI-51 |
|
||||
| | | starts. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2102 | rmudgett | Remove unneeded struct | |
|
||||
| | | q921_link.mdl_error_state member. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2103 | rmudgett | Convert TEI identity defines to | |
|
||||
| | | enum and create 2str() function. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2104 | rmudgett | Q.921 TEI assignment procedure | |
|
||||
| | | corrections. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2105 | rmudgett | Added TEI identity check feature to | PRI-51 |
|
||||
| | | reclaim dead TEIs. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2109 | rmudgett | Minor MDL handler changes. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Fix bizarre logic to work as | |
|
||||
| 2166 | rmudgett | originally intended in | |
|
||||
| | | q931_notify(). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2167 | rmudgett | Return error if q931_notify() | |
|
||||
| | | cannot send NOTIFY. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2169 | rmudgett | Fix regression when reorganized for | |
|
||||
| | | struct pri and struct q921_link. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2170 | rmudgett | Better HOLD/RETRIEVE collision | |
|
||||
| | | handling. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Add call transfer exchange of | |
|
||||
| 2172 | rmudgett | subaddresses support and fix PTMP | PRI-47 |
|
||||
| | | call transfer signaling. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2174 | rmudgett | Fix Q.931 retried SETUP not sending | |
|
||||
| | | facility ies. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2175 | rmudgett | Invalid PTMP redirecting signaling | PRI-53 |
|
||||
| | | as TE towards NT. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2183 | rmudgett | Enable LIBPRI_COUNTERS code by | PRI-61 |
|
||||
| | | default. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2190 | rmudgett | Add display ie text handling | |
|
||||
| | | options. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2200 | rmudgett | Fix I-frame retransmission quirks. | PRI-60 |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2202 | rmudgett | Crash if NFAS swaps D channels on a | PRI-58 |
|
||||
| | | call with an active timer. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2204 | rmudgett | * Added switchtype to ROSE invoke | |
|
||||
| | | operation not handled message. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2207 | rmudgett | B channel lost by incoming call in | |
|
||||
| | | BRI NT PTMP mode. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2227 | rmudgett | Add determined remote node type to | |
|
||||
| | | pri_dump_info_str(). | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2232 | rmudgett | Improve the usefulness of | |
|
||||
| | | pri_dump_info_str() output. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | Fix valgrind reported invalid | |
|
||||
| 2233 | rmudgett | read/write for display text | |
|
||||
| | | feature. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2236 | rmudgett | Miscellaneous cleanup before T312 | |
|
||||
| | | branch merge. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2238 | rmudgett | Implement the mandatory T312 timer | PRI-32 |
|
||||
| | | for NT PTMP broadcast SETUP calls. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2258 | rmudgett | CallRerouting response not sent if | |
|
||||
| | | peer hangs up first. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| 2262 | rmudgett | Problems with ISDN MWI to phones. | |
|
||||
+------------------------------------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Diffstat Results
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a summary of the changes to the source code that went into this
|
||||
release that was generated using the diffstat utility.
|
||||
|
||||
Makefile | 39
|
||||
doc/cc_ptmp_agent.fsm | 376 +
|
||||
doc/cc_ptmp_agent_flattened.fsm | 494 ++
|
||||
doc/cc_ptmp_monitor.fsm | 181
|
||||
doc/cc_ptmp_monitor_flattened.fsm | 225 +
|
||||
doc/cc_ptp_agent.fsm | 152
|
||||
doc/cc_ptp_agent_flattened.fsm | 200
|
||||
doc/cc_ptp_monitor.fsm | 168
|
||||
doc/cc_ptp_monitor_flattened.fsm | 217 +
|
||||
doc/cc_qsig_agent.fsm | 140
|
||||
doc/cc_qsig_agent_flattened.fsm | 187
|
||||
doc/cc_qsig_monitor.fsm | 249 +
|
||||
doc/cc_qsig_monitor_flattened.fsm | 327 +
|
||||
libpri.h | 900 ++++
|
||||
pri.c | 1151 ++++-
|
||||
pri_aoc.c | 1764 ++++++++
|
||||
pri_cc.c | 7884 ++++++++++++++++++++++++++++++++++++++
|
||||
pri_facility.c | 1823 +++++++-
|
||||
pri_facility.h | 87
|
||||
pri_internal.h | 593 ++
|
||||
pri_q921.h | 115
|
||||
pri_q931.h | 27
|
||||
prisched.c | 228 -
|
||||
pritest.c | 83
|
||||
q921.c | 2942 +++++++++-----
|
||||
q931.c | 3388 ++++++++++++----
|
||||
rose.c | 536 ++
|
||||
rose.h | 856 ++++
|
||||
rose_etsi_aoc.c | 9
|
||||
rose_etsi_cc.c | 1853 ++++++++
|
||||
rose_etsi_mwi.c | 686 +++
|
||||
rose_internal.h | 205
|
||||
rose_qsig_cc.c | 984 ++++
|
||||
rose_qsig_mwi.c | 9
|
||||
rose_qsig_name.c | 1
|
||||
rosetest.c | 919 ++++
|
||||
36 files changed, 27493 insertions(+), 2505 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
130
libpri.h
130
libpri.h
@@ -547,7 +547,6 @@ struct pri_rerouting_data {
|
||||
#define PRI_SUBCMD_AOC_CHARGING_REQ_RSP 22 /*!< Advice Of Charge Request Response information */
|
||||
#define PRI_SUBCMD_MCID_REQ 23 /*!< Malicious Call ID Request */
|
||||
#define PRI_SUBCMD_MCID_RSP 24 /*!< Malicious Call ID Request response */
|
||||
#define PRI_SUBCMD_DISPLAY_TEXT 25 /*!< Received display ie text */
|
||||
|
||||
#if defined(STATUS_REQUEST_PLACE_HOLDER)
|
||||
struct pri_subcmd_status_request {
|
||||
@@ -968,35 +967,6 @@ struct pri_subcmd_mcid_rsp {
|
||||
int fail_code;
|
||||
};
|
||||
|
||||
struct pri_subcmd_display_txt {
|
||||
/*!
|
||||
* \brief Character set the text is using.
|
||||
* \details
|
||||
* unknown(0),
|
||||
* iso8859-1(1),
|
||||
* enum-value-withdrawn-by-ITU-T(2)
|
||||
* iso8859-2(3),
|
||||
* iso8859-3(4),
|
||||
* iso8859-4(5),
|
||||
* iso8859-5(6),
|
||||
* iso8859-7(7),
|
||||
* iso10646-BmpString(8),
|
||||
* iso10646-utf-8String(9)
|
||||
*/
|
||||
int char_set;
|
||||
/*!
|
||||
* \brief Number of octets in the display message.
|
||||
* \note Not including any added null terminator.
|
||||
*/
|
||||
int length;
|
||||
/*!
|
||||
* \brief Display text data.
|
||||
* \note Null terminated on receive.
|
||||
* \note Does not need to be null terminated on send.
|
||||
*/
|
||||
char text[128];
|
||||
};
|
||||
|
||||
struct pri_subcommand {
|
||||
/*! PRI_SUBCMD_xxx defined values */
|
||||
int cmd;
|
||||
@@ -1029,7 +999,6 @@ struct pri_subcommand {
|
||||
struct pri_subcmd_aoc_e aoc_e;
|
||||
struct pri_subcmd_mcid_req mcid_req;
|
||||
struct pri_subcmd_mcid_rsp mcid_rsp;
|
||||
struct pri_subcmd_display_txt display;
|
||||
} u;
|
||||
};
|
||||
|
||||
@@ -1621,11 +1590,11 @@ int pri_mwi_deactivate(struct pri *pri, q931_call *c, char *caller, int callerpl
|
||||
* \brief Send a MWI indication on the specified D channel.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param mailbox Party receiving notification.
|
||||
* \param mailbox Controlling party number (NULL if not present).
|
||||
* \param basic_service Basic service enum (-1 if not present).
|
||||
* \param num_messages NumberOfMessages (-1 if not present).
|
||||
* \param caller_id Party leaving message (NULL if not present).
|
||||
* \param timestamp When message left. (Generalized Time format, NULL if not present)
|
||||
* \param caller_id Controlling party privided number (NULL if not present).
|
||||
* \param timestamp Generalized Time format (NULL if not present).
|
||||
* \param message_reference Message reference number (-1 if not present).
|
||||
* \param message_status Message status: added(0), removed(1).
|
||||
*
|
||||
@@ -1636,27 +1605,6 @@ int pri_mwi_indicate(struct pri *ctrl, const struct pri_party_id *mailbox,
|
||||
int basic_service, int num_messages, const struct pri_party_id *caller_id,
|
||||
const char *timestamp, int message_reference, int message_status);
|
||||
|
||||
/*!
|
||||
* \brief Send a MWI indication on the specified D channel. (Take two)
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param mailbox Party receiving notification.
|
||||
* \param vm_id Voicemail system number (NULL if not present).
|
||||
* \param basic_service Basic service enum (-1 if not present).
|
||||
* \param num_messages NumberOfMessages (-1 if not present).
|
||||
* \param caller_id Party leaving message (NULL if not present).
|
||||
* \param timestamp When message left. (Generalized Time format, NULL if not present)
|
||||
* \param message_reference Message reference number (-1 if not present).
|
||||
* \param message_status Message status: added(0), removed(1).
|
||||
*
|
||||
* \retval 0 on success.
|
||||
* \retval -1 on error.
|
||||
*/
|
||||
int pri_mwi_indicate_v2(struct pri *ctrl, const struct pri_party_id *mailbox,
|
||||
const struct pri_party_id *vm_id, int basic_service, int num_messages,
|
||||
const struct pri_party_id *caller_id, const char *timestamp, int message_reference,
|
||||
int message_status);
|
||||
|
||||
/* Set service message support flag */
|
||||
int pri_set_service_message_support(struct pri *pri, int supportflag);
|
||||
|
||||
@@ -1892,55 +1840,6 @@ int pri_transfer_rsp(struct pri *ctrl, q931_call *call, int invoke_id, int is_su
|
||||
*/
|
||||
void pri_aoc_events_enable(struct pri *ctrl, int enable);
|
||||
|
||||
#define PRI_DISPLAY_OPTION_BLOCK (1 << 0) /*!< Do not pass display text. */
|
||||
#define PRI_DISPLAY_OPTION_NAME_INITIAL (1 << 1) /*!< Use display in SETUP/CONNECT for name. */
|
||||
#define PRI_DISPLAY_OPTION_NAME_UPDATE (1 << 2) /*!< Use display in FACILITY/NOTIFY for COLP name if appropriate. */
|
||||
#define PRI_DISPLAY_OPTION_TEXT (1 << 3) /*!< Pass arbitrary display text in INFORMATION messages during call. */
|
||||
|
||||
/*!
|
||||
* \brief Set the display ie send policy options.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param flags Option flags to apply.
|
||||
*
|
||||
* \note
|
||||
* If no flags set then legacy default behaviour.
|
||||
*
|
||||
* \note
|
||||
* Not all options are supported by all switches.
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
void pri_display_options_send(struct pri *ctrl, unsigned long flags);
|
||||
|
||||
/*!
|
||||
* \brief Set the display ie receive policy options.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param flags Option flags to apply.
|
||||
*
|
||||
* \note
|
||||
* If no flags set then legacy default behaviour.
|
||||
*
|
||||
* \note
|
||||
* Not all options are supported by all switches.
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
void pri_display_options_receive(struct pri *ctrl, unsigned long flags);
|
||||
|
||||
/*!
|
||||
* \brief Send display text during a call.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param call Q.931 call leg
|
||||
* \param display Display text to send.
|
||||
*
|
||||
* \retval 0 on success.
|
||||
* \retval -1 on error.
|
||||
*/
|
||||
int pri_display_text(struct pri *ctrl, q931_call *call, const struct pri_subcmd_display_txt *display);
|
||||
|
||||
/*!
|
||||
* \brief Set the call hold feature enable flag.
|
||||
*
|
||||
@@ -2102,27 +2001,6 @@ void pri_cc_status(struct pri *ctrl, long cc_id, int status);
|
||||
int pri_cc_call(struct pri *ctrl, long cc_id, q931_call *call, struct pri_sr *req);
|
||||
void pri_cc_cancel(struct pri *ctrl, long cc_id);
|
||||
|
||||
/* Date/time ie send policy option values. */
|
||||
#define PRI_DATE_TIME_SEND_DEFAULT 0 /*!< Send date/time ie default. */
|
||||
#define PRI_DATE_TIME_SEND_NO 1 /*!< Send date/time ie never. */
|
||||
#define PRI_DATE_TIME_SEND_DATE 2 /*!< Send date/time ie date only. */
|
||||
#define PRI_DATE_TIME_SEND_DATE_HH 3 /*!< Send date/time ie date and hour. */
|
||||
#define PRI_DATE_TIME_SEND_DATE_HHMM 4 /*!< Send date/time ie date, hour, and minute. */
|
||||
#define PRI_DATE_TIME_SEND_DATE_HHMMSS 5 /*!< Send date/time ie date, hour, minute, and second. */
|
||||
|
||||
/*!
|
||||
* \brief Set the date/time ie send policy option.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param option Policy option to set.
|
||||
*
|
||||
* \note
|
||||
* Only valid in NT mode.
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
void pri_date_time_send_option(struct pri *ctrl, int option);
|
||||
|
||||
/* Get/Set PRI Timers */
|
||||
#define PRI_GETSET_TIMERS
|
||||
int pri_set_timer(struct pri *pri, int timer, int value);
|
||||
@@ -2195,8 +2073,6 @@ enum PRI_TIMERS_AND_COUNTERS {
|
||||
PRI_TIMER_QSIG_CC_T3, /*!< Max time to wait for user A to respond to user B availability. */
|
||||
PRI_TIMER_QSIG_CC_T4, /*!< Path reservation supervision timeout. */
|
||||
|
||||
PRI_TIMER_T312, /*!< Supervise broadcast SETUP message call reference retention. */
|
||||
|
||||
/* Must be last in the enum list */
|
||||
PRI_MAX_TIMERS
|
||||
};
|
||||
|
||||
352
pri.c
352
pri.c
@@ -77,7 +77,6 @@ static const struct pri_timer_table pri_timer[] = {
|
||||
{ "T308", PRI_TIMER_T308, PRI_ALL_SWITCHES },
|
||||
{ "T309", PRI_TIMER_T309, PRI_ALL_SWITCHES },
|
||||
{ "T310", PRI_TIMER_T310, PRI_ALL_SWITCHES },
|
||||
{ "T312", PRI_TIMER_T312, PRI_ALL_SWITCHES },
|
||||
{ "T313", PRI_TIMER_T313, PRI_ALL_SWITCHES },
|
||||
{ "T314", PRI_TIMER_T314, PRI_ALL_SWITCHES },
|
||||
{ "T316", PRI_TIMER_T316, PRI_ALL_SWITCHES },
|
||||
@@ -182,7 +181,6 @@ static void pri_default_timers(struct pri *ctrl, int switchtype)
|
||||
ctrl->timers[PRI_TIMER_T305] = 30 * 1000; /* Wait for DISCONNECT acknowledge */
|
||||
ctrl->timers[PRI_TIMER_T308] = 4 * 1000; /* Wait for RELEASE acknowledge */
|
||||
ctrl->timers[PRI_TIMER_T309] = 6 * 1000; /* Time to wait before clearing calls in case of D-channel transient event. Q.931 specifies 6-90 seconds */
|
||||
ctrl->timers[PRI_TIMER_T312] = (4 + 2) * 1000;/* Supervise broadcast SETUP message call reference retention. T303 + 2 seconds */
|
||||
ctrl->timers[PRI_TIMER_T313] = 4 * 1000; /* Wait for CONNECT acknowledge, CPE side only */
|
||||
|
||||
ctrl->timers[PRI_TIMER_TM20] = 2500; /* Max time awaiting XID response - Q.921 Appendix IV */
|
||||
@@ -290,81 +288,6 @@ static int __pri_write(struct pri *pri, void *buf, int buflen)
|
||||
return res;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Determine the default display text send options.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
*
|
||||
* \return Default display text send options. (legacy behaviour defaults)
|
||||
*/
|
||||
static unsigned long pri_display_options_send_default(struct pri *ctrl)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
switch (ctrl->switchtype) {
|
||||
case PRI_SWITCH_QSIG:
|
||||
flags = PRI_DISPLAY_OPTION_BLOCK;
|
||||
break;
|
||||
case PRI_SWITCH_EUROISDN_E1:
|
||||
case PRI_SWITCH_EUROISDN_T1:
|
||||
if (ctrl->localtype == PRI_CPE) {
|
||||
flags = PRI_DISPLAY_OPTION_BLOCK;
|
||||
break;
|
||||
}
|
||||
flags = PRI_DISPLAY_OPTION_NAME_INITIAL;
|
||||
break;
|
||||
default:
|
||||
flags = PRI_DISPLAY_OPTION_NAME_INITIAL;
|
||||
break;
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Determine the default display text receive options.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
*
|
||||
* \return Default display text receive options. (legacy behaviour defaults)
|
||||
*/
|
||||
static unsigned long pri_display_options_receive_default(struct pri *ctrl)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
switch (ctrl->switchtype) {
|
||||
case PRI_SWITCH_QSIG:
|
||||
flags = PRI_DISPLAY_OPTION_BLOCK;
|
||||
break;
|
||||
default:
|
||||
flags = PRI_DISPLAY_OPTION_NAME_INITIAL;
|
||||
break;
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Determine the default date/time send option default.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
*
|
||||
* \return Default date/time send option.
|
||||
*/
|
||||
static int pri_date_time_send_default(struct pri *ctrl)
|
||||
{
|
||||
int date_time_send;
|
||||
|
||||
if (BRI_NT_PTMP(ctrl)) {
|
||||
date_time_send = PRI_DATE_TIME_SEND_DATE_HHMM;
|
||||
} else {
|
||||
date_time_send = PRI_DATE_TIME_SEND_NO;
|
||||
}
|
||||
|
||||
return date_time_send;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Destroy the given link.
|
||||
*
|
||||
@@ -553,13 +476,12 @@ static struct pri *pri_ctrl_new(int fd, int node, int switchtype, pri_io_cb rd,
|
||||
ctrl->nsf = PRI_NSF_NONE;
|
||||
ctrl->callpool = &ctrl->localpool;
|
||||
pri_default_timers(ctrl, switchtype);
|
||||
#ifdef LIBPRI_COUNTERS
|
||||
ctrl->q921_rxcount = 0;
|
||||
ctrl->q921_txcount = 0;
|
||||
ctrl->q931_rxcount = 0;
|
||||
ctrl->q931_txcount = 0;
|
||||
|
||||
ctrl->display_flags.send = pri_display_options_send_default(ctrl);
|
||||
ctrl->display_flags.receive = pri_display_options_receive_default(ctrl);
|
||||
#endif
|
||||
switch (switchtype) {
|
||||
case PRI_SWITCH_GR303_EOC:
|
||||
ctrl->protodisc = GR303_PROTOCOL_DISCRIMINATOR;
|
||||
@@ -586,7 +508,6 @@ static struct pri *pri_ctrl_new(int fd, int node, int switchtype, pri_io_cb rd,
|
||||
tei);
|
||||
break;
|
||||
}
|
||||
ctrl->date_time_send = pri_date_time_send_default(ctrl);
|
||||
if (dummy_ctrl) {
|
||||
/* Initialize the dummy call reference call record. */
|
||||
ctrl->link.dummy_call = &dummy_ctrl->dummy_call;
|
||||
@@ -1028,9 +949,6 @@ int pri_connected_line_update(struct pri *ctrl, q931_call *call, const struct pr
|
||||
{
|
||||
struct q931_party_id party_id;
|
||||
unsigned idx;
|
||||
unsigned new_name;
|
||||
unsigned new_number;
|
||||
unsigned new_subaddress;
|
||||
struct q931_call *subcall;
|
||||
|
||||
if (!ctrl || !pri_is_call_valid(ctrl, call)) {
|
||||
@@ -1039,14 +957,13 @@ int pri_connected_line_update(struct pri *ctrl, q931_call *call, const struct pr
|
||||
|
||||
pri_copy_party_id_to_q931(&party_id, &connected->id);
|
||||
q931_party_id_fixup(ctrl, &party_id);
|
||||
|
||||
new_name = q931_party_name_cmp(&party_id.name, &call->local_id.name);
|
||||
new_number = q931_party_number_cmp(&party_id.number, &call->local_id.number);
|
||||
new_subaddress = party_id.subaddress.valid
|
||||
&& q931_party_subaddress_cmp(&party_id.subaddress, &call->local_id.subaddress);
|
||||
|
||||
/* Update the call and all subcalls with new local_id. */
|
||||
if (!q931_party_id_cmp(&party_id, &call->local_id)) {
|
||||
/* The local party information did not change so do nothing. */
|
||||
return 0;
|
||||
}
|
||||
call->local_id = party_id;
|
||||
|
||||
/* Update all subcalls with new local_id. */
|
||||
if (call->outboundbroadcast && call->master_call == call) {
|
||||
for (idx = 0; idx < ARRAY_LEN(call->subcalls); ++idx) {
|
||||
subcall = call->subcalls[idx];
|
||||
@@ -1065,100 +982,23 @@ int pri_connected_line_update(struct pri *ctrl, q931_call *call, const struct pr
|
||||
* The local party transferred to someone else before
|
||||
* the remote end answered.
|
||||
*/
|
||||
switch (ctrl->switchtype) {
|
||||
case PRI_SWITCH_EUROISDN_E1:
|
||||
case PRI_SWITCH_EUROISDN_T1:
|
||||
if (BRI_NT_PTMP(ctrl)) {
|
||||
/*
|
||||
* NT PTMP mode
|
||||
*
|
||||
* We should not send these messages to the network if we are
|
||||
* the CPE side since phones do not transfer calls within
|
||||
* themselves. Well... If you consider handing the handset to
|
||||
* someone else a transfer then how is the network to know?
|
||||
*/
|
||||
if (new_number) {
|
||||
q931_notify_redirection(ctrl, call, PRI_NOTIFY_TRANSFER_ACTIVE,
|
||||
&party_id.name, &party_id.number);
|
||||
}
|
||||
if (new_subaddress || (party_id.subaddress.valid && new_number)) {
|
||||
q931_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
} else if (PTP_MODE(ctrl)) {
|
||||
/* PTP mode */
|
||||
if (new_number) {
|
||||
/* Immediately send EctInform APDU, callStatus=answered(0) */
|
||||
send_call_transfer_complete(ctrl, call, 0);
|
||||
}
|
||||
if (new_subaddress || (party_id.subaddress.valid && new_number)) {
|
||||
q931_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PRI_SWITCH_QSIG:
|
||||
if (new_name || new_number) {
|
||||
/* Immediately send CallTransferComplete APDU, callStatus=answered(0) */
|
||||
send_call_transfer_complete(ctrl, call, 0);
|
||||
}
|
||||
if (new_subaddress
|
||||
|| (party_id.subaddress.valid && (new_name || new_number))) {
|
||||
q931_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Q931_CALL_STATE_ACTIVE:
|
||||
switch (ctrl->switchtype) {
|
||||
case PRI_SWITCH_EUROISDN_E1:
|
||||
case PRI_SWITCH_EUROISDN_T1:
|
||||
if (BRI_NT_PTMP(ctrl)) {
|
||||
/*
|
||||
* NT PTMP mode
|
||||
*
|
||||
* We should not send these messages to the network if we are
|
||||
* the CPE side since phones do not transfer calls within
|
||||
* themselves. Well... If you consider handing the handset to
|
||||
* someone else a transfer then how is the network to know?
|
||||
*/
|
||||
if (new_number) {
|
||||
#if defined(USE_NOTIFY_FOR_ECT)
|
||||
/*
|
||||
* Some ISDN phones only handle the NOTIFY message that the
|
||||
* EN 300-369 spec says should be sent only if the call has not
|
||||
* connected yet.
|
||||
*/
|
||||
q931_notify_redirection(ctrl, call, PRI_NOTIFY_TRANSFER_ACTIVE,
|
||||
&party_id.name, &party_id.number);
|
||||
#else
|
||||
q931_request_subaddress(ctrl, call, PRI_NOTIFY_TRANSFER_ACTIVE,
|
||||
&party_id.name, &party_id.number);
|
||||
#endif /* defined(USE_NOTIFY_FOR_ECT) */
|
||||
}
|
||||
if (new_subaddress || (party_id.subaddress.valid && new_number)) {
|
||||
q931_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
} else if (PTP_MODE(ctrl)) {
|
||||
if (PTMP_MODE(ctrl)) {
|
||||
/* PTMP mode */
|
||||
q931_notify_redirection(ctrl, call, PRI_NOTIFY_TRANSFER_ACTIVE,
|
||||
&call->local_id.number);
|
||||
} else {
|
||||
/* PTP mode */
|
||||
if (new_number) {
|
||||
/* Immediately send EctInform APDU, callStatus=answered(0) */
|
||||
send_call_transfer_complete(ctrl, call, 0);
|
||||
}
|
||||
if (new_subaddress || (party_id.subaddress.valid && new_number)) {
|
||||
q931_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
/* Immediately send EctInform APDU, callStatus=answered(0) */
|
||||
send_call_transfer_complete(ctrl, call, 0);
|
||||
}
|
||||
break;
|
||||
case PRI_SWITCH_QSIG:
|
||||
if (new_name || new_number) {
|
||||
/* Immediately send CallTransferComplete APDU, callStatus=answered(0) */
|
||||
send_call_transfer_complete(ctrl, call, 0);
|
||||
}
|
||||
if (new_subaddress
|
||||
|| (party_id.subaddress.valid && (new_name || new_number))) {
|
||||
q931_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
/* Immediately send CallTransferComplete APDU, callStatus=answered(0) */
|
||||
send_call_transfer_complete(ctrl, call, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -1238,18 +1078,9 @@ int pri_redirecting_update(struct pri *ctrl, q931_call *call, const struct pri_p
|
||||
case PRI_SWITCH_EUROISDN_E1:
|
||||
case PRI_SWITCH_EUROISDN_T1:
|
||||
if (PTMP_MODE(ctrl)) {
|
||||
if (NT_MODE(ctrl)) {
|
||||
/*
|
||||
* NT PTMP mode
|
||||
*
|
||||
* We should not send these messages to the network if we are
|
||||
* the CPE side since phones do not redirect calls within
|
||||
* themselves. Well... If you consider someone else picking up
|
||||
* the handset a redirection then how is the network to know?
|
||||
*/
|
||||
q931_notify_redirection(ctrl, call, PRI_NOTIFY_CALL_DIVERTING, NULL,
|
||||
&call->redirecting.to.number);
|
||||
}
|
||||
/* PTMP mode */
|
||||
q931_notify_redirection(ctrl, call, PRI_NOTIFY_CALL_DIVERTING,
|
||||
&call->redirecting.to.number);
|
||||
break;
|
||||
}
|
||||
/* PTP mode - same behaviour as Q.SIG */
|
||||
@@ -1732,13 +1563,11 @@ char *pri_dump_info_str(struct pri *ctrl)
|
||||
char *buf;
|
||||
size_t buf_size;
|
||||
size_t used;
|
||||
#ifdef LIBPRI_COUNTERS
|
||||
struct q921_frame *f;
|
||||
struct q921_link *link;
|
||||
struct pri_cc_record *cc_record;
|
||||
struct q931_call *call;
|
||||
unsigned num_calls;
|
||||
unsigned num_globals;
|
||||
unsigned q921outstanding;
|
||||
#endif
|
||||
unsigned idx;
|
||||
unsigned long switch_bit;
|
||||
|
||||
@@ -1756,12 +1585,30 @@ char *pri_dump_info_str(struct pri *ctrl)
|
||||
used = 0;
|
||||
used = pri_snprintf(buf, used, buf_size, "Switchtype: %s\n",
|
||||
pri_switch2str(ctrl->switchtype));
|
||||
used = pri_snprintf(buf, used, buf_size, "Type: %s%s%s\n",
|
||||
ctrl->bri ? "BRI " : "",
|
||||
pri_node2str(ctrl->localtype),
|
||||
PTMP_MODE(ctrl) ? " PTMP" : "");
|
||||
used = pri_snprintf(buf, used, buf_size, "Remote type: %s\n",
|
||||
pri_node2str(ctrl->remotetype));
|
||||
used = pri_snprintf(buf, used, buf_size, "Type: %s\n", pri_node2str(ctrl->localtype));
|
||||
#ifdef LIBPRI_COUNTERS
|
||||
/* Remember that Q921 Counters include Q931 packets (and any retransmissions) */
|
||||
used = pri_snprintf(buf, used, buf_size, "Q931 RX: %d\n", ctrl->q931_rxcount);
|
||||
used = pri_snprintf(buf, used, buf_size, "Q931 TX: %d\n", ctrl->q931_txcount);
|
||||
used = pri_snprintf(buf, used, buf_size, "Q921 RX: %d\n", ctrl->q921_rxcount);
|
||||
used = pri_snprintf(buf, used, buf_size, "Q921 TX: %d\n", ctrl->q921_txcount);
|
||||
for (link = &ctrl->link; link; link = link->next) {
|
||||
q921outstanding = 0;
|
||||
for (f = link->tx_queue; f; f = f->next) {
|
||||
++q921outstanding;
|
||||
}
|
||||
used = pri_snprintf(buf, used, buf_size, "Q921 Outstanding: %u (TEI=%d)\n",
|
||||
q921outstanding, link->tei);
|
||||
}
|
||||
#endif
|
||||
#if 0
|
||||
used = pri_snprintf(buf, used, buf_size, "Window Length: %d/%d\n",
|
||||
ctrl->timers[PRI_TIMER_K], ctrl->window);
|
||||
used = pri_snprintf(buf, used, buf_size, "Sentrej: %d\n", ctrl->sentrej);
|
||||
used = pri_snprintf(buf, used, buf_size, "SolicitFbit: %d\n", ctrl->solicitfbit);
|
||||
used = pri_snprintf(buf, used, buf_size, "Retrans: %d\n", ctrl->retrans);
|
||||
used = pri_snprintf(buf, used, buf_size, "Busy: %d\n", ctrl->busy);
|
||||
#endif
|
||||
used = pri_snprintf(buf, used, buf_size, "Overlap Dial: %d\n", ctrl->overlapdial);
|
||||
used = pri_snprintf(buf, used, buf_size, "Logical Channel Mapping: %d\n",
|
||||
ctrl->chan_mapping_logical);
|
||||
@@ -1779,52 +1626,6 @@ char *pri_dump_info_str(struct pri *ctrl)
|
||||
}
|
||||
}
|
||||
|
||||
/* Remember that Q921 Counters include Q931 packets (and any retransmissions) */
|
||||
used = pri_snprintf(buf, used, buf_size, "Q931 RX: %d\n", ctrl->q931_rxcount);
|
||||
used = pri_snprintf(buf, used, buf_size, "Q931 TX: %d\n", ctrl->q931_txcount);
|
||||
used = pri_snprintf(buf, used, buf_size, "Q921 RX: %d\n", ctrl->q921_rxcount);
|
||||
used = pri_snprintf(buf, used, buf_size, "Q921 TX: %d\n", ctrl->q921_txcount);
|
||||
for (link = &ctrl->link; link; link = link->next) {
|
||||
q921outstanding = 0;
|
||||
for (f = link->tx_queue; f; f = f->next) {
|
||||
++q921outstanding;
|
||||
}
|
||||
used = pri_snprintf(buf, used, buf_size, "Q921 Outstanding: %u (TEI=%d)\n",
|
||||
q921outstanding, link->tei);
|
||||
}
|
||||
|
||||
/* Count the call records in existance. Useful to check for unreleased calls. */
|
||||
num_calls = 0;
|
||||
num_globals = 0;
|
||||
for (call = *ctrl->callpool; call; call = call->next) {
|
||||
if (!(call->cr & ~Q931_CALL_REFERENCE_FLAG)) {
|
||||
++num_globals;
|
||||
continue;
|
||||
}
|
||||
++num_calls;
|
||||
if (call->outboundbroadcast) {
|
||||
used = pri_snprintf(buf, used, buf_size,
|
||||
"Master call subcall count: %d\n", q931_get_subcall_count(call));
|
||||
}
|
||||
}
|
||||
used = pri_snprintf(buf, used, buf_size, "Total active-calls:%u global:%u\n",
|
||||
num_calls, num_globals);
|
||||
|
||||
/*
|
||||
* List simplified call completion records.
|
||||
*
|
||||
* This should be last in the output because it could overflow
|
||||
* the buffer.
|
||||
*/
|
||||
used = pri_snprintf(buf, used, buf_size, "CC records:\n");
|
||||
for (cc_record = ctrl->cc.pool; cc_record; cc_record = cc_record->next) {
|
||||
used = pri_snprintf(buf, used, buf_size,
|
||||
" %ld A:%s B:%s state:%s\n", cc_record->record_id,
|
||||
cc_record->party_a.number.valid ? cc_record->party_a.number.str : "",
|
||||
cc_record->party_b.number.valid ? cc_record->party_b.number.str : "",
|
||||
pri_cc_fsm_state_str(cc_record->state));
|
||||
}
|
||||
|
||||
if (buf_size < used) {
|
||||
pri_message(ctrl,
|
||||
"pri_dump_info_str(): Produced output exceeded buffer capacity. (Truncated)\n");
|
||||
@@ -1866,7 +1667,7 @@ void pri_enslave(struct pri *master, struct pri *slave)
|
||||
/* Swap master and slave. */
|
||||
swp = master;
|
||||
master = slave;
|
||||
slave = swp;
|
||||
slave = master;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2164,62 +1965,3 @@ void pri_cc_retain_signaling_rsp(struct pri *ctrl, int signaling_retention)
|
||||
ctrl->cc.option.signaling_retention_rsp = signaling_retention ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
void pri_display_options_send(struct pri *ctrl, unsigned long flags)
|
||||
{
|
||||
if (!ctrl) {
|
||||
return;
|
||||
}
|
||||
if (!flags) {
|
||||
flags = pri_display_options_send_default(ctrl);
|
||||
}
|
||||
ctrl->display_flags.send = flags;
|
||||
}
|
||||
|
||||
void pri_display_options_receive(struct pri *ctrl, unsigned long flags)
|
||||
{
|
||||
if (!ctrl) {
|
||||
return;
|
||||
}
|
||||
if (!flags) {
|
||||
flags = pri_display_options_receive_default(ctrl);
|
||||
}
|
||||
ctrl->display_flags.receive = flags;
|
||||
}
|
||||
|
||||
int pri_display_text(struct pri *ctrl, q931_call *call, const struct pri_subcmd_display_txt *display)
|
||||
{
|
||||
if (!ctrl || !display || display->length <= 0
|
||||
|| sizeof(display->text) < display->length || !pri_is_call_valid(ctrl, call)) {
|
||||
/* Parameter sanity checks failed. */
|
||||
return -1;
|
||||
}
|
||||
return q931_display_text(ctrl, call, display);
|
||||
}
|
||||
|
||||
void pri_date_time_send_option(struct pri *ctrl, int option)
|
||||
{
|
||||
if (!ctrl) {
|
||||
return;
|
||||
}
|
||||
switch (option) {
|
||||
case PRI_DATE_TIME_SEND_DEFAULT:
|
||||
ctrl->date_time_send = pri_date_time_send_default(ctrl);
|
||||
break;
|
||||
default:
|
||||
case PRI_DATE_TIME_SEND_NO:
|
||||
ctrl->date_time_send = PRI_DATE_TIME_SEND_NO;
|
||||
break;
|
||||
case PRI_DATE_TIME_SEND_DATE:
|
||||
case PRI_DATE_TIME_SEND_DATE_HH:
|
||||
case PRI_DATE_TIME_SEND_DATE_HHMM:
|
||||
case PRI_DATE_TIME_SEND_DATE_HHMMSS:
|
||||
if (NT_MODE(ctrl)) {
|
||||
/* Only networks may send date/time ie. */
|
||||
ctrl->date_time_send = option;
|
||||
} else {
|
||||
ctrl->date_time_send = PRI_DATE_TIME_SEND_NO;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
6
pri_cc.c
6
pri_cc.c
@@ -2504,13 +2504,14 @@ void pri_cc_qsig_exec_possible(struct pri *ctrl, q931_call *call, int msgtype, c
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Convert the given call completion state to a string.
|
||||
*
|
||||
* \param state CC state to convert to string.
|
||||
*
|
||||
* \return String version of call completion state.
|
||||
*/
|
||||
const char *pri_cc_fsm_state_str(enum CC_STATES state)
|
||||
static const char *pri_cc_fsm_state_str(enum CC_STATES state)
|
||||
{
|
||||
const char *str;
|
||||
|
||||
@@ -2554,13 +2555,14 @@ const char *pri_cc_fsm_state_str(enum CC_STATES state)
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Convert the given call completion event to a string.
|
||||
*
|
||||
* \param event CC event to convert to string.
|
||||
*
|
||||
* \return String version of call completion event.
|
||||
*/
|
||||
const char *pri_cc_fsm_event_str(enum CC_EVENTS event)
|
||||
static const char *pri_cc_fsm_event_str(enum CC_EVENTS event)
|
||||
{
|
||||
const char *str;
|
||||
|
||||
|
||||
430
pri_facility.c
430
pri_facility.c
@@ -1746,11 +1746,11 @@ int mwi_message_send(struct pri *ctrl, q931_call *call, struct pri_sr *req, int
|
||||
* \param ctrl D channel controller for diagnostic messages or global options.
|
||||
* \param pos Starting position to encode the facility ie contents.
|
||||
* \param end End of facility ie contents encoding data buffer.
|
||||
* \param vm_id Controlling party number (NULL if not present).
|
||||
* \param mailbox Controlling party number (NULL if not present).
|
||||
* \param basic_service Basic service enum (-1 if not present).
|
||||
* \param num_messages NumberOfMessages (-1 if not present).
|
||||
* \param caller_id Controlling party privided number (NULL if not present).
|
||||
* \param timestamp When message left. (Generalized Time format, NULL if not present)
|
||||
* \param timestamp Generalized Time format (NULL if not present).
|
||||
* \param message_reference Message reference number (-1 if not present).
|
||||
* \param message_status Message status: added(0), removed(1).
|
||||
*
|
||||
@@ -1758,7 +1758,7 @@ int mwi_message_send(struct pri *ctrl, q931_call *call, struct pri_sr *req, int
|
||||
* \retval NULL on error.
|
||||
*/
|
||||
static unsigned char *enc_etsi_mwi_indicate_message(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, const struct pri_party_id *vm_id, int basic_service,
|
||||
unsigned char *end, const struct pri_party_id *mailbox, int basic_service,
|
||||
int num_messages, const struct pri_party_id *caller_id, const char *timestamp,
|
||||
int message_reference, int message_status)
|
||||
{
|
||||
@@ -1774,8 +1774,8 @@ static unsigned char *enc_etsi_mwi_indicate_message(struct pri *ctrl, unsigned c
|
||||
msg.operation = ROSE_ETSI_MWIIndicate;
|
||||
msg.invoke_id = get_invokeid(ctrl);
|
||||
|
||||
if (vm_id && vm_id->number.valid) {
|
||||
pri_copy_party_number_to_q931(&number, &vm_id->number);
|
||||
if (mailbox && mailbox->number.valid) {
|
||||
pri_copy_party_number_to_q931(&number, &mailbox->number);
|
||||
q931_copy_number_to_rose(ctrl, &msg.args.etsi.MWIIndicate.controlling_user_number,
|
||||
&number);
|
||||
}
|
||||
@@ -1814,11 +1814,11 @@ static unsigned char *enc_etsi_mwi_indicate_message(struct pri *ctrl, unsigned c
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param call Call leg to queue message.
|
||||
* \param vm_id Voicemail system number (NULL if not present).
|
||||
* \param mailbox Controlling party number (NULL if not present).
|
||||
* \param basic_service Basic service enum (-1 if not present).
|
||||
* \param num_messages NumberOfMessages (-1 if not present).
|
||||
* \param caller_id Party leaving message (NULL if not present).
|
||||
* \param timestamp When message left. (Generalized Time format, NULL if not present)
|
||||
* \param caller_id Controlling party privided number (NULL if not present).
|
||||
* \param timestamp Generalized Time format (NULL if not present).
|
||||
* \param message_reference Message reference number (-1 if not present).
|
||||
* \param message_status Message status: added(0), removed(1).
|
||||
*
|
||||
@@ -1826,14 +1826,14 @@ static unsigned char *enc_etsi_mwi_indicate_message(struct pri *ctrl, unsigned c
|
||||
* \retval -1 on error.
|
||||
*/
|
||||
static int rose_mwi_indicate_encode(struct pri *ctrl, struct q931_call *call,
|
||||
const struct pri_party_id *vm_id, int basic_service, int num_messages,
|
||||
const struct pri_party_id *mailbox, int basic_service, int num_messages,
|
||||
const struct pri_party_id *caller_id, const char *timestamp, int message_reference,
|
||||
int message_status)
|
||||
{
|
||||
unsigned char buffer[255];
|
||||
unsigned char *end;
|
||||
|
||||
end = enc_etsi_mwi_indicate_message(ctrl, buffer, buffer + sizeof(buffer), vm_id,
|
||||
end = enc_etsi_mwi_indicate_message(ctrl, buffer, buffer + sizeof(buffer), mailbox,
|
||||
basic_service, num_messages, caller_id, timestamp, message_reference,
|
||||
message_status);
|
||||
if (!end) {
|
||||
@@ -1843,13 +1843,11 @@ static int rose_mwi_indicate_encode(struct pri *ctrl, struct q931_call *call,
|
||||
return pri_call_apdu_queue(call, Q931_FACILITY, buffer, end - buffer, NULL);
|
||||
}
|
||||
|
||||
int pri_mwi_indicate_v2(struct pri *ctrl, const struct pri_party_id *mailbox,
|
||||
const struct pri_party_id *vm_id, int basic_service, int num_messages,
|
||||
const struct pri_party_id *caller_id, const char *timestamp, int message_reference,
|
||||
int message_status)
|
||||
int pri_mwi_indicate(struct pri *ctrl, const struct pri_party_id *mailbox,
|
||||
int basic_service, int num_messages, const struct pri_party_id *caller_id,
|
||||
const char *timestamp, int message_reference, int message_status)
|
||||
{
|
||||
struct q931_call *call;
|
||||
struct q931_party_id called;
|
||||
|
||||
if (!ctrl) {
|
||||
return -1;
|
||||
@@ -1870,10 +1868,9 @@ int pri_mwi_indicate_v2(struct pri *ctrl, const struct pri_party_id *mailbox,
|
||||
return -1;
|
||||
}
|
||||
|
||||
pri_copy_party_id_to_q931(&called, mailbox);
|
||||
if (rose_mwi_indicate_encode(ctrl, call, vm_id, basic_service, num_messages,
|
||||
if (rose_mwi_indicate_encode(ctrl, call, mailbox, basic_service, num_messages,
|
||||
caller_id, timestamp, message_reference, message_status)
|
||||
|| q931_facility_called(ctrl, call, &called)) {
|
||||
|| q931_facility(ctrl, call)) {
|
||||
pri_message(ctrl,
|
||||
"Could not schedule facility message for MWI indicate message.\n");
|
||||
return -1;
|
||||
@@ -1881,14 +1878,6 @@ int pri_mwi_indicate_v2(struct pri *ctrl, const struct pri_party_id *mailbox,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pri_mwi_indicate(struct pri *ctrl, const struct pri_party_id *mailbox,
|
||||
int basic_service, int num_messages, const struct pri_party_id *caller_id,
|
||||
const char *timestamp, int message_reference, int message_status)
|
||||
{
|
||||
return pri_mwi_indicate_v2(ctrl, mailbox, mailbox, basic_service, num_messages,
|
||||
caller_id, timestamp, message_reference, message_status);
|
||||
}
|
||||
/* End MWI */
|
||||
|
||||
/* EECT functions */
|
||||
@@ -1918,7 +1907,7 @@ static unsigned char *enc_ni2_initiate_transfer(struct pri *ctrl, unsigned char
|
||||
msg.operation = ROSE_NI2_InitiateTransfer;
|
||||
msg.invoke_id = get_invokeid(ctrl);
|
||||
/* Let's do the trickery to make sure the flag is correct */
|
||||
msg.args.ni2.InitiateTransfer.call_reference = call->cr ^ Q931_CALL_REFERENCE_FLAG;
|
||||
msg.args.ni2.InitiateTransfer.call_reference = call->cr ^ 0x8000;
|
||||
pos = rose_encode_invoke(ctrl, pos, end, &msg);
|
||||
|
||||
return pos;
|
||||
@@ -3366,18 +3355,8 @@ int pri_call_add_standard_apdus(struct pri *ctrl, q931_call *call)
|
||||
*/
|
||||
int send_call_transfer_complete(struct pri *ctrl, q931_call *call, int call_status)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = rose_call_transfer_complete_encode(ctrl, call, call_status);
|
||||
if (!status) {
|
||||
if (!call_status && call->local_id.number.valid
|
||||
&& (ctrl->display_flags.send & PRI_DISPLAY_OPTION_NAME_UPDATE)) {
|
||||
status = q931_facility_display_name(ctrl, call, &call->local_id.name);
|
||||
} else {
|
||||
status = q931_facility(ctrl, call);
|
||||
}
|
||||
}
|
||||
if (status) {
|
||||
if (rose_call_transfer_complete_encode(ctrl, call, call_status)
|
||||
|| q931_facility(ctrl, call)) {
|
||||
pri_message(ctrl,
|
||||
"Could not schedule facility message for call transfer completed.\n");
|
||||
return -1;
|
||||
@@ -3386,306 +3365,6 @@ int send_call_transfer_complete(struct pri *ctrl, q931_call *call, int call_stat
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Encode the ETSI RequestSubaddress invoke message.
|
||||
*
|
||||
* \param ctrl D channel controller for diagnostic messages or global options.
|
||||
* \param pos Starting position to encode the facility ie contents.
|
||||
* \param end End of facility ie contents encoding data buffer.
|
||||
*
|
||||
* \retval Start of the next ASN.1 component to encode on success.
|
||||
* \retval NULL on error.
|
||||
*/
|
||||
static unsigned char *enc_etsi_request_subaddress(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end)
|
||||
{
|
||||
struct rose_msg_invoke msg;
|
||||
|
||||
pos = facility_encode_header(ctrl, pos, end, NULL);
|
||||
if (!pos) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
msg.operation = ROSE_ETSI_RequestSubaddress;
|
||||
msg.invoke_id = get_invokeid(ctrl);
|
||||
|
||||
pos = rose_encode_invoke(ctrl, pos, end, &msg);
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Encode and queue the RequestSubaddress invoke message.
|
||||
*
|
||||
* \param ctrl D channel controller for diagnostic messages or global options.
|
||||
* \param call Call leg from which to encode message.
|
||||
*
|
||||
* \retval 0 on success.
|
||||
* \retval -1 on error.
|
||||
*/
|
||||
int rose_request_subaddress_encode(struct pri *ctrl, struct q931_call *call)
|
||||
{
|
||||
unsigned char buffer[256];
|
||||
unsigned char *end;
|
||||
|
||||
switch (ctrl->switchtype) {
|
||||
case PRI_SWITCH_EUROISDN_E1:
|
||||
case PRI_SWITCH_EUROISDN_T1:
|
||||
end = enc_etsi_request_subaddress(ctrl, buffer, buffer + sizeof(buffer));
|
||||
break;
|
||||
case PRI_SWITCH_QSIG:
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
if (!end) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return pri_call_apdu_queue(call, Q931_FACILITY, buffer, end - buffer, NULL);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Encode the ETSI SubaddressTransfer invoke message.
|
||||
*
|
||||
* \param ctrl D channel controller for diagnostic messages or global options.
|
||||
* \param pos Starting position to encode the facility ie contents.
|
||||
* \param end End of facility ie contents encoding data buffer.
|
||||
* \param call Call leg from which to encode message.
|
||||
*
|
||||
* \retval Start of the next ASN.1 component to encode on success.
|
||||
* \retval NULL on error.
|
||||
*/
|
||||
static unsigned char *enc_etsi_subaddress_transfer(struct pri *ctrl, unsigned char *pos,
|
||||
unsigned char *end, struct q931_call *call)
|
||||
{
|
||||
struct rose_msg_invoke msg;
|
||||
|
||||
pos = facility_encode_header(ctrl, pos, end, NULL);
|
||||
if (!pos) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
msg.operation = ROSE_ETSI_SubaddressTransfer;
|
||||
msg.invoke_id = get_invokeid(ctrl);
|
||||
|
||||
if (!call->local_id.subaddress.valid) {
|
||||
return NULL;
|
||||
}
|
||||
q931_copy_subaddress_to_rose(ctrl, &msg.args.etsi.SubaddressTransfer.subaddress,
|
||||
&call->local_id.subaddress);
|
||||
|
||||
pos = rose_encode_invoke(ctrl, pos, end, &msg);
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Encode the Q.SIG SubaddressTransfer invoke message.
|
||||
*
|
||||
* \param ctrl D channel controller for diagnostic messages or global options.
|
||||
* \param pos Starting position to encode the facility ie contents.
|
||||
* \param end End of facility ie contents encoding data buffer.
|
||||
* \param call Call leg from which to encode message.
|
||||
*
|
||||
* \retval Start of the next ASN.1 component to encode on success.
|
||||
* \retval NULL on error.
|
||||
*/
|
||||
static unsigned char *enc_qsig_subaddress_transfer(struct pri *ctrl,
|
||||
unsigned char *pos, unsigned char *end, struct q931_call *call)
|
||||
{
|
||||
struct fac_extension_header header;
|
||||
struct rose_msg_invoke msg;
|
||||
|
||||
memset(&header, 0, sizeof(header));
|
||||
header.nfe_present = 1;
|
||||
header.nfe.source_entity = 0; /* endPINX */
|
||||
header.nfe.destination_entity = 0; /* endPINX */
|
||||
header.interpretation_present = 1;
|
||||
header.interpretation = 0; /* discardAnyUnrecognisedInvokePdu */
|
||||
pos = facility_encode_header(ctrl, pos, end, &header);
|
||||
if (!pos) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
msg.operation = ROSE_QSIG_SubaddressTransfer;
|
||||
msg.invoke_id = get_invokeid(ctrl);
|
||||
|
||||
if (!call->local_id.subaddress.valid) {
|
||||
return NULL;
|
||||
}
|
||||
q931_copy_subaddress_to_rose(ctrl,
|
||||
&msg.args.qsig.SubaddressTransfer.redirection_subaddress,
|
||||
&call->local_id.subaddress);
|
||||
|
||||
pos = rose_encode_invoke(ctrl, pos, end, &msg);
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Encode and queue the SubaddressTransfer invoke message.
|
||||
*
|
||||
* \param ctrl D channel controller for diagnostic messages or global options.
|
||||
* \param call Call leg from which to encode message.
|
||||
*
|
||||
* \retval 0 on success.
|
||||
* \retval -1 on error.
|
||||
*/
|
||||
static int rose_subaddress_transfer_encode(struct pri *ctrl, struct q931_call *call)
|
||||
{
|
||||
unsigned char buffer[256];
|
||||
unsigned char *end;
|
||||
|
||||
switch (ctrl->switchtype) {
|
||||
case PRI_SWITCH_EUROISDN_E1:
|
||||
case PRI_SWITCH_EUROISDN_T1:
|
||||
end =
|
||||
enc_etsi_subaddress_transfer(ctrl, buffer, buffer + sizeof(buffer), call);
|
||||
break;
|
||||
case PRI_SWITCH_QSIG:
|
||||
end =
|
||||
enc_qsig_subaddress_transfer(ctrl, buffer, buffer + sizeof(buffer), call);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
if (!end) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return pri_call_apdu_queue(call, Q931_FACILITY, buffer, end - buffer, NULL);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Send a FACILITY SubaddressTransfer.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param call Q.931 call leg
|
||||
*
|
||||
* \retval 0 on success.
|
||||
* \retval -1 on error.
|
||||
*/
|
||||
int send_subaddress_transfer(struct pri *ctrl, struct q931_call *call)
|
||||
{
|
||||
if (rose_subaddress_transfer_encode(ctrl, call)
|
||||
|| q931_facility(ctrl, call)) {
|
||||
pri_message(ctrl,
|
||||
"Could not schedule facility message for subaddress transfer.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Handle the received RequestSubaddress facility.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param call Q.931 call leg
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
static void etsi_request_subaddress(struct pri *ctrl, struct q931_call *call)
|
||||
{
|
||||
struct q931_party_name name;
|
||||
int changed = 0;
|
||||
|
||||
switch (call->notify) {
|
||||
case PRI_NOTIFY_TRANSFER_ACTIVE:
|
||||
if (q931_party_number_cmp(&call->remote_id.number, &call->redirection_number)) {
|
||||
/* The remote party number information changed. */
|
||||
call->remote_id.number = call->redirection_number;
|
||||
changed = 1;
|
||||
}
|
||||
/* Fall through */
|
||||
case PRI_NOTIFY_TRANSFER_ALERTING:
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
if (q931_display_name_get(call, &name)) {
|
||||
if (q931_party_name_cmp(&call->remote_id.name, &name)) {
|
||||
/* The remote party name information changed. */
|
||||
call->remote_id.name = name;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (call->redirection_number.valid
|
||||
&& q931_party_number_cmp(&call->remote_id.number, &call->redirection_number)) {
|
||||
/* The remote party number information changed. */
|
||||
call->remote_id.number = call->redirection_number;
|
||||
changed = 1;
|
||||
}
|
||||
if (call->remote_id.subaddress.valid) {
|
||||
/*
|
||||
* Clear the subaddress as the remote party has been changed.
|
||||
* Any new subaddress will arrive later.
|
||||
*/
|
||||
q931_party_subaddress_init(&call->remote_id.subaddress);
|
||||
changed = 1;
|
||||
}
|
||||
if (changed) {
|
||||
call->incoming_ct_state = INCOMING_CT_STATE_POST_CONNECTED_LINE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Send our subaddress back if we have one. */
|
||||
if (call->local_id.subaddress.valid) {
|
||||
send_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Handle the received SubaddressTransfer facility subaddress.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param call Q.931 call leg
|
||||
* \param subaddr Received subaddress of remote party.
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
static void handle_subaddress_transfer(struct pri *ctrl, struct q931_call *call, const struct rosePartySubaddress *subaddr)
|
||||
{
|
||||
int changed = 0;
|
||||
struct q931_party_name name;
|
||||
struct q931_party_subaddress q931_subaddress;
|
||||
|
||||
q931_party_subaddress_init(&q931_subaddress);
|
||||
rose_copy_subaddress_to_q931(ctrl, &q931_subaddress, subaddr);
|
||||
if (q931_party_subaddress_cmp(&call->remote_id.subaddress, &q931_subaddress)) {
|
||||
call->remote_id.subaddress = q931_subaddress;
|
||||
changed = 1;
|
||||
}
|
||||
if (call->redirection_number.valid
|
||||
&& q931_party_number_cmp(&call->remote_id.number, &call->redirection_number)) {
|
||||
/* The remote party number information changed. */
|
||||
call->remote_id.number = call->redirection_number;
|
||||
changed = 1;
|
||||
}
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
if (q931_display_name_get(call, &name)) {
|
||||
if (q931_party_name_cmp(&call->remote_id.name, &name)) {
|
||||
/* The remote party name information changed. */
|
||||
call->remote_id.name = name;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
call->incoming_ct_state = INCOMING_CT_STATE_POST_CONNECTED_LINE;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Encode a plain facility ETSI error code.
|
||||
@@ -3962,12 +3641,7 @@ int pri_rerouting_rsp(struct pri *ctrl, q931_call *call, int invoke_id, enum PRI
|
||||
rose_err = ROSE_ERROR_Gen_ResourceUnavailable;
|
||||
switch (code) {
|
||||
case PRI_REROUTING_RSP_OK_CLEAR:
|
||||
/*
|
||||
* Send the response out on the next message which should be
|
||||
* either Q931_DISCONNECT or Q931_RELEASE depending upon who
|
||||
* initiates the disconnect first.
|
||||
*/
|
||||
return rose_result_ok_encode(ctrl, call, Q931_ANY_MESSAGE, invoke_id);
|
||||
return rose_result_ok_encode(ctrl, call, Q931_DISCONNECT, invoke_id);
|
||||
case PRI_REROUTING_RSP_OK_RETAIN:
|
||||
return send_facility_result_ok(ctrl, call, invoke_id);
|
||||
case PRI_REROUTING_RSP_NOT_SUBSCRIBED:
|
||||
@@ -4708,12 +4382,12 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
}
|
||||
break;
|
||||
case ROSE_ETSI_RequestSubaddress:
|
||||
etsi_request_subaddress(ctrl, call);
|
||||
/* Ignore since we are not handling subaddresses yet. */
|
||||
break;
|
||||
#if 0 /* Not handled yet */
|
||||
case ROSE_ETSI_SubaddressTransfer:
|
||||
handle_subaddress_transfer(ctrl, call,
|
||||
&invoke->args.etsi.SubaddressTransfer.subaddress);
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
case ROSE_ETSI_EctLinkIdRequest:
|
||||
if (!ctrl->transfer_support) {
|
||||
send_facility_error(ctrl, call, invoke->invoke_id,
|
||||
@@ -4730,33 +4404,17 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
send_ect_link_id_rsp(ctrl, call, invoke->invoke_id);
|
||||
break;
|
||||
case ROSE_ETSI_EctInform:
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
q931_display_name_get(call, &call->remote_id.name);
|
||||
}
|
||||
|
||||
/* redirectionNumber is put in remote_id.number */
|
||||
if (invoke->args.etsi.EctInform.redirection_present) {
|
||||
rose_copy_presented_number_unscreened_to_q931(ctrl,
|
||||
&call->remote_id.number, &invoke->args.etsi.EctInform.redirection);
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the subaddress as the remote party has been changed.
|
||||
* Any new subaddress will arrive later.
|
||||
*/
|
||||
q931_party_subaddress_init(&call->remote_id.subaddress);
|
||||
|
||||
if (!invoke->args.etsi.EctInform.status) {
|
||||
/* The remote party for the transfer has not answered yet. */
|
||||
call->incoming_ct_state = INCOMING_CT_STATE_EXPECT_CT_ACTIVE;
|
||||
} else {
|
||||
call->incoming_ct_state = INCOMING_CT_STATE_POST_CONNECTED_LINE;
|
||||
}
|
||||
|
||||
/* Send our subaddress back if we have one. */
|
||||
if (call->local_id.subaddress.valid) {
|
||||
send_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
break;
|
||||
case ROSE_ETSI_EctLoopTest:
|
||||
/*
|
||||
@@ -5052,10 +4710,6 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
case ROSE_QSIG_CallingName:
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
q931_display_name_get(call, &call->remote_id.name);
|
||||
}
|
||||
|
||||
/* CallingName is put in remote_id.name */
|
||||
rose_copy_name_to_q931(ctrl, &call->remote_id.name,
|
||||
&invoke->args.qsig.CallingName.name);
|
||||
@@ -5077,10 +4731,6 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
}
|
||||
break;
|
||||
case ROSE_QSIG_CalledName:
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
q931_display_name_get(call, &call->remote_id.name);
|
||||
}
|
||||
|
||||
/* CalledName is put in remote_id.name */
|
||||
rose_copy_name_to_q931(ctrl, &call->remote_id.name,
|
||||
&invoke->args.qsig.CalledName.name);
|
||||
@@ -5102,10 +4752,6 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
}
|
||||
break;
|
||||
case ROSE_QSIG_ConnectedName:
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
q931_display_name_get(call, &call->remote_id.name);
|
||||
}
|
||||
|
||||
/* ConnectedName is put in remote_id.name */
|
||||
rose_copy_name_to_q931(ctrl, &call->remote_id.name,
|
||||
&invoke->args.qsig.ConnectedName.name);
|
||||
@@ -5157,10 +4803,6 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
case ROSE_QSIG_CallTransferActive:
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
q931_display_name_get(call, &call->remote_id.name);
|
||||
}
|
||||
|
||||
call->incoming_ct_state = INCOMING_CT_STATE_POST_CONNECTED_LINE;
|
||||
|
||||
/* connectedAddress is put in remote_id */
|
||||
@@ -5174,10 +4816,6 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
}
|
||||
break;
|
||||
case ROSE_QSIG_CallTransferComplete:
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
q931_display_name_get(call, &call->remote_id.name);
|
||||
}
|
||||
|
||||
/* redirectionNumber is put in remote_id.number */
|
||||
rose_copy_presented_number_screened_to_q931(ctrl, &call->remote_id.number,
|
||||
&invoke->args.qsig.CallTransferComplete.redirection);
|
||||
@@ -5188,31 +4826,16 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
&invoke->args.qsig.CallTransferComplete.redirection_name);
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the subaddress as the remote party has been changed.
|
||||
* Any new subaddress will arrive later.
|
||||
*/
|
||||
q931_party_subaddress_init(&call->remote_id.subaddress);
|
||||
|
||||
if (invoke->args.qsig.CallTransferComplete.call_status == 1) {
|
||||
/* The remote party for the transfer has not answered yet. */
|
||||
call->incoming_ct_state = INCOMING_CT_STATE_EXPECT_CT_ACTIVE;
|
||||
} else {
|
||||
call->incoming_ct_state = INCOMING_CT_STATE_POST_CONNECTED_LINE;
|
||||
}
|
||||
|
||||
/* Send our subaddress back if we have one. */
|
||||
if (call->local_id.subaddress.valid) {
|
||||
send_subaddress_transfer(ctrl, call);
|
||||
}
|
||||
break;
|
||||
case ROSE_QSIG_CallTransferUpdate:
|
||||
party_id = call->remote_id;
|
||||
|
||||
if (ctrl->display_flags.receive & PRI_DISPLAY_OPTION_NAME_UPDATE) {
|
||||
q931_display_name_get(call, &party_id.name);
|
||||
}
|
||||
|
||||
/* redirectionNumber is put in party_id.number */
|
||||
rose_copy_presented_number_screened_to_q931(ctrl, &party_id.number,
|
||||
&invoke->args.qsig.CallTransferUpdate.redirection);
|
||||
@@ -5235,10 +4858,10 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
}
|
||||
}
|
||||
break;
|
||||
#if 0 /* Not handled yet */
|
||||
case ROSE_QSIG_SubaddressTransfer:
|
||||
handle_subaddress_transfer(ctrl, call,
|
||||
&invoke->args.qsig.SubaddressTransfer.redirection_subaddress);
|
||||
break;
|
||||
#endif /* Not handled yet */
|
||||
case ROSE_QSIG_PathReplacement:
|
||||
anfpr_pathreplacement_respond(ctrl, call, ie);
|
||||
break;
|
||||
@@ -5544,9 +5167,8 @@ void rose_handle_invoke(struct pri *ctrl, q931_call *call, int msgtype, q931_ie
|
||||
#endif /* Not handled yet */
|
||||
default:
|
||||
if (ctrl->debug & PRI_DEBUG_APDU) {
|
||||
pri_message(ctrl,
|
||||
"!! ROSE invoke operation not handled on switchtype:%s! %s\n",
|
||||
pri_switch2str(ctrl->switchtype), rose_operation2str(invoke->operation));
|
||||
pri_message(ctrl, "!! ROSE invoke operation not handled! %s\n",
|
||||
rose_operation2str(invoke->operation));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -221,8 +221,6 @@ int qsig_cf_callrerouting(struct pri *pri, q931_call *c, const char* dest, const
|
||||
int send_reroute_request(struct pri *ctrl, q931_call *call, const struct q931_party_id *caller, const struct q931_party_redirecting *deflection, int subscription_option);
|
||||
|
||||
int send_call_transfer_complete(struct pri *pri, q931_call *call, int call_status);
|
||||
int rose_request_subaddress_encode(struct pri *ctrl, struct q931_call *call);
|
||||
int send_subaddress_transfer(struct pri *ctrl, struct q931_call *call);
|
||||
|
||||
int rose_diverting_leg_information1_encode(struct pri *pri, q931_call *call);
|
||||
int rose_diverting_leg_information3_encode(struct pri *pri, q931_call *call, int messagetype);
|
||||
|
||||
@@ -60,9 +60,6 @@ struct pri_sched {
|
||||
/*! Maximum number of facility ie's to handle per incoming message. */
|
||||
#define MAX_FACILITY_IES 8
|
||||
|
||||
/*! Maximum length of sent display text string. (No null terminator.) */
|
||||
#define MAX_DISPLAY_TEXT 80
|
||||
|
||||
/*! Accumulated pri_message() line until a '\n' is seen on the end. */
|
||||
struct pri_msg_line {
|
||||
/*! Accumulated buffer used. */
|
||||
@@ -90,8 +87,6 @@ struct pri {
|
||||
unsigned num_slots;
|
||||
/*! Maximum timer slots currently needed. */
|
||||
unsigned max_used;
|
||||
/*! First timer id in this timer pool. */
|
||||
unsigned first_id;
|
||||
} sched;
|
||||
int debug; /* Debug stuff */
|
||||
int state; /* State of D-channel */
|
||||
@@ -140,11 +135,13 @@ struct pri {
|
||||
struct q931_call **callpool;
|
||||
struct q931_call *localpool;
|
||||
|
||||
#ifdef LIBPRI_COUNTERS
|
||||
/* q921/q931 packet counters */
|
||||
unsigned int q921_txcount;
|
||||
unsigned int q921_rxcount;
|
||||
unsigned int q931_txcount;
|
||||
unsigned int q931_rxcount;
|
||||
#endif
|
||||
|
||||
short last_invoke; /* Last ROSE invoke ID (Valid in master record only) */
|
||||
|
||||
@@ -182,15 +179,6 @@ struct pri {
|
||||
/*! Number of facility ie's in the array from the current received message. */
|
||||
unsigned char count;
|
||||
} facility;
|
||||
/*! Display text policy handling options. */
|
||||
struct {
|
||||
/*! Send display text policy option flags. */
|
||||
unsigned long send;
|
||||
/*! Receive display text policy option flags. */
|
||||
unsigned long receive;
|
||||
} display_flags;
|
||||
/*! Configured date/time ie send policy option. */
|
||||
int date_time_send;
|
||||
};
|
||||
|
||||
/*! \brief Maximum name length plus null terminator (From ECMA-164) */
|
||||
@@ -544,9 +532,9 @@ struct q931_call {
|
||||
|
||||
/*! \brief Incoming call transfer state. */
|
||||
enum INCOMING_CT_STATE incoming_ct_state;
|
||||
/*! Call hold supplementary state. Valid on master call record only. */
|
||||
/*! Call hold supplementary state. */
|
||||
enum Q931_HOLD_STATE hold_state;
|
||||
/*! Call hold event timer. Valid on master call record only. */
|
||||
/*! Call hold event timer */
|
||||
int hold_timer;
|
||||
|
||||
int deflection_in_progress; /*!< CallDeflection for NT PTMP in progress. */
|
||||
@@ -580,14 +568,11 @@ struct q931_call {
|
||||
0,2-7 - Reserved for future use */
|
||||
int t303_timer;
|
||||
int t303_expirycnt;
|
||||
int t312_timer;
|
||||
int fake_clearing_timer;
|
||||
|
||||
int hangupinitiated;
|
||||
/*! \brief TRUE if we broadcast this call's SETUP message. */
|
||||
int outboundbroadcast;
|
||||
/*! TRUE if the master call is processing a hangup. Don't destroy it now. */
|
||||
int master_hanging_up;
|
||||
int performing_fake_clearing;
|
||||
/*!
|
||||
* \brief Master call controlling this call.
|
||||
* \note Always valid. Master and normal calls point to self.
|
||||
@@ -620,29 +605,6 @@ struct q931_call {
|
||||
unsigned char initially_redirected;
|
||||
} cc;
|
||||
|
||||
/*! Display text ie contents. */
|
||||
struct {
|
||||
/*! Display ie text. NULL if not present or consumed as remote name. */
|
||||
const char *text;
|
||||
/*! Length of display text. */
|
||||
unsigned char length;
|
||||
/*!
|
||||
* \brief Character set the text is using.
|
||||
* \details
|
||||
* unknown(0),
|
||||
* iso8859-1(1),
|
||||
* enum-value-withdrawn-by-ITU-T(2)
|
||||
* iso8859-2(3),
|
||||
* iso8859-3(4),
|
||||
* iso8859-4(5),
|
||||
* iso8859-5(6),
|
||||
* iso8859-7(7),
|
||||
* iso10646-BmpString(8),
|
||||
* iso10646-utf-8String(9)
|
||||
*/
|
||||
unsigned char char_set;
|
||||
} display;
|
||||
|
||||
/* AOC charge requesting on Setup */
|
||||
int aoc_charging_request;
|
||||
};
|
||||
@@ -913,12 +875,12 @@ struct link_dummy {
|
||||
int q931_is_call_valid(struct pri *ctrl, struct q931_call *call);
|
||||
int q931_is_call_valid_gripe(struct pri *ctrl, struct q931_call *call, const char *func_name, unsigned long func_line);
|
||||
|
||||
unsigned pri_schedule_event(struct pri *ctrl, int ms, void (*function)(void *data), void *data);
|
||||
extern int pri_schedule_event(struct pri *pri, int ms, void (*function)(void *data), void *data);
|
||||
|
||||
extern pri_event *pri_schedule_run(struct pri *pri);
|
||||
|
||||
void pri_schedule_del(struct pri *ctrl, unsigned id);
|
||||
int pri_schedule_check(struct pri *ctrl, unsigned id, void (*function)(void *data), void *data);
|
||||
extern void pri_schedule_del(struct pri *pri, int ev);
|
||||
int pri_schedule_check(struct pri *ctrl, int id, void (*function)(void *data), void *data);
|
||||
|
||||
extern pri_event *pri_mkerror(struct pri *pri, char *errstr);
|
||||
|
||||
@@ -978,16 +940,9 @@ void pri_copy_party_id_to_q931(struct q931_party_id *q931_id, const struct pri_p
|
||||
void q931_party_id_fixup(const struct pri *ctrl, struct q931_party_id *id);
|
||||
int q931_party_id_presentation(const struct q931_party_id *id);
|
||||
|
||||
int q931_display_name_get(struct q931_call *call, struct q931_party_name *name);
|
||||
int q931_display_text(struct pri *ctrl, struct q931_call *call, const struct pri_subcmd_display_txt *display);
|
||||
|
||||
int q931_facility_display_name(struct pri *ctrl, struct q931_call *call, const struct q931_party_name *name);
|
||||
int q931_facility_called(struct pri *ctrl, struct q931_call *call, const struct q931_party_id *called);
|
||||
|
||||
const char *q931_call_state_str(enum Q931_CALL_STATE callstate);
|
||||
const char *msg2str(int msg);
|
||||
|
||||
int q931_get_subcall_count(struct q931_call *master);
|
||||
struct q931_call *q931_find_winning_call(struct q931_call *call);
|
||||
int q931_master_pass_event(struct pri *ctrl, struct q931_call *subcall, int msg_type);
|
||||
struct pri_subcommand *q931_alloc_subcommand(struct pri *ctrl);
|
||||
@@ -995,17 +950,13 @@ struct pri_subcommand *q931_alloc_subcommand(struct pri *ctrl);
|
||||
struct q931_call *q931_find_link_id_call(struct pri *ctrl, int link_id);
|
||||
struct q931_call *q931_find_held_active_call(struct pri *ctrl, struct q931_call *held_call);
|
||||
|
||||
int q931_request_subaddress(struct pri *ctrl, struct q931_call *call, int notify, const struct q931_party_name *name, const struct q931_party_number *number);
|
||||
int q931_subaddress_transfer(struct pri *ctrl, struct q931_call *call);
|
||||
int q931_notify_redirection(struct pri *ctrl, struct q931_call *call, int notify, const struct q931_party_name *name, const struct q931_party_number *number);
|
||||
int q931_notify_redirection(struct pri *ctrl, q931_call *call, int notify, const struct q931_party_number *number);
|
||||
|
||||
struct pri_cc_record *pri_cc_find_by_reference(struct pri *ctrl, unsigned reference_id);
|
||||
struct pri_cc_record *pri_cc_find_by_linkage(struct pri *ctrl, unsigned linkage_id);
|
||||
struct pri_cc_record *pri_cc_find_by_addressing(struct pri *ctrl, const struct q931_party_address *party_a, const struct q931_party_address *party_b, unsigned length, const unsigned char *q931_ies);
|
||||
struct pri_cc_record *pri_cc_new_record(struct pri *ctrl, q931_call *call);
|
||||
void pri_cc_qsig_determine_available(struct pri *ctrl, q931_call *call);
|
||||
const char *pri_cc_fsm_state_str(enum CC_STATES state);
|
||||
const char *pri_cc_fsm_event_str(enum CC_EVENTS event);
|
||||
int pri_cc_event(struct pri *ctrl, q931_call *call, struct pri_cc_record *cc_record, enum CC_EVENTS event);
|
||||
int q931_cc_timeout(struct pri *ctrl, struct pri_cc_record *cc_record, enum CC_EVENTS event);
|
||||
void q931_cc_indirect(struct pri *ctrl, struct pri_cc_record *cc_record, void (*func)(struct pri *ctrl, q931_call *call, struct pri_cc_record *cc_record));
|
||||
@@ -1019,7 +970,7 @@ void q931_cc_indirect(struct pri *ctrl, struct pri_cc_record *cc_record, void (*
|
||||
*/
|
||||
static inline struct pri *PRI_NFAS_MASTER(struct pri *ctrl)
|
||||
{
|
||||
if (ctrl->master) {
|
||||
while (ctrl->master) {
|
||||
ctrl = ctrl->master;
|
||||
}
|
||||
return ctrl;
|
||||
|
||||
14
pri_q921.h
14
pri_q921.h
@@ -163,17 +163,11 @@ typedef union {
|
||||
struct q921_header h;
|
||||
} q921_h;
|
||||
|
||||
enum q921_tx_frame_status {
|
||||
Q921_TX_FRAME_NEVER_SENT,
|
||||
Q921_TX_FRAME_PUSHED_BACK,
|
||||
Q921_TX_FRAME_SENT,
|
||||
};
|
||||
|
||||
typedef struct q921_frame {
|
||||
struct q921_frame *next; /*!< Next in list */
|
||||
int len; /*!< Length of header + body */
|
||||
enum q921_tx_frame_status status; /*!< Tx frame status */
|
||||
q921_i h; /*!< Actual frame contents. */
|
||||
struct q921_frame *next; /* Next in list */
|
||||
int len; /* Length of header + body */
|
||||
int transmitted; /* Have we been transmitted */
|
||||
q921_i h;
|
||||
} q921_frame;
|
||||
|
||||
#define Q921_INC(j) (j) = (((j) + 1) % 128)
|
||||
|
||||
@@ -443,8 +443,6 @@ enum Q931_RANKED_CALL_STATE {
|
||||
Q931_RANKED_CALL_STATE_CONNECT,
|
||||
/*! Call is in some non-call establishment state (likely disconnecting). */
|
||||
Q931_RANKED_CALL_STATE_OTHER,
|
||||
/*! Master call is aborting. */
|
||||
Q931_RANKED_CALL_STATE_ABORT,
|
||||
};
|
||||
|
||||
/* EuroISDN */
|
||||
|
||||
90
prisched.c
90
prisched.c
@@ -38,15 +38,13 @@
|
||||
/*! Initial number of scheduled timer slots. */
|
||||
#define SCHED_EVENTS_INITIAL 128
|
||||
/*!
|
||||
* \brief Maximum number of scheduled timer slots.
|
||||
* \note Should be a power of 2 and at least SCHED_EVENTS_INITIAL.
|
||||
* Maximum number of scheduled timer slots.
|
||||
* Should be a power of 2 multiple of SCHED_EVENTS_INITIAL.
|
||||
*/
|
||||
#define SCHED_EVENTS_MAX 8192
|
||||
|
||||
/*! \brief The maximum number of timers that were active at once. */
|
||||
static unsigned maxsched = 0;
|
||||
/*! Last pool id */
|
||||
static unsigned pool_id = 0;
|
||||
|
||||
/* Scheduler routines */
|
||||
|
||||
@@ -89,23 +87,6 @@ static int pri_schedule_grow(struct pri *ctrl)
|
||||
memcpy(timers, ctrl->sched.timer,
|
||||
ctrl->sched.num_slots * sizeof(struct pri_sched));
|
||||
free(ctrl->sched.timer);
|
||||
} else {
|
||||
/* Creating the timer pool. */
|
||||
pool_id += SCHED_EVENTS_MAX;
|
||||
if (pool_id < SCHED_EVENTS_MAX
|
||||
|| pool_id + (SCHED_EVENTS_MAX - 1) < SCHED_EVENTS_MAX) {
|
||||
/*
|
||||
* Not likely to happen.
|
||||
*
|
||||
* Timer id's may be aliased if this D channel is used in an
|
||||
* NFAS group with redundant D channels. Another D channel in
|
||||
* the group may have the same pool_id.
|
||||
*/
|
||||
pri_error(ctrl,
|
||||
"Pool_id wrapped. Please ignore if you are not using NFAS with backup D channels.\n");
|
||||
pool_id = SCHED_EVENTS_MAX;
|
||||
}
|
||||
ctrl->sched.first_id = pool_id;
|
||||
}
|
||||
|
||||
/* Put the new timer table in place. */
|
||||
@@ -125,7 +106,7 @@ static int pri_schedule_grow(struct pri *ctrl)
|
||||
* \retval 0 if scheduler table is full and could not schedule the event.
|
||||
* \retval id Scheduled event id.
|
||||
*/
|
||||
unsigned pri_schedule_event(struct pri *ctrl, int ms, void (*function)(void *data), void *data)
|
||||
int pri_schedule_event(struct pri *ctrl, int ms, void (*function)(void *data), void *data)
|
||||
{
|
||||
unsigned max_used;
|
||||
unsigned x;
|
||||
@@ -157,7 +138,7 @@ unsigned pri_schedule_event(struct pri *ctrl, int ms, void (*function)(void *dat
|
||||
ctrl->sched.timer[x].when = tv;
|
||||
ctrl->sched.timer[x].callback = function;
|
||||
ctrl->sched.timer[x].data = data;
|
||||
return ctrl->sched.first_id + x;
|
||||
return x + 1;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -250,35 +231,18 @@ pri_event *pri_schedule_run(struct pri *ctrl)
|
||||
* \param ctrl D channel controller.
|
||||
* \param id Scheduled event id to delete.
|
||||
* 0 is a disabled/unscheduled event id that is ignored.
|
||||
* 1 - MAX_SCHED is a valid event id.
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
void pri_schedule_del(struct pri *ctrl, unsigned id)
|
||||
void pri_schedule_del(struct pri *ctrl, int id)
|
||||
{
|
||||
struct pri *nfas;
|
||||
|
||||
if (!id) {
|
||||
/* Disabled/unscheduled event id. */
|
||||
return;
|
||||
if (0 < id && id <= ctrl->sched.num_slots) {
|
||||
ctrl->sched.timer[id - 1].callback = NULL;
|
||||
} else if (id) {
|
||||
pri_error(ctrl, "Asked to delete sched id %d??? num_slots=%d\n", id,
|
||||
ctrl->sched.num_slots);
|
||||
}
|
||||
if (ctrl->sched.first_id <= id
|
||||
&& id <= ctrl->sched.first_id + (SCHED_EVENTS_MAX - 1)) {
|
||||
ctrl->sched.timer[id - ctrl->sched.first_id].callback = NULL;
|
||||
return;
|
||||
}
|
||||
if (ctrl->nfas) {
|
||||
/* Try to find the timer on another D channel. */
|
||||
for (nfas = PRI_NFAS_MASTER(ctrl); nfas; nfas = nfas->slave) {
|
||||
if (nfas->sched.first_id <= id
|
||||
&& id <= nfas->sched.first_id + (SCHED_EVENTS_MAX - 1)) {
|
||||
nfas->sched.timer[id - nfas->sched.first_id].callback = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
pri_error(ctrl,
|
||||
"Asked to delete sched id 0x%08x??? first_id=0x%08x, num_slots=0x%08x\n", id,
|
||||
ctrl->sched.first_id, ctrl->sched.num_slots);
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -287,36 +251,22 @@ void pri_schedule_del(struct pri *ctrl, unsigned id)
|
||||
* \param ctrl D channel controller.
|
||||
* \param id Scheduled event id to check.
|
||||
* 0 is a disabled/unscheduled event id.
|
||||
* 1 - MAX_SCHED is a valid event id.
|
||||
* \param function Callback function to call when timeout.
|
||||
* \param data Value to give callback function when timeout.
|
||||
*
|
||||
* \return TRUE if scheduled event has the callback.
|
||||
*/
|
||||
int pri_schedule_check(struct pri *ctrl, unsigned id, void (*function)(void *data), void *data)
|
||||
int pri_schedule_check(struct pri *ctrl, int id, void (*function)(void *data), void *data)
|
||||
{
|
||||
struct pri *nfas;
|
||||
|
||||
if (!id) {
|
||||
/* Disabled/unscheduled event id. */
|
||||
return 0;
|
||||
}
|
||||
if (ctrl->sched.first_id <= id
|
||||
&& id <= ctrl->sched.first_id + (SCHED_EVENTS_MAX - 1)) {
|
||||
return ctrl->sched.timer[id - ctrl->sched.first_id].callback == function
|
||||
&& ctrl->sched.timer[id - ctrl->sched.first_id].data == data;
|
||||
}
|
||||
if (ctrl->nfas) {
|
||||
/* Try to find the timer on another D channel. */
|
||||
for (nfas = PRI_NFAS_MASTER(ctrl); nfas; nfas = nfas->slave) {
|
||||
if (nfas->sched.first_id <= id
|
||||
&& id <= nfas->sched.first_id + (SCHED_EVENTS_MAX - 1)) {
|
||||
return nfas->sched.timer[id - nfas->sched.first_id].callback == function
|
||||
&& nfas->sched.timer[id - nfas->sched.first_id].data == data;
|
||||
}
|
||||
if (0 < id && id <= ctrl->sched.num_slots) {
|
||||
if (ctrl->sched.timer[id - 1].callback == function
|
||||
&& ctrl->sched.timer[id - 1].data == data) {
|
||||
return 1;
|
||||
}
|
||||
} else if (id) {
|
||||
pri_error(ctrl, "Asked to check sched id %d??? num_slots=%d\n", id,
|
||||
ctrl->sched.num_slots);
|
||||
}
|
||||
pri_error(ctrl,
|
||||
"Asked to check sched id 0x%08x??? first_id=0x%08x, num_slots=0x%08x\n", id,
|
||||
ctrl->sched.first_id, ctrl->sched.num_slots);
|
||||
return 0;
|
||||
}
|
||||
|
||||
157
q921.c
157
q921.c
@@ -183,7 +183,9 @@ static int q921_transmit(struct pri *ctrl, q921_h *h, int len)
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef LIBPRI_COUNTERS
|
||||
ctrl->q921_txcount++;
|
||||
#endif
|
||||
/* Just send it raw */
|
||||
if (ctrl->debug & (PRI_DEBUG_Q921_DUMP | PRI_DEBUG_Q921_RAW))
|
||||
q921_dump(ctrl, h, len, ctrl->debug & PRI_DEBUG_Q921_RAW, 1);
|
||||
@@ -406,7 +408,7 @@ static int q921_ack_packet(struct q921_link *link, int num)
|
||||
ctrl = link->ctrl;
|
||||
|
||||
for (prev = NULL, f = link->tx_queue; f; prev = f, f = f->next) {
|
||||
if (f->status != Q921_TX_FRAME_SENT) {
|
||||
if (!f->transmitted) {
|
||||
break;
|
||||
}
|
||||
if (f->h.n_s == num) {
|
||||
@@ -421,7 +423,7 @@ static int q921_ack_packet(struct q921_link *link, int num)
|
||||
"-- ACKing N(S)=%d, tx_queue head is N(S)=%d (-1 is empty, -2 is not transmitted)\n",
|
||||
f->h.n_s,
|
||||
link->tx_queue
|
||||
? link->tx_queue->status == Q921_TX_FRAME_SENT
|
||||
? link->tx_queue->transmitted
|
||||
? link->tx_queue->h.n_s
|
||||
: -2
|
||||
: -1);
|
||||
@@ -464,6 +466,22 @@ static void reschedule_t203(struct q921_link *link)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
static int q921_unacked_iframes(struct q921_link *link)
|
||||
{
|
||||
struct q921_frame *f = link->tx_queue;
|
||||
int cnt = 0;
|
||||
|
||||
while (f) {
|
||||
if (f->transmitted)
|
||||
cnt++;
|
||||
f = f->next;
|
||||
}
|
||||
|
||||
return cnt;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void start_t203(struct q921_link *link)
|
||||
{
|
||||
struct pri *ctrl;
|
||||
@@ -626,8 +644,8 @@ static int q921_send_queued_iframes(struct q921_link *link)
|
||||
ctrl = link->ctrl;
|
||||
|
||||
for (f = link->tx_queue; f; f = f->next) {
|
||||
if (f->status != Q921_TX_FRAME_SENT) {
|
||||
/* This frame needs to be sent. */
|
||||
if (!f->transmitted) {
|
||||
/* This frame has not been sent yet. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -636,20 +654,12 @@ static int q921_send_queued_iframes(struct q921_link *link)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (link->peer_rx_busy) {
|
||||
if (link->peer_rx_busy
|
||||
|| (link->v_s == Q921_ADD(link->v_a, ctrl->timers[PRI_TIMER_K]))) {
|
||||
/* Don't flood debug trace if not really looking at Q.921 layer. */
|
||||
if (ctrl->debug & (/* PRI_DEBUG_Q921_STATE | */ PRI_DEBUG_Q921_DUMP)) {
|
||||
pri_message(ctrl,
|
||||
"TEI=%d Couldn't transmit I-frame at this time due to peer busy condition\n",
|
||||
link->tei);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (link->v_s == Q921_ADD(link->v_a, ctrl->timers[PRI_TIMER_K])) {
|
||||
/* Don't flood debug trace if not really looking at Q.921 layer. */
|
||||
if (ctrl->debug & (/* PRI_DEBUG_Q921_STATE | */ PRI_DEBUG_Q921_DUMP)) {
|
||||
pri_message(ctrl,
|
||||
"TEI=%d Couldn't transmit I-frame at this time due to window shut\n",
|
||||
"TEI=%d Couldn't transmit I-frame at this time due to peer busy condition or window shut\n",
|
||||
link->tei);
|
||||
}
|
||||
return 0;
|
||||
@@ -663,30 +673,7 @@ static int q921_send_queued_iframes(struct q921_link *link)
|
||||
}
|
||||
|
||||
/* Send it now... */
|
||||
switch (f->status) {
|
||||
case Q921_TX_FRAME_NEVER_SENT:
|
||||
if (ctrl->debug & PRI_DEBUG_Q921_STATE) {
|
||||
pri_message(ctrl,
|
||||
"TEI=%d Transmitting N(S)=%d, window is open V(A)=%d K=%d\n",
|
||||
link->tei, link->v_s, link->v_a, ctrl->timers[PRI_TIMER_K]);
|
||||
}
|
||||
break;
|
||||
case Q921_TX_FRAME_PUSHED_BACK:
|
||||
if (f->h.n_s != link->v_s) {
|
||||
/* Should never happen. */
|
||||
pri_error(ctrl,
|
||||
"TEI=%d Retransmitting frame with old N(S)=%d as N(S)=%d!\n",
|
||||
link->tei, f->h.n_s, link->v_s);
|
||||
} else if (ctrl->debug & PRI_DEBUG_Q921_STATE) {
|
||||
pri_message(ctrl, "TEI=%d Retransmitting frame N(S)=%d now!\n",
|
||||
link->tei, link->v_s);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Should never happen. */
|
||||
pri_error(ctrl, "Unexpected Tx Q frame status: %d", f->status);
|
||||
break;
|
||||
}
|
||||
++f->transmitted;
|
||||
|
||||
/*
|
||||
* Send the frame out on the assigned TEI.
|
||||
@@ -699,23 +686,26 @@ static int q921_send_queued_iframes(struct q921_link *link)
|
||||
f->h.n_r = link->v_r;
|
||||
f->h.ft = 0;
|
||||
f->h.p_f = 0;
|
||||
if (ctrl->debug & PRI_DEBUG_Q921_STATE) {
|
||||
pri_message(ctrl,
|
||||
"TEI=%d Transmitting N(S)=%d, window is open V(A)=%d K=%d\n",
|
||||
link->tei, f->h.n_s, link->v_a, ctrl->timers[PRI_TIMER_K]);
|
||||
}
|
||||
q921_transmit(ctrl, (q921_h *) (&f->h), f->len);
|
||||
Q921_INC(link->v_s);
|
||||
++frames_txd;
|
||||
|
||||
if ((ctrl->debug & PRI_DEBUG_Q931_DUMP)
|
||||
&& f->status == Q921_TX_FRAME_NEVER_SENT) {
|
||||
if (ctrl->debug & PRI_DEBUG_Q931_DUMP) {
|
||||
/*
|
||||
* The transmit operation might dump the Q.921 header, so logging
|
||||
* the Q.931 message body after the transmit puts the sections of
|
||||
* the message in the right order in the log.
|
||||
*
|
||||
* Also dump the Q.931 part only once instead of for every
|
||||
* retransmission.
|
||||
* Also the dump is done here so the Q.931 part is decoded only
|
||||
* once instead of for every retransmission.
|
||||
*/
|
||||
q931_dump(ctrl, link->tei, (q931_h *) f->h.data, f->len - 4, 1);
|
||||
}
|
||||
f->status = Q921_TX_FRAME_SENT;
|
||||
}
|
||||
|
||||
if (frames_txd) {
|
||||
@@ -946,7 +936,7 @@ static struct q921_link *pri_find_tei(struct pri *ctrl, int sapi, int tei)
|
||||
/* This is the equivalent of a DL-DATA request, as well as the I-frame queued up outcome */
|
||||
int q921_transmit_iframe(struct q921_link *link, void *buf, int len, int cr)
|
||||
{
|
||||
struct q921_frame *f, *prev=NULL;
|
||||
q921_frame *f, *prev=NULL;
|
||||
struct pri *ctrl;
|
||||
|
||||
ctrl = link->ctrl;
|
||||
@@ -991,7 +981,7 @@ int q921_transmit_iframe(struct q921_link *link, void *buf, int len, int cr)
|
||||
prev = f;
|
||||
}
|
||||
|
||||
f = calloc(1, sizeof(struct q921_frame) + len + 2);
|
||||
f = calloc(1, sizeof(q921_frame) + len + 2);
|
||||
if (f) {
|
||||
Q921_INIT(link, f->h);
|
||||
switch (ctrl->localtype) {
|
||||
@@ -1011,7 +1001,7 @@ int q921_transmit_iframe(struct q921_link *link, void *buf, int len, int cr)
|
||||
|
||||
/* Put new frame on queue tail. */
|
||||
f->next = NULL;
|
||||
f->status = Q921_TX_FRAME_NEVER_SENT;
|
||||
f->transmitted = 0;
|
||||
f->len = len + 4;
|
||||
memcpy(f->h.data, buf, len);
|
||||
if (prev)
|
||||
@@ -1028,30 +1018,17 @@ int q921_transmit_iframe(struct q921_link *link, void *buf, int len, int cr)
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (link->peer_rx_busy) {
|
||||
|
||||
if (link->peer_rx_busy || (link->v_s == Q921_ADD(link->v_a, ctrl->timers[PRI_TIMER_K]))) {
|
||||
if (ctrl->debug & PRI_DEBUG_Q921_STATE) {
|
||||
pri_message(ctrl,
|
||||
"TEI=%d Just queued I-frame due to peer busy condition\n",
|
||||
"TEI=%d Just queued I-frame due to peer busy condition or window shut\n",
|
||||
link->tei);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!q921_send_queued_iframes(link)) {
|
||||
/*
|
||||
* No frames sent even though we just put a frame on the queue.
|
||||
*
|
||||
* Special debug message/test here because we want to say what
|
||||
* happened to the Q.931 message just queued but we don't want
|
||||
* to flood the debug trace if we are not really looking at the
|
||||
* Q.921 layer.
|
||||
*/
|
||||
if ((ctrl->debug & (PRI_DEBUG_Q921_STATE | PRI_DEBUG_Q921_DUMP))
|
||||
== PRI_DEBUG_Q921_STATE) {
|
||||
pri_message(ctrl, "TEI=%d Just queued I-frame due to window shut\n",
|
||||
link->tei);
|
||||
}
|
||||
}
|
||||
q921_send_queued_iframes(link);
|
||||
} else {
|
||||
pri_error(ctrl, "!! Out of memory for Q.921 transmit\n");
|
||||
return -1;
|
||||
@@ -1098,13 +1075,14 @@ static void q921_dump_iqueue_info(struct q921_link *link)
|
||||
{
|
||||
struct pri *ctrl;
|
||||
struct q921_frame *f;
|
||||
int pending = 0;
|
||||
int unacked = 0;
|
||||
int pending = 0, unacked = 0;
|
||||
|
||||
ctrl = link->ctrl;
|
||||
|
||||
unacked = pending = 0;
|
||||
|
||||
for (f = link->tx_queue; f; f = f->next) {
|
||||
if (f->status == Q921_TX_FRAME_SENT) {
|
||||
if (f->transmitted) {
|
||||
unacked++;
|
||||
} else {
|
||||
pending++;
|
||||
@@ -2241,11 +2219,11 @@ static void update_v_a(struct q921_link *link, int n_r)
|
||||
link->v_a = n_r;
|
||||
}
|
||||
|
||||
/*! \brief Is V(A) <= N(R) <= V(S) ? */
|
||||
static int n_r_is_valid(struct q921_link *link, int n_r)
|
||||
{
|
||||
int x;
|
||||
|
||||
/* Is V(A) <= N(R) <= V(S) */
|
||||
for (x = link->v_a; x != n_r && x != link->v_s; Q921_INC(x)) {
|
||||
}
|
||||
if (x != n_r) {
|
||||
@@ -2370,27 +2348,37 @@ static pri_event *q921_rr_rx(struct q921_link *link, q921_h *h)
|
||||
|
||||
static int q921_invoke_retransmission(struct q921_link *link, int n_r)
|
||||
{
|
||||
struct q921_frame *f;
|
||||
int frames_txd = 0;
|
||||
int frames_supposed_to_tx = 0;
|
||||
q921_frame *f;
|
||||
unsigned int local_v_s = link->v_s;
|
||||
struct pri *ctrl;
|
||||
|
||||
ctrl = link->ctrl;
|
||||
|
||||
/*
|
||||
* All acked frames should already have been removed from the queue.
|
||||
* Push back all sent frames.
|
||||
*/
|
||||
for (f = link->tx_queue; f && f->status == Q921_TX_FRAME_SENT; f = f->next) {
|
||||
f->status = Q921_TX_FRAME_PUSHED_BACK;
|
||||
|
||||
/* Sanity check: Is V(A) <= N(S) <= V(S)? */
|
||||
if (!n_r_is_valid(link, f->h.n_s)) {
|
||||
pri_error(ctrl,
|
||||
"Tx Q frame with invalid N(S)=%d. Must be (V(A)=%d) <= N(S) <= (V(S)=%d)\n",
|
||||
f->h.n_s, link->v_a, link->v_s);
|
||||
/* All acked frames should already have been removed from the queue. */
|
||||
for (f = link->tx_queue; f && f->transmitted; f = f->next) {
|
||||
if (ctrl->debug & PRI_DEBUG_Q921_STATE) {
|
||||
pri_message(ctrl, "TEI=%d Retransmitting frame N(S)=%d now!\n",
|
||||
link->tei, f->h.n_s);
|
||||
}
|
||||
|
||||
/* Give the other side our current N(R) */
|
||||
f->h.n_r = link->v_r;
|
||||
f->h.p_f = 0;
|
||||
q921_transmit(ctrl, (q921_h *) (&f->h), f->len);
|
||||
frames_txd++;
|
||||
}
|
||||
|
||||
while (local_v_s != n_r) {
|
||||
Q921_DEC(local_v_s);
|
||||
frames_supposed_to_tx++;
|
||||
}
|
||||
link->v_s = n_r;
|
||||
return q921_send_queued_iframes(link);
|
||||
if (frames_supposed_to_tx != frames_txd) {
|
||||
pri_error(ctrl, "!!!!!!!!!!!! Should have only transmitted %d frames!\n", frames_supposed_to_tx);
|
||||
}
|
||||
|
||||
return frames_txd;
|
||||
}
|
||||
|
||||
static pri_event *q921_rej_rx(struct q921_link *link, q921_h *h)
|
||||
@@ -2508,6 +2496,7 @@ static pri_event *q921_iframe_rx(struct q921_link *link, q921_h *h, int len)
|
||||
delay_q931_receive = 0;
|
||||
/* FIXME: Verify that it's a command ... */
|
||||
if (link->own_rx_busy) {
|
||||
/* XXX: Note: There's a difference in th P/F between both states */
|
||||
/* DEVIATION: Handle own rx busy */
|
||||
} else if (h->i.n_s == link->v_r) {
|
||||
Q921_INC(link->v_r);
|
||||
@@ -2970,7 +2959,9 @@ pri_event *q921_receive(struct pri *ctrl, q921_h *h, int len)
|
||||
{
|
||||
pri_event *e;
|
||||
e = __q921_receive(ctrl, h, len);
|
||||
#ifdef LIBPRI_COUNTERS
|
||||
ctrl->q921_rxcount++;
|
||||
#endif
|
||||
return e;
|
||||
}
|
||||
|
||||
|
||||
54
rose.c
54
rose.c
@@ -1237,34 +1237,6 @@ static const struct rose_convert_msg rose_dms100_msgs[] = {
|
||||
rose_enc_dms100_RLT_ThirdParty_ARG, NULL,
|
||||
rose_dec_dms100_RLT_ThirdParty_ARG, NULL
|
||||
},
|
||||
|
||||
/* DMS-100 seems to have pirated some Q.SIG messages */
|
||||
/*
|
||||
* localValue's from Q.SIG Name-Operations
|
||||
* { iso(1) standard(0) pss1-name(13868) name-operations(0) }
|
||||
*/
|
||||
{
|
||||
ROSE_QSIG_CallingName, NULL, 0,
|
||||
rose_enc_qsig_CallingName_ARG, NULL,
|
||||
rose_dec_qsig_CallingName_ARG, NULL
|
||||
},
|
||||
#if 0 /* ROSE_DMS100_RLT_OPERATION_IND, and ROSE_DMS100_RLT_THIRD_PARTY conflict! */
|
||||
{
|
||||
ROSE_QSIG_CalledName, NULL, 1,
|
||||
rose_enc_qsig_CalledName_ARG, NULL,
|
||||
rose_dec_qsig_CalledName_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_ConnectedName, NULL, 2,
|
||||
rose_enc_qsig_ConnectedName_ARG, NULL,
|
||||
rose_dec_qsig_ConnectedName_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_BusyName, NULL, 3,
|
||||
rose_enc_qsig_BusyName_ARG, NULL,
|
||||
rose_dec_qsig_BusyName_ARG, NULL
|
||||
},
|
||||
#endif
|
||||
/* *INDENT-ON* */
|
||||
};
|
||||
|
||||
@@ -1320,19 +1292,6 @@ static const struct rose_convert_msg rose_ni2_msgs[] = {
|
||||
* encode_invoke_args, encode_result_args,
|
||||
* decode_invoke_args, decode_result_args
|
||||
*/
|
||||
{
|
||||
ROSE_NI2_InformationFollowing, &rose_ni2_oid, 4,
|
||||
rose_enc_ni2_InformationFollowing_ARG, NULL,
|
||||
rose_dec_ni2_InformationFollowing_ARG, NULL
|
||||
},
|
||||
|
||||
/* Also used by PRI_SWITCH_ATT4ESS and PRI_SWITCH_LUCENT5E */
|
||||
{
|
||||
ROSE_NI2_InitiateTransfer, &rose_ni2_oid, 8,
|
||||
rose_enc_ni2_InitiateTransfer_ARG, NULL,
|
||||
rose_dec_ni2_InitiateTransfer_ARG, NULL
|
||||
},
|
||||
|
||||
/* NI2 seems to have pirated several Q.SIG messages */
|
||||
/*
|
||||
* localValue's from Q.SIG Name-Operations
|
||||
@@ -1358,6 +1317,19 @@ static const struct rose_convert_msg rose_ni2_msgs[] = {
|
||||
rose_enc_qsig_BusyName_ARG, NULL,
|
||||
rose_dec_qsig_BusyName_ARG, NULL
|
||||
},
|
||||
|
||||
{
|
||||
ROSE_NI2_InformationFollowing, &rose_ni2_oid, 4,
|
||||
rose_enc_ni2_InformationFollowing_ARG, NULL,
|
||||
rose_dec_ni2_InformationFollowing_ARG, NULL
|
||||
},
|
||||
|
||||
/* Also used by PRI_SWITCH_ATT4ESS and PRI_SWITCH_LUCENT5E */
|
||||
{
|
||||
ROSE_NI2_InitiateTransfer, &rose_ni2_oid, 8,
|
||||
rose_enc_ni2_InitiateTransfer_ARG, NULL,
|
||||
rose_dec_ni2_InitiateTransfer_ARG, NULL
|
||||
},
|
||||
/* *INDENT-ON* */
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user