[asterisk-dev] new feature
Rafael Vidal Aroca
rafael at 3wt.com.br
Mon May 1 14:24:22 MST 2006
No, it is not on cvs. You should copy and add it to your asterisk.
If needed, i have patches for the 1.26
--
Rafael Vidal Aroca
3WT - Wireless Web World Tech
rafael at 3WT.com.br
Tel/Fax: +55 16 3371-7761
Cel: +55 16 8126-8014
陈帆 wrote:
> hi,Radael..
>
> This code have add to CVS ?
>
> thanks...
>
>
>
> On 3/5/06, *Rafael Vidal Aroca* <rafael at 3wt.com.br
> <mailto:rafael at 3wt.com.br>> wrote:
>
>
> Hi guys,
>
> some days ago i was asking in this list how we could avoid 2 users
> from simultaneosly connecting. Well, after some discussion, i
> decided to
> implement a general solution, that should work for other problems
> too.
>
> The idea is to execute an exeternal program every time a user
> registers or unregisters, so we can setup scripts to insert data in
> databases, or take some actions.
>
> I made it for IAX2, but will implement that for SIP too, if needed.
>
> An working example is:
>
> Configure iax.conf
>
> - In the section [general] add a parameter
> exec=/tmp/script.sh
>
> Then, create the /tmp/script.sh
> #!/bin/sh
> #Sun Mar 5 09:56:53 BRT 2006
> #Rafael Aroca <rafael at 3wt.com.br <mailto:rafael at 3wt.com.br>>
> #Test script executed by asterisk on registering and
> unregistering peers
>
> echo "[`date`] Received from asterisk parameters $*" >> /tmp/output
>
> Apply the patch, compile, copy the new channel_iax2.so, and run
> asterisk.
>
> Everytime asterisk receives an IAX2 message of REGISTER or a
> clients
> gets UNREGISTERED, /tmp/output receives a new line. My output now
> after
> some tests is:
>
> root at gemini:/home/rafael/voip# cat /tmp/output
> [Sun Mar 5 11:03:43 BRT 2006] Received from asterisk parameters
> register 2005
> [Sun Mar 5 11:03:51 BRT 2006] Received from asterisk parameters
> unregister 2004
> [Sun Mar 5 11:44:14 BRT 2006] Received from asterisk parameters
> register 2005
> [Sun Mar 5 11:44:40 BRT 2006] Received from asterisk parameters
> register 2005
> [Sun Mar 5 11:45:14 BRT 2006] Received from asterisk parameters
> register 2005
> [Sun Mar 5 11:45:40 BRT 2006] Received from asterisk parameters
> register 2005
> [Sun Mar 5 11:46:14 BRT 2006] Received from asterisk parameters
> register 2005
> [Sun Mar 5 11:47:24 BRT 2006] Received from asterisk parameters
> unregister 2005
>
>
> Based on that, we can connect to database, or do some other
> interesting actions.
>
> The patch for this feature follows attached. By the way, would
> it be
> possible (if my code is safe and verified by someone else) to add this
> to asterisk SVN?
>
> thanks
>
> [] Rafael.
>
>
>
>
>
>
>
>
>
> --- asterisk-1.2.4/channels/chan_iax2.c 2006-01-19 23:00:
> 46.000000000 -0200
> +++ asterisk-1.2.4-tmp/channels/chan_iax2.c 2006-03-05
> 10:55:58.000000000 -0300
> @@ -145,6 +145,7 @@
>
> static char language[MAX_LANGUAGE] = "";
> static char regcontext[AST_MAX_CONTEXT] = "";
> +static char execOnRegister[100] = "";
>
> static int max_retries = 4;
> static int ping_time = 20;
> @@ -5552,8 +5553,31 @@
> static int expire_registry(void *data)
> {
> struct iax2_peer *p = data;
> + int res_fork, res_exec;
>
> ast_log(LOG_DEBUG, "Expiring registration for peer '%s'\n",
> p->name);
> +
> + res_fork = fork();
> + if (res_fork < 0) {
> + ast_log(LOG_NOTICE, "Could not fork");
> + }
> +
> + if (res_fork == 0) {
> + //Example: works fine
> + //res_exec = execlp("ls", "ls", "-la", NULL);
> + res_exec = execlp(execOnRegister, execOnRegister,
> "unregister", p->name, NULL);
> + } else {
> + res_exec = -1;
> + }
> +
> + if (res_exec < 0) {
> + ast_log(LOG_NOTICE, "Could not
> exec %s", execOnRegister);
> + } else {
> + ast_log(LOG_NOTICE, "Process
> spawned with PID %d", res_fork);
> + }
> +
> +
> +
> /* Reset the address */
> memset(&p->addr, 0, sizeof(p->addr));
> /* Reset expire notice */
> @@ -5626,6 +5650,7 @@
> char data[80];
> char iabuf[INET_ADDRSTRLEN];
> int version;
> + int res_fork, res_exec;
>
> memset(&ied, 0, sizeof(ied));
>
> @@ -5645,9 +5670,33 @@
> snprintf(data, sizeof(data), "%s:%d:%d",
> ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr),
> ntohs(sin->sin_port), p->expiry);
> if (!ast_test_flag(p, IAX_TEMPONLY) &&
> sin->sin_addr.s_addr) {
> ast_db_put("IAX/Registry", p->name, data);
> +
> +
> + ast_log(LOG_NOTICE, "Running %s for peer
> '%s'\n", execOnRegister, p->name);
> +
> + res_fork = fork();
> + if (res_fork < 0) {
> + ast_log(LOG_NOTICE, "Could not fork");
> + }
> +
> + if (res_fork == 0) {
> + //Example: works fine
> + //res_exec = execlp("ls", "ls",
> "-la", NULL);
> + res_exec = execlp(execOnRegister,
> execOnRegister, "register", p->name, NULL);
> + } else {
> + res_exec = -1;
> + }
> +
> + if (res_exec < 0) {
> + ast_log(LOG_NOTICE, "Could not
> exec %s", execOnRegister);
> + } else {
> + ast_log(LOG_NOTICE, "Process
> spawned with PID %d", res_fork);
> + }
> +
> if (option_verbose > 2)
> ast_verbose(VERBOSE_PREFIX_3
> "Registered IAX2 '%s' (%s) at %s:%d\n", p->name,
>
> ast_test_flag(&iaxs[callno]->state, IAX_STATE_AUTHENTICATED) ?
> "AUTHENTICATED" : "UNAUTHENTICATED", ast_inet_ntoa(iabuf,
> sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port));
> +
> manager_event(EVENT_FLAG_SYSTEM,
> "PeerStatus", "Peer: IAX2/%s\r\nPeerStatus: Registered\r\n", p->name);
> register_peer_exten(p, 1);
> ast_device_state_changed("IAX2/%s",
> p->name); /* Activate notification */
> @@ -8624,6 +8673,8 @@
> portno = atoi(v->value);
> } else if (!strcasecmp(v->name, "pingtime"))
> ping_time = atoi(v->value);
> + else if (!strcasecmp(v->name, "exec"))
> + ast_copy_string(execOnRegister, v->value,
> sizeof(execOnRegister));
> else if (!strcasecmp(v->name, "nochecksums")) {
> #ifdef SO_NO_CHECK
> if (ast_true(v->value))
>
>
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com
> <http://Easynews.com> --
>
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-dev
>
>
>
>
>
> --
> Jeffery
>
> iaxtel Num: 1-700-576-1311
> fwdnet Num: 728150
>
>------------------------------------------------------------------------
>
>_______________________________________________
>--Bandwidth and Colocation provided by Easynews.com --
>
>asterisk-dev mailing list
>To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-dev
>
>
More information about the asterisk-dev
mailing list