[Serdev] AVPOPS patch - dst_ip

Daniel-Constantin Mierla daniel at voice-system.ro
Thu Jun 16 16:50:48 UTC 2005


Hello,

thanks for the patch -- will be integrated very soon. The maintainer is 
traveling for a few days.

Daniel


On 06/15/05 17:58, Evan Borgström wrote:

> Hey All,
>
>     Here's a patch for the avpops module in the rel_0_9_0 tag that 
> adds the ability to test for $dst_ip along with $src_ip. Feel free to 
> commit it into CVS if there's interest in it from others.
>
> -Evan
>
>------------------------------------------------------------------------
>
>--- ser-0.9.3.orig/modules/avpops/avpops.c	2005-06-14 11:47:34.000000000 -0400
>+++ ser-0.9.3/modules/avpops/avpops.c	2005-06-14 11:53:02.000000000 -0400
>@@ -376,6 +376,7 @@
> 			if ( (!strcasecmp( "from", s) && (flags|=AVPOPS_USE_FROM))
> 				|| (!strcasecmp( "to", s) && (flags|=AVPOPS_USE_TO))
> 				|| (!strcasecmp( "ruri", s) && (flags|=AVPOPS_USE_RURI))
>+				|| (!strcasecmp( "dst_ip", s) && (flags|=AVPOPS_USE_DST_IP))
> 				|| (!strcasecmp( "src_ip", s) && (flags|=AVPOPS_USE_SRC_IP)) )
> 			{
> 				ap = (struct fis_param*)pkg_malloc(sizeof(struct fis_param));
>@@ -387,7 +388,7 @@
> 				}
> 				memset( ap, 0, sizeof(struct fis_param));
> 				/* any falgs ? */
>-				if ( p && !( (flags&AVPOPS_USE_SRC_IP)==0 && (
>+				if ( p && !( (flags&(AVPOPS_USE_SRC_IP|AVPOPS_USE_DST_IP))==0 && (
> 				(!strcasecmp("username",p) && (flags|=AVPOPS_FLAG_USER)) ||
> 				(!strcasecmp("domain", p) && (flags|=AVPOPS_FLAG_DOMAIN)))) )
> 				{
>--- ser-0.9.3.orig/modules/avpops/avpops_impl.c	2005-06-14 11:47:34.000000000 -0400
>+++ ser-0.9.3/modules/avpops/avpops_impl.c	2005-06-14 11:55:19.000000000 -0400
>@@ -567,6 +567,15 @@
> 			}
> 			s_ip.len = strlen(s_ip.s);
> 			avp_val.s = &s_ip;
>+		} else if (src->flags&AVPOPS_USE_DST_IP) {
>+			/* get data from dst ip */
>+			if ( (s_ip.s=ip_addr2a( &msg->rcv.dst_ip ))==0)
>+			{
>+				LOG(L_ERR,"ERROR:avpops:write_avp: cannot get dst_ip\n");
>+				goto error;
>+			}
>+			s_ip.len = strlen(s_ip.s);
>+			avp_val.s = &s_ip;
> 		} else {
> 			/* get data from uri (from,to,ruri) */
> 			if (src->flags&(AVPOPS_FLAG_USER|AVPOPS_FLAG_DOMAIN))
>@@ -898,6 +907,15 @@
> 				}
> 				s_ip.len = strlen(s_ip.s);
> 				ck_val.s = &s_ip;
>+			} else if (val->flags&AVPOPS_USE_DST_IP) {
>+				/* get value from dst ip */
>+				if ( (s_ip.s=ip_addr2a( &msg->rcv.dst_ip ))==0)
>+				{
>+					LOG(L_ERR,"ERROR:avpops:check_avp: cannot get dst_ip\n");
>+					goto error;
>+				}
>+				s_ip.len = strlen(s_ip.s);
>+				ck_val.s = &s_ip;
> 			} else {
> 				/* get value from uri */
> 				if ( (ck_val.s=get_source_uri(msg,val->flags))==0 )
>--- ser-0.9.3.orig/modules/avpops/avpops_impl.h	2005-06-14 11:47:34.000000000 -0400
>+++ ser-0.9.3/modules/avpops/avpops_impl.h	2005-06-14 11:55:26.000000000 -0400
>@@ -64,6 +64,7 @@
> #define AVPOPS_USE_HDRREQ    (1<<10)
> #define AVPOPS_USE_HDRRPL    (1<<11)
> #define AVPOPS_USE_SRC_IP    (1<<12)
>+#define AVPOPS_USE_DST_IP    (1<<13)
> 
> /* flags about operation  16..23  */
> #define AVPOPS_OP_EQ        (1<<16)
>--- ser-0.9.3.orig/modules/avpops/avpops_parse.c	2005-06-14 11:47:34.000000000 -0400
>+++ ser-0.9.3/modules/avpops/avpops_parse.c	2005-06-14 11:53:30.000000000 -0400
>@@ -383,7 +383,8 @@
> 		if ( (strncasecmp(p,"ruri"  ,len)==0 && (flags|=AVPOPS_USE_RURI))
> 		  || (strncasecmp(p,"from"  ,len)==0 && (flags|=AVPOPS_USE_FROM))
> 		  || (strncasecmp(p,"to"    ,len)==0 && (flags|=AVPOPS_USE_TO))
>-		  || (strncasecmp(p,"src_ip",len)==0 && (flags|=AVPOPS_USE_SRC_IP)))
>+		  || (strncasecmp(p,"src_ip",len)==0 && (flags|=AVPOPS_USE_SRC_IP))
>+		  || (strncasecmp(p,"dst_ip",len)==0 && (flags|=AVPOPS_USE_DST_IP)))
> 		{
> 			flags |= AVPOPS_VAL_NONE;
> 		} else {
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Serdev mailing list
>serdev at lists.iptel.org
>http://lists.iptel.org/mailman/listinfo/serdev
>  
>




More information about the Serdev mailing list