[Serusers] SER Proxy with Redirect

Atle Samuelsen clona at cyberhouse.no
Wed Aug 15 10:04:35 CEST 2007


If your useing 0.8.11, I think you can just do a few google searches and
you will find a function that does this.

On the other hand.. you should maybe concider upgradeing at somepoint
soon :)
-A


* Fernando Schmitt <fernandoschmitt at ig.com.br> [070815 08:52]:
> Hehe. I'm using ser 0.8.11-r1. I know. I know. shame on me.
> 
>  
> 
> Fernando Schmitt
> 
>   _____  
> 
> From: Greger V. Teigre [mailto:greger at teigre.com] 
> Sent: Wednesday, August 15, 2007 3:35 AM
> To: Fernando Schmitt
> Cc: serusers at lists.iptel.org
> Subject: Re: [Serusers] SER Proxy with Redirect
> 
>  
> 
> I believe you can do this a lot easier in ser.cfg 2.x using selects to pick
> the Contact.
> g-)
> 
> Fernando Schmitt wrote: 
> 
> Juha,
> 
>  
> 
> I'm new into C programming. Could you kindly let me know where this code
> should be inserted?
> 
>  
> 
> yes, i implemented a function called move that turned 302 to invite, but
> that code relied on a patch to tm module that gave me access to contact
> header of reply in reply route.
>  
> i found the function and it is below.  someone who needs this
> functionality has to check if same kind of access to the contact header
> of the reply is still possible or if the access method is now different
> and modify the code accordingly.
>  
> also, all contacts would need to be taken from 302, not just the first.
>  
> contact_re was compiled during module initialization:
>  
>         regcomp(&contact_re, "^Contact:(.*)$", REG_EXTENDED|REG_NEWLINE);
>  
> needless to say, i'm not proud of this code, but it gives an idea on how
> it can be done.
>  
> -- juha
>  
> /*
>  * Appends a new branch to request using the first Contact URI of the (302)
>  * reply (if any) as the Request URI.  Returns 1 if appending succeeded and
> -1
>  * if it failed.
>  */
> int move(struct sip_msg* _m, char* _s1, char* _s2)
> {
>         struct sip_msg* reply;
>         regmatch_t pmatch[2];
>         struct hdr_field hf;
>         contact_t* first;
>  
>         reply = _m->final_reply;
>  
>         if (!reply) {
>                LOG(L_ERR, "move(): No reply found\n");
>                return -1;
>         }
>  
>         LOG(L_ERR, "move(): unparsed part of reply: %s\n", reply->unparsed);
>  
>         if ((regexec(&contact_re, reply->unparsed, 2, &(pmatch[0]), 0) != 0)
> ||
>             (pmatch[1].rm_so == -1)) {
>                LOG(L_ERR, "move(): No Contact header found\n");
>                return -1;
>         }
>  
>         hf.type = HDR_CONTACT;
>         hf.name.len = 0;
>         hf.body.len = pmatch[1].rm_eo - pmatch[1].rm_so - 1;
>         hf.body.s = &(reply->unparsed[pmatch[1].rm_so]);
>         hf.len = hf.body.len + 2;
>         hf.parsed = NULL;
>         hf.next = NULL;
>         
>         LOG(L_ERR, "hf.body: '%.*s'\n", hf.body.len, hf.body.s);
>  
>         if (parse_contact(&hf) < 0) {
>                LOG(L_ERR, "move(): Error while parsing Contact\n");
>                goto failure;
>         }
>         
>         if (((contact_body_t*)hf.parsed)->star == 1) {
>                LOG(L_ERR, "move(): Contact is *\n");
>                goto failure;
>         }
>  
>         first = ((contact_body_t*)hf.parsed)->contacts;
>         if (first) {
>                if (append_branch(_m, first->uri.s, first->uri.len) == 1) {
>                        goto success;
>                } else {
>                        LOG(L_ERR, "move(): Appending branch failed\n");
>                }
>         } else {
>                LOG(L_ERR, "move(): No contacts in Contact header\n");
>         }
>  
> failure:
>         if (hf.parsed) {
>                free_contact((contact_body_t**)(&(hf.parsed)));
>         }
>         return -1;
>  
> success:
>         free_contact((contact_body_t**)(&(hf.parsed)));
>         return 1;
> }
> 
>  
> 
> Fernando Schmitt
> 
>  
>  
>  
> 
> 
> 
> 
> 
>   _____  
> 
> 
> 
>  
>  
>  
> _______________________________________________
> Serusers mailing list
> Serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>   

> _______________________________________________
> Serusers mailing list
> Serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers




More information about the sr-users mailing list