Merged revision 1955,1958 from

https://origsvn.digium.com/svn/libpri/branches/1.4

..........
  r1955 | rmudgett | 2010-09-02 12:33:51 -0500 (Thu, 02 Sep 2010) | 1 line

  Don't crash in __pri_new_tei() if a GR303 subchannel creation fails.

  ..........
  r1958 | rmudgett | 2010-09-07 18:13:04 -0500 (Tue, 07 Sep 2010) | 1 line

  Balance curly braces in post_handle_q931_message().
..........


git-svn-id: https://origsvn.digium.com/svn/libpri/tags/1.4.11.5@2131 2fbb986a-6c06-0410-b554-c9c1f0a7f128
This commit is contained in:
Richard Mudgett
2010-11-17 21:17:47 +00:00
parent 915d423ffc
commit 2ab04a7663
2 changed files with 16 additions and 8 deletions

4
pri.c
View File

@@ -324,7 +324,7 @@ struct pri *__pri_new_tei(int fd, int node, int switchtype, struct pri *master,
p->subchannel = __pri_new_tei(-1, node, PRI_SWITCH_GR303_EOC_PATH, p, NULL, NULL, NULL, Q921_TEI_GR303_EOC_PATH, 0);
if (!p->subchannel) {
free(p);
p = NULL;
return NULL;
}
break;
case PRI_SWITCH_GR303_TMC:
@@ -334,7 +334,7 @@ struct pri *__pri_new_tei(int fd, int node, int switchtype, struct pri *master,
p->subchannel = __pri_new_tei(-1, node, PRI_SWITCH_GR303_TMC_SWITCHING, p, NULL, NULL, NULL, Q921_TEI_GR303_TMC_SWITCHING, 0);
if (!p->subchannel) {
free(p);
p = NULL;
return NULL;
}
break;
case PRI_SWITCH_GR303_TMC_SWITCHING:

20
q931.c
View File

@@ -7040,16 +7040,24 @@ static int post_handle_q931_message(struct pri *ctrl, struct q931_mh *mh, struct
if ((ctrl->debug & PRI_DEBUG_Q931_ANOMALY) &&
(c->cause != PRI_CAUSE_INTERWORKING))
pri_error(ctrl, "Received unsolicited status: %s\n", pri_cause2str(c->cause));
/* Workaround for S-12 ver 7.3 - it responds for invalid/non-implemented IEs at SETUP with null call state */
if (
#if 0
if (!c->sugcallstate && (c->ourcallstate != Q931_CALL_STATE_CALL_INITIATED)) {
/*
* Workaround for S-12 ver 7.3 - it responds to
* invalid/non-implemented IEs in SETUP with NULL call state.
*/
!c->sugcallstate && (c->ourcallstate != Q931_CALL_STATE_CALL_INITIATED)
#else
/* Remove "workaround" since it breaks certification testing. If we receive a STATUS message of call state
* NULL and we are not in the call state NULL we must clear resources and return to the call state to pass
* testing. See section 5.8.11 of Q.931 */
/*
* Remove "workaround" since it breaks certification testing. If
* we receive a STATUS message of call state NULL and we are not
* in the call state NULL we must clear resources and return to
* the call state to pass testing. See section 5.8.11 of Q.931.
*/
if (!c->sugcallstate) {
!c->sugcallstate
#endif
) {
ctrl->ev.hangup.subcmds = &ctrl->subcmds;
ctrl->ev.hangup.channel = q931_encode_channel(c);
ctrl->ev.hangup.cause = c->cause;