Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv20368/channels
Modified Files:
chan_iax2.c
Log Message:
use enum's for iax user/peer flags, and for pvt state
Index: chan_iax2.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_iax2.c,v
retrieving revision 1.369
retrieving revision 1.370
diff -u -d -r1.369 -r1.370
--- chan_iax2.c 4 Nov 2005 18:40:35 -0000 1.369
+++ chan_iax2.c 6 Nov 2005 05:52:26 -0000 1.370
@@ -224,38 +224,42 @@
static pthread_t netthreadid = AST_PTHREADT_NULL;
-#define IAX_STATE_STARTED (1 << 0)
-#define IAX_STATE_AUTHENTICATED (1 << 1)
-#define IAX_STATE_TBD (1 << 2)
+enum {
+ IAX_STATE_STARTED = (1 << 0),
+ IAX_STATE_AUTHENTICATED = (1 << 1),
+ IAX_STATE_TBD = (1 << 2)
+} iax2_state;
struct iax2_context {
char context[AST_MAX_CONTEXT];
struct iax2_context *next;
};
-#define IAX_HASCALLERID (1 << 0) /*!< CallerID has been
specified */
-#define IAX_DELME (1 << 1) /*!< Needs to be deleted */
-#define IAX_TEMPONLY (1 << 2) /*!< Temporary (realtime) */
-#define IAX_TRUNK (1 << 3) /*!< Treat as a trunk */
-#define IAX_NOTRANSFER (1 << 4) /*!< Don't native bridge */
-#define IAX_USEJITTERBUF (1 << 5) /*!< Use jitter buffer */
-#define IAX_DYNAMIC (1 << 6) /*!< dynamic peer */
-#define IAX_SENDANI (1 << 7) /*!< Send ANI along with
CallerID */
-#define IAX_MESSAGEDETAIL (1 << 8) /*!< Show exact numbers */
-#define IAX_ALREADYGONE (1 << 9) /*!< Already
disconnected */
-#define IAX_PROVISION (1 << 10) /*!< This is a provisioning
request */
-#define IAX_QUELCH (1 << 11) /*!< Whether or not we quelch
audio */
-#define IAX_ENCRYPTED (1 << 12) /*!< Whether we should assume
encrypted tx/rx */
-#define IAX_KEYPOPULATED (1 << 13) /*!< Whether we have a key
populated */
-#define IAX_CODEC_USER_FIRST (1 << 14) /*!< are we willing to let the
other guy choose the codec? */
-#define IAX_CODEC_NOPREFS (1 << 15) /*!< Force old behaviour by
turning off prefs */
-#define IAX_CODEC_NOCAP (1 << 16) /*!< only consider requested
format and ignore capabilities*/
-#define IAX_RTCACHEFRIENDS (1 << 17) /*!< let realtime stay till
your reload */
-#define IAX_RTUPDATE (1 << 18) /*!< Send a realtime update */
-#define IAX_RTAUTOCLEAR (1 << 19) /*!< erase me on expire */
-#define IAX_FORCEJITTERBUF (1 << 20) /*!< Force jitterbuffer, even
when bridged to a channel that can take jitter */
-#define IAX_RTIGNOREREGEXPIRE (1 << 21) /*!< When using realtime,
ignore registration expiration */
-#define IAX_TRUNKTIMESTAMPS (1 << 22) /*!< Send trunk timestamps */
+enum {
+ IAX_HASCALLERID = (1 << 0), /*!< CallerID has been
specified */
+ IAX_DELME = (1 << 1), /*!< Needs to be deleted */
+ IAX_TEMPONLY = (1 << 2), /*!< Temporary (realtime) */
+ IAX_TRUNK = (1 << 3), /*!< Treat as a trunk */
+ IAX_NOTRANSFER = (1 << 4), /*!< Don't native bridge */
+ IAX_USEJITTERBUF = (1 << 5), /*!< Use jitter buffer */
+ IAX_DYNAMIC = (1 << 6), /*!< dynamic peer */
+ IAX_SENDANI = (1 << 7), /*!< Send ANI along with
CallerID */
+ IAX_MESSAGEDETAIL = (1 << 8), /*!< Show exact numbers */
+ IAX_ALREADYGONE = (1 << 9), /*!< Already disconnected */
+ IAX_PROVISION = (1 << 10), /*!< This is a provisioning
request */
+ IAX_QUELCH = (1 << 11), /*!< Whether or not we quelch
audio */
+ IAX_ENCRYPTED = (1 << 12), /*!< Whether we should assume
encrypted tx/rx */
+ IAX_KEYPOPULATED = (1 << 13), /*!< Whether we have a key
populated */
+ IAX_CODEC_USER_FIRST = (1 << 14), /*!< are we willing to let the
other guy choose the codec? */
+ IAX_CODEC_NOPREFS = (1 << 15), /*!< Force old behaviour by
turning off prefs */
+ IAX_CODEC_NOCAP = (1 << 16), /*!< only consider requested
format and ignore capabilities*/
+ IAX_RTCACHEFRIENDS = (1 << 17), /*!< let realtime stay till
your reload */
+ IAX_RTUPDATE = (1 << 18), /*!< Send a realtime update */
+ IAX_RTAUTOCLEAR = (1 << 19), /*!< erase me on expire */
+ IAX_FORCEJITTERBUF = (1 << 20), /*!< Force jitterbuffer, even
when bridged to a channel that can take jitter */
+ IAX_RTIGNOREREGEXPIRE = (1 << 21), /*!< When using realtime,
ignore registration expiration */
+ IAX_TRUNKTIMESTAMPS = (1 << 22) /*!< Send trunk timestamps */
+} iax2_flags;
static int global_rtautoclear = 120;
@@ -489,7 +493,7 @@
/*! Owner if we have one */
struct ast_channel *owner;
/*! What's our state? */
- int state;
+ struct ast_flags state;
/*! Expiry (optional) */
int expiry;
/*! Next outgoing sequence number */
@@ -4600,7 +4604,7 @@
res = 0;
else if ((f->frametype == AST_FRAME_VOICE) &&
ast_test_flag(iaxs[callno], IAX_QUELCH))
res = 0;
- else if (!(iaxs[callno]->state & IAX_STATE_STARTED))
+ else if (!ast_test_flag(&iaxs[callno]->state,
IAX_STATE_STARTED))
res = 0;
else
/* Simple, just queue for transmission */
@@ -4928,7 +4932,7 @@
int res = -1;
int x;
- if (!(p->state & IAX_STATE_AUTHENTICATED))
+ if (!ast_test_flag(&p->state, IAX_STATE_AUTHENTICATED))
return res;
if (ies->password)
ast_copy_string(secret, ies->password, sizeof(secret));
@@ -4995,7 +4999,7 @@
int x;
int expire = 0;
- iaxs[callno]->state &= ~IAX_STATE_AUTHENTICATED;
+ ast_clear_flag(&iaxs[callno]->state, IAX_STATE_AUTHENTICATED);
iaxs[callno]->peer[0] = '\0';
if (ies->username)
ast_copy_string(peer, ies->username, sizeof(peer));
@@ -5053,7 +5057,7 @@
while(keyn) {
key = ast_key_get(keyn, AST_KEY_PUBLIC);
if (key && !ast_check_signature(key,
iaxs[callno]->challenge, rsasecret)) {
- iaxs[callno]->state |=
IAX_STATE_AUTHENTICATED;
+ ast_set_flag(&iaxs[callno]->state,
IAX_STATE_AUTHENTICATED);
break;
} else if (!key)
ast_log(LOG_WARNING, "requested inkey
'%s' does not exist\n", keyn);
@@ -5082,7 +5086,7 @@
destroy_peer(p);
return -1;
} else
- iaxs[callno]->state |= IAX_STATE_AUTHENTICATED;
+ ast_set_flag(&iaxs[callno]->state,
IAX_STATE_AUTHENTICATED);
} else if (!ast_strlen_zero(md5secret) && (p->authmethods &
IAX_AUTH_MD5) && !ast_strlen_zero(iaxs[callno]->challenge)) {
struct MD5Context md5;
unsigned char digest[16];
@@ -5101,7 +5105,7 @@
break;
}
if (tmppw) {
- iaxs[callno]->state |= IAX_STATE_AUTHENTICATED;
+ ast_set_flag(&iaxs[callno]->state,
IAX_STATE_AUTHENTICATED);
} else {
if (authdebug)
ast_log(LOG_NOTICE, "Host %s failed MD5
authentication for '%s' (%s != %s)\n", ast_inet_ntoa(iabuf, sizeof(iabuf),
sin->sin_addr), p->name, requeststr, md5secret);
@@ -5630,14 +5634,14 @@
ast_db_put("IAX/Registry", p->name, data);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Registered IAX2
'%s' (%s) at %s:%d\n", p->name,
- iaxs[callno]->state &
IAX_STATE_AUTHENTICATED ? "AUTHENTICATED" : "UNAUTHENTICATED",
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
+ ast_test_flag(&iaxs[callno]->state,
IAX_STATE_AUTHENTICATED) ? "AUTHENTICATED" : "UNAUTHENTICATED",
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer:
IAX2/%s\r\nPeerStatus: Registered\r\n", p->name);
register_peer_exten(p, 1);
ast_device_state_changed("IAX2/%s", p->name); /*
Activate notification */
} else if (!ast_test_flag(p, IAX_TEMPONLY)) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Unregistered IAX2
'%s' (%s)\n", p->name,
- iaxs[callno]->state &
IAX_STATE_AUTHENTICATED ? "AUTHENTICATED" : "UNAUTHENTICATED");
+ ast_test_flag(&iaxs[callno]->state,
IAX_STATE_AUTHENTICATED) ? "AUTHENTICATED" : "UNAUTHENTICATED");
manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer:
IAX2/%s\r\nPeerStatus: Unregistered\r\n", p->name);
register_peer_exten(p, 0);
ast_db_del("IAX/Registry", p->name);
@@ -6359,7 +6363,7 @@
} else
fr.ts =
fix_peerts(&rxtrunktime, fr.callno, ts);
/* Don't pass
any packets until we're started */
- if
((iaxs[fr.callno]->state & IAX_STATE_STARTED)) {
+ if
(ast_test_flag(&iaxs[fr.callno]->state, IAX_STATE_STARTED)) {
/*
Common things */
f.src =
"IAX2";
f.mallocd = 0;
@@ -6691,7 +6695,7 @@
/* Do nothing */
break;
case IAX_COMMAND_QUELCH:
- if (iaxs[fr.callno]->state & IAX_STATE_STARTED)
{
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED)) {
/* Generate Manager Hold event, if
necessary*/
if (iaxs[fr.callno]->owner) {
manager_event(EVENT_FLAG_CALL,
"Hold",
@@ -6709,8 +6713,8 @@
}
}
break;
- case IAX_COMMAND_UNQUELCH:
- if (iaxs[fr.callno]->state & IAX_STATE_STARTED)
{
+ case IAX_COMMAND_UNQUELCH:
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED)) {
/* Generate Manager Unhold event, if
necessary*/
if (iaxs[fr.callno]->owner &&
ast_test_flag(iaxs[fr.callno], IAX_QUELCH)) {
manager_event(EVENT_FLAG_CALL,
"Unhold",
@@ -6744,7 +6748,7 @@
break;
case IAX_COMMAND_NEW:
/* Ignore if it's already up */
- if (iaxs[fr.callno]->state & (IAX_STATE_STARTED
| IAX_STATE_TBD))
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED | IAX_STATE_TBD))
break;
if (ies.provverpres && ies.serviceident &&
sin.sin_addr.s_addr)
check_provisioning(&sin, fd,
ies.serviceident, ies.provver);
@@ -6870,7 +6874,7 @@
iax_ie_append_int(&ied1, IAX_IE_FORMAT, format);
send_command(iaxs[fr.callno], AST_FRAME_IAX, IAX_COMMAND_ACCEPT, 0, ied1.buf,
ied1.pos, -1);
if
(strcmp(iaxs[fr.callno]->exten, "TBD")) {
-
iaxs[fr.callno]->state |= IAX_STATE_STARTED;
+
ast_set_flag(&iaxs[fr.callno]->state, IAX_STATE_STARTED);
if
(option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepting UNAUTHENTICATED call from %s:\n"
"%srequested format = %s,\n"
@@ -6893,7 +6897,7 @@
if(!(c =
ast_iax2_new(fr.callno, AST_STATE_RING, format)))
iax2_destroy_nolock(fr.callno);
} else {
-
iaxs[fr.callno]->state |= IAX_STATE_TBD;
+
ast_set_flag(&iaxs[fr.callno]->state, IAX_STATE_TBD);
/* If this is a
TBD call, we're ready but now what... */
if
(option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepted unauthenticated TBD call from %s\n",
ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr));
@@ -6907,12 +6911,12 @@
else
iaxs[fr.callno]->encmethods = 0;
authenticate_request(iaxs[fr.callno]);
- iaxs[fr.callno]->state |=
IAX_STATE_AUTHENTICATED;
+ ast_set_flag(&iaxs[fr.callno]->state,
IAX_STATE_AUTHENTICATED);
break;
case IAX_COMMAND_DPREQ:
/* Request status in the dialplan */
- if ((iaxs[fr.callno]->state & IAX_STATE_TBD) &&
- !(iaxs[fr.callno]->state &
IAX_STATE_STARTED) && ies.called_number) {
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_TBD) &&
+ !ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED) && ies.called_number) {
if (iaxcompat) {
/* Spawn a thread for the
lookup */
spawn_dp_lookup(fr.callno,
iaxs[fr.callno]->context, ies.called_number, iaxs[fr.callno]->cid_num);
@@ -6978,7 +6982,7 @@
break;
case IAX_COMMAND_ACCEPT:
/* Ignore if call is already up or needs
authentication or is a TBD */
- if (iaxs[fr.callno]->state & (IAX_STATE_STARTED
| IAX_STATE_TBD | IAX_STATE_AUTHENTICATED))
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED | IAX_STATE_TBD | IAX_STATE_AUTHENTICATED))
break;
if (ast_test_flag(iaxs[fr.callno],
IAX_PROVISION)) {
/* Send ack immediately, before we
destroy */
@@ -7004,7 +7008,7 @@
if (authdebug)
ast_log(LOG_NOTICE, "Rejected
call to %s, format 0x%x incompatible with our capability 0x%x.\n",
ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), iaxs[fr.callno]->peerformat,
iaxs[fr.callno]->capability);
} else {
- iaxs[fr.callno]->state |=
IAX_STATE_STARTED;
+ ast_set_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED);
if (iaxs[fr.callno]->owner) {
/* Switch us to use a
compatible format */
iaxs[fr.callno]->owner->nativeformats = iaxs[fr.callno]->peerformat;
@@ -7145,7 +7149,7 @@
#endif
break;
case IAX_COMMAND_AUTHREQ:
- if (iaxs[fr.callno]->state & (IAX_STATE_STARTED
| IAX_STATE_TBD)) {
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED | IAX_STATE_TBD)) {
ast_log(LOG_WARNING, "Call on %s is
already up, can't start on it\n", iaxs[fr.callno]->owner ?
iaxs[fr.callno]->owner->name : "<Unknown>");
break;
}
@@ -7160,7 +7164,7 @@
if (delayreject)
send_command_immediate(iaxs[fr.callno],
AST_FRAME_IAX, IAX_COMMAND_ACK, fr.ts, NULL, 0,fr.iseqno);
/* Ignore once we've started */
- if (iaxs[fr.callno]->state & (IAX_STATE_STARTED
| IAX_STATE_TBD)) {
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_STARTED | IAX_STATE_TBD)) {
ast_log(LOG_WARNING, "Call on %s is
already up, can't start on it\n", iaxs[fr.callno]->owner ?
iaxs[fr.callno]->owner->name : "<Unknown>");
break;
}
@@ -7278,7 +7282,7 @@
iax_ie_append_int(&ied1,
IAX_IE_FORMAT, format);
send_command(iaxs[fr.callno],
AST_FRAME_IAX, IAX_COMMAND_ACCEPT, 0, ied1.buf, ied1.pos, -1);
if
(strcmp(iaxs[fr.callno]->exten, "TBD")) {
- iaxs[fr.callno]->state
|= IAX_STATE_STARTED;
+
ast_set_flag(&iaxs[fr.callno]->state, IAX_STATE_STARTED);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepting AUTHENTICATED call from %s:\n"
"%srequested format = %s,\n"
@@ -7298,11 +7302,11 @@
VERBOSE_PREFIX_4,
using_prefs);
- iaxs[fr.callno]->state
|= IAX_STATE_STARTED;
+
ast_set_flag(&iaxs[fr.callno]->state, IAX_STATE_STARTED);
if(!(c =
ast_iax2_new(fr.callno, AST_STATE_RING, format)))
iax2_destroy_nolock(fr.callno);
} else {
- iaxs[fr.callno]->state
|= IAX_STATE_TBD;
+
ast_set_flag(&iaxs[fr.callno]->state, IAX_STATE_TBD);
/* If this is a TBD
call, we're ready but now what... */
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepted AUTHENTICATED TBD call from %s\n",
ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr));
@@ -7311,8 +7315,8 @@
}
break;
case IAX_COMMAND_DIAL:
- if (iaxs[fr.callno]->state & IAX_STATE_TBD) {
- iaxs[fr.callno]->state &=
~IAX_STATE_TBD;
+ if (ast_test_flag(&iaxs[fr.callno]->state,
IAX_STATE_TBD)) {
+ ast_clear_flag(&iaxs[fr.callno]->state,
IAX_STATE_TBD);
ast_copy_string(iaxs[fr.callno]->exten,
ies.called_number ? ies.called_number : "s", sizeof(iaxs[fr.callno]->exten));
if (!ast_exists_extension(NULL,
iaxs[fr.callno]->context, iaxs[fr.callno]->exten, 1, iaxs[fr.callno]->cid_num))
{
if (authdebug)
@@ -7322,10 +7326,10 @@
iax_ie_append_byte(&ied0,
IAX_IE_CAUSECODE, AST_CAUSE_NO_ROUTE_DESTINATION);
send_command_final(iaxs[fr.callno], AST_FRAME_IAX, IAX_COMMAND_REJECT, 0,
ied0.buf, ied0.pos, -1);
} else {
- iaxs[fr.callno]->state |=
IAX_STATE_STARTED;
+
ast_set_flag(&iaxs[fr.callno]->state, IAX_STATE_STARTED);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepting DIAL from %s, formats = 0x%x\n",
ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), iaxs[fr.callno]->peerformat);
- iaxs[fr.callno]->state |=
IAX_STATE_STARTED;
+
ast_set_flag(&iaxs[fr.callno]->state, IAX_STATE_STARTED);
send_command(iaxs[fr.callno],
AST_FRAME_CONTROL, AST_CONTROL_PROGRESS, 0, NULL, 0, -1);
if(!(c =
ast_iax2_new(fr.callno, AST_STATE_RING, iaxs[fr.callno]->peerformat)))
iax2_destroy_nolock(fr.callno);
@@ -7354,7 +7358,7 @@
auth_fail(fr.callno,
IAX_COMMAND_REGREJ);
break;
}
- if ((ast_strlen_zero(iaxs[fr.callno]->secret)
&& ast_strlen_zero(iaxs[fr.callno]->inkeys)) || (iaxs[fr.callno]->state &
IAX_STATE_AUTHENTICATED)) {
+ if ((ast_strlen_zero(iaxs[fr.callno]->secret)
&& ast_strlen_zero(iaxs[fr.callno]->inkeys)) ||
ast_test_flag(&iaxs[fr.callno]->state, IAX_STATE_AUTHENTICATED)) {
if (f.subclass == IAX_COMMAND_REGREL)
memset(&sin, 0, sizeof(sin));
if
(update_registry(iaxs[fr.callno]->peer, &sin, fr.callno, ies.devicetype, fd,
ies.refresh))
@@ -7539,7 +7543,7 @@
/* FIXME? Surely right here would be the right place to undo
timestamp wraparound? */
}
/* Don't pass any packets until we're started */
- if (!(iaxs[fr.callno]->state & IAX_STATE_STARTED)) {
+ if (!ast_test_flag(&iaxs[fr.callno]->state, IAX_STATE_STARTED)) {
ast_mutex_unlock(&iaxsl[fr.callno]);
return 1;
}
@@ -8958,7 +8962,7 @@
dp->peer = iaxs[callno]->dpentries;
iaxs[callno]->dpentries = dp;
/* Send the request if we're already up */
- if (iaxs[callno]->state & IAX_STATE_STARTED)
+ if (ast_test_flag(&iaxs[callno]->state, IAX_STATE_STARTED))
iax2_dprequest(dp, callno);
ast_mutex_unlock(&iaxsl[callno]);
}
_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs