[asterisk-commits] branch group/asterisk-xmpp r26018 - in /team/group/asterisk-xmpp: configs/ in...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue May 9 04:41:50 MST 2006


Author: russell
Date: Tue May  9 06:41:49 2006
New Revision: 26018

URL: http://svn.digium.com/view/asterisk?rev=26018&view=rev
Log:
begin converting some things to use flags - the autoprune and autoregister vals

Modified:
    team/group/asterisk-xmpp/configs/jabber.conf.sample
    team/group/asterisk-xmpp/include/asterisk/jabber.h
    team/group/asterisk-xmpp/res/res_jabber.c

Modified: team/group/asterisk-xmpp/configs/jabber.conf.sample
URL: http://svn.digium.com/view/asterisk/team/group/asterisk-xmpp/configs/jabber.conf.sample?rev=26018&r1=26017&r2=26018&view=diff
==============================================================================
--- team/group/asterisk-xmpp/configs/jabber.conf.sample (original)
+++ team/group/asterisk-xmpp/configs/jabber.conf.sample Tue May  9 06:41:49 2006
@@ -1,7 +1,7 @@
 [general]
 debug=yes
-;noautoprune=yes
-;noautoregister=yes
+;autoprune=yes
+;autoregister=yes
 
 ;[asterisk]
 ;type=client

Modified: team/group/asterisk-xmpp/include/asterisk/jabber.h
URL: http://svn.digium.com/view/asterisk/team/group/asterisk-xmpp/include/asterisk/jabber.h?rev=26018&r1=26017&r2=26018&view=diff
==============================================================================
--- team/group/asterisk-xmpp/include/asterisk/jabber.h (original)
+++ team/group/asterisk-xmpp/include/asterisk/jabber.h Tue May  9 06:41:49 2006
@@ -29,10 +29,9 @@
 	AJI_CONNECTED
 };
 
