diff options
author | Michal Kubecek <mkubecek@suse.cz> | 2015-04-13 09:21:39 +0200 |
---|---|---|
committer | Michal Kubecek <mkubecek@suse.cz> | 2015-04-13 09:21:39 +0200 |
commit | e2bc6f4153813cc570ae814c8ddb74628009b488 (patch) | |
tree | a40b171be1d859c2232ccc94f758010f9ae54d3c /src/call_script.h | |
download | twinkle-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.h | 199 |
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 ¶meter, 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 |