summaryrefslogtreecommitdiffstats
path: root/src/call_script.h
diff options
context:
space:
mode:
authorMichal Kubecek <mkubecek@suse.cz>2015-04-13 09:21:39 +0200
committerMichal Kubecek <mkubecek@suse.cz>2015-04-13 09:21:39 +0200
commite2bc6f4153813cc570ae814c8ddb74628009b488 (patch)
treea40b171be1d859c2232ccc94f758010f9ae54d3c /src/call_script.h
downloadtwinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar
twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar.gz
twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar.lz
twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar.xz
twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.zip
initial checkin
Check in contents of upstream 1.4.2 tarball, exclude generated files.
Diffstat (limited to 'src/call_script.h')
-rw-r--r--src/call_script.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/call_script.h b/src/call_script.h
new file mode 100644
index 0000000..4253bda
--- /dev/null
+++ b/src/call_script.h
@@ -0,0 +1,199 @@
+/*
+ Copyright (C) 2005-2009 Michel de Boer <michel@twinklephone.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+/**
+ * @file
+ * Call scripting interface.
+ * A call script is called by Twinkle during call processing.
+ * Currently only when a call comes in (INVITE received).
+ * Twinkle calls the script and based of the output of the script, the
+ * call is further handled.
+ *
+ * The following environment variables are passed to the script:
+ *
+@verbatim
+ TWINKLE_USER_PROFILE=<user profile name>
+ TWINKLE_TRIGGER=<trigger type>
+ TWINKLE_LINE=<line number (starting at 1) associated with the call>
+ SIPREQUEST_METHOD=<method>
+ SIPREQUEST_URI=<request uri>
+ SIPSTATUS_CODE=<status code of a response>
+ SIPSTATUS_REASON=<reason phrase of a response>
+ SIP_FROM_USER=<user name of From header>
+ SIP_FROM_HOST=<host part of From header>
+ SIP_TO_USER=<user name of To header>
+ SIP_TO_HOST=<host part of To header>
+ SIP_<header_name>=<header value>
+@endverbatim
+ *
+ * The header name is in capitals and dashed are replaced by underscores
+ *
+ * The script can return on stdout how the call should be further
+ * processed. The following output parameters are recognized:
+ *
+@verbatim
+ action=[continue|reject|dnd|redirect]
+ reason=<reason phrase>, for reject and dnd actions
+ contact=<sip uri>, for redirect ation
+ ringtone=<name of wav file>, for continue action
+ caller_name=<name to override the display name of the caller>
+ display_msg=<msg to show in Twinkle's display> (may occur multiple times)
+ end This parameter makes Twinkle stop waiting for the script to complete.
+@endverbatim
+ *
+ * If no action is returned, the "continue" action is performed.
+ * Invalid output will be skipped.
+ */
+
+#ifndef _H_CALL_SCRIPT
+#define _H_CALL_SCRIPT
+
+#include <vector>
+#include <string>
+#include <cc++/config.h>
+#include "user.h"
+#include "parser/request.h"
+
+using namespace std;
+
+/** Results of the incoming call script. */
+class t_script_result {
+public:
+ /** Action to perform. */
+ enum t_action {
+ ACTION_CONTINUE, /**< Continue with incoming call */
+ ACTION_REJECT, /**< Reject incoming call with 603 response */
+ ACTION_DND, /**< Do not disturb, send 480 response */
+ ACTION_REDIRECT, /**< Redirect call (302 response) */
+ ACTION_AUTOANSWER, /**< Auto answer incoming call */
+ ACTION_ERROR /**< Fail call due to error (500 response) */
+ };
+
+ /** @name Output parameters */
+ //@{
+ t_action action; /**< How to proceed with call */
+ string reason; /**< Reason if call is not continued */
+ string contact; /**< Redirect destination for redirect action */
+ string caller_name; /**< Name of caller (can be used to override display name) */
+ string ringtone; /**< Wav file for ring tone */
+ vector<string> display_msgs; /**< Message (multi line) to show on display */
+ //@}
+
+ /** Constructor. */
+ t_script_result();
+
+ /**
+ * Convert string representation to an action.
+ * @param action_string [in] String representation of an action.
+ * @return The action.
+ */
+ static t_action str2action(const string action_string);
+
+ /** Clear the results. */
+ void clear(void);
+
+ /**
+ * Set output parameter from values read from the result output of a script.
+ * @param parameter [in] Name of the parameter to set,
+ * @param value [in] The value to set.
+ */
+ void set_parameter(const string &parameter, const string &value);
+};
+
+/** Call script definition. */
+class t_call_script {
+public:
+ /** Trigger type. */
+ enum t_trigger {
+ TRIGGER_IN_CALL, /**< Incoming call. */
+ TRIGGER_IN_CALL_ANSWERED, /**< Incoming call answered. */
+ TRIGGER_IN_CALL_FAILED, /**< Incoming call failed. */
+ TRIGGER_OUT_CALL, /**< Outgoing call made. */
+ TRIGGER_OUT_CALL_ANSWERED, /**< Outgoing call answered. */
+ TRIGGER_OUT_CALL_FAILED, /**< Outgoing call failed. */
+ TRIGGER_LOCAL_RELEASE, /**< Call released by local party. */
+ TRIGGER_REMOTE_RELEASE /**< Call released by remotre party. */
+ };
+
+private:
+ t_user *user_config; /**< The user profile. */
+ string script_command; /**< The script to execute. */
+ t_trigger trigger; /**< Trigger point for this script. */
+
+ /**
+ * Number of the line associated with the call causing the trigger.
+ * The line numbers start at 1. For some triggers a line number does not
+ * apply, e.g. incoming call and all lines are busy. In that case the
+ * line number is 0.
+ */
+ uint16 line_number;
+
+ /**
+ * Convert a trigger type value to a string.
+ * @param t [in] Trigger
+ * @return String representation for the trigger.
+ */
+ string trigger2str(t_trigger t) const;
+
+ /**
+ * Create environment for the process running the script.
+ * The environment contains the header values of a SIP message.
+ * @param m [in] The SIP message.
+ * @return The environment.
+ * @note This function creates the env array without registering
+ * the memory allocation to MEMMAN.
+ */
+ char **create_env(t_sip_message *m) const;
+
+ /**
+ * Create script command argument list.
+ * @return The argument list.
+ * @note This function creates the argv array without registering
+ * the memory allocation to MEMMAN.
+ */
+ char **create_argv(void) const;
+
+protected:
+ /** Cannot use this constructor. */
+ t_call_script() {};
+
+public:
+ /**
+ * Constructor.
+ * @param _user_config [in] User profile associated with the trigger.
+ * @param _trigger [in] The trigger type.
+ * @param _line_number [in] Line associated with the trigger (0 if no line
+ * is associated).
+ */
+ t_call_script(t_user *_user_config, t_trigger _trigger, uint16 _line_number);
+
+ /**
+ * Execute call script resulting in an action.
+ * @param result [out] Contains the result on return.
+ * @param m [in] The SIP message triggering this call script.
+ */
+ void exec_action(t_script_result &result, t_sip_message *m) const;
+
+ /**
+ * Execute notification call script.
+ * @param m [in] The SIP message triggering this call script.
+ */
+ void exec_notify(t_sip_message *m) const;
+};
+
+#endif