[Devel] textops and pseudo-variables

Daniel-Constantin Mierla daniel at voice-system.ro
Wed Nov 23 21:43:21 CET 2005


Hello,

since I was working to add insert_hf() function to the textops module, I 
integrated the pseudo-variables support in append_hf(), too. I did some 
optimizations so when no pseudo variable is present in parameter, the 
speed of previous function is preserved very well.

The avp_pushto() overlaps a bit in functionality with append_hf(txt), 
but it is still useful for special fields (r-uri/username/domain, dst-uri).

Cheers,
Daniel


On 11/23/05 18:22, Bogdan-Andrei Iancu wrote:
> Hi Boris,
>
> this kind of functionality already exists. Print the body header into 
> an AVP and then push the AVP as header:
>    avp_printf("i:10", "<sip:$avp(s:xxx)@ 
> $fd>;party=calling;screen=yes;privacy=off");
>    avp_pushto("$Remote-Party-ID","i:10");
>
> anyhow, please submit the patch on the tracker -
>    http://sourceforge.net/tracker/?group_id=139143
>
> thanks and regards,
> bogdan
>
> Boris Bliznioukov wrote:
>
>> Hello,
>>
>> I was using textops module and had discovered  that pudo-variables  
>> are not extended in textops module. So constriction like this is not  
>> working
>>
>> append_hf("Remote-Party-ID: <sip:$avp(s:xxx)@ 
>> $fd>;party=calling;screen=yes;privacy=off\r\n");
>>
>> I thought it would be good if textops would extend pseudo-variables.
>> And here is a small patch for that.
>> Right now it is only changes append_hf, if there is an interest I 
>> can  add pseudo-variables support for the rest of the functions in 
>> textops  module.
>>
>> Boris./
>>
>> *** textops.c.orig      Tue Nov 22 20:09:35 2005
>> --- textops.c   Wed Nov 23 18:03:38 2005
>> ***************
>> *** 94,104 ****
>>   static int replace_all_f(struct sip_msg* msg, char* key, char* str);
>>   static int search_append_f(struct sip_msg*, char*, char*);
>>   static int append_to_reply_f(struct sip_msg* msg, char* key, char*  
>> str);
>> ! static int append_hf(struct sip_msg* msg, char* str1, char* str2);
>>   static int append_urihf(struct sip_msg* msg, char* str1, char* str2);
>>   static int append_time_f(struct sip_msg* msg, char* , char *);
>>   static int is_method_f(struct sip_msg* msg, char* , char *);
>>
>>   static int fixup_regex(void**, int);
>>   static int fixup_substre(void**, int);
>>   static int str_fixup(void** param, int param_no);
>> --- 94,105 ----
>>   static int replace_all_f(struct sip_msg* msg, char* key, char* str);
>>   static int search_append_f(struct sip_msg*, char*, char*);
>>   static int append_to_reply_f(struct sip_msg* msg, char* key, char*  
>> str);
>> ! static int append_hf(struct sip_msg *msg, xl_elem_t *format );
>>   static int append_urihf(struct sip_msg* msg, char* str1, char* str2);
>>   static int append_time_f(struct sip_msg* msg, char* , char *);
>>   static int is_method_f(struct sip_msg* msg, char* , char *);
>>
>> + static int avp_fixup(void**, int);
>>   static int fixup_regex(void**, int);
>>   static int fixup_substre(void**, int);
>>   static int str_fixup(void** param, int param_no);
>> ***************
>> *** 119,125 ****
>>                         REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE| 
>> BRANCH_ROUTE},
>>         {"append_to_reply",  append_to_reply_f, 1, 0,
>>                         REQUEST_ROUTE|BRANCH_ROUTE},
>> !       {"append_hf",        append_hf,         1, str_fixup,
>>                         REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE| 
>> BRANCH_ROUTE},
>>         {"append_urihf",     append_urihf,      2, str_fixup,
>>                         REQUEST_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
>> --- 120,126 ----
>>                         REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE| 
>> BRANCH_ROUTE},
>>         {"append_to_reply",  append_to_reply_f, 1, 0,
>>                         REQUEST_ROUTE|BRANCH_ROUTE},
>> !       {"append_hf",        append_hf,         1, avp_fixup,
>>                         REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE| 
>> BRANCH_ROUTE},
>>         {"append_urihf",     append_urihf,      2, str_fixup,
>>                         REQUEST_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
>> ***************
>> *** 623,631 ****
>>         return 1;
>>   }
>>
>> ! static int append_hf(struct sip_msg *msg, char *str1, char *str2 )
>>   {
>> !       return append_hf_helper(msg, (str *) str1, (str *) 0);
>>   }
>>
>>   static int append_urihf(struct sip_msg *msg, char *str1, char *str2 )
>> --- 624,654 ----
>>         return 1;
>>   }
>>
>> ! static int append_hf(struct sip_msg *msg, xl_elem_t *format )
>>   {
>> !
>> !       #define PRINTBUF_SIZE   1024
>> !       char printbuf[PRINTBUF_SIZE];
>> !       int printbuf_len;
>> !       str* s;
>> !
>> !       s = (str*)pkg_malloc(sizeof(str));
>> !       if (!s) {
>> !               LOG(L_ERR, "str_fixup(): No memory left\n");
>> !               return E_UNSPEC;
>> !       }
>> !
>> !       printbuf_len = PRINTBUF_SIZE-1;
>> !       if(xl_printf(msg, format, printbuf, &printbuf_len)<0)
>> !       {
>> !               LOG(L_ERR, "textops:append_hf: error - cannot print  
>> the format\n");
>> !               return -1;
>> !       }
>> !
>> !       s->s = printbuf;
>> !       s->len = strlen(s->s);
>> !
>> !       return append_hf_helper(msg, (str *) s, (str *) 0);
>>   }
>>
>>   static int append_urihf(struct sip_msg *msg, char *str1, char *str2 )
>> ***************
>> *** 679,684 ****
>> --- 702,727 ----
>>         s->len = strlen(s->s);
>>         *param = (void*)s;
>>
>> +       return 0;
>> + }
>> +
>> + /*
>> +  * Convert char* parameter to xl_elem parameter
>> +  */
>> + static int avp_fixup(void** param, int param_no)
>> + {
>> +       xl_elem_t *model;
>> +
>> +       if(*param)
>> +       {
>> +               if(xl_parse_format((char*)(*param), &model,  
>> XL_DISABLE_COLORS)<0)
>> +               {
>> +                       LOG(L_ERR, "ERROR:textops:avp_fixup: wrong  
>> format[%s]\n",
>> +                               (char*)(*param));
>> +                       return E_UNSPEC;
>> +               }
>> +               *param = (void*)model;
>> +       }
>>         return 0;
>>   }
>>  
>>  
>>
>>
>> _______________________________________________
>> Devel mailing list
>> Devel at openser.org
>> http://openser.org/cgi-bin/mailman/listinfo/devel
>>
>
>
> _______________________________________________
> Devel mailing list
> Devel at openser.org
> http://openser.org/cgi-bin/mailman/listinfo/devel
>



More information about the Devel mailing list