aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-01-30 05:49:44 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-01-30 05:49:44 +0000
commit386bff7d1c2714fe283d6f2d4c2abc480461be78 (patch)
treed51908e32d9a9429e168c855ace84f22dbe04ec0
parent4f0a3a4d8201ded1803c7f7f83a98b7835954b6a (diff)
Create manager event on parking
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2095 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xres/res_parking.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/res/res_parking.c b/res/res_parking.c
index 49168e170..93302f335 100755
--- a/res/res_parking.c
+++ b/res/res_parking.c
@@ -25,6 +25,7 @@
#include <asterisk/musiconhold.h>
#include <asterisk/config.h>
#include <asterisk/cli.h>
+#include <asterisk/manager.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
@@ -156,6 +157,19 @@ int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeou
pthread_kill(parking_thread, SIGURG);
if (option_verbose > 1)
ast_verbose(VERBOSE_PREFIX_2 "Parked %s on %d\n", pu->chan->name, pu->parkingnum);
+
+ manager_event(EVENT_FLAG_CALL, "ParkedCall",
+ "Exten: %d\r\n"
+ "Channel: %s\r\n"
+ "From: %s\r\n"
+ "Timeout: %d\r\n"
+ "CallerID: %s\r\n"
+ "\r\n"
+ ,pu->parkingnum, pu->chan->name, peer->name
+ ,pu->start.tv_sec + (pu->parkingtime/1000) - time(NULL)
+ ,(pu->chan->callerid ? pu->chan->callerid : "")
+ );
+
if (peer)
ast_say_digits(peer, pu->parkingnum, "", peer->language);
return 0;
@@ -601,6 +615,36 @@ static char showparked_help[] =
static struct ast_cli_entry showparked =
{ { "show", "parkedcalls", NULL }, handle_parkedcalls, "Lists parked calls", showparked_help };
+/* Dump lot status */
+static int manager_parking_status( struct mansession *s, struct message *m )
+{
+ struct parkeduser *cur;
+
+ astman_send_ack(s, "Parked calls will follow");
+
+ ast_mutex_lock(&parking_lock);
+
+ cur=parkinglot;
+ while(cur) {
+ ast_cli(s->fd, "Event: ParkedCall\r\n"
+ "Exten: %d\r\n"
+ "Channel: %s\r\n"
+ "Timeout: %d\r\n"
+ "CallerID: %s\r\n"
+ "\r\n"
+ ,cur->parkingnum, cur->chan->name
+ ,cur->start.tv_sec + (cur->parkingtime/1000) - time(NULL)
+ ,(cur->chan->callerid ? cur->chan->callerid : "")
+ );
+
+ cur = cur->next;
+ }
+
+ ast_mutex_unlock(&parking_lock);
+
+ return RESULT_SUCCESS;
+}
+
int load_module(void)
@@ -654,6 +698,9 @@ int load_module(void)
ast_add_extension2(con, 1, exten, 1, NULL, parkedcall, strdup(exten), free, registrar);
}
pthread_create(&parking_thread, NULL, do_parking_thread, NULL);
+ if (!res) {
+ ast_manager_register( "ParkedCalls", 0, manager_parking_status, "List parked calls" );
+ }
res = ast_register_application(parkedcall, park_exec, synopsis, descrip);
return res;
}
@@ -728,6 +775,7 @@ int unload_module(void)
{
STANDARD_HANGUP_LOCALUSERS;
+ ast_manager_unregister( "ParkedCalls" );
ast_cli_unregister(&showparked);
return ast_unregister_application(parkedcall);