-enum aji_prune_register {
-	AJI_DONOTHING=0,
-	AJI_PRUNE=1,
-	AJI_REGISTER=2
+enum {
+	AJI_AUTOPRUNE = (1 << 0),
+	AJI_AUTOREGISTER = (1 << 1)
 };
 
 enum aji_btype {
@@ -64,7 +63,7 @@
 	char channel[160];
 	struct aji_resource *resources;
 	enum aji_btype btype;
-	enum aji_prune_register on_roster;
+	unsigned int flags;
 };
 
 struct aji_buddy_container {
@@ -95,10 +94,10 @@
 	int forcessl;
 	int usesasl;
 	int keepalive;
-	int pruneregister;
 	int allowguest;
 	int timeout;
 	int authorized;
+	unsigned int flags;
 	enum aji_type component;
 	struct aji_buddy_container buddies;
 	void *jingle;

Modified: team/group/asterisk-xmpp/res/res_jabber.c
URL: http://svn.digium.com/view/asterisk/team/group/asterisk-xmpp/res/res_jabber.c?rev=26018&r1=26017&r2=26018&view=diff
==============================================================================
--- team/group/asterisk-xmpp/res/res_jabber.c (original)
+++ team/group/asterisk-xmpp/res/res_jabber.c Tue May  9 06:41:49 2006
@@ -73,7 +73,7 @@
 static int aji_no_debug(int fd, int argc, char *argv[]);
 static int aji_test(int fd, int argc, char *argv[]);
 static int aji_show_clients(int fd, int argc, char *argv[]);
-static int aji_create_client(char *label,struct ast_variable *var,int debug,int pruneregister,char *utype, struct aji_client *client);
+static int aji_create_client(char *label,struct ast_variable *var,int debug,char *utype, struct aji_client *client);
 static int aji_create_buddy(char *label, struct aji_buddy *buddy);
 static int aji_create_transport(char *label, struct aji_buddy *buddy);
 static void aji_reload(void);
@@ -138,6 +138,9 @@
 "	      If not in roster variable will = 7\n";
 
 struct aji_client_container clients;
+
+/*! Global flags, initialized to default values */
+static struct ast_flags globalflags = { AJI_AUTOPRUNE | AJI_AUTOREGISTER };
 
 /*!
  * \brief Deletes the aji_client data structure.
@@ -1412,36 +1415,32 @@
 	if(client && removeiq && removequery && removeitem && send) {
 		ASTOBJ_CONTAINER_TRAVERSE(&client->buddies,1, {
 		ASTOBJ_RDLOCK(iterator);
-		switch(iterator->on_roster)
-		{
-			case AJI_DONOTHING:
-				break;
-			case AJI_PRUNE:
-				res =iks_send(client->p,iks_make_s10n(IKS_TYPE_UNSUBSCRIBE,iterator->name,"GoodBye your status is no longer needed by Asterisk the Open Source PBX so I am no longer subscribing to your presence.\n"));
-				res =iks_send(client->p,iks_make_s10n(IKS_TYPE_UNSUBSCRIBED,iterator->name,"GoodBye you are no longer in the asterisk config file so I am removing your access to my presence.\n"));
-	
-				iks_insert_attrib(removeiq,"from",client->jid->full);
-				iks_insert_attrib(removeiq,"type","set");
-				iks_insert_attrib(removequery,"xmlns","jabber:iq:roster");
-				iks_insert_attrib(removeitem,"jid",iterator->name);
-				iks_insert_attrib(removeitem,"subscription","remove");
-				iks_insert_node(removeiq,removequery);
-				iks_insert_node(removequery,removeitem);
-				res =iks_send(client->p, removeiq);
-				break;
-			case AJI_REGISTER:
-				if(iterator->btype==AJI_USER) { /*if it is not a transport */
-					res =iks_send(client->p,iks_make_s10n(IKS_TYPE_SUBSCRIBE,iterator->name,"Greetings I am the Asterisk Open Source PBX and I want to subscribe to your presence\n"));
-				} else {
-					iks_filter_add_rule(client->f,aji_register_transport,client,
-							IKS_RULE_TYPE,IKS_PAK_IQ,IKS_RULE_SUBTYPE, IKS_TYPE_RESULT,IKS_RULE_NS,
-							"http://jabber.org/protocol/disco#items",IKS_RULE_DONE);
-					iks_insert_attrib(send,"to",iterator->host);
-					iks_insert_attrib(send,"from",client->jid->full);
-					res =iks_send(client->p,send);
-				}
-				iterator->on_roster=AJI_DONOTHING;
-				break;
+		/* For an aji_buddy, both AUTOPRUNE and AUTOREGISTER will never
+		 * be enabled at the same time */
+		if (ast_test_flag(iterator, AJI_AUTOPRUNE)) {
+			res =iks_send(client->p,iks_make_s10n(IKS_TYPE_UNSUBSCRIBE,iterator->name,"GoodBye your status is no longer needed by Asterisk the Open Source PBX so I am no longer subscribing to your presence.\n"));
+			res =iks_send(client->p,iks_make_s10n(IKS_TYPE_UNSUBSCRIBED,iterator->name,"GoodBye you are no longer in the asterisk config file so I am removing your access to my presence.\n"));
+
+			iks_insert_attrib(removeiq,"from",client->jid->full);
+			iks_insert_attrib(removeiq,"type","set");
+			iks_insert_attrib(removequery,"xmlns","jabber:iq:roster");
+			iks_insert_attrib(removeitem,"jid",iterator->name);
+			iks_insert_attrib(removeitem,"subscription","remove");
+			iks_insert_node(removeiq,removequery);
+			iks_insert_node(removequery,removeitem);
+			res =iks_send(client->p, removeiq);
+		} else if (ast_test_flag(iterator, AJI_AUTOREGISTER)) {
+			if(iterator->btype==AJI_USER) { /*if it is not a transport */
+				res =iks_send(client->p,iks_make_s10n(IKS_TYPE_SUBSCRIBE,iterator->name,"Greetings I am the Asterisk Open Source PBX and I want to subscribe to your presence\n"));
+			} else {
+				iks_filter_add_rule(client->f,aji_register_transport,client,
+						IKS_RULE_TYPE,IKS_PAK_IQ,IKS_RULE_SUBTYPE, IKS_TYPE_RESULT,IKS_RULE_NS,
+						"http://jabber.org/protocol/disco#items",IKS_RULE_DONE);
+				iks_insert_attrib(send,"to",iterator->host);
+				iks_insert_attrib(send,"from",client->jid->full);
+				res =iks_send(client->p,send);
+			}
+			ast_clear_flag(iterator, AJI_AUTOREGISTER);
 		}
 		ASTOBJ_UNLOCK(iterator);
 		});
@@ -1479,13 +1478,13 @@
 			if(iks_strcmp(iks_name(x), "item") == 0) {
 				if(strlen(iterator->pass)!=0) {
 					if(!strcasecmp(iterator->host,iks_find_attrib(x,"jid"))) {
-						iterator->on_roster=AJI_DONOTHING;
+						ast_clear_flag(iterator, AJI_AUTOPRUNE | AJI_AUTOREGISTER);
 						flag=1;
 					}
 				} else {
 					if(!strcasecmp(iterator->name,iks_find_attrib(x,"jid"))) {
 						flag=1;
-						iterator->on_roster=AJI_DONOTHING;
+						ast_clear_flag(iterator, AJI_AUTOPRUNE | AJI_AUTOREGISTER);
 					}
 				}
 
@@ -1493,9 +1492,8 @@
 			x = iks_next(x);
 		}
 		
-		if(!flag)
-			if(client->pruneregister>=2)
-				iterator->on_roster=AJI_REGISTER;
+		if (!flag)
+			ast_copy_flags(iterator, client, AJI_AUTOREGISTER);
 		if(x)
 			iks_delete(x);
 		
