diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-06 05:52:26 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-06 05:52:26 +0000 |
commit | 5e884c9971ecb4d8f8ef76652d3359898d8f4d0e (patch) | |
tree | 755c54ddddccabc85b40cc04ae951bad453a65b1 /channels | |
parent | fcb15a4b4fc921db8dde736ba7a797bcf1718ad2 (diff) |
use enum's for iax user/peer flags, and for pvt state
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6976 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_iax2.c | 122 |
1 files changed, 63 insertions, 59 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 151318bf2..ca3d162ed 100755 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -224,38 +224,42 @@ static struct ast_flags globalflags = { 0 }; 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 @@ struct chan_iax2_pvt { /*! 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 @@ static int iax2_write(struct ast_channel *c, struct ast_frame *f) 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 @@ static int authenticate_verify(struct chan_iax2_pvt *p, struct iax_ies *ies) 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 @@ static int register_verify(int callno, struct sockaddr_in *sin, struct iax_ies * 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 @@ static int register_verify(int callno, struct sockaddr_in *sin, struct iax_ies * 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 @@ static int register_verify(int callno, struct sockaddr_in *sin, struct iax_ies * 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 @@ static int register_verify(int callno, struct sockaddr_in *sin, struct iax_ies * 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 @@ static int update_registry(char *name, struct sockaddr_in *sin, int callno, char 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 @@ static int socket_read(int *id, int fd, short events, void *cbdata) } 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 @@ retryowner: /* 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 @@ retryowner: } } 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 @@ retryowner: 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 @@ retryowner: 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 @@ retryowner: 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 @@ retryowner: 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 @@ retryowner: 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 @@ retryowner: 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 @@ retryowner2: #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 @@ retryowner2: 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 @@ retryowner2: 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 @@ retryowner2: 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 @@ retryowner2: } 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 @@ retryowner2: 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 @@ retryowner2: 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 @@ retryowner2: /* 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 @@ static struct iax2_dpcache *find_cache(struct ast_channel *chan, const char *dat 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]); } |