[Devel] [ openser-Patches-1689036 ] Enhanced dispatcher-module

SourceForge.net noreply at sourceforge.net
Wed May 9 16:55:56 CEST 2007


Patches item #1689036, was opened at 2007-03-27 12:50
Message generated for change (Comment added) made by miconda
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=743022&aid=1689036&group_id=139143

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: modules
Group: ver devel
>Status: Closed
>Resolution: Accepted
Priority: 5
Private: No
Submitted By: Carsten Bock (carstenbock)
Assigned to: Daniel-Constantin Mierla (miconda)
Summary: Enhanced dispatcher-module

Initial Comment:
Hi everybody,

I have attached a modified OpenSER 1.1 dispatcher-module. This modified version has the following, additional functionalities:

- a method called ds_is_domain([group]): This function allows to check if a domain is in a specific group (e.g. ds_is_domain("1") for checking if a host is in group 1) or if it exists in the list at all (e.g. ds_is_domain()).  This function reduces the configuration complexity, because we only have to add a host to the dispatcher-list instead of editing for example a check for specific hosts in the routing logic (e.g. to disable the PIKE-Check for hosts in that list).
- some new methods for choosing a gateway/proxy: 
a) You may now do a hash over the authentication-username (or round-robin, if no authentication-username was found)
b) You can prefix the value you want to generate the hash on. This prefix will then be removed.
- a new state for a gateway: You may now set a gateway to a probing mode (after a definable threshhold) by calling ds_mark_dst("p"). If a gateway/proxy fails several times (per default three times), it will be removed from the routing and be probed: The Proxy will send an OPTIONS-Request to the proxy/gateway and if it receives a "successful" reply (200 OK or 501 Not implemented) it will be automatically reactivated. We accept "501 Not implemented" as well, because some Cisco gateways do not support the OPTIONS-Request and reply with a "501 Not implemented".
This functionality requires the TM-Module and can be disabled in the makefile.

The documentation (SGML-Files) has been updated to this extended functionality.
In the following weeks i will port/merge it to OpenSER 1.2/SVN-latest.

Carsten

----------------------------------------------------------------------

>Comment By: Daniel-Constantin Mierla (miconda)
Date: 2007-05-09 17:55

Message:
Logged In: YES 
user_id=1246013
Originator: NO

Committed to SVN
- comments changed from //... to /* ... */
- comments about the changes are reflected in history part only
- re-formatted to fit 80char terminals with tab of 4 spaces

----------------------------------------------------------------------

Comment By: Carsten Bock (carstenbock)
Date: 2007-05-08 15:43

Message:
Logged In: YES 
user_id=1488991
Originator: YES

Hi Daniel,

Attached the modified patch. I have made some changes to my original
implementation:
- renamed ds_is_domain to ds_is_from_list (to explain the functionality
better, thanks axlh)
- renamed probing_threshhold to ds_probing_threshhold (to make all
dispatcher-parameters look the same)
- ds_is_from_list should now work for both IPV4 and IPV6 addresses (not
tested, but it compiled ok)
- removed the username-prefix hashing method (i will think about something
better)
- the pinging can now be disabled by setting the timer to 0 or below
- fixed some typos
- A valid response to the probe is now also a 403, as it is replied by
Aastra-Gateways (additional to the 200 OK and the 501 [Cisco]; maybe
anything except a local 408 could be accepted)

The patch is against the current SVN-Version of today.

Regards,

Carsten
File Added: dispatcher.patch

----------------------------------------------------------------------

Comment By: Carsten Bock (carstenbock)
Date: 2007-04-17 20:50

Message:
Logged In: YES 
user_id=1488991
Originator: YES

Hi Daniel,

your right about the IPv4 and IPv6 issue. Currently it works only for IPv4
addresses (which is totally fine for me ;-) but you're right, i should make
it although IPv6 compatible. I on holiday for the next 2,5 weeks (no SIP
unless i find an cheap WiFi-AP, jubi!), so it might take a while until i
can change this. I will take a look at the sources you mentioned.

About the second: Maybe we could write the value to be hashed into an AVP.
This would make it flexible and generic. What do you think?

Third: I guess it makes sense to change the function name of
"ds_is_domain" to "ds_is_from_domain" in order to make more clear what is
beeing checked here.

Soo,
enough to do when i am returning from my holiday! ;-)

Carsten

----------------------------------------------------------------------

Comment By: Daniel-Constantin Mierla (miconda)
Date: 2007-04-17 19:15

Message:
Logged In: YES 
user_id=1246013
Originator: NO

Hello Carsten,
I reviewed the patch and I have some observations.

First is related to new ds_is_domain() functions. Seems to be valid for
IPv4 only. Should be ipv6 as well, so it is better keep IP address as
struct ip_addr and use ip_addr_cmp() macro for comparison (see ip_addr.h).

Second, less significant, is related to the hash over username prefix. I
am thinking to a more generic variant where the value to do hash over it is
given somehow as parameter. So, I might not commit this new algorithm in
first place.

Daniel



----------------------------------------------------------------------

Comment By: axlh (axlh)
Date: 2007-04-05 16:31

Message:
Logged In: YES 
user_id=1212856
Originator: NO

May I suggest you rename ds_is_domain to ds_is_from_host or
ds_is_from_domain or similar to make clear it checks the from domain.

Or make it more flexible by passing the domain as an argument:
ds_is_domain(pseudo_variable [,group])

----------------------------------------------------------------------

Comment By: Carsten Bock (carstenbock)
Date: 2007-04-05 16:02

Message:
Logged In: YES 
user_id=1488991
Originator: YES

Hi,

Here is my ported/merged Version to OpenSER 1.2 (my extensions merged into
the OpenSER 1.2 dispatcher-module). Since i have seen no changes happen to
the dispatcher module in SVN, i guess it should also work with the current
development version.
I have also added documentation for the ds_mark_dst("state") function,
since this function was not in the docs.

Carsten
File Added: dispatcher.tar.gz

----------------------------------------------------------------------

Comment By: Carsten Bock (carstenbock)
Date: 2007-03-27 19:46

Message:
Logged In: YES 
user_id=1488991
Originator: YES

Hi Daniel,

You are totally right about the deactivation at runtime, based on wheter
tm is loaded or not. In my port to OpenSER 1.2 i have implemented this
already.
I have now merged my changes into the OpenSER 1.2-Version of the
dispatcher-module. I will do some testing; if everythings works fine, will
upload the new module to the tracker.

Carsten

----------------------------------------------------------------------

Comment By: Daniel-Constantin Mierla (miconda)
Date: 2007-03-27 13:37

Message:
Logged In: YES 
user_id=1246013
Originator: NO

The enhancements are very interesting. Once you will upload the SVN-based
version, I will integrate them in the code. We can deactivate TM at
runtime, based on whether tm is loaded or not.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=743022&aid=1689036&group_id=139143



More information about the Devel mailing list