[svn-commits] trunk r23810 - /trunk/pbx/pbx_dundi.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Sun Apr 30 17:56:05 MST 2006


Author: russell
Date: Sun Apr 30 19:56:04 2006
New Revision: 23810

URL: http://svn.digium.com/view/asterisk?rev=23810&view=rev
Log:
conver the lists of dundi packets to use the list macros

Modified:
    trunk/pbx/pbx_dundi.c

Modified: trunk/pbx/pbx_dundi.c
URL: http://svn.digium.com/view/asterisk/trunk/pbx/pbx_dundi.c?rev=23810&r1=23809&r2=23810&view=diff
==============================================================================
--- trunk/pbx/pbx_dundi.c (original)
+++ trunk/pbx/pbx_dundi.c Sun Apr 30 19:56:04 2006
@@ -139,8 +139,8 @@
 };
 
 struct dundi_packet {
+	AST_LIST_ENTRY(dundi_packet) list;
 	struct dundi_hdr *h;
-	struct dundi_packet *next;
 	int datalen;
 	struct dundi_transaction *parent;
 	int retransid;
@@ -183,8 +183,8 @@
 	unsigned char oiseqno;                         /*!< Last received incoming seqno */
 	unsigned char oseqno;                          /*!< Next transmitted seqno */
 	unsigned char aseqno;                          /*!< Last acknowledge seqno */
-	struct dundi_packet *packets;                  /*!< Packets to be retransmitted */
-	struct dundi_packet *lasttrans;                /*!< Last transmitted / ACK'd packet */
+	AST_LIST_HEAD_NOLOCK(packetlist, dundi_packet) packets;  /*!< Packets to be retransmitted */
+	struct packetlist lasttrans;                   /*!< Last transmitted / ACK'd packet */
 	struct dundi_request *parent;                  /*!< Parent request (if there is one) */
 	AST_LIST_ENTRY(dundi_transaction) parentlist;  /*!< Next with respect to the parent */
 	AST_LIST_ENTRY(dundi_transaction) all;         /*!< Next with respect to all DUNDi transactions */
@@ -1793,7 +1793,7 @@
 			dundi_send(trans, DUNDI_COMMAND_CANCEL, 0, 1, NULL);
 		break;
 	case DUNDI_COMMAND_ENCREJ:
-		if ((ast_test_flag(trans, FLAG_SENDFULLKEY)) || !trans->lasttrans || !(peer = find_peer(&trans->them_eid))) {
+		if ((ast_test_flag(trans, FLAG_SENDFULLKEY)) || AST_LIST_EMPTY(&trans->lasttrans) || !(peer = find_peer(&trans->them_eid))) {
 			/* No really, it's over at this point */
 			if (!final) 
 				dundi_send(trans, DUNDI_COMMAND_CANCEL, 0, 1, NULL);
@@ -1810,7 +1810,7 @@
 					hdr->cmdresp &= 0x7f;
 					/* Parse the message we transmitted */
 					memset(&ies, 0, sizeof(ies));
-					dundi_parse_ies(&ies, trans->lasttrans->h->ies, trans->lasttrans->datalen - sizeof(struct dundi_hdr));
+					dundi_parse_ies(&ies, (AST_LIST_FIRST(&trans->lasttrans))->h->ies, (AST_LIST_FIRST(&trans->lasttrans))->datalen - sizeof(struct dundi_hdr));
 					/* Reconstruct outgoing encrypted packet */
 					memset(&ied, 0, sizeof(ied));
 					dundi_ie_append_eid(&ied, DUNDI_IE_EID, &trans->us_eid);
@@ -1818,7 +1818,7 @@
 					dundi_ie_append_raw(&ied, DUNDI_IE_SIGNATURE, peer->txenckey + 128, 128);
 					if (ies.encblock) 
 						dundi_ie_append_encdata(&ied, DUNDI_IE_ENCDATA, ies.encblock->iv, ies.encblock->encdata, ies.enclen);
-					dundi_send(trans, DUNDI_COMMAND_ENCRYPT, 0, trans->lasttrans->h->cmdresp & 0x80, &ied);
+					dundi_send(trans, DUNDI_COMMAND_ENCRYPT, 0, (AST_LIST_FIRST(&trans->lasttrans))->h->cmdresp & 0x80, &ied);
 					peer->sentfullkey = 1;
 				}
 			}
@@ -1877,39 +1877,38 @@
 }
 
 static void destroy_packet(struct dundi_packet *pack, int needfree);
