[Asterisk-cvs] asterisk/channels chan_iax2.c,1.369,1.370

russell russell
Sun Nov 6 01:01:09 CST 2005


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]);
 	}




More information about the svn-commits mailing list