Define prload of mISDN buffer by chan_lcr (required for fax)
[lcr.git] / apppbx.h
index a4baef1..e42651f 100644 (file)
--- a/apppbx.h
+++ b/apppbx.h
@@ -1,6 +1,6 @@
 /*****************************************************************************\
 **                                                                           **
-** PBX4Linux                                                                 **
+** Linux Call Router                                                         **
 **                                                                           **
 **---------------------------------------------------------------------------**
 ** Copyright: Andreas Eversberg                                              **
@@ -12,9 +12,9 @@
 
 enum { /* release actions: see epoint.release */
        RELEASE_NONE,
-       RELEASE_CALL,           /* call, hold */
-       RELEASE_PORT_CALLONLY,  /* call, port */
-       RELEASE_ALL,            /* call, hold, port */
+       RELEASE_JOIN,           /* join, hold */
+       RELEASE_PORT_JOINONLY,  /* join, port */
+       RELEASE_ALL,            /* join, hold, port */
 };
 
 enum { /* states as viewed from io port (state of calls are always connected) */
@@ -33,7 +33,7 @@ enum { /* states as viewed from io port (state of calls are always connected) */
 };
 
 #define EPOINT_STATE_NAMES \
-static char *state_name[] = { \
+static const char *state_name[] = { \
        "EPOINT_STATE_IDLE", \
        "EPOINT_STATE_IN_SETUP", \
        "EPOINT_STATE_OUT_SETUP", \
@@ -49,22 +49,23 @@ static char *state_name[] = { \
 }; \
 int state_name_num = sizeof(state_name) / sizeof(char *);
 
+int vbox_refresh(struct lcr_timer *timer, void *instance, int index);
+
 extern class EndpointAppPBX *apppbx_first;
 
 /* structure of an EndpointAppPBX */
 class EndpointAppPBX : public EndpointApp
 {
        public:
-       EndpointAppPBX(class Endpoint *epoint);
+       EndpointAppPBX(class Endpoint *epoint, int origin);
        ~EndpointAppPBX();
 
        class EndpointAppPBX    *next;
-       int                     handler(void);
 
        int                     e_hold;                 /* is this endpoint on hold ? */
        char                    e_tone[256];            /* save tone for resuming ports */
 
-       unsigned long           e_adminid;
+       unsigned int            e_adminid;
 
        /* states */
        int                     e_state;                /* state of endpoint */
@@ -72,16 +73,15 @@ class EndpointAppPBX : public EndpointApp
        struct caller_info      e_callerinfo;           /* information about the caller */
        struct dialing_info     e_dialinginfo;          /* information about dialing */
        struct connect_info     e_connectinfo;          /* information about connected line */
-       struct redir_info       e_redirinfo;            /* info on redirection (to the calling user) */
-       struct capa_info        e_capainfo;             /* info on l3,l2 capacity */
+       struct redir_info       e_redirinfo;            /* info about redirection (to the calling user) */
+       struct capa_info        e_capainfo;             /* info about l3,l2 capacity */
+       struct rtp_info         e_rtpinfo;              /* info about rtp port forwarding and payload type */
        time_t                  e_start, e_stop;        /* time */
-//     int                     e_origin;               /* origin of call */
+       int                     e_origin;               /* origin of call 0=incoming 1=outgoing */
        struct route_ruleset    *e_ruleset;             /* current ruleset pointer (NULL=no ruleset) */
        struct route_rule       *e_rule;                /* current rule pointer (NULL=no rule) */
        struct route_action     *e_action;              /* current action pointer (NULL=no action) */
-       double                  e_action_timeout;       /* when to timeout */
        int                     e_rule_nesting;         /* 'goto'/'menu' recrusion counter to prevent infinie loops */
-       double                  e_match_timeout;        /* set for the next possible timeout time */
        struct route_action     *e_match_to_action;     /* what todo when timeout */
        char                    *e_match_to_extdialing; /* dialing after matching timeout rule */
        int                     e_select;               /* current selection for various selector options */
@@ -92,34 +92,37 @@ class EndpointAppPBX : public EndpointApp
 //     int e_knocking;                         /* true, if knocking */
 //     double e_knocktime;                     /* next time to knock */
 
-//     char e_call_tone[64], e_hold_tone[64];  /* current tone */
-       int e_call_pattern/*, e_hold_pattern*/; /* pattern available */
+//     char e_join_tone[64], e_hold_tone[64];  /* current tone */
+       int e_join_pattern/*, e_hold_pattern*/; /* pattern available */
 
        /* action */
        char e_dialing_queue[32];               /* holds dialing during setup state */
-       double e_redial;                        /* time when redialing 0=off */
-       double e_powerdialing;                  /* on disconnect redial! 0=off, >0=redial time, -1=on */
        double e_powerdelay;                    /* delay when to redial */
        int e_powercount;                       /* power count */
        int e_powerlimit;                       /* power limit */
-       double e_callback;                      /* time when callback (when idle reached) 0=off */
-       signed long e_cfnr_release;             /* time stamp when to do the release for call forward on no response */
-       signed long e_cfnr_call;                /* time stamp when to do the call for call forward on no response */
-       signed long e_password_timeout;         /* time stamp when to do the release for password timeout */
+       struct lcr_timer        e_action_timeout;
+       struct lcr_timer        e_match_timeout;
 
        /* port relation */
        int e_multipoint_cause;                 /* cause value of disconnected multiport calls (highest priority) */
        int e_multipoint_location;              /* location of cause with highest priority */
 
-       /* call relation */
-       int e_call_cause;
-       int e_call_location;    
+       /* join relation */
+       int e_join_cause;
+       int e_join_location;    
 
        /* callback */
        char e_cbdialing[256];                  /* dialing information after callback */
        char e_cbcaller[256];                   /* extension for the epoint which calls back */
        char e_cbto[32];                        /* override callerid to call back to */
        struct caller_info e_callbackinfo;      /* information about the callback caller */
+       struct lcr_timer        e_redial_timeout;
+       int e_powerdial_on;
+       struct lcr_timer        e_powerdial_timeout;
+       struct lcr_timer        e_cfnr_timeout;
+       struct lcr_timer        e_cfnr_call_timeout;
+       struct lcr_timer        e_callback_timeout;
+       struct lcr_timer        e_password_timeout;
 
        /* dtmf stuff */
        int e_connectedmode;                    /* if the port should stay connected if the enpoint disconnects or releases (usefull for callback) */
@@ -127,6 +130,7 @@ class EndpointAppPBX : public EndpointApp
        /* read doc/keypad.txt for more information */
        int e_dtmf_time;                        /* time when the last key was received. */
        int e_dtmf_last;                        /* last dtmf key */
+       int e_enablekeypad;                     /* remote app requests dtmf */
 
        /* transmit and receive state */
        int e_tx_state;                         /* current endpoint's state */
@@ -137,7 +141,7 @@ class EndpointAppPBX : public EndpointApp
        int e_vbox_state;                       /* state of vbox during playback */
        int e_vbox_menu;                        /* currently selected menu using '*' and '#' */
        char e_vbox_display[128];               /* current display message */
-       int e_vbox_display_refresh;             /* display must be refreshed du to change */
+       struct lcr_timer e_vbox_refresh;        /* display must be refreshed du to change */
        int e_vbox_counter;                     /* current playback counter in seconds */
        int e_vbox_counter_max;                 /* size of file in seconds */
        int e_vbox_counter_last;                /* temp variable to recognise a change in seconds */
@@ -156,15 +160,16 @@ class EndpointAppPBX : public EndpointApp
        /* efi */
        int e_efi_state;                        /* current spoken sample */
        int e_efi_digit;                        /* current spoken digit */
-       
+
+#ifdef WITH_CRYPT
        /* crypt states and vars */
        int e_crypt;                            /* current user level crypt state */
        int e_crypt_state;                      /* current crypt manager state */
        char e_crypt_info[33];                  /* last information text */
        int e_crypt_timeout_sec;                /* timer */
        int e_crypt_timeout_usec;               /* timer */
-       unsigned long e_crypt_random;           /* current random number for ident */
-       unsigned long e_crypt_bogomips;         /* bogomips for ident */
+       unsigned int e_crypt_random;            /* current random number for ident */
+       unsigned int e_crypt_bogomips;          /* bogomips for ident */
        unsigned char e_crypt_key[256];         /* the session key */
        int e_crypt_key_len;
        unsigned char e_crypt_ckey[256];        /* the encrypted session key */
@@ -187,10 +192,12 @@ class EndpointAppPBX : public EndpointApp
        int e_crypt_rsa_iqmp_len;
        int e_crypt_keyengine_busy;             /* current job and busy state */
        int e_crypt_keyengine_return;           /* return */
+       struct lcr_timer e_crypt_handler; /* poll timer for crypt events */
+#endif
 
        /* messages */
        void hookflash(void);
-       void ea_message_port(unsigned long port_id, int message, union parameter *param);
+       void ea_message_port(unsigned int port_id, int message, union parameter *param);
        void port_setup(struct port_list *portlist, int message_type, union parameter *param);
        void port_information(struct port_list *portlist, int message_type, union parameter *param);
        void port_dtmf(struct port_list *portlist, int message_type, union parameter *param);
@@ -202,46 +209,51 @@ class EndpointAppPBX : public EndpointApp
        void port_disconnect_release(struct port_list *portlist, int message_type, union parameter *param);
        void port_timeout(struct port_list *portlist, int message_type, union parameter *param);
        void port_notify(struct port_list *portlist, int message_type, union parameter *param);
+       void port_progress(struct port_list *portlist, int message_type, union parameter *param);
        void port_facility(struct port_list *portlist, int message_type, union parameter *param);
+       void port_3pty(struct port_list *portlist, int message_type, union parameter *param);
        void port_suspend(struct port_list *portlist, int message_type, union parameter *param);
        void port_resume(struct port_list *portlist, int message_type, union parameter *param);
-       void ea_message_call(unsigned long call_id, int message, union parameter *param);
-       void call_crypt(struct port_list *portlist, int message_type, union parameter *param);
-       void call_mISDNsignal(struct port_list *portlist, int message_type, union parameter *param);
-       void call_setup(struct port_list *portlist, int message_type, union parameter *param);
-       void call_information(struct port_list *portlist, int message_type, union parameter *param);
-       void call_overlap(struct port_list *portlist, int message_type, union parameter *param);
-       void call_proceeding(struct port_list *portlist, int message_type, union parameter *param);
-       void call_alerting(struct port_list *portlist, int message_type, union parameter *param);
-       void call_connect(struct port_list *portlist, int message_type, union parameter *param);
-       void call_disconnect_release(struct port_list *portlist, int message_type, union parameter *param);
-       void call_notify(struct port_list *portlist, int message_type, union parameter *param);
-       void call_facility(struct port_list *portlist, int message_type, union parameter *param);
+       void port_enablekeypad(struct port_list *portlist, int message_type, union parameter *param);
+       void port_disable_dejitter(struct port_list *portlist, int message_type, union parameter *param);
+       void ea_message_join(unsigned int join_id, int message, union parameter *param);
+       void join_crypt(struct port_list *portlist, int message_type, union parameter *param);
+       void join_mISDNsignal(struct port_list *portlist, int message_type, union parameter *param);
+       void join_bridge(struct port_list *portlist, int message_type, union parameter *param);
+       void join_setup(struct port_list *portlist, int message_type, union parameter *param);
+       void join_information(struct port_list *portlist, int message_type, union parameter *param);
+       void join_overlap(struct port_list *portlist, int message_type, union parameter *param);
+       void join_proceeding(struct port_list *portlist, int message_type, union parameter *param);
+       void join_alerting(struct port_list *portlist, int message_type, union parameter *param);
+       void join_connect(struct port_list *portlist, int message_type, union parameter *param);
+       void join_disconnect_release(int message_type, union parameter *param);
+       void join_notify(struct port_list *portlist, int message_type, union parameter *param);
+       void join_facility(struct port_list *portlist, int message_type, union parameter *param);
+       void join_dtmf(struct port_list *portlist, int message_type, union parameter *param);
+       void join_disable_dejitter(struct port_list *portlist, int message_type, union parameter *param);
 
        /* epoint */
        void new_state(int state);
-       void release(int release, int calllocation, int callcause, int portlocation, int portcause);
+       void release(int release, int joinlocation, int joincause, int portlocation, int portcause, int force);
        void notify_active(void);
        void keypad_function(char digit);
-       void set_tone(struct port_list *portlist, char *tone);
-       void out_setup(void);
-       struct mISDNport *hunt_port(char *ifname, int *channel);
-       char *apply_callerid_display(char *id, int itype, int ntype, int present, int screen, char *extension, char *name);
+       void set_tone(struct port_list *portlist, const char *tone);
+       void out_setup(int cfnr);
+       char *apply_callerid_display(const char *id, int itype, int ntype, int present, int screen, const char *extension, const char *name);
        void auth(int job, int bit_num);
 
        /* vbox playback stuff */
        void vbox_init(void);
        void vbox_index_read(int num);
        void vbox_index_remove(int num);
-       void vbox_handler(void);
        void efi_message_eof(void);
        void vbox_message_eof(void);
-       void set_tone_vbox(char *tone);
-       void set_play_vbox(char *file, int offset);
+       void set_tone_vbox(const char *tone);
+       void set_play_vbox(const char *file, int offset);
        void set_play_speed(int speed);
 
        /* efi */
-       void set_tone_efi(char *tone);
+       void set_tone_efi(const char *tone);
        
        /* routing */
        struct route_ruleset *rulesetbyname(char *name);
@@ -249,13 +261,10 @@ class EndpointAppPBX : public EndpointApp
        struct route_param *routeparam(struct route_action *action, unsigned long long id);
 
        /* init / dialing / hangup */
-       void _action_init_call(int chan);
        void action_init_call(void);
-       void action_init_chan(void);
        void action_dialing_internal(void);
        void action_dialing_external(void);
        void action_dialing_h323(void);
-       void action_dialing_chan(void);
        void action_dialing_vbox_record(void);
        void action_init_partyline(void);
        void action_hangup_call(void);
@@ -285,29 +294,33 @@ class EndpointAppPBX : public EndpointApp
        void action_dialing_goto(void);
        void action_dialing_menu(void);
        void action_dialing_disconnect(void);
+       void action_dialing_release(void);
        void action_dialing_help(void);
        void action_dialing_deflect(void);
        void action_dialing_setforward(void);
+       void action_init_execute(void);
        void action_hangup_execute(void);
+       void action_execute(void);
        void action_hangup_file(void);
        void action_init_pick(void);
        void action_dialing_password(void);
        void action_dialing_password_wr(void);
-       void process_dialing(void);
+       void process_dialing(int timeout);
        void process_hangup(int cause, int location);
 
        /* facility function */
-       void pick_call(char *extension);
-       void join_call(void);
+       void pick_join(char *extension);
+       int join_join(void);
+       int join_3pty(void);
+       int split_3pty(void);
        void encrypt_shared(void);
        void encrypt_keyex(void);
        void encrypt_off(void);
        void encrypt_result(int message, char *text);
-       int check_external(char **errstr, class Port **port);
+       int check_external(const char **errstr, class Port **port);
 
        /* crypt */
        void cryptman_keyengine(int job);
-       void cryptman_handler(void);
        void cr_ident(int message, unsigned char *param, int len);
        void cr_activate(int message, unsigned char *param, int len);
        void cr_deactivate(int message, unsigned char *param, int len);
@@ -339,21 +352,17 @@ class EndpointAppPBX : public EndpointApp
        int cryptman_sizeofinf(unsigned char *buf, int element);
        unsigned char *cryptman_getinf(unsigned char *buf, int element, unsigned char *to);
        void cryptman_msg2peer(unsigned char *buf);
-       void cryptman_msg2user(int msg, char *text);
+       void cryptman_msg2user(int msg, const char *text);
        void cryptman_msg2crengine(int msg, unsigned char *buf, int len);
        void cryptman_state(int state);
        void cryptman_timeout(int secs);
-
-       void message_disconnect_port(struct port_list *portlist, int cause, int location, char *display);
-       void logmessage(struct message *messsage);
-       void trace_header(char *name, int direction);
-       void screen(int out, char *id, int idsize, int *type, int *present, struct interface *interface);
+       void message_disconnect_port(struct port_list *portlist, int cause, int location, const char *display);
+       void logmessage(int message_type, union parameter *param, unsigned int port_id, int dir);
+       void trace_header(const char *name, int direction);
 };
 
 
-char *nationalize_callerinfo(char *string, int *type);
-char *numberrize_callerinfo(char *string, int type);
-void apply_callerid_restriction(int anon_ignore, char *id, int *ntype, int *present, int *screen, char *extension, char *name);
+void apply_callerid_restriction(struct extension *ext, char *id, int *ntype, int *present, int *screen, char *extension, char *name);
 void send_mail(char *filename, char *callerid, char *callerintern, char *callername, char *vbox_email, int vbox_year, int vbox_mon, int vbox_mday, int vbox_hour, int vbox_min, char *terminal);