-static void destroy_packets(struct dundi_packet *p)
-{
-	struct dundi_packet *prev;
-	while(p) {
-		prev = p;
-		p = p->next;
-		if (prev->retransid > -1)
-			ast_sched_del(sched, prev->retransid);
-		free(prev);
+static void destroy_packets(struct packetlist *p)
+{
+	struct dundi_packet *pack;
+	
+	while ((pack = AST_LIST_REMOVE_HEAD(p, list))) {
+		if (pack->retransid > -1)
+			ast_sched_del(sched, pack->retransid);
+		free(pack);
 	}
 }
 
 
 static int ack_trans(struct dundi_transaction *trans, int iseqno)
 {
+	struct dundi_packet *pack;
+
 	/* Ack transmitted packet corresponding to iseqno */
-	struct dundi_packet *pack;
-	pack = trans->packets;
-	while(pack) {
+	AST_LIST_TRAVERSE(&trans->packets, pack, list) {
 		if ((pack->h->oseqno + 1) % 255 == iseqno) {
 			destroy_packet(pack, 0);
-			if (trans->lasttrans) {
+			if (!AST_LIST_EMPTY(&trans->lasttrans)) {
 				ast_log(LOG_WARNING, "Whoa, there was still a last trans?\n");
-				destroy_packets(trans->lasttrans);
-			}
-			trans->lasttrans = pack;
+				destroy_packets(&trans->lasttrans);
+			}
+			AST_LIST_INSERT_HEAD(&trans->lasttrans, pack, list);
 			if (trans->autokillid > -1)
 				ast_sched_del(sched, trans->autokillid);
 			trans->autokillid = -1;
 			return 1;
 		}
-		pack = pack->next;
-	}
+	}
+
 	return 0;
 }
 
@@ -1939,8 +1938,7 @@
 			trans->aseqno = trans->iseqno;
 		}
 		/* Delete any saved last transmissions */
-		destroy_packets(trans->lasttrans);
-		trans->lasttrans = NULL;
+		destroy_packets(&trans->lasttrans);
 		if (h->cmdresp & 0x80) {
 			/* Final -- destroy now */
 			destroy_trans(trans, 0);
@@ -2788,30 +2786,14 @@
 
 static void destroy_packet(struct dundi_packet *pack, int needfree)
 {
-	struct dundi_packet *prev, *cur;
-	if (pack->parent) {
-		prev = NULL;
-		cur = pack->parent->packets;
-		while(cur) {
-			if (cur == pack) {
-				if (prev)
-					prev->next = cur->next;
-				else
-					pack->parent->packets = cur->next;
-				break;
-			}
-			prev = cur;
-			cur = cur->next;
-		}
-	}
+	if (pack->parent)
+		AST_LIST_REMOVE(&pack->parent->packets, pack, list);
 	if (pack->retransid > -1)
 		ast_sched_del(sched, pack->retransid);
 	if (needfree)
 		free(pack);
-	else {
+	else
 		pack->retransid = -1;
-		pack->next = NULL;
-	}
 }
 
 static void destroy_trans(struct dundi_transaction *trans, int fromtimeout)
@@ -2885,10 +2867,8 @@
 	}
 	/* Unlink from all trans */
 	AST_LIST_REMOVE(&alltrans, trans, all);
-	destroy_packets(trans->packets);
-	destroy_packets(trans->lasttrans);
-	trans->packets = NULL;
-	trans->lasttrans = NULL;
+	destroy_packets(&trans->packets);
+	destroy_packets(&trans->lasttrans);
 	if (trans->autokillid > -1)
 		ast_sched_del(sched, trans->autokillid);
 	trans->autokillid = -1;
@@ -2941,8 +2921,7 @@
 		if (cmdresp != DUNDI_COMMAND_ACK) {
 			pack->retransid = ast_sched_add(sched, trans->retranstimer, dundi_rexmit, pack);
 			pack->retrans = DUNDI_DEFAULT_RETRANS - 1;
-			pack->next = trans->packets;
-			trans->packets = pack;
+			AST_LIST_INSERT_HEAD(&trans->packets, pack, list);
 		}
 		pack->parent = trans;
 		pack->h->strans = htons(trans->strans);



More information about the svn-commits mailing list