Compare commits
18 Commits
1.4.12-bet
...
1.4.12-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db3ed3a439 | ||
|
|
b4621337b6 | ||
|
|
ecc75a52aa | ||
|
|
ab32336b09 | ||
|
|
0089f4777a | ||
|
|
1fba74a1d5 | ||
|
|
da0b057536 | ||
|
|
e12b0913ec | ||
|
|
28b3a8f458 | ||
|
|
41115a1da6 | ||
|
|
0cada91336 | ||
|
|
b612ee46c1 | ||
|
|
b83fc0c33f | ||
|
|
b2e28bd1e4 | ||
|
|
9d1fa7f276 | ||
|
|
fc203e3101 | ||
|
|
5372776ef0 | ||
|
|
589ea41f86 |
93
libpri-1.4.12-beta2-summary.html
Normal file
93
libpri-1.4.12-beta2-summary.html
Normal file
@@ -0,0 +1,93 @@
|
||||
<!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-beta2</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">libpri-1.4.12-beta2</h3>
|
||||
<h3 align="center">Date: 2010-08-30</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-beta1.</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>
|
||||
13 rmudgett<br/>
|
||||
1 alecdavis<br/>
|
||||
1 mattf<br/>
|
||||
</td>
|
||||
<td>
|
||||
1 jcovert<br/>
|
||||
1 rmudgett<br/>
|
||||
</td>
|
||||
<td>
|
||||
1 alecdavis<br/>
|
||||
1 jcovert<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: General</h3><br/>
|
||||
<a href="https://issues.asterisk.org/view.php?id=16791">#16791</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/view.php?id=17570">#17570</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/>
|
||||
<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=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></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></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></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>
|
||||
pri.c | 78 --
|
||||
q921.c | 2135 ++++++++++++++++++++++++++++++++++++-------------------------
|
||||
q931.c | 180 +++--
|
||||
rose.c | 45 +
|
||||
rosetest.c | 54 +
|
||||
5 files changed, 1550 insertions(+), 942 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
||||
153
libpri-1.4.12-beta2-summary.txt
Normal file
153
libpri-1.4.12-beta2-summary.txt
Normal file
@@ -0,0 +1,153 @@
|
||||
Release Summary
|
||||
|
||||
libpri-1.4.12-beta2
|
||||
|
||||
Date: 2010-08-30
|
||||
|
||||
<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-beta1.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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
|
||||
13 rmudgett 1 jcovert 1 alecdavis
|
||||
1 alecdavis 1 rmudgett 1 jcovert
|
||||
1 mattf
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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: General
|
||||
|
||||
#16791: [patch] q921_rnr_rx Q921_TIMER_RECOVERY SDL issue
|
||||
Revision: 1845
|
||||
Reporter: alecdavis
|
||||
Coders: alecdavis
|
||||
|
||||
#17570: [patch] ISDN BRI does not recover from line faults
|
||||
Revision: 1918
|
||||
Reporter: jcovert
|
||||
Testers: jcovert, rmudgett
|
||||
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 |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | 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. | |
|
||||
|----------+----------+-------------------------------------+------------|
|
||||
| | | 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 | |
|
||||
| | | 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. | |
|
||||
+------------------------------------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
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.
|
||||
|
||||
pri.c | 78 --
|
||||
q921.c | 2135 ++++++++++++++++++++++++++++++++++++-------------------------
|
||||
q931.c | 180 +++--
|
||||
rose.c | 45 +
|
||||
rosetest.c | 54 +
|
||||
5 files changed, 1550 insertions(+), 942 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
78
pri.c
78
pri.c
@@ -497,33 +497,33 @@ char *pri_event2str(int id)
|
||||
char *name;
|
||||
} events[] = {
|
||||
/* *INDENT-OFF* */
|
||||
{ PRI_EVENT_DCHAN_UP, "D-Channel Up" },
|
||||
{ PRI_EVENT_DCHAN_DOWN, "D-channel Down" },
|
||||
{ PRI_EVENT_RESTART, "Restart channel" },
|
||||
{ PRI_EVENT_CONFIG_ERR, "Configuration Error" },
|
||||
{ PRI_EVENT_RING, "Ring" },
|
||||
{ PRI_EVENT_HANGUP, "Hangup" },
|
||||
{ PRI_EVENT_RINGING, "Ringing" },
|
||||
{ PRI_EVENT_ANSWER, "Answer" },
|
||||
{ PRI_EVENT_HANGUP_ACK, "Hangup ACK" },
|
||||
{ PRI_EVENT_RESTART_ACK, "Restart ACK" },
|
||||
{ PRI_EVENT_FACILITY, "Facility" },
|
||||
{ PRI_EVENT_INFO_RECEIVED, "Info Received" },
|
||||
{ PRI_EVENT_PROCEEDING, "Proceeding" },
|
||||
{ PRI_EVENT_SETUP_ACK, "Setup ACK" },
|
||||
{ PRI_EVENT_HANGUP_REQ, "Hangup Req" },
|
||||
{ PRI_EVENT_NOTIFY, "Notify" },
|
||||
{ PRI_EVENT_PROGRESS, "Progress" },
|
||||
{ PRI_EVENT_KEYPAD_DIGIT, "Keypad Digit" },
|
||||
{ PRI_EVENT_SERVICE, "Service" },
|
||||
{ PRI_EVENT_SERVICE_ACK, "Service ACK" },
|
||||
{ PRI_EVENT_HOLD, "Hold" },
|
||||
{ PRI_EVENT_HOLD_ACK, "Hold Ack" },
|
||||
{ PRI_EVENT_HOLD_REJ, "Hold Rej" },
|
||||
{ PRI_EVENT_RETRIEVE, "Retrieve" },
|
||||
{ PRI_EVENT_RETRIEVE_ACK, "Retrieve ACK" },
|
||||
{ PRI_EVENT_RETRIEVE_REJ, "Retrieve Rej" },
|
||||
{ PRI_EVENT_CONNECT_ACK, "Connect ACK" },
|
||||
{ PRI_EVENT_DCHAN_UP, "PRI_EVENT_DCHAN_UP" },
|
||||
{ PRI_EVENT_DCHAN_DOWN, "PRI_EVENT_DCHAN_DOWN" },
|
||||
{ PRI_EVENT_RESTART, "PRI_EVENT_RESTART" },
|
||||
{ PRI_EVENT_CONFIG_ERR, "PRI_EVENT_CONFIG_ERR" },
|
||||
{ PRI_EVENT_RING, "PRI_EVENT_RING" },
|
||||
{ PRI_EVENT_HANGUP, "PRI_EVENT_HANGUP" },
|
||||
{ PRI_EVENT_RINGING, "PRI_EVENT_RINGING" },
|
||||
{ PRI_EVENT_ANSWER, "PRI_EVENT_ANSWER" },
|
||||
{ PRI_EVENT_HANGUP_ACK, "PRI_EVENT_HANGUP_ACK" },
|
||||
{ PRI_EVENT_RESTART_ACK, "PRI_EVENT_RESTART_ACK" },
|
||||
{ PRI_EVENT_FACILITY, "PRI_EVENT_FACILITY" },
|
||||
{ PRI_EVENT_INFO_RECEIVED, "PRI_EVENT_INFO_RECEIVED" },
|
||||
{ PRI_EVENT_PROCEEDING, "PRI_EVENT_PROCEEDING" },
|
||||
{ PRI_EVENT_SETUP_ACK, "PRI_EVENT_SETUP_ACK" },
|
||||
{ PRI_EVENT_HANGUP_REQ, "PRI_EVENT_HANGUP_REQ" },
|
||||
{ PRI_EVENT_NOTIFY, "PRI_EVENT_NOTIFY" },
|
||||
{ PRI_EVENT_PROGRESS, "PRI_EVENT_PROGRESS" },
|
||||
{ PRI_EVENT_KEYPAD_DIGIT, "PRI_EVENT_KEYPAD_DIGIT" },
|
||||
{ PRI_EVENT_SERVICE, "PRI_EVENT_SERVICE" },
|
||||
{ PRI_EVENT_SERVICE_ACK, "PRI_EVENT_SERVICE_ACK" },
|
||||
{ PRI_EVENT_HOLD, "PRI_EVENT_HOLD" },
|
||||
{ PRI_EVENT_HOLD_ACK, "PRI_EVENT_HOLD_ACK" },
|
||||
{ PRI_EVENT_HOLD_REJ, "PRI_EVENT_HOLD_REJ" },
|
||||
{ PRI_EVENT_RETRIEVE, "PRI_EVENT_RETRIEVE" },
|
||||
{ PRI_EVENT_RETRIEVE_ACK, "PRI_EVENT_RETRIEVE_ACK" },
|
||||
{ PRI_EVENT_RETRIEVE_REJ, "PRI_EVENT_RETRIEVE_REJ" },
|
||||
{ PRI_EVENT_CONNECT_ACK, "PRI_EVENT_CONNECT_ACK" },
|
||||
/* *INDENT-ON* */
|
||||
};
|
||||
|
||||
@@ -832,7 +832,7 @@ int pri_connected_line_update(struct pri *ctrl, q931_call *call, const struct pr
|
||||
|
||||
/* Update all subcalls with new local_id. */
|
||||
if (call->outboundbroadcast && call->master_call == call) {
|
||||
for (idx = 0; idx < Q931_MAX_TEI; ++idx) {
|
||||
for (idx = 0; idx < ARRAY_LEN(call->subcalls); ++idx) {
|
||||
subcall = call->subcalls[idx];
|
||||
if (subcall) {
|
||||
subcall->local_id = party_id;
|
||||
@@ -899,7 +899,7 @@ int pri_redirecting_update(struct pri *ctrl, q931_call *call, const struct pri_p
|
||||
* but update it just in case.
|
||||
*/
|
||||
if (call->outboundbroadcast && call->master_call == call) {
|
||||
for (idx = 0; idx < Q931_MAX_TEI; ++idx) {
|
||||
for (idx = 0; idx < ARRAY_LEN(call->subcalls); ++idx) {
|
||||
subcall = call->subcalls[idx];
|
||||
if (subcall) {
|
||||
subcall->redirecting.to = call->redirecting.to;
|
||||
@@ -1162,26 +1162,6 @@ void pri_dump_event(struct pri *pri, pri_event *e)
|
||||
if (!pri || !e)
|
||||
return;
|
||||
pri_message(pri, "Event type: %s (%d)\n", pri_event2str(e->gen.e), e->gen.e);
|
||||
switch(e->gen.e) {
|
||||
case PRI_EVENT_DCHAN_UP:
|
||||
case PRI_EVENT_DCHAN_DOWN:
|
||||
break;
|
||||
case PRI_EVENT_CONFIG_ERR:
|
||||
pri_message(pri, "Error: %s", e->err.err);
|
||||
break;
|
||||
case PRI_EVENT_RESTART:
|
||||
pri_message(pri, "Restart on channel %d\n", e->restart.channel);
|
||||
case PRI_EVENT_RING:
|
||||
pri_message(pri, "Calling number: %s (%s, %s)\n", e->ring.callingnum, pri_plan2str(e->ring.callingplan), pri_pres2str(e->ring.callingpres));
|
||||
pri_message(pri, "Called number: %s (%s)\n", e->ring.callednum, pri_plan2str(e->ring.calledplan));
|
||||
pri_message(pri, "Channel: %d (%s) Reference number: %d\n", e->ring.channel, e->ring.flexible ? "Flexible" : "Not Flexible", e->ring.cref);
|
||||
break;
|
||||
case PRI_EVENT_HANGUP:
|
||||
pri_message(pri, "Hangup, reference number: %d, reason: %s\n", e->hangup.cref, pri_cause2str(e->hangup.cause));
|
||||
break;
|
||||
default:
|
||||
pri_message(pri, "Don't know how to dump events of type %d\n", e->gen.e);
|
||||
}
|
||||
}
|
||||
|
||||
void pri_sr_init(struct pri_sr *req)
|
||||
|
||||
222
q931.c
222
q931.c
@@ -1003,7 +1003,12 @@ static int receive_channel_id(int full_ie, struct pri *ctrl, q931_call *call, in
|
||||
return -1;
|
||||
}
|
||||
if (ie->data[pos] & 0x10) {
|
||||
/* Expect Slot Map */
|
||||
/*
|
||||
* Expect Slot Map
|
||||
* Note that we are assuming only T1's use slot maps which is wrong
|
||||
* but oh well... We would need to know what type of line we are
|
||||
* connected with (T1 or E1) to interpret the map correctly anyway.
|
||||
*/
|
||||
call->slotmap = 0;
|
||||
pos++;
|
||||
for (x=0;x<3;x++) {
|
||||
@@ -1085,22 +1090,26 @@ static int transmit_channel_id(int full_ie, struct pri *ctrl, q931_call *call, i
|
||||
&& !(call->chanflags & FLAG_WHOLE_INTERFACE)) {
|
||||
/* The 3.2 and 3.3 octets need to be present */
|
||||
ie->data[pos] = 0x83;
|
||||
if (call->slotmap != -1) {
|
||||
int octet;
|
||||
|
||||
/* We have to send a channel map */
|
||||
ie->data[pos++] |= 0x10;
|
||||
for (octet = 3; octet--;) {
|
||||
ie->data[pos++] = (call->slotmap >> (8 * octet)) & 0xff;
|
||||
}
|
||||
} else {
|
||||
/* Channel number specified */
|
||||
if (0 < call->channelno && call->channelno != 0xff) {
|
||||
/* Channel number specified and preferred over slot map if we have one. */
|
||||
++pos;
|
||||
if (ctrl->chan_mapping_logical && call->channelno > 16) {
|
||||
ie->data[pos++] = 0x80 | (call->channelno - 1);
|
||||
} else {
|
||||
ie->data[pos++] = 0x80 | call->channelno;
|
||||
}
|
||||
} else if (call->slotmap != -1) {
|
||||
int octet;
|
||||
|
||||
/* We have to send a slot map */
|
||||
ie->data[pos++] |= 0x10;
|
||||
for (octet = 3; octet--;) {
|
||||
ie->data[pos++] = (call->slotmap >> (8 * octet)) & 0xff;
|
||||
}
|
||||
} else {
|
||||
pri_error(ctrl, "XXX We need either a channelno or slotmap but have neither!\n");
|
||||
/* Discard this malformed ie. */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3947,7 +3956,7 @@ void q931_destroycall(struct pri *ctrl, q931_call *c)
|
||||
if (cur == c) {
|
||||
slaveidx = -1;
|
||||
if (slave) {
|
||||
for (i = 0; i < Q931_MAX_TEI; i++) {
|
||||
for (i = 0; i < ARRAY_LEN(cur->subcalls); ++i) {
|
||||
if (cur->subcalls[i] == slave) {
|
||||
if (ctrl->debug & PRI_DEBUG_Q931_STATE) {
|
||||
pri_message(ctrl, "Destroying subcall %p of call %p at %d\n",
|
||||
@@ -3962,7 +3971,7 @@ void q931_destroycall(struct pri *ctrl, q931_call *c)
|
||||
}
|
||||
|
||||
slavesleft = 0;
|
||||
for (i = 0; i < Q931_MAX_TEI; i++) {
|
||||
for (i = 0; i < ARRAY_LEN(cur->subcalls); ++i) {
|
||||
if (cur->subcalls[i]) {
|
||||
if (ctrl->debug & PRI_DEBUG_Q931_STATE) {
|
||||
pri_message(ctrl, "Subcall still present at %d\n", i);
|
||||
@@ -3972,8 +3981,8 @@ void q931_destroycall(struct pri *ctrl, q931_call *c)
|
||||
}
|
||||
|
||||
/* We have 3 different phases to deal with:
|
||||
* 1.) Sent outbound call, but no response, indicated by t203 present
|
||||
* 2.) Sent outbound call, with responses, indicated by lack of t203 and subcalls present
|
||||
* 1.) Sent outbound call, but no response (no subcalls present)
|
||||
* 2.) Sent outbound call, with responses (subcalls present)
|
||||
* 3.) Outbound call connected, indicated by pri_winner > -1
|
||||
*
|
||||
* If chan_dahdi hangs up in phase:
|
||||
@@ -3996,7 +4005,7 @@ void q931_destroycall(struct pri *ctrl, q931_call *c)
|
||||
* If, when the library user hangs up the master call, and there are more than one subcall up, we fake clear
|
||||
* regardless of whether or not we drop down to one subcall left in the clearing process.
|
||||
*
|
||||
* If there are only one call up, we mirror what it does.
|
||||
* If there is only one call up, we mirror what it does.
|
||||
*
|
||||
* OR
|
||||
*
|
||||
@@ -4014,8 +4023,8 @@ void q931_destroycall(struct pri *ctrl, q931_call *c)
|
||||
* call as dead and free it when the last subcall clears.
|
||||
*/
|
||||
|
||||
if ((slave && !slavesleft) &&
|
||||
((cur->pri_winner < 0) || (slave && slaveidx != cur->pri_winner))) {
|
||||
if (slave && !slavesleft /* i.e., The last slave was just destroyed */
|
||||
&& (cur->pri_winner < 0 || slaveidx != cur->pri_winner)) {
|
||||
pri_create_fake_clearing(cur, ctrl);
|
||||
return;
|
||||
}
|
||||
@@ -4148,6 +4157,85 @@ static char *disc2str(int disc)
|
||||
return code2str(disc, discs, sizeof(discs) / sizeof(discs[0]));
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Dump the Q.931 message header.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param tei TEI the packet is associated with.
|
||||
* \param h Q.931 packet contents/header.
|
||||
* \param len Received length of the Q.931 packet.
|
||||
* \param c Message direction prefix character.
|
||||
*
|
||||
* \retval 0 on success.
|
||||
* \retval -1 on error.
|
||||
*/
|
||||
static int q931_dump_header(struct pri *ctrl, int tei, q931_h *h, int len, char c)
|
||||
{
|
||||
q931_mh *mh;
|
||||
int cref;
|
||||
|
||||
pri_message(ctrl, "%c Protocol Discriminator: %s (%d) len=%d\n", c, disc2str(h->pd), h->pd, len);
|
||||
|
||||
if (len < 2 || len < 2 + h->crlen) {
|
||||
pri_message(ctrl, "%c Message too short for call reference. len=%d\n",
|
||||
c, len);
|
||||
return -1;
|
||||
}
|
||||
cref = q931_cr(h);
|
||||
pri_message(ctrl, "%c TEI=%d Call Ref: len=%2d (reference %d/0x%X) (%s)\n",
|
||||
c, tei, h->crlen, cref & ~Q931_CALL_REFERENCE_FLAG,
|
||||
cref & ~Q931_CALL_REFERENCE_FLAG, (cref == Q931_DUMMY_CALL_REFERENCE)
|
||||
? "Dummy"
|
||||
: (cref & Q931_CALL_REFERENCE_FLAG)
|
||||
? "Sent to originator" : "Sent from originator");
|
||||
|
||||
if (len < 3 + h->crlen) {
|
||||
pri_message(ctrl, "%c Message too short for supported protocols. len=%d\n",
|
||||
c, len);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Message header begins at the end of the call reference number */
|
||||
mh = (q931_mh *)(h->contents + h->crlen);
|
||||
switch (h->pd) {
|
||||
case MAINTENANCE_PROTOCOL_DISCRIMINATOR_1:
|
||||
case MAINTENANCE_PROTOCOL_DISCRIMINATOR_2:
|
||||
pri_message(ctrl, "%c Message Type: %s (%d)\n", c, maintenance_msg2str(mh->msg, h->pd), mh->msg);
|
||||
break;
|
||||
default:
|
||||
/* Unknown protocol discriminator but we will treat it as Q.931 anyway. */
|
||||
case GR303_PROTOCOL_DISCRIMINATOR:
|
||||
case Q931_PROTOCOL_DISCRIMINATOR:
|
||||
pri_message(ctrl, "%c Message Type: %s (%d)\n", c, msg2str(mh->msg), mh->msg);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Q.931 is passing this message to Q.921 debug indication.
|
||||
*
|
||||
* \param ctrl D channel controller.
|
||||
* \param tei TEI the packet is associated with.
|
||||
* \param h Q.931 packet contents/header.
|
||||
* \param len Received length of the Q.931 packet
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
static void q931_to_q921_passing_dump(struct pri *ctrl, int tei, q931_h *h, int len)
|
||||
{
|
||||
char c;
|
||||
|
||||
c = '>';
|
||||
|
||||
pri_message(ctrl, "\n");
|
||||
pri_message(ctrl, "%c DL-DATA request\n", c);
|
||||
q931_dump_header(ctrl, tei, h, len, c);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Debug dump the given Q.931 packet.
|
||||
*
|
||||
@@ -4167,46 +4255,19 @@ void q931_dump(struct pri *ctrl, int tei, q931_h *h, int len, int txrx)
|
||||
int r;
|
||||
int cur_codeset;
|
||||
int codeset;
|
||||
int cref;
|
||||
|
||||
c = txrx ? '>' : '<';
|
||||
|
||||
pri_message(ctrl, "%c Protocol Discriminator: %s (%d) len=%d\n", c, disc2str(h->pd), h->pd, len);
|
||||
|
||||
if (len < 2 || len < 2 + h->crlen) {
|
||||
pri_message(ctrl, "%c Message too short for call reference. len=%d\n",
|
||||
c, len);
|
||||
return;
|
||||
if (!(ctrl->debug & (PRI_DEBUG_Q921_DUMP | PRI_DEBUG_Q921_RAW))) {
|
||||
/* Put out a blank line if Q.921 is not dumping. */
|
||||
pri_message(ctrl, "\n");
|
||||
}
|
||||
cref = q931_cr(h);
|
||||
pri_message(ctrl, "%c TEI=%d Call Ref: len=%2d (reference %d/0x%X) (%s)\n",
|
||||
c, tei, h->crlen, cref & ~Q931_CALL_REFERENCE_FLAG,
|
||||
cref & ~Q931_CALL_REFERENCE_FLAG, (cref == Q931_DUMMY_CALL_REFERENCE)
|
||||
? "Dummy"
|
||||
: (cref & Q931_CALL_REFERENCE_FLAG)
|
||||
? "Sent to originator" : "Sent from originator");
|
||||
|
||||
if (len < 3 + h->crlen) {
|
||||
pri_message(ctrl, "%c Message too short for supported protocols. len=%d\n",
|
||||
c, len);
|
||||
if (q931_dump_header(ctrl, tei, h, len, c)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Message header begins at the end of the call reference number */
|
||||
mh = (q931_mh *)(h->contents + h->crlen);
|
||||
switch (h->pd) {
|
||||
case MAINTENANCE_PROTOCOL_DISCRIMINATOR_1:
|
||||
case MAINTENANCE_PROTOCOL_DISCRIMINATOR_2:
|
||||
pri_message(ctrl, "%c Message Type: %s (%d)\n", c, maintenance_msg2str(mh->msg, h->pd), mh->msg);
|
||||
break;
|
||||
default:
|
||||
/* Unknown protocol discriminator but we will treat it as Q.931 anyway. */
|
||||
case GR303_PROTOCOL_DISCRIMINATOR:
|
||||
case Q931_PROTOCOL_DISCRIMINATOR:
|
||||
pri_message(ctrl, "%c Message Type: %s (%d)\n", c, msg2str(mh->msg), mh->msg);
|
||||
break;
|
||||
}
|
||||
/* Drop length of header, including call reference */
|
||||
mh = (q931_mh *)(h->contents + h->crlen);
|
||||
len -= (h->crlen + 3);
|
||||
codeset = cur_codeset = 0;
|
||||
for (x = 0; x < len; x += r) {
|
||||
@@ -4328,19 +4389,32 @@ static void init_header(struct pri *ctrl, q931_call *call, unsigned char *buf, q
|
||||
|
||||
static int q931_xmit(struct pri *ctrl, int tei, q931_h *h, int len, int cr, int uiframe)
|
||||
{
|
||||
if (uiframe) {
|
||||
q921_transmit_uiframe(ctrl, h, len);
|
||||
} else {
|
||||
q921_transmit_iframe(ctrl, tei, h, len, cr);
|
||||
}
|
||||
/* The transmit operation might dump the q921 header, so logging the q931
|
||||
message body after the transmit puts the sections of the message in the
|
||||
right order in the log */
|
||||
if (ctrl->debug & PRI_DEBUG_Q931_DUMP)
|
||||
q931_dump(ctrl, tei, h, len, 1);
|
||||
#ifdef LIBPRI_COUNTERS
|
||||
ctrl->q931_txcount++;
|
||||
#endif
|
||||
if (uiframe) {
|
||||
q921_transmit_uiframe(ctrl, h, len);
|
||||
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,
|
||||
*/
|
||||
q931_dump(ctrl, tei, h, len, 1);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Indicate passing the Q.931 message to Q.921 first. Q.921 may
|
||||
* have to request a TEI or bring the connection up before it can
|
||||
* actually send the message. Therefore, the Q.931 message may
|
||||
* actually get sent a few seconds later. Q.921 will dump the
|
||||
* Q.931 message as appropriate at that time.
|
||||
*/
|
||||
if (ctrl->debug & PRI_DEBUG_Q931_DUMP) {
|
||||
q931_to_q921_passing_dump(ctrl, tei, h, len);
|
||||
}
|
||||
q921_transmit_iframe(ctrl, tei, h, len, cr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -4370,6 +4444,7 @@ static int send_message(struct pri *ctrl, q931_call *call, int msgtype, int ies[
|
||||
int x;
|
||||
int codeset;
|
||||
int uiframe;
|
||||
int tei;
|
||||
|
||||
if (call->outboundbroadcast && call->master_call == call && msgtype != Q931_SETUP) {
|
||||
pri_error(ctrl,
|
||||
@@ -4398,6 +4473,7 @@ static int send_message(struct pri *ctrl, q931_call *call, int msgtype, int ies[
|
||||
/* Invert the logic */
|
||||
len = sizeof(buf) - len;
|
||||
|
||||
tei = call->pri->tei;
|
||||
uiframe = 0;
|
||||
if (BRI_NT_PTMP(ctrl)) {
|
||||
/* NT PTMP is the only mode that can broadcast Q.931 messages. */
|
||||
@@ -4414,7 +4490,7 @@ static int send_message(struct pri *ctrl, q931_call *call, int msgtype, int ies[
|
||||
uiframe = 1;
|
||||
break;
|
||||
case Q931_FACILITY:
|
||||
if (call->pri->tei == Q921_TEI_GROUP) {
|
||||
if (tei == Q921_TEI_GROUP) {
|
||||
/* Broadcast TEI. */
|
||||
if (q931_is_dummy_call(call)) {
|
||||
/*
|
||||
@@ -4439,8 +4515,14 @@ static int send_message(struct pri *ctrl, q931_call *call, int msgtype, int ies[
|
||||
"Sending message for call %p on call->pri: %p with TEI/SAPI %d/%d\n",
|
||||
call, call->pri, call->pri->tei, call->pri->sapi);
|
||||
}
|
||||
} else if (call->pri->subchannel && BRI_TE_PTMP(ctrl)) {
|
||||
/*
|
||||
* Get the best available TEI value for the debug dump display.
|
||||
* We may not actually have a TEI assigned at the moment.
|
||||
*/
|
||||
tei = call->pri->subchannel->tei;
|
||||
}
|
||||
q931_xmit(call->pri, call->pri->tei, h, len, 1, uiframe);
|
||||
q931_xmit(call->pri, tei, h, len, 1, uiframe);
|
||||
call->acked = 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -4585,7 +4667,7 @@ int q931_notify_redirection(struct pri *ctrl, q931_call *call, int notify, const
|
||||
|
||||
if (call->outboundbroadcast && call->master_call == call) {
|
||||
status = 0;
|
||||
for (idx = 0; idx < Q931_MAX_TEI; ++idx) {
|
||||
for (idx = 0; idx < ARRAY_LEN(call->subcalls); ++idx) {
|
||||
subcall = call->subcalls[idx];
|
||||
if (subcall) {
|
||||
/* Send to all subcalls that have given a positive response. */
|
||||
@@ -5975,7 +6057,7 @@ int q931_hangup(struct pri *ctrl, q931_call *call, int cause)
|
||||
int slaves = 0;
|
||||
|
||||
/* Master is called with hangup - initiate hangup with slaves */
|
||||
for (i = 0; i < Q931_MAX_TEI; i++) {
|
||||
for (i = 0; i < ARRAY_LEN(call->subcalls); ++i) {
|
||||
if (call->subcalls[i]) {
|
||||
slaves++;
|
||||
if (i == call->master_call->pri_winner) {
|
||||
@@ -6227,7 +6309,7 @@ static int q931_get_subcall_count(struct q931_call *call)
|
||||
int i;
|
||||
|
||||
call = call->master_call;
|
||||
for (i = 0; i < Q931_MAX_TEI; i++) {
|
||||
for (i = 0; i < ARRAY_LEN(call->subcalls); ++i) {
|
||||
if (call->subcalls[i])
|
||||
count++;
|
||||
}
|
||||
@@ -6242,7 +6324,7 @@ static void q931_set_subcall_winner(struct q931_call *subcall)
|
||||
int i;
|
||||
|
||||
/* Set the winner first */
|
||||
for (i = 0; i < Q931_MAX_TEI; i++) {
|
||||
for (i = 0; i < ARRAY_LEN(realcall->subcalls); ++i) {
|
||||
if (realcall->subcalls[i] && realcall->subcalls[i] == subcall) {
|
||||
realcall->pri_winner = i;
|
||||
}
|
||||
@@ -6253,7 +6335,7 @@ static void q931_set_subcall_winner(struct q931_call *subcall)
|
||||
}
|
||||
|
||||
/* Start tear down of calls that were not chosen */
|
||||
for (i = 0; i < Q931_MAX_TEI; i++) {
|
||||
for (i = 0; i < ARRAY_LEN(realcall->subcalls); ++i) {
|
||||
if (realcall->subcalls[i] && realcall->subcalls[i] != subcall) {
|
||||
initiate_hangup_if_needed(realcall->subcalls[i]->pri, realcall->subcalls[i],
|
||||
PRI_CAUSE_NONSELECTED_USER_CLEARING);
|
||||
@@ -6268,7 +6350,7 @@ static struct q931_call *q931_get_subcall(struct pri *ctrl, struct q931_call *ma
|
||||
int firstfree = -1;
|
||||
|
||||
/* First try to locate our subcall */
|
||||
for (i = 0; i < Q931_MAX_TEI; i++) {
|
||||
for (i = 0; i < ARRAY_LEN(master_call->subcalls); ++i) {
|
||||
if (master_call->subcalls[i]) {
|
||||
if (master_call->subcalls[i]->pri == ctrl) {
|
||||
return master_call->subcalls[i];
|
||||
@@ -6279,7 +6361,7 @@ static struct q931_call *q931_get_subcall(struct pri *ctrl, struct q931_call *ma
|
||||
}
|
||||
if (firstfree < 0) {
|
||||
pri_error(ctrl, "Tried to add more than %d TEIs to call and failed\n",
|
||||
Q931_MAX_TEI);
|
||||
(int) ARRAY_LEN(master_call->subcalls));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -6295,7 +6377,7 @@ static struct q931_call *q931_get_subcall(struct pri *ctrl, struct q931_call *ma
|
||||
cur->apdus = NULL;
|
||||
cur->bridged_call = NULL;
|
||||
//cur->master_call = master_call; /* We get this assignment for free. */
|
||||
for (i = 0; i < Q931_MAX_TEI; ++i) {
|
||||
for (i = 0; i < ARRAY_LEN(cur->subcalls); ++i) {
|
||||
cur->subcalls[i] = NULL;
|
||||
}
|
||||
cur->t303_timer = 0;/* T303 should only be on on the master call */
|
||||
|
||||
45
rose.c
45
rose.c
@@ -761,6 +761,21 @@ static const struct rose_convert_error rose_etsi_errors[] = {
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
|
||||
/*
|
||||
* Note the first value in oid.values[] is really the first two
|
||||
* OID subidentifiers. They are compressed using this formula:
|
||||
* First_Value = (First_Subidentifier * 40) + Second_Subidentifier
|
||||
*/
|
||||
|
||||
/*! \brief ECMA private-isdn-signalling-domain prefix. */
|
||||
static const struct asn1_oid rose_qsig_isdn_domain = {
|
||||
/* *INDENT-OFF* */
|
||||
/* {iso(1) identified-organization(3) icd-ecma(12) private-isdn-signalling-domain(9)} */
|
||||
3, { 43, 12, 9 }
|
||||
/* *INDENT-ON* */
|
||||
};
|
||||
|
||||
|
||||
/*! \brief Q.SIG specific invoke/result encode/decode message table */
|
||||
static const struct rose_convert_msg rose_qsig_msgs[] = {
|
||||
/* *INDENT-OFF* */
|
||||
@@ -770,7 +785,7 @@ static const struct rose_convert_msg rose_qsig_msgs[] = {
|
||||
* decode_invoke_args, decode_result_args
|
||||
*/
|
||||
/*
|
||||
* localValue's from Q.SIG Name-Operations
|
||||
* localValue's from Q.SIG Name-Operations 4th edition
|
||||
* { iso(1) standard(0) pss1-name(13868) name-operations(0) }
|
||||
*/
|
||||
{
|
||||
@@ -794,6 +809,34 @@ static const struct rose_convert_msg rose_qsig_msgs[] = {
|
||||
rose_dec_qsig_BusyName_ARG, NULL
|
||||
},
|
||||
|
||||
/*
|
||||
* globalValue's (OIDs) from Q.SIG Name-Operations 2nd edition
|
||||
* { iso(1) identified-organization(3) icd-ecma(12) standard(0) qsig-name(164) name-operations(0) }
|
||||
*
|
||||
* This older version of the Q.SIG switch is not supported.
|
||||
* However, we will accept receiving these messages anyway.
|
||||
*/
|
||||
{
|
||||
ROSE_QSIG_CallingName, &rose_qsig_isdn_domain, 0,
|
||||
rose_enc_qsig_CallingName_ARG, NULL,
|
||||
rose_dec_qsig_CallingName_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_CalledName, &rose_qsig_isdn_domain, 1,
|
||||
rose_enc_qsig_CalledName_ARG, NULL,
|
||||
rose_dec_qsig_CalledName_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_ConnectedName, &rose_qsig_isdn_domain, 2,
|
||||
rose_enc_qsig_ConnectedName_ARG, NULL,
|
||||
rose_dec_qsig_ConnectedName_ARG, NULL
|
||||
},
|
||||
{
|
||||
ROSE_QSIG_BusyName, &rose_qsig_isdn_domain, 3,
|
||||
rose_enc_qsig_BusyName_ARG, NULL,
|
||||
rose_dec_qsig_BusyName_ARG, NULL
|
||||
},
|
||||
|
||||
/*
|
||||
* localValue's from Q.SIG SS-AOC-Operations
|
||||
* { iso(1) standard(0) pss1-advice-of-charge(15050) advice-of-charge-operations(0) }
|
||||
|
||||
54
rosetest.c
54
rosetest.c
@@ -2837,6 +2837,42 @@ static unsigned char rose_qsig_name_alt_encode_msg[] = {
|
||||
/* *INDENT-ON* */
|
||||
};
|
||||
|
||||
static unsigned char rose_qsig_name_2nd_encode_msg[] = {
|
||||
/* *INDENT-OFF* */
|
||||
/*
|
||||
* Context Specific/C [10 0x0A] <AA> Len:6 <06>
|
||||
* Context Specific [0 0x00] <80> Len:1 <01>
|
||||
* <00> - "~"
|
||||
* Context Specific [2 0x02] <82> Len:1 <01>
|
||||
* <00> - "~"
|
||||
* Context Specific [11 0x0B] <8B> Len:1 <01>
|
||||
* <00> - "~"
|
||||
* Context Specific/C [1 0x01] <A1> Len:26 <1A>
|
||||
* Integer(2 0x02) <02> Len:1 <01>
|
||||
* <40> - "@"
|
||||
* OID(6 0x06) <06> Len:4 <04>
|
||||
* <2B 0C 09 00> - "+~~~"
|
||||
* Context Specific [0 0x00] <80> Len:15 <0F>
|
||||
* <4D 6F 64 65 6D 20 44 69-73 63 6F 42 61 6C 6C> - "Modem DiscoBall"
|
||||
*/
|
||||
0x91,
|
||||
0xaa, 0x06,
|
||||
0x80, 0x01,
|
||||
0x00,
|
||||
0x82, 0x01,
|
||||
0x00,
|
||||
0x8b, 0x01,
|
||||
0x00,
|
||||
0xa1, 0x1a,
|
||||
0x02, 0x01,
|
||||
0x40,
|
||||
0x06, 0x04,
|
||||
0x2b, 0x0c, 0x09, 0x00,
|
||||
0x80, 0x0f,
|
||||
0x4d, 0x6f, 0x64, 0x65, 0x6d, 0x20, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x42, 0x61, 0x6c, 0x6c
|
||||
/* *INDENT-ON* */
|
||||
};
|
||||
|
||||
|
||||
static const struct rose_message rose_dms100_msgs[] = {
|
||||
/* *INDENT-OFF* */
|
||||
@@ -3023,6 +3059,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
unsigned index;
|
||||
unsigned offset;
|
||||
const char *str;
|
||||
static struct pri dummy_ctrl;
|
||||
|
||||
pri_set_message(rose_pri_message);
|
||||
@@ -3131,12 +3168,20 @@ int main(int argc, char *argv[])
|
||||
rose_test_exception(&dummy_ctrl, "Alternate name encoded messages",
|
||||
rose_qsig_name_alt_encode_msg, sizeof(rose_qsig_name_alt_encode_msg));
|
||||
|
||||
rose_test_exception(&dummy_ctrl, "2nd edition name encoded messages",
|
||||
rose_qsig_name_2nd_encode_msg, sizeof(rose_qsig_name_2nd_encode_msg));
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
pri_message(&dummy_ctrl, "\n\n"
|
||||
"List of operation codes:\n");
|
||||
for (index = 0; index < ROSE_Num_Operation_Codes; ++index) {
|
||||
pri_message(&dummy_ctrl, "%d: %s\n", index, rose_operation2str(index));
|
||||
str = rose_operation2str(index);
|
||||
if (!strncmp(str, "Invalid code:", 13)) {
|
||||
pri_error(&dummy_ctrl, "%d: %s\n", index, str);
|
||||
} else {
|
||||
pri_message(&dummy_ctrl, "%d: %s\n", index, str);
|
||||
}
|
||||
}
|
||||
pri_message(&dummy_ctrl, "\n\n"
|
||||
"************************************************************\n");
|
||||
@@ -3146,7 +3191,12 @@ int main(int argc, char *argv[])
|
||||
pri_message(&dummy_ctrl, "\n\n"
|
||||
"List of error codes:\n");
|
||||
for (index = 0; index < ROSE_ERROR_Num_Codes; ++index) {
|
||||
pri_message(&dummy_ctrl, "%d: %s\n", index, rose_error2str(index));
|
||||
str = rose_error2str(index);
|
||||
if (!strncmp(str, "Invalid code:", 13)) {
|
||||
pri_error(&dummy_ctrl, "%d: %s\n", index, str);
|
||||
} else {
|
||||
pri_message(&dummy_ctrl, "%d: %s\n", index, str);
|
||||
}
|
||||
}
|
||||
pri_message(&dummy_ctrl, "\n\n"
|
||||
"************************************************************\n");
|
||||
|
||||
Reference in New Issue
Block a user