Prechádzať zdrojové kódy

presence: use event name from parsed structure

- event name is taken from event_t as the given value might have
  parameters
- wipeer search uses above mentioned name
- fill given parameter in contains_event() instead of local var and then copy
Daniel-Constantin Mierla 16 rokov pred
rodič
commit
602552de12
1 zmenil súbory, kde vykonal 32 pridanie a 22 odobranie
  1. 32 22
      modules_k/presence/event_list.c

+ 32 - 22
modules_k/presence/event_list.c

@@ -159,7 +159,6 @@ int add_event(pres_ev_t* event)
 		ev->name.s= (char*)shm_malloc(event->name.len* sizeof(char));
 		ev->name.s= (char*)shm_malloc(event->name.len* sizeof(char));
 		if(ev->name.s== NULL)
 		if(ev->name.s== NULL)
 		{
 		{
-			free_event_params(parsed_event.params.list, PKG_MEM_TYPE);
 			ERR_MEM(SHARE_MEM);
 			ERR_MEM(SHARE_MEM);
 		}
 		}
 		memcpy(ev->name.s, event->name.s, event->name.len);
 		memcpy(ev->name.s, event->name.s, event->name.len);
@@ -169,22 +168,20 @@ int add_event(pres_ev_t* event)
 		if(ev->evp== NULL)
 		if(ev->evp== NULL)
 		{
 		{
 			LM_ERR("copying event_t structure\n");
 			LM_ERR("copying event_t structure\n");
-			free_event_params(parsed_event.params.list, PKG_MEM_TYPE);
 			goto error;
 			goto error;
 		}
 		}
-		free_event_params(parsed_event.params.list, PKG_MEM_TYPE);
 	}
 	}
 	else
 	else
 	{
 	{
-		free_event_params(parsed_event.params.list, PKG_MEM_TYPE);
 		if(ev->content_type.s)
 		if(ev->content_type.s)
 		{
 		{
 			LM_DBG("Event already registered\n");
 			LM_DBG("Event already registered\n");
-			return 0;
+			goto done;
 		}
 		}
 	}
 	}
 
 
