The example you provided is the method I used -- once you get used to the odd 
(but necessary) syntax, the syntax doesn't seem as bad.

Here's an example of some code that is similar to what I've done (although I 
have more than 50 macros defined in my current source).  The m4 source is 
copied to the SIP Proxy Server (in this example, a development host) and the 
following command is executed to generate the configuration:

$ m4 -DDEV config.m4 > config.cfg

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

define(`ROUTE_MAIN', 0)
define(`_OPENSER_IP',`regexp(esyscmd(`hostname -i'),`\<.+\>',\&)')
define(`_OPENSER_PORT',`5060')
define(`_OPENSER_HOST',`regexp(esyscmd(`hostname -f'),`\<.+\>',\&)')

ifdef(`DEV',`
define(`OPENSER_NAME',`OPENSER (Development)')
define(`DEBUG_LEVEL',`3')
')

ifdef(`QA',`
define(`OPENSER_NAME',`OPENSER (Q`'A)')
define(`DEBUG_LEVEL',`3')
')

debug=DEBUG_LEVEL # -3 (L_ALERT) to 5 (L_DBG)
fork=no
log_stderror=no # do not print to stderr, if yes, syslog will be disabled
log_facility=LOG_LOCAL0

check_via=no    # (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
listen=_OPENSER_IP
port=_OPENSER_PORT
children=4
alias="OPENSER_NAME"
alias="_OPENSER_HOST"

route[ROUTE_MAIN] {

        if (!mf_process_maxfwd_header("10")) {
        sl_send_reply("483","Too Many Hops");
            return;
      };

      if (msg:len > max_len) {
        sl_send_reply("513", "Message too big");
            return;
      };

      if (method == "INVITE" || method == "CANCEL") {
            #
            # Ensure a P-Charging-Vector header is present.
            #
            if (! is_present_hf("P-Charging-Vector")) {
                $var(uuid) = $ci + $Ts + "_OPENSER_IP";
                  append_hf("P-Charging-Vector: 
icid-value=$(var(uuid){s.md5})\r\n");
            }

                ifdef(`DEV',`
                        #
                        # Special rules for use in development.
                        #
                        ...
                ')
                ...
        }
        ...
}


-----Original Message-----
From: Matti Zemack [mailto:[email protected]] 
Sent: Friday, January 23, 2009 2:33 AM
To: Pauba, Kevin L
Cc: [email protected]
Subject: RE: [OpenSIPS-Users] Include

Thanks Kevin!


I've started using m4 as Iñaki showed me yesterday, basically for setting 
parameters on different systems. This I've already implemented and using 
"happily ever after". :-)

Is there a better way of using M4 for bigger pieces of code, than the example 
below:
divert(-1)
define(`ROUTE1',
`route[1] {
     xlog("L_NOTICE", "We are now in route1\n");
}
')
divert(0)dnl


Thanks,
Matti Zemack
Stockholm
Sweden

-----Original Message-----
From: Pauba, Kevin L [mailto:[email protected]] 
Sent: den 22 januari 2009 18:08
Not only the cleverest, I think it's the best!

I maintain the configuration for 12 SIP Proxies (using OpenSER) and I don't 
need 12 different configuration files.  A number of macros transform one m4 
file into one of 12 different configuration files with the stroke of a short 
command line.

I'd be happy to help provide some help to get you started ...

-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Bogdan-Andrei Iancu
Sent: Thursday, January 22, 2009 9:15 AM
Hi Matti,

no, there is no other solution - using M4 is the cleverest solution ;)

Regards,
Bogdan

Matti Zemack wrote:
>
> Hi again,
>
> First of all, Thanks for all help I received previously today. 
> Fantastic and very quick response.
>
> So here is my second newbie-question: Is there any way to include 
> files at startup? It would be nice to split a 2000+ lines config file 
> into easier to handle parts.
>
> (After this morning tip from Iñaki, I suppose I could use m4 for this 
> errand... Any other clever suggestions?)
>
> Best Regards,
>
> Matti Zemack
>
> Stockholm
>
> Sweden


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to