Hello,
On 12/19/11 1:58 PM, Andreas Granig wrote:
Hi,
I'd like to implement a couple of helper functions for time handling, e.g. checking day of week, day of month etc. from within the kamailio config file. What would you prefer, a new module ("timeutils" maybe?) or adding it to cfgutils (there are already time-based functions there like sleep and usleep)?
The idea is to implement time based call-forwards, and an approach could be to provision various time-related values in usr_preferences table, and then check it in the config. For example, when doing call-forwards from Monday to Friday only, I could put this into usr_preferences:
attribute: cf_weekday value: [1, 2, 3, 4, 5] (each entry is a separate row in usr_preferences)
And in kamailio config, I'd call this:
avp_db_load(...); if(is_weekday("$avp(s:cf_weekday)")) { do CF }
So is_weekday would iterate over the entries in the avp list and return true if the weekday at the time of routing matches an entry in the list. A module config param could control whether to use gmtime or localtime for matching.
Does this make sense? Suggestions for other approaches? I'd rather prefer to do it directly in config instead of using some external interpreter like lua, python etc.
I don't know what are all the functions you think of, but for the example provided above, config file does it easy right now. There is a pseudo-variable that gives broken-time attribute that can be used with avp_check(), iirc, should be:
avp_db_load(...); if(avp_check("$time(wday)", "eq/$avp(s:cf_weekday)/g")) { do CF }
Of course there is the option of doing while loop, but maybe gets to large for desired config file.
For me does not matter if it is new module or not, it is up to developer convenience. The only thing here I would comment a bit about, is the plan to apply on avp lists always? The maybe its better in avpops (if you want to do it in an old module), also use avp somehow in the name, e.g., is_avp_weekday().
Cheers, Daniel