-	ev->content_type.s=(char*)shm_malloc(event->content_type.len* sizeof(char)) ;
+	ev->content_type.s=
+			(char*)shm_malloc(event->content_type.len* sizeof(char)) ;
 	if(ev->content_type.s== NULL)
 	if(ev->content_type.s== NULL)
 	{
 	{
 		ERR_MEM(SHARE_MEM);
 		ERR_MEM(SHARE_MEM);
@@ -192,32 +189,39 @@ int add_event(pres_ev_t* event)
 	ev->content_type.len= event->content_type.len;
 	ev->content_type.len= event->content_type.len;
 	memcpy(ev->content_type.s, event->content_type.s, event->content_type.len);
 	memcpy(ev->content_type.s, event->content_type.s, event->content_type.len);
 
 
-	sep= strchr(event->name.s, '.');
+	for(sep=parsed_event.name.s; sep<parsed_event.name.s+parsed_event.name.len;
+			sep++)
+		if(*sep=='.') break;
+	if(sep>=parsed_event.name.s+parsed_event.name.len) sep=0;
 	if(sep && strncmp(sep+1, "winfo", 5)== 0)
 	if(sep && strncmp(sep+1, "winfo", 5)== 0)
 	{	
 	{	
 		ev->type= WINFO_TYPE;
 		ev->type= WINFO_TYPE;
-		wipeer_name.s= event->name.s;
-		wipeer_name.len= sep - event->name.s;
+		wipeer_name.s= parsed_event.name.s;
+		wipeer_name.len= sep - parsed_event.name.s;
 		ev->wipeer= contains_event(&wipeer_name, NULL);
 		ev->wipeer= contains_event(&wipeer_name, NULL);
 		if (ev->wipeer) {
 		if (ev->wipeer) {
-			LM_DBG("Found wipeer event [%.*s] for event [%.*s]\n",wipeer_name.len,wipeer_name.s,event->name.len,event->name.s);
+			LM_DBG("Found wipeer event [%.*s] for event [%.*s]\n",
+					wipeer_name.len,wipeer_name.s,
+					parsed_event.name.len,parsed_event.name.s);
 		}
 		}
 	}
 	}
 	else
 	else
 	{	
 	{	
 		ev->type= PUBL_TYPE;
 		ev->type= PUBL_TYPE;
-		if (event->name.len + 6 > 50) {
+		if (parsed_event.name.len + 6 > 50) {
 			LM_ERR("buffer too small\n");
 			LM_ERR("buffer too small\n");
 			goto error;
 			goto error;
 		}
 		}
 		wipeer_name.s= buf;
 		wipeer_name.s= buf;
-		memcpy(wipeer_name.s, event->name.s, event->name.len);
-		wipeer_name.len= event->name.len;
+		memcpy(wipeer_name.s, parsed_event.name.s, parsed_event.name.len);
+		wipeer_name.len= parsed_event.name.len;
 		memcpy(wipeer_name.s+ wipeer_name.len, ".winfo", 6);
 		memcpy(wipeer_name.s+ wipeer_name.len, ".winfo", 6);
 		wipeer_name.len+= 6;
 		wipeer_name.len+= 6;
 		ev->wipeer= contains_event(&wipeer_name, NULL);
 		ev->wipeer= contains_event(&wipeer_name, NULL);
 		if (ev->wipeer) {
 		if (ev->wipeer) {
-			LM_DBG("Found wipeer event [%.*s] for event [%.*s]\n",wipeer_name.len,wipeer_name.s,event->name.len,event->name.s);
+			LM_DBG("Found wipeer event [%.*s] for event [%.*s]\n",
+					wipeer_name.len,wipeer_name.s,
+					parsed_event.name.len,parsed_event.name.s);
 		}
 		}
 	}
 	}
 	
 	
@@ -251,8 +255,11 @@ int add_event(pres_ev_t* event)
 	
 	
 	LM_DBG("succesfully added event: %.*s - len= %d\n",ev->name.len,
 	LM_DBG("succesfully added event: %.*s - len= %d\n",ev->name.len,
 			ev->name.s, ev->name.len);
 			ev->name.s, ev->name.len);
+done:
+	free_event_params(parsed_event.params.list, PKG_MEM_TYPE);
 	return 0;
 	return 0;
 error:
 error:
+	free_event_params(parsed_event.params.list, PKG_MEM_TYPE);
 	if(ev && not_in_list)
 	if(ev && not_in_list)
 	{
 	{
 		free_pres_event(ev);	
 		free_pres_event(ev);	
@@ -295,21 +302,23 @@ evlist_t* init_evlist(void)
 pres_ev_t* contains_event(str* sname, event_t* parsed_event)
 pres_ev_t* contains_event(str* sname, event_t* parsed_event)
 {
 {
 	event_t event;
 	event_t event;
+	event_t *pe;
 	pres_ev_t* e;
 	pres_ev_t* e;
 	
 	
-	memset(&event, 0, sizeof(event_t));
-	if(event_parser(sname->s, sname->len, &event)< 0)
+	pe = (parsed_event)?parsed_event:&event;
+
+	memset(pe, 0, sizeof(event_t));
+	if(event_parser(sname->s, sname->len, pe)< 0)
 	{
 	{
 		LM_ERR("parsing event\n");
 		LM_ERR("parsing event\n");
 		return NULL;
 		return NULL;
 	}
 	}
-	if(parsed_event)
-		*parsed_event= event;
-	else
+	e= search_event(pe);
+	if(parsed_event==0)
 	{
 	{
-		free_event_params(event.params.list, PKG_MEM_TYPE);
+		free_event_params(pe->params.list, PKG_MEM_TYPE);
+		pe->params.list = NULL;
 	}
 	}
-	e= search_event(&event);
 
 
 	return e;
 	return e;
 }
 }
@@ -336,7 +345,8 @@ pres_ev_t* search_event(event_t* event)
 	pres_ev_t* pres_ev;
 	pres_ev_t* pres_ev;
 	pres_ev= EvList->events;
 	pres_ev= EvList->events;
 
 
-	LM_DBG("start event= [%.*s]\n", event->name.len, event->name.s);
+	LM_DBG("start event= [%.*s/%d]\n", event->name.len, event->name.s,
+			event->type);
 
 
 	while(pres_ev)
 	while(pres_ev)
 	{
 	{