📄 libpri.h
字号:
#define PRI_CALLINGPLANANI#define PRI_CALLINGPLANRDNIStypedef struct pri_event_ring { int e; int channel; /* Channel requested */ int callingpres; /* Presentation of Calling CallerID */ int callingplanani; /* Dialing plan of Calling entity ANI */ int callingplan; /* Dialing plan of Calling entity */ char callingani[256]; /* Calling ANI */ char callingnum[256]; /* Calling number */ char callingname[256]; /* Calling name (if provided) */ int calledplan; /* Dialing plan of Called number */ int ani2; /* ANI II */ char callednum[256]; /* Called number */ char redirectingnum[256]; /* Redirecting number */ char redirectingname[256]; /* Redirecting name */ int redirectingreason; /* Reason for redirect */ int callingplanrdnis; /* Dialing plan of Redirecting Number */ char useruserinfo[260]; /* User->User info */ int flexible; /* Are we flexible with our channel selection? */ int cref; /* Call Reference Number */ int ctype; /* Call type (see PRI_TRANS_CAP_* */ int layer1; /* User layer 1 */ int complete; /* Have we seen "Complete" i.e. no more number? */ q931_call *call; /* Opaque call pointer */ char callingsubaddr[256]; /* Calling parties subaddress */ int progress; int progressmask; char origcalledname[256]; char origcallednum[256]; int callingplanorigcalled; /* Dialing plan of Originally Called Number */ int origredirectingreason;} pri_event_ring;typedef struct pri_event_hangup { int e; int channel; /* Channel requested */ int cause; int cref; q931_call *call; /* Opaque call pointer */ long aoc_units; /* Advise of Charge number of charged units */ char useruserinfo[260]; /* User->User info */} pri_event_hangup; typedef struct pri_event_restart_ack { int e; int channel;} pri_event_restart_ack;#define PRI_PROGRESS_CAUSEtypedef struct pri_event_proceeding { int e; int channel; int cref; int progress; int progressmask; int cause; q931_call *call;} pri_event_proceeding; typedef struct pri_event_setup_ack { int e; int channel; q931_call *call;} pri_event_setup_ack;typedef struct pri_event_notify { int e; int channel; int info;} pri_event_notify;typedef struct pri_event_keypad_digit { int e; int channel; q931_call *call; char digits[64];} pri_event_keypad_digit;typedef union { int e; pri_event_generic gen; /* Generic view */ pri_event_restart restart; /* Restart view */ pri_event_error err; /* Error view */ pri_event_facname facname; /* Caller*ID Name on Facility */ pri_event_ring ring; /* Ring */ pri_event_hangup hangup; /* Hang up */ pri_event_ringing ringing; /* Ringing */ pri_event_answer answer; /* Answer */ pri_event_restart_ack restartack; /* Restart Acknowledge */ pri_event_proceeding proceeding; /* Call proceeding & Progress */ pri_event_setup_ack setup_ack; /* SETUP_ACKNOWLEDGE structure */ pri_event_notify notify; /* Notification */ pri_event_keypad_digit digit; /* Digits that come during a call */} pri_event;struct pri;struct pri_sr;#define PRI_IO_FUNCS/* Type declaration for callbacks to read or write a HDLC frame as below */typedef int (*pri_io_cb)(struct pri *pri, void *buf, int buflen);/* Create a D-channel on a given file descriptor. The file descriptor must be a channel operating in HDLC mode with FCS computed by the fd's driver. Also it must be NON-BLOCKING! Frames received on the fd should include FCS. Nodetype must be one of PRI_NETWORK or PRI_CPE. switchtype should be PRI_SWITCH_* */struct pri *pri_new(int fd, int nodetype, int switchtype);struct pri *pri_new_bri(int fd, int ptpmode, int nodetype, int switchtype);/* Create D-channel just as above with user defined I/O callbacks and data */struct pri *pri_new_cb(int fd, int nodetype, int switchtype, pri_io_cb io_read, pri_io_cb io_write, void *userdata);/* Retrieve the user data associated with the D channel */void *pri_get_userdata(struct pri *pri);/* Set the user data associated with the D channel */void pri_set_userdata(struct pri *pri, void *userdata);/* Set Network Specific Facility for PRI */void pri_set_nsf(struct pri *pri, int nsf);/* Set debug parameters on PRI -- see above debug definitions */void pri_set_debug(struct pri *pri, int debug);/* Get debug parameters on PRI -- see above debug definitions */int pri_get_debug(struct pri *pri);#define PRI_FACILITY_ENABLE/* Enable transmission support of Facility IEs on the pri */void pri_facility_enable(struct pri *pri);/* Run PRI on the given D-channel, taking care of any events that need to be handled. If block is set, it will block until an event occurs which needs to be handled */pri_event *pri_dchannel_run(struct pri *pri, int block);/* Check for an outstanding event on the PRI */pri_event *pri_check_event(struct pri *pri);/* Give a name to a given event ID */char *pri_event2str(int id);/* Give a name to a node type */char *pri_node2str(int id);/* Give a name to a switch type */char *pri_switch2str(int id);/* Print an event */void pri_dump_event(struct pri *pri, pri_event *e);/* Turn presentation into a string */char *pri_pres2str(int pres);/* Turn numbering plan into a string */char *pri_plan2str(int plan);/* Turn cause into a string */char *pri_cause2str(int cause);/* Acknowledge a call and place it on the given channel. Set info to non-zero if there is in-band data available on the channel */int pri_acknowledge(struct pri *pri, q931_call *call, int channel, int info);/* Send a digit in overlap mode */int pri_information(struct pri *pri, q931_call *call, char digit);#define PRI_KEYPAD_FACILITY_TX/* Send a keypad facility string of digits */int pri_keypad_facility(struct pri *pri, q931_call *call, char *digits);/* Answer the incomplete(call without called number) call on the given channel. Set non-isdn to non-zero if you are not connecting to ISDN equipment */int pri_need_more_info(struct pri *pri, q931_call *call, int channel, int nonisdn);/* Answer the call on the given channel (ignored if you called acknowledge already). Set non-isdn to non-zero if you are not connecting to ISDN equipment */int pri_answer(struct pri *pri, q931_call *call, int channel, int nonisdn);/* Set CRV reference for GR-303 calls */#undef pri_release#undef pri_disconnect/* backwards compatibility for those who don't use asterisk with libpri */#define pri_release(a,b,c) \ pri_hangup(a,b,c)#define pri_disconnect(a,b,c) \ pri_hangup(a,b,c)/* Hangup a call */#define PRI_HANGUPint pri_hangup(struct pri *pri, q931_call *call, int cause);#define PRI_DESTROYCALLvoid pri_destroycall(struct pri *pri, q931_call *call);#define PRI_RESTARTint pri_restart(struct pri *pri);int pri_reset(struct pri *pri, int channel);/* Create a new call */q931_call *pri_new_call(struct pri *pri);/* Retrieve CRV reference for GR-303 calls. Returns >0 on success. */int pri_get_crv(struct pri *pri, q931_call *call, int *callmode);/* Retrieve CRV reference for GR-303 calls. CRV must be >0, call mode should be 0 */int pri_set_crv(struct pri *pri, q931_call *call, int crv, int callmode);/* How long until you need to poll for a new event */struct timeval *pri_schedule_next(struct pri *pri);/* Run any pending schedule events */extern pri_event *pri_schedule_run(struct pri *pri);extern pri_event *pri_schedule_run_tv(struct pri *pri, const struct timeval *now);int pri_call(struct pri *pri, q931_call *c, int transmode, int channel, int exclusive, int nonisdn, char *caller, int callerplan, char *callername, int callerpres, char *called,int calledplan, int ulayer1);struct pri_sr *pri_sr_new(void);void pri_sr_free(struct pri_sr *sr);int pri_sr_set_channel(struct pri_sr *sr, int channel, int exclusive, int nonisdn);int pri_sr_set_bearer(struct pri_sr *sr, int transmode, int userl1);int pri_sr_set_called(struct pri_sr *sr, char *called, int calledplan, int complete);int pri_sr_set_caller(struct pri_sr *sr, char *caller, char *callername, int callerplan, int callerpres);int pri_sr_set_redirecting(struct pri_sr *sr, char *num, int plan, int pres, int reason);#define PRI_USER_USER_TX/* Set the user user field. Warning! don't send binary data accross this field */void pri_sr_set_useruser(struct pri_sr *sr, const char *userchars);void pri_call_set_useruser(q931_call *sr, const char *userchars);int pri_setup(struct pri *pri, q931_call *call, struct pri_sr *req);/* Set a call has a call indpendent signalling connection (i.e. no bchan) */int pri_sr_set_connection_call_independent(struct pri_sr *req);/* Send an MWI indication to a remote location. If activate is non zero, activates, if zero, decativates */int pri_mwi_activate(struct pri *pri, q931_call *c, char *caller, int callerplan, char *callername, int callerpres, char *called, int calledplan);/* Send an MWI deactivate request to a remote location */int pri_mwi_deactivate(struct pri *pri, q931_call *c, char *caller, int callerplan, char *callername, int callerpres, char *called, int calledplan);#define PRI_2BCT/* Attempt to pass the channels back to the NET side if compatable and * suscribed. Sometimes called 2 bchannel transfer (2BCT) */int pri_channel_bridge(q931_call *call1, q931_call *call2);/* Override message and error stuff */#define PRI_NEW_SET_APIvoid pri_set_message(void (*__pri_error)(struct pri *pri, char *));void pri_set_error(void (*__pri_error)(struct pri *pri, char *));/* Set overlap mode */#define PRI_SET_OVERLAPDIALvoid pri_set_overlapdial(struct pri *pri,int state);/* QSIG logical channel mapping option, do not skip channel 16 */#define PRI_SET_CHAN_MAPPING_LOGICALvoid pri_set_chan_mapping_logical(struct pri *pri, int state);#define PRI_DUMP_INFO_STRchar *pri_dump_info_str(struct pri *pri);/* Get file descriptor */int pri_fd(struct pri *pri);#define PRI_PROGRESS/* Send progress */int pri_progress(struct pri *pri, q931_call *c, int channel, int info);/* Send progress with cause IE */int pri_progress_with_cause(struct pri *pri, q931_call *c, int channel, int info, int cause);#define PRI_PROCEEDING_FULL/* Send call proceeding */int pri_proceeding(struct pri *pri, q931_call *c, int channel, int info);/* Enable inband progress when a DISCONNECT is received */void pri_set_inbanddisconnect(struct pri *pri, unsigned int enable);/* Enslave a PRI to another, so they share the same call list (and maybe some timers) */void pri_enslave(struct pri *master, struct pri *slave);#define PRI_GR303_SUPPORT#define PRI_ENSLAVE_SUPPORT#define PRI_SETUP_CALL#define PRI_RECEIVE_SUBADDR#define PRI_REDIRECTING_REASON#define PRI_AOC_UNITS#define PRI_ANI/* Send notification */int pri_notify(struct pri *pri, q931_call *c, int channel, int info);int pri_callrerouting_facility(struct pri *pri, q931_call *call, const char *dest, const char* original, const char* reason);/* Get/Set PRI Timers */#define PRI_GETSET_TIMERSint pri_set_timer(struct pri *pri, int timer, int value);int pri_get_timer(struct pri *pri, int timer);int pri_timer2idx(char *timer);#define PRI_MAX_TIMERS 32#define PRI_TIMER_N200 0 /* Maximum numer of q921 retransmissions */#define PRI_TIMER_N201 1 /* Maximum numer of octets in an information field */#define PRI_TIMER_N202 2 /* Maximum numer of transmissions of the TEI identity request message */#define PRI_TIMER_K 3 /* Maximum number of outstanding I-frames */#define PRI_TIMER_T200 4 /* time between SABME's */#define PRI_TIMER_T201 5 /* minimum time between retransmissions of the TEI Identity check messages */#define PRI_TIMER_T202 6 /* minimum time between transmission of TEI Identity request messages */#define PRI_TIMER_T203 7 /* maxiumum time without exchanging packets */#define PRI_TIMER_T300 8 #define PRI_TIMER_T301 9 /* maximum time to respond to an ALERT */#define PRI_TIMER_T302 10#define PRI_TIMER_T303 11 /* maximum time to wait after sending a SETUP without a response */#define PRI_TIMER_T304 12#define PRI_TIMER_T305 13#define PRI_TIMER_T306 14#define PRI_TIMER_T307 15#define PRI_TIMER_T308 16#define PRI_TIMER_T309 17#define PRI_TIMER_T310 18 /* maximum time between receiving a CALLPROCEEDING and receiving a ALERT/CONNECT/DISCONNECT/PROGRESS */#define PRI_TIMER_T313 19#define PRI_TIMER_T314 20#define PRI_TIMER_T316 21 /* maximum time between transmitting a RESTART and receiving a RESTART ACK */#define PRI_TIMER_T317 22#define PRI_TIMER_T318 23#define PRI_TIMER_T319 24#define PRI_TIMER_T320 25#define PRI_TIMER_T321 26#define PRI_TIMER_T322 27#define PRI_TIMER_TM20 28 /* maximum time avaiting XID response */#define PRI_TIMER_NM20 29 /* number of XID retransmits *//* Get PRI version */const char *pri_get_version(void);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -