freeswitch/libs/sipcc/core/includes/kpmlmap.h

178 lines
4.2 KiB
C
Executable File

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef KPMLMAP_H
#define KPMLMAP_H
#include "xml_parser_defines.h"
#include "singly_link_list.h"
#include "subapi.h"
#define KPML_ESCAPE '\\'
#define MAX_DIALSTRING 256
#define DIAL_TIMEOUT 10
#define MAX_KPML_TAG_STRING 32
#define MAX_KPML_TEXT_STRING 16
#define KPML_BUFFERS_NUM 100
#define KPML_VER_STR "1.0"
#define KPML_ENTER_STR "#"
#define NUM_OF_REGX 1
typedef enum {
KPML_NOMATCH = 0,
KPML_GIVETONE,
KPML_WILDPATTERN,
KPML_FULLPATTERN,
KPML_FULLMATCH,
KPML_IMMEDIATELY
} kpml_match_action_e;
typedef enum {
KPML_SUCCESS = 200,
KPML_USER_TERM_NOMATCH = 402,
KPML_TIMER_EXPIRE = 423,
KPML_NO_DIALOG = 481,
KPML_SUB_EXPIRE = 487,
KPML_BAD_EVENT = 489,
KPML_BAD_DOC = 501,
KPML_NO_PERSISTENT = 531,
KPML_NO_MULTIPLE = 532,
KPML_NO_MULITPLE_CALL_LEG = 533
} kpml_resp_code_e;
typedef enum {
KPML_NONE = 0x0,
KPML_SIGNAL_ONLY = 0x1,
KPML_DTMF_ONLY = 0x2,
KPML_BOTH = 0x3
} kpml_config_e;
#define KPML_SUCCESS_STR "OK"
#define KPML_USER_TERM_NOMATCH_STR "No Match"
#define KPML_TIMER_EXPIRE_STR "Timer Expired"
#define KPML_SUB_EXPIRE_STR "Subscription Expired"
#define KPML_ATTR_NOT_SUPPORTED_STR "Attribute not supported"
#define KPML_TRYING_STR "Trying"
typedef enum {
KPML_ONE_SHOT = 0,
KPML_PERSISTENT,
KPML_SINGLY_NOTIFY
} kpml_sub_type_e;
typedef enum {
KPML_NO_TIMER,
KPML_INTERDIGIT_TIMER,
KPML_CRITICAL_TIMER,
KPML_EXTRADIGIT_TIMER,
KPML_LONGDIGIT_TIMER
} kpml_timer_e;
typedef enum {
NO_SUB_DATA = 0,
SUB_DATA_FOUND = 1,
NOTIFY_SENT
} kpml_state_e;
typedef struct kpml_Q_digit_t_ {
char digits[MAX_DIALSTRING];
int dig_head;
int dig_tail;
} kpml_Q_dig;
typedef struct {
line_t line;
callid_t call_id;
void *timer;
} kpml_key_t;
typedef struct kpml_regex_match_s {
int num_digits;
union {
unsigned long single_digit_bitmask;
} u;
} kpml_regex_match_t;
typedef struct kpml_data_t_ {
line_t line;
callid_t call_id;
sub_id_t sub_id;
unsigned long sub_duration;
void *sub_timer;
kpml_key_t subtimer_key;
/* Hold regx received by SUB */
struct Regex regex[NUM_OF_REGX];
kpml_regex_match_t regex_match[NUM_OF_REGX];
/* If this is set then send out 402 response after # key */
boolean enterkey;
uint32_t kpml_id;
/* if this persistent */
kpml_sub_type_e persistent;
int flush;
/* timeout duration */
xml_unsigned32 inttimeout;
xml_unsigned32 crittimeout;
xml_unsigned32 extratimeout;
/* timer pointers for digits */
void *inter_digit_timer;
void *critical_timer;
void *extra_digit_timer;
kpml_key_t inttime_key;
kpml_key_t crittime_key;
kpml_key_t extratime_key;
xml_unsigned16 longhold;
xml_unsigned8 longrepeat;
xml_unsigned8 nopartial;
/* Store dialed digits */
char kpmlDialed[MAX_DIALSTRING];
boolean last_dig_bkspace;
char q_digits[MAX_DIALSTRING];
int dig_head;
int dig_tail;
boolean sub_reject; /* If this varilable is set reject
* the subscription. There are cases
* where INV has been sent out premeturaly
* If the B2BUA asks for more digit by
* subsctiption, then reject thoese
*/
boolean pending_sub;
boolean enable_backspace;
/* Setting this variable will enable backspace
*/
} kpml_data_t;
kpml_state_e kpml_update_dialed_digits(line_t line, callid_t call_id,
char digit);
void kpml_flush_quarantine_buffer(line_t line, callid_t call_id);
void kpml_sm_register(void);
void kpml_quarantine_digits(line_t line, callid_t call_id, char digit);
void kpml_init(void);
void kpml_shutdown(void);
void kpml_set_subscription_reject(line_t line, callid_t call_id);
boolean kpml_get_state(void);
void kpml_inter_digit_timer_callback(void *);
void kpml_subscription_timer_callback(void *);
boolean kpml_is_subscribed (callid_t call_id, line_t line);
#endif //KPMLMAP_H