Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | /* $Id: isdn_divert.h,v 1.5.6.1 2001/09/23 22:24:36 kai Exp $ * * Header for the diversion supplementary ioctl interface. * * Copyright 1998 by Werner Cornelius (werner@ikt.de) * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * */ #include <linux/ioctl.h> #include <linux/types.h> /******************************************/ /* IOCTL codes for interface to user prog */ /******************************************/ #define DIVERT_IIOC_VERSION 0x01 /* actual version */ #define IIOCGETVER _IO('I', 1) /* get version of interface */ #define IIOCGETDRV _IO('I', 2) /* get driver number */ #define IIOCGETNAM _IO('I', 3) /* get driver name */ #define IIOCGETRULE _IO('I', 4) /* read one rule */ #define IIOCMODRULE _IO('I', 5) /* modify/replace a rule */ #define IIOCINSRULE _IO('I', 6) /* insert/append one rule */ #define IIOCDELRULE _IO('I', 7) /* delete a rule */ #define IIOCDODFACT _IO('I', 8) /* hangup/reject/alert/immediately deflect a call */ #define IIOCDOCFACT _IO('I', 9) /* activate control forwarding in PBX */ #define IIOCDOCFDIS _IO('I',10) /* deactivate control forwarding in PBX */ #define IIOCDOCFINT _IO('I',11) /* interrogate control forwarding in PBX */ /*************************************/ /* states reported through interface */ /*************************************/ #define DEFLECT_IGNORE 0 /* ignore incoming call */ #define DEFLECT_REPORT 1 /* only report */ #define DEFLECT_PROCEED 2 /* deflect when externally triggered */ #define DEFLECT_ALERT 3 /* alert and deflect after delay */ #define DEFLECT_REJECT 4 /* reject immediately */ #define DIVERT_ACTIVATE 5 /* diversion activate */ #define DIVERT_DEACTIVATE 6 /* diversion deactivate */ #define DIVERT_REPORT 7 /* interrogation result */ #define DEFLECT_AUTODEL 255 /* only for internal use */ #define DEFLECT_ALL_IDS 0xFFFFFFFF /* all drivers selected */ typedef struct { ulong drvid; /* driver ids, bit mapped */ char my_msn[35]; /* desired msn, subaddr allowed */ char caller[35]; /* caller id, partial string with * + subaddr allowed */ char to_nr[35]; /* deflected to number incl. subaddress */ u_char si1,si2; /* service indicators, si1=bitmask, si1+2 0 = all */ u_char screen; /* screening: 0 = no info, 1 = info, 2 = nfo with nr */ u_char callopt; /* option for call handling: 0 = all calls 1 = only non waiting calls 2 = only waiting calls */ u_char action; /* desired action: 0 = don't report call -> ignore 1 = report call, do not allow/proceed for deflection 2 = report call, send proceed, wait max waittime secs 3 = report call, alert and deflect after waittime 4 = report call, reject immediately actions 1-2 only take place if interface is opened */ u_char waittime; /* maximum wait time for proceeding */ } divert_rule; typedef union { int drv_version; /* return of driver version */ struct { int drvid; /* id of driver */ char drvnam[30]; /* name of driver */ } getid; struct { int ruleidx; /* index of rule */ divert_rule rule; /* rule parms */ } getsetrule; struct { u_char subcmd; /* 0 = hangup/reject, 1 = alert, 2 = deflect */ ulong callid; /* id of call delivered by ascii output */ char to_nr[35]; /* destination when deflect, else uus1 string (maxlen 31), data from rule used if empty */ } fwd_ctrl; struct { int drvid; /* id of driver */ u_char cfproc; /* cfu = 0, cfb = 1, cfnr = 2 */ ulong procid; /* process id returned when no error */ u_char service; /* basically coded service, 0 = all */ char msn[25]; /* desired msn, empty = all */ char fwd_nr[35];/* forwarded to number + subaddress */ } cf_ctrl; } divert_ioctl; #ifdef __KERNEL__ #include <linux/isdnif.h> #include <linux/isdn_divertif.h> #define AUTODEL_TIME 30 /* timeout in s to delete internal entries */ /**************************************************/ /* structure keeping ascii info for device output */ /**************************************************/ struct divert_info { struct divert_info *next; ulong usage_cnt; /* number of files still to work */ char info_start[2]; /* info string start */ }; /**************/ /* Prototypes */ /**************/ extern spinlock_t divert_lock; extern ulong if_used; /* number of interface users */ extern int divert_dev_deinit(void); extern int divert_dev_init(void); extern void put_info_buffer(char *); extern int ll_callback(isdn_ctrl *); extern isdn_divert_if divert_if; extern divert_rule *getruleptr(int); extern int insertrule(int, divert_rule *); extern int deleterule(int); extern void deleteprocs(void); extern int deflect_extern_action(u_char, ulong, char *); extern int cf_command(int, int, u_char, char *, u_char, char *, ulong *); #endif /* __KERNEL__ */ |