[Asterisk-cvs] asterisk/channels chan_zap.c,1.251,1.252
markster at lists.digium.com
markster at lists.digium.com
Sun Jun 6 17:49:13 CDT 2004
Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv30649/channels
Modified Files:
chan_zap.c
Log Message:
Handle multiple span memberships properly
Index: chan_zap.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v
retrieving revision 1.251
retrieving revision 1.252
diff -u -d -r1.251 -r1.252
--- chan_zap.c 6 Jun 2004 22:22:48 -0000 1.251
+++ chan_zap.c 6 Jun 2004 22:51:37 -0000 1.252
@@ -295,7 +295,7 @@
#ifdef ZAPATA_PRI
-#define PVT_TO_CHANNEL(p) (((p)->prioffset) | ((p)->pri->logicalspan << 8))
+#define PVT_TO_CHANNEL(p) (((p)->prioffset) | ((p)->logicalspan << 8))
#define PRI_CHANNEL(p) ((p) & 0xff)
#define PRI_SPAN(p) (((p) >> 8) & 0xff)
@@ -313,7 +313,7 @@
int dchannel; /* What channel the dchannel is on */
int trunkgroup; /* What our trunkgroup is */
int mastertrunkgroup; /* What trunk group is our master */
- int logicalspan; /* Logical span number within trunk group */
+ int prilogicalspan; /* Logical span number within trunk group */
int numchans; /* Num of channels we represent */
int overlapdial; /* In overlap dialing mode */
struct pri *pri;
@@ -519,6 +519,7 @@
int isidlecall;
int resetting;
int prioffset;
+ int logicalspan;
int alreadyhungup;
int proceeding;
int setup_ack; /* wheter we received SETUP_ACKNOWLEDGE or not */
@@ -1680,7 +1681,7 @@
return -1;
}
if (p->bearer) {
- ast_log(LOG_DEBUG, "Oooh, I have a bearer on %d\n", PVT_TO_CHANNEL(p->bearer));
+ ast_log(LOG_DEBUG, "Oooh, I have a bearer on %d (%d:%d)\n", PVT_TO_CHANNEL(p->bearer), p->bearer->logicalspan, p->bearer->channel);
pri_set_crv(p->pri->pri, p->call, p->channel, 0);
p->bearer->call = p->call;
}
@@ -5534,7 +5535,7 @@
return -1;
}
pris[span].mastertrunkgroup = trunkgroup;
- pris[span].logicalspan = logicalspan;
+ pris[span].prilogicalspan = logicalspan;
return 0;
}
@@ -5702,7 +5703,9 @@
ast_log(LOG_ERROR, "Unable to get span status: %s\n", strerror(errno));
free(tmp);
return NULL;
- }
+ }
+ /* Store the logical span first based upon the real span */
+ tmp->logicalspan = pris[span].prilogicalspan;
pri_resolve_span(&span, channel, (channel - p.chanpos), &si);
if (span < 0) {
ast_log(LOG_WARNING, "Channel %d: Unable to find locate channel/trunk group!\n", channel);
@@ -6308,7 +6311,7 @@
channel = PRI_CHANNEL(channel);
for (x=0;x<pri->numchans;x++) {
- if (pri->pvts[x] && (pri->pvts[x]->prioffset == channel) && (pri->logicalspan == span)) {
+ if (pri->pvts[x] && (pri->pvts[x]->prioffset == channel) && (pri->pvts[x]->logicalspan == span)) {
principle = x;
break;
}
@@ -6871,10 +6874,10 @@
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepting overlap call from '%s' to '%s' on channel %d/%d, span %d\n",
e->ring.callingnum, !ast_strlen_zero(pri->pvts[chanpos]->exten) ? pri->pvts[chanpos]->exten : "<unspecified>",
- pri->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
+ pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
} else {
ast_log(LOG_WARNING, "Unable to start PBX on channel %d/%d, span %d\n",
- pri->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
+ pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
if (c)
ast_hangup(c);
else {
@@ -6891,11 +6894,11 @@
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepting call from '%s' to '%s' on channel %d/%d, span %d\n",
e->ring.callingnum, pri->pvts[chanpos]->exten,
- pri->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
+ pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
zt_enable_ec(pri->pvts[chanpos]);
} else {
ast_log(LOG_WARNING, "Unable to start PBX on channel %d/%d, span %d\n",
- pri->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
+ pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
pri_hangup(pri->pri, e->ring.call, PRI_CAUSE_SWITCH_CONGESTION);
pri->pvts[chanpos]->call = NULL;
}
@@ -6903,7 +6906,7 @@
} else {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Extension '%s' in context '%s' from '%s' does not exist. Rejecting call on channel %d/%d, span %d\n",
- pri->pvts[chanpos]->exten, pri->pvts[chanpos]->context, pri->pvts[chanpos]->callerid, pri->logicalspan,
+ pri->pvts[chanpos]->exten, pri->pvts[chanpos]->context, pri->pvts[chanpos]->callerid, pri->pvts[chanpos]->logicalspan,
pri->pvts[chanpos]->prioffset, pri->span);
pri_hangup(pri->pri, e->ring.call, PRI_CAUSE_UNALLOCATED);
pri->pvts[chanpos]->call = NULL;
@@ -6941,7 +6944,7 @@
if (pri->overlapdial && !pri->pvts[chanpos]->proceeding) {
struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_PROGRESS, };
ast_log(LOG_DEBUG, "Queuing frame from PRI_EVENT_PROCEEDING on channel %d/%d span %d\n",
- pri->logicalspan, pri->pvts[chanpos]->prioffset,pri->span);
+ pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset,pri->span);
if (pri->pvts[chanpos]->owner)
ast_queue_frame(pri->pvts[chanpos]->owner, &f);
@@ -7038,7 +7041,7 @@
}
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Channel %d/%d, span %d got hangup\n",
- pri->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
+ pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
} else {
pri_hangup(pri->pri, pri->pvts[chanpos]->call, e->hangup.cause);
pri->pvts[chanpos]->call = NULL;
@@ -7143,18 +7146,18 @@
if (pri->pvts[x] && pri->pvts[x]->resetting) {
chanpos = x;
ast_mutex_lock(&pri->pvts[chanpos]->lock);
- ast_log(LOG_DEBUG, "Assuming restart ack is really for channel %d/%d span %d\n", pri->logicalspan,
+ ast_log(LOG_DEBUG, "Assuming restart ack is really for channel %d/%d span %d\n", pri->pvts[chanpos]->logicalspan,
pri->pvts[chanpos]->prioffset, pri->span);
if (pri->pvts[chanpos]->master)
pri_hangup_all(pri->pvts[chanpos]->master);
else if (pri->pvts[chanpos]->owner) {
- ast_log(LOG_WARNING, "Got restart ack on channel %d/%d with owner on span %d\n", pri->logicalspan,
+ ast_log(LOG_WARNING, "Got restart ack on channel %d/%d with owner on span %d\n", pri->pvts[chanpos]->logicalspan,
pri->pvts[chanpos]->prioffset, pri->span);
pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
}
pri->pvts[chanpos]->resetting = 0;
if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 "B-channel %d/%d successfully restarted on span %d\n", pri->logicalspan,
+ ast_verbose(VERBOSE_PREFIX_3 "B-channel %d/%d successfully restarted on span %d\n", pri->pvts[chanpos]->logicalspan,
pri->pvts[chanpos]->prioffset, pri->span);
ast_mutex_unlock(&pri->pvts[chanpos]->lock);
if (pri->resetting)
@@ -7180,7 +7183,7 @@
}
pri->pvts[chanpos]->resetting = 0;
if (option_verbose > 2)
- ast_verbose(VERBOSE_PREFIX_3 "B-channel %d/%d successfully restarted on span %d\n", pri->logicalspan,
+ ast_verbose(VERBOSE_PREFIX_3 "B-channel %d/%d successfully restarted on span %d\n", pri->pvts[chanpos]->logicalspan,
pri->pvts[chanpos]->prioffset, pri->span);
ast_mutex_unlock(&pri->pvts[chanpos]->lock);
if (pri->resetting)
@@ -7647,10 +7650,10 @@
if (tmp->call)
ast_cli(fd, "Call ");
ast_cli(fd, "\n");
- if (tmp->pri->logicalspan)
- ast_cli(fd, "PRI Span: %d\n", tmp->pri->logicalspan);
+ if (tmp->logicalspan)
+ ast_cli(fd, "PRI Logical Span: %d\n", tmp->logicalspan);
else
- ast_cli(fd, "PRI Span: Implicit\n");
+ ast_cli(fd, "PRI Logical Span: Implicit\n");
}
#endif
More information about the svn-commits
mailing list