2009-02-07 23:14:25 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2009, Anthony Minessale II
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
*
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
*
|
|
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
*
|
|
|
|
* * Neither the name of the original author; nor the names of any contributors
|
|
|
|
* may be used to endorse or promote products derived from this software
|
|
|
|
* without specific prior written permission.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
|
|
|
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _LPWRAP_PRI_H
|
|
|
|
#define _LPWRAP_PRI_H
|
|
|
|
#include <libpri.h>
|
|
|
|
#include <openzap.h>
|
|
|
|
|
|
|
|
|
|
|
|
#define LPWRAP_MAX_CHAN_PER_SPAN 32
|
|
|
|
|
|
|
|
typedef enum {
|
2009-06-04 17:20:53 +00:00
|
|
|
LPWRAP_PRI_EVENT_ANY = 0,
|
|
|
|
LPWRAP_PRI_EVENT_DCHAN_UP = PRI_EVENT_DCHAN_UP,
|
|
|
|
LPWRAP_PRI_EVENT_DCHAN_DOWN = PRI_EVENT_DCHAN_DOWN,
|
|
|
|
LPWRAP_PRI_EVENT_RESTART = PRI_EVENT_RESTART,
|
|
|
|
LPWRAP_PRI_EVENT_CONFIG_ERR = PRI_EVENT_CONFIG_ERR,
|
|
|
|
LPWRAP_PRI_EVENT_RING = PRI_EVENT_RING,
|
|
|
|
LPWRAP_PRI_EVENT_HANGUP = PRI_EVENT_HANGUP,
|
|
|
|
LPWRAP_PRI_EVENT_RINGING = PRI_EVENT_RINGING,
|
|
|
|
LPWRAP_PRI_EVENT_ANSWER = PRI_EVENT_ANSWER,
|
|
|
|
LPWRAP_PRI_EVENT_HANGUP_ACK = PRI_EVENT_HANGUP_ACK,
|
|
|
|
LPWRAP_PRI_EVENT_RESTART_ACK = PRI_EVENT_RESTART_ACK,
|
|
|
|
LPWRAP_PRI_EVENT_FACNAME = PRI_EVENT_FACNAME,
|
2009-02-07 23:14:25 +00:00
|
|
|
LPWRAP_PRI_EVENT_INFO_RECEIVED = PRI_EVENT_INFO_RECEIVED,
|
2009-06-04 17:20:53 +00:00
|
|
|
LPWRAP_PRI_EVENT_PROCEEDING = PRI_EVENT_PROCEEDING,
|
|
|
|
LPWRAP_PRI_EVENT_SETUP_ACK = PRI_EVENT_SETUP_ACK,
|
|
|
|
LPWRAP_PRI_EVENT_HANGUP_REQ = PRI_EVENT_HANGUP_REQ,
|
|
|
|
LPWRAP_PRI_EVENT_NOTIFY = PRI_EVENT_NOTIFY,
|
|
|
|
LPWRAP_PRI_EVENT_PROGRESS = PRI_EVENT_PROGRESS,
|
|
|
|
LPWRAP_PRI_EVENT_KEYPAD_DIGIT = PRI_EVENT_KEYPAD_DIGIT,
|
|
|
|
LPWRAP_PRI_EVENT_IO_FAIL = 19,
|
|
|
|
|
|
|
|
/* don't touch */
|
|
|
|
LPWRAP_PRI_EVENT_MAX
|
2009-02-07 23:14:25 +00:00
|
|
|
} lpwrap_pri_event_t;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
LPWRAP_PRI_NETWORK = PRI_NETWORK,
|
|
|
|
LPWRAP_PRI_CPE = PRI_CPE
|
|
|
|
} lpwrap_pri_node_t;
|
|
|
|
|
|
|
|
typedef enum {
|
2009-06-04 17:20:53 +00:00
|
|
|
LPWRAP_PRI_SWITCH_UNKNOWN = PRI_SWITCH_UNKNOWN,
|
|
|
|
LPWRAP_PRI_SWITCH_NI2 = PRI_SWITCH_NI2,
|
|
|
|
LPWRAP_PRI_SWITCH_DMS100 = PRI_SWITCH_DMS100,
|
|
|
|
LPWRAP_PRI_SWITCH_LUCENT5E = PRI_SWITCH_LUCENT5E,
|
|
|
|
LPWRAP_PRI_SWITCH_ATT4ESS = PRI_SWITCH_ATT4ESS,
|
2009-02-07 23:14:25 +00:00
|
|
|
LPWRAP_PRI_SWITCH_EUROISDN_E1 = PRI_SWITCH_EUROISDN_E1,
|
|
|
|
LPWRAP_PRI_SWITCH_EUROISDN_T1 = PRI_SWITCH_EUROISDN_T1,
|
2009-06-04 17:20:53 +00:00
|
|
|
LPWRAP_PRI_SWITCH_NI1 = PRI_SWITCH_NI1,
|
|
|
|
LPWRAP_PRI_SWITCH_GR303_EOC = PRI_SWITCH_GR303_EOC,
|
|
|
|
LPWRAP_PRI_SWITCH_GR303_TMC = PRI_SWITCH_GR303_TMC,
|
|
|
|
LPWRAP_PRI_SWITCH_QSIG = PRI_SWITCH_QSIG,
|
|
|
|
|
|
|
|
/* don't touch */
|
|
|
|
LPWRAP_PRI_SWITCH_MAX
|
2009-02-07 23:14:25 +00:00
|
|
|
} lpwrap_pri_switch_t;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
LPWRAP_PRI_READY = (1 << 0)
|
|
|
|
} lpwrap_pri_flag_t;
|
|
|
|
|
|
|
|
struct lpwrap_pri;
|
|
|
|
typedef int (*event_handler)(struct lpwrap_pri *, lpwrap_pri_event_t, pri_event *);
|
|
|
|
typedef int (*loop_handler)(struct lpwrap_pri *);
|
|
|
|
|
|
|
|
struct lpwrap_pri {
|
|
|
|
struct pri *pri;
|
2009-03-10 20:56:38 +00:00
|
|
|
zap_span_t *span;
|
|
|
|
zap_channel_t *dchan;
|
2009-02-07 23:14:25 +00:00
|
|
|
unsigned int flags;
|
|
|
|
void *private_info;
|
2009-06-04 17:20:53 +00:00
|
|
|
event_handler eventmap[LPWRAP_PRI_EVENT_MAX];
|
2009-02-07 23:14:25 +00:00
|
|
|
loop_handler on_loop;
|
2009-07-27 23:48:52 +00:00
|
|
|
int errs;
|
2009-02-07 23:14:25 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct lpwrap_pri lpwrap_pri_t;
|
|
|
|
|
|
|
|
struct lpwrap_pri_event_list {
|
|
|
|
int event_id;
|
|
|
|
int pri_event;
|
|
|
|
const char *name;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define LPWRAP_MAP_PRI_EVENT(spri, event, func) spri.eventmap[event] = func;
|
|
|
|
|
|
|
|
const char *lpwrap_pri_event_str(lpwrap_pri_event_t event_id);
|
|
|
|
int lpwrap_one_loop(struct lpwrap_pri *spri);
|
2009-03-10 20:56:38 +00:00
|
|
|
int lpwrap_init_pri(struct lpwrap_pri *spri, zap_span_t *span, zap_channel_t *dchan, int swtype, int node, int debug);
|
2009-02-07 23:14:25 +00:00
|
|
|
int lpwrap_run_pri(struct lpwrap_pri *spri);
|
|
|
|
|
|
|
|
#endif
|