178 lines
4.2 KiB
C
Executable File
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
|