@@ -1519,7 +1517,7 @@
 			});
 			
 			if(!flag) {
-				if(client->pruneregister==1||client->pruneregister==3) {
+				if (ast_test_flag(client, AJI_AUTOPRUNE)) {
 					buddy = (struct aji_buddy *)malloc(sizeof(struct aji_buddy));
 					if(!buddy)
 						ast_log(LOG_WARNING, "Out of memory\n");
@@ -1528,7 +1526,8 @@
 					ASTOBJ_WRLOCK(buddy);
 					ast_copy_string(buddy->name, iks_find_attrib(x,"jid"), sizeof(buddy->name));
 					ast_copy_string(buddy->user, iks_find_attrib(x,"jid"),sizeof(buddy->user));
-					buddy->on_roster=AJI_PRUNE;
+					ast_clear_flag(buddy, AST_FLAGS_ALL);
+					ast_set_flag(buddy, AJI_AUTOPRUNE);
 					buddy->objflags |= ASTOBJ_FLAG_MARKED;
 					ASTOBJ_UNLOCK(buddy);
 					if(buddy) {
@@ -1808,7 +1807,7 @@
  * \param label, ast_variable, debug, pruneregister, component/client, aji_client to dump into. 
  * \return 0.
  */
-static int aji_create_client(char *label,struct ast_variable *var, int debug, int pruneregister,char *utype, struct aji_client *client)
+static int aji_create_client(char *label,struct ast_variable *var, int debug, char *utype, struct aji_client *client)
 {
 	char *resource;
 	struct aji_buddy *buddy = NULL;
@@ -1819,7 +1818,7 @@
 	ast_copy_string(client->mid, "aaaaa",sizeof(client->mid));
 
 	client->debug = debug;
-	client->pruneregister = pruneregister;
+	ast_copy_flags(client, &globalflags, AST_FLAGS_ALL);
 	client->port=5222;
 	client->usetls=1;
 	client->forcessl=0;
@@ -1855,10 +1854,10 @@
 			client->forcessl=(ast_false(var->value))?0:1;
 		else if(!strcasecmp(var->name,"keepalive"))
 			client->keepalive=(ast_false(var->value))?0:1;
-		else if(!strcasecmp(var->name,"noautoprune"))
-			client->pruneregister = (ast_false(var->value))?client->pruneregister++:client->pruneregister--;
-		else if(!strcasecmp(var->name,"noautoregister"))
-			client->pruneregister = (ast_false(var->value))?client->pruneregister+2:client->pruneregister-2;
+		else if(!strcasecmp(var->name,"autoprune"))
+			ast_set2_flag(client, ast_true(var->value), AJI_AUTOPRUNE);
+		else if(!strcasecmp(var->name,"autoregister"))
+			ast_set2_flag(client, ast_true(var->value), AJI_AUTOREGISTER);
 		else if(!strcasecmp(var->name,"buddy")||!strcasecmp(var->name,"transport")) {
 			buddy= malloc(sizeof(struct aji_buddy));
 			memset(buddy,0,sizeof(struct aji_buddy));
@@ -1977,7 +1976,7 @@
 {
 	char *cat=NULL;
 	char *utype=NULL;
-	int debug=1, pruneregister=3;
+	int debug = 1;
 	struct ast_config *cfg=NULL;
 	struct ast_variable *var = NULL;
 	struct aji_client *client = NULL;
@@ -1993,10 +1992,10 @@
 	for (var = ast_variable_browse(cfg, "general"); var; var = var->next) {
 		if(!strcasecmp(var->name, "debug"))
 			debug = (ast_false(ast_variable_retrieve(cfg,"general","debug")))?0:1;
-		else if(!strcasecmp(var->name, "noautoprune"))
-			pruneregister = (ast_false(ast_variable_retrieve(cfg,"general","noautoprune")))?pruneregister:pruneregister-1;
-		else if(!strcasecmp(var->name, "noautoregister"))
-			pruneregister = (ast_false(ast_variable_retrieve(cfg,"general","noautoregister")))?pruneregister:pruneregister-2;
+		else if(!strcasecmp(var->name, "autoprune"))
+			ast_set2_flag(&globalflags, ast_true(var->value), AJI_AUTOPRUNE);
+		else if(!strcasecmp(var->name, "autoregister"))
+			ast_set2_flag(&globalflags, ast_true(var->value), AJI_AUTOREGISTER);
 	}
 
 	while(cat) {
@@ -2008,7 +2007,7 @@
 				memset(client,0,sizeof(struct aji_client));
 				ASTOBJ_INIT(client);
 				ASTOBJ_WRLOCK(client);
-				aji_create_client(cat, var, debug, pruneregister, utype, client);
+				aji_create_client(cat, var, debug, utype, client);
 				ASTOBJ_UNLOCK(client);
 				ASTOBJ_CONTAINER_LINK(&clients,client);
 				ASTOBJ_UNREF(client,aji_client_destroy);



More information about the asterisk-commits mailing list