⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pri.c

📁 Q.931/Q.921 source code compiles
💻 C
📖 第 1 页 / 共 2 页
字号:
int pri_acknowledge(struct pri *pri, q931_call *call, int channel, int info){	if (!pri || !call)		return -1;	return q931_alerting(pri, call, channel, info);}int pri_proceeding(struct pri *pri, q931_call *call, int channel, int info){	if (!pri || !call)		return -1;	return q931_call_proceeding(pri, call, channel, info);}int pri_progress_with_cause(struct pri *pri, q931_call *call, int channel, int info, int cause){	if (!pri || !call)		return -1;	return q931_call_progress_with_cause(pri, call, channel, info, cause);}int pri_progress(struct pri *pri, q931_call *call, int channel, int info){	if (!pri || !call)		return -1;	return q931_call_progress(pri, call, channel, info);}int pri_information(struct pri *pri, q931_call *call, char digit){	if (!pri || !call)		return -1;	return q931_information(pri, call, digit);}int pri_keypad_facility(struct pri *pri, q931_call *call, char *digits){	if (!pri || !call || !digits || !digits[0])		return -1;	return q931_keypad_facility(pri, call, digits);}int pri_callrerouting_facility(struct pri *pri, q931_call *call, const char *dest, const char* original, const char* reason){	if (!pri || !call)		return -1;	return qsig_cf_callrerouting(pri, call, dest, original, reason);}int pri_notify(struct pri *pri, q931_call *call, int channel, int info){	if (!pri || !call)		return -1;	return q931_notify(pri, call, channel, info);}void pri_destroycall(struct pri *pri, q931_call *call){	if (pri && call)		__q931_destroycall(pri, call);	return;}int pri_need_more_info(struct pri *pri, q931_call *call, int channel, int nonisdn){	if (!pri || !call)		return -1;	return q931_setup_ack(pri, call, channel, nonisdn);}int pri_answer(struct pri *pri, q931_call *call, int channel, int nonisdn){	if (!pri || !call)		return -1;	return q931_connect(pri, call, channel, nonisdn);}#if 0/* deprecated routines, use pri_hangup */int pri_release(struct pri *pri, q931_call *call, int cause){	if (!pri || !call)		return -1;	return q931_release(pri, call, cause);}int pri_disconnect(struct pri *pri, q931_call *call, int cause){	if (!pri || !call)		return -1;	return q931_disconnect(pri, call, cause);}#endifint pri_channel_bridge(q931_call *call1, q931_call *call2){	if (!call1 || !call2)		return -1;	/* Make sure we have compatible switchtypes */	if (call1->pri->switchtype != call2->pri->switchtype)		return -1;	/* Check for bearer capability */	if (call1->transcapability != call2->transcapability)		return -1;	/* Check to see if we're on the same PRI */	if (call1->pri != call2->pri)		return -1;		switch (call1->pri->switchtype) {		case PRI_SWITCH_NI2:		case PRI_SWITCH_LUCENT5E:		case PRI_SWITCH_ATT4ESS:			if (eect_initiate_transfer(call1->pri, call1, call2))				return -1;			else				return 0;			break;		case PRI_SWITCH_DMS100:			if (rlt_initiate_transfer(call1->pri, call1, call2))				return -1;			else				return 0;			break;		case PRI_SWITCH_QSIG:			call1->bridged_call = call2;			call2->bridged_call = call1;			if (anfpr_initiate_transfer(call1->pri, call1, call2))				return -1;			else				return 0;			break;		default:			return -1;	}}int pri_hangup(struct pri *pri, q931_call *call, int cause){	if (!pri || !call)		return -1;	if (cause == -1)		/* normal clear cause */		cause = 16;	return q931_hangup(pri, call, cause);}int pri_reset(struct pri *pri, int channel){	if (!pri)		return -1;	return q931_restart(pri, channel);}q931_call *pri_new_call(struct pri *pri){	if (!pri)		return NULL;	return q931_new_call(pri);}void pri_dump_event(struct pri *pri, pri_event *e){	if (!pri || !e)		return;	pri_message(pri, "Event type: %s (%d)\n", pri_event2str(e->gen.e), e->gen.e);	switch(e->gen.e) {	case PRI_EVENT_DCHAN_UP:	case PRI_EVENT_DCHAN_DOWN:		break;	case PRI_EVENT_CONFIG_ERR:		pri_message(pri, "Error: %s", e->err.err);		break;	case PRI_EVENT_RESTART:		pri_message(pri, "Restart on channel %d\n", e->restart.channel);	case PRI_EVENT_RING:		pri_message(pri, "Calling number: %s (%s, %s)\n", e->ring.callingnum, pri_plan2str(e->ring.callingplan), pri_pres2str(e->ring.callingpres));		pri_message(pri, "Called number: %s (%s)\n", e->ring.callednum, pri_plan2str(e->ring.calledplan));		pri_message(pri, "Channel: %d (%s) Reference number: %d\n", e->ring.channel, e->ring.flexible ? "Flexible" : "Not Flexible", e->ring.cref);		break;	case PRI_EVENT_HANGUP:		pri_message(pri, "Hangup, reference number: %d, reason: %s\n", e->hangup.cref, pri_cause2str(e->hangup.cause));		break;	default:		pri_message(pri, "Don't know how to dump events of type %d\n", e->gen.e);	}}static void pri_sr_init(struct pri_sr *req){	memset(req, 0, sizeof(struct pri_sr));	}int pri_sr_set_connection_call_independent(struct pri_sr *req){	if (!req)		return -1;	req->justsignalling = 1; /* have to set justsignalling for all those pesky IEs we need to setup */	return 0;}/* Don't call any other pri functions on this */int pri_mwi_activate(struct pri *pri, q931_call *c, char *caller, int callerplan, char *callername, int callerpres, char *called,					int calledplan){	struct pri_sr req;	if (!pri || !c)		return -1;	pri_sr_init(&req);	pri_sr_set_connection_call_independent(&req);	req.caller = caller;	req.callerplan = callerplan;	req.callername = callername;	req.callerpres = callerpres;	req.called = called;	req.calledplan = calledplan;	if (mwi_message_send(pri, c, &req, 1) < 0) {		pri_message(pri, "Unable to send MWI activate message\n");		return -1;	}	/* Do more stuff when we figure out that the CISC stuff works */	return q931_setup(pri, c, &req);}int pri_mwi_deactivate(struct pri *pri, q931_call *c, char *caller, int callerplan, char *callername, int callerpres, char *called,					int calledplan){	struct pri_sr req;	if (!pri || !c)		return -1;	pri_sr_init(&req);	pri_sr_set_connection_call_independent(&req);	req.caller = caller;	req.callerplan = callerplan;	req.callername = callername;	req.callerpres = callerpres;	req.called = called;	req.calledplan = calledplan;	if(mwi_message_send(pri, c, &req, 0) < 0) {		pri_message(pri, "Unable to send MWI deactivate message\n");		return -1;	}	return q931_setup(pri, c, &req);}	int pri_setup(struct pri *pri, q931_call *c, struct pri_sr *req){	if (!pri || !c)		return -1;	return q931_setup(pri, c, req);}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 req;	if (!pri || !c)		return -1;	pri_sr_init(&req);	req.transmode = transmode;	req.channel = channel;	req.exclusive = exclusive;	req.nonisdn =  nonisdn;	req.caller = caller;	req.callerplan = callerplan;	req.callername = callername;	req.callerpres = callerpres;	req.called = called;	req.calledplan = calledplan;	req.userl1 = ulayer1;	return q931_setup(pri, c, &req);}	static void (*__pri_error)(struct pri *pri, char *stuff);static void (*__pri_message)(struct pri *pri, char *stuff);void pri_set_message(void (*func)(struct pri *pri, char *stuff)){	__pri_message = func;}void pri_set_error(void (*func)(struct pri *pri, char *stuff)){	__pri_error = func;}void pri_message(struct pri *pri, char *fmt, ...){	char tmp[1024];	va_list ap;	va_start(ap, fmt);	vsnprintf(tmp, sizeof(tmp), fmt, ap);	va_end(ap);	if (__pri_message)		__pri_message(pri, tmp);	else		fputs(tmp, stdout);}void pri_error(struct pri *pri, char *fmt, ...){	char tmp[1024];	va_list ap;	va_start(ap, fmt);	vsnprintf(tmp, sizeof(tmp), fmt, ap);	va_end(ap);	if (__pri_error)		__pri_error(pri, tmp);	else		fputs(tmp, stderr);}/* Set overlap mode */void pri_set_overlapdial(struct pri *pri,int state){	pri->overlapdial = state;}void pri_set_chan_mapping_logical(struct pri *pri, int state){	if (pri->switchtype == PRI_SWITCH_QSIG)		pri->chan_mapping_logical = state;}void pri_set_inbanddisconnect(struct pri *pri, unsigned int enable){	pri->acceptinbanddisconnect = (enable != 0);}int pri_fd(struct pri *pri){	return pri->fd;}char *pri_dump_info_str(struct pri *pri){	char buf[4096];	int len = 0;#ifdef LIBPRI_COUNTERS	struct q921_frame *f;	int q921outstanding = 0;#endif	if (!pri)		return NULL;	/* Might be nice to format these a little better */	len += sprintf(buf + len, "Switchtype: %s\n", pri_switch2str(pri->switchtype));	len += sprintf(buf + len, "Type: %s\n", pri_node2str(pri->localtype));#ifdef LIBPRI_COUNTERS	/* Remember that Q921 Counters include Q931 packets (and any retransmissions) */	len += sprintf(buf + len, "Q931 RX: %d\n", pri->q931_rxcount);	len += sprintf(buf + len, "Q931 TX: %d\n", pri->q931_txcount);	len += sprintf(buf + len, "Q921 RX: %d\n", pri->q921_rxcount);	len += sprintf(buf + len, "Q921 TX: %d\n", pri->q921_txcount);	f = pri->txqueue;	while (f) {		q921outstanding++;		f = f->next;	}	len += sprintf(buf + len, "Q921 Outstanding: %d\n", q921outstanding);#endif	len += sprintf(buf + len, "Window Length: %d/%d\n", pri->windowlen, pri->window);	len += sprintf(buf + len, "Sentrej: %d\n", pri->sentrej);	len += sprintf(buf + len, "SolicitFbit: %d\n", pri->solicitfbit);	len += sprintf(buf + len, "Retrans: %d\n", pri->retrans);	len += sprintf(buf + len, "Busy: %d\n", pri->busy);	len += sprintf(buf + len, "Overlap Dial: %d\n", pri->overlapdial);	len += sprintf(buf + len, "Logical Channel Mapping: %d\n", pri->chan_mapping_logical);	len += sprintf(buf + len, "T200 Timer: %d\n", pri->timers[PRI_TIMER_T200]);	len += sprintf(buf + len, "T203 Timer: %d\n", pri->timers[PRI_TIMER_T203]);	len += sprintf(buf + len, "T305 Timer: %d\n", pri->timers[PRI_TIMER_T305]);	len += sprintf(buf + len, "T308 Timer: %d\n", pri->timers[PRI_TIMER_T308]);	len += sprintf(buf + len, "T309 Timer: %d\n", pri->timers[PRI_TIMER_T309]);	len += sprintf(buf + len, "T313 Timer: %d\n", pri->timers[PRI_TIMER_T313]);	len += sprintf(buf + len, "N200 Counter: %d\n", pri->timers[PRI_TIMER_N200]);	return strdup(buf);}int pri_get_crv(struct pri *pri, q931_call *call, int *callmode){	return q931_call_getcrv(pri, call, callmode);}int pri_set_crv(struct pri *pri, q931_call *call, int crv, int callmode){	return q931_call_setcrv(pri, call, crv, callmode);}void pri_enslave(struct pri *master, struct pri *slave){	if (master && slave)		slave->callpool = &master->localpool;}struct pri_sr *pri_sr_new(void){	struct pri_sr *req;	req = malloc(sizeof(*req));	if (req) 		pri_sr_init(req);	return req;}void pri_sr_free(struct pri_sr *sr){	free(sr);}int pri_sr_set_channel(struct pri_sr *sr, int channel, int exclusive, int nonisdn){	sr->channel = channel;	sr->exclusive = exclusive;	sr->nonisdn = nonisdn;	return 0;}int pri_sr_set_bearer(struct pri_sr *sr, int transmode, int userl1){	sr->transmode = transmode;	sr->userl1 = userl1;	return 0;}int pri_sr_set_called(struct pri_sr *sr, char *called, int calledplan, int numcomplete){	sr->called = called;	sr->calledplan = calledplan;	sr->numcomplete = numcomplete;	return 0;}int pri_sr_set_caller(struct pri_sr *sr, char *caller, char *callername, int callerplan, int callerpres){	sr->caller = caller;	sr->callername = callername;	sr->callerplan = callerplan;	sr->callerpres = callerpres;	return 0;}int pri_sr_set_redirecting(struct pri_sr *sr, char *num, int plan, int pres, int reason){	sr->redirectingnum = num;	sr->redirectingplan = plan;	sr->redirectingpres = pres;	sr->redirectingreason = reason;	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -