[Serusers] SER Proxy with Redirect
Greger V. Teigre
greger at teigre.com
Wed Aug 15 13:06:53 CEST 2007
At one point upgrading would be easier than patch the old...
g-)
Atle Samuelsen wrote:
> 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
>>
>
> _______________________________________________
> Serusers mailing list
> Serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20070815/b096152a/attachment.htm>
More information about the sr-users
mailing list