亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gc_basic_call_model.c

?? dialogic 板卡globalcall 測(cè)試代碼
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
					}
					break;

				case GCEV_OFFERED:
					process_offered_event(metaeventp, pline);
					break;
	
				default:
					unexpected_event = 1;
					break;
			}
			break;
			/* end of case GCST_NULL */
		}

		case GCST_OFFERED:
		{
			if (evttype == GCEV_ACCEPT) {
				pline->call_state = GCST_ACCEPTED;
				/* Note: if both answercall and acceptcall use 0 rings  */
				/* then the outbound side may not get an alerting event */
				/* this behavior is technology/protocol dependent		  */
				if (gc_AnswerCall(pline->crn, 0, EV_ASYNC) != GC_SUCCESS) {
					sprintf(str, "gc_AnswerCall(crn=0x%lx, # of rings=0, mode=EV_ASYNC) Failed", pline->crn);
					printandlog(index, GC_APIERR, NULL, str);
					exitdemo(1);
				}
				sprintf(str, "gc_AnswerCall(crn=0x%lx, mode=EV_ASYNC) Success", pline->crn);
				printandlog(index, GC_APICALL, NULL, str);
			} else {
				unexpected_event = 1;
			}
			break;
		}

		case GCST_ACCEPTED:
		{
			if (evttype == GCEV_ANSWERED) {
				/* Do nothing but change the state to connected. The call will be cleared from
				outbound side. Just wait for Disconnect */
				/* Your application specific code will go here */
				pline->call_state = GCST_CONNECTED;

				/* Increment the total calls on this device */
				pline->numb_calls++;
				/* Increment the total inbound calls on all devices */
				in_calls++;
				inbound_application(pline);			/* YOUR APPLICATION CODE IS CALLED HERE */
			} else {
				unexpected_event = 1;
			}
			break;
		}

		case GCST_CONNECTED:
		{
			/*************************************************/
			/* Depending upon your application, you may or	 */
			/* may not have application specific event		 */
			/* handling here for when in the connected state */
			/* You could also have your app specific code	 */
			/* in process_event()									 */
			/*************************************************/
			unexpected_event = 1;						/* recall that GCEV_DISCONNECTED is handled elsewhere */
			break;
		}

		/*************************************/
		/* now come the call teardown states */
		/*************************************/
		case GCST_DISCONNECTED:
		{
			if (evttype == GCEV_DROPCALL) {
				pline->dropcall_active = NO;

				/* Call ReleaseCall */
				pline->call_state = GCST_IDLE;

				if (gc_ReleaseCallEx(pline->crn, EV_ASYNC) != GC_SUCCESS) {
					sprintf(str, "gc_ReleaseCallEx(crn=0x%lx, EV_ASYNC) Failed", pline->crn);
					printandlog(index, GC_APIERR, NULL, str);
					exitdemo(1);
				}
				sprintf(str, "gc_ReleaseCallEx(crn=0x%lx, EV_ASYNC) Success", pline->crn);
				printandlog(index, GC_APICALL, NULL, str);
				fflush(stdout);
			} else {
				unexpected_event = 1;
			}
			break;
		}

		case GCST_IDLE:
		{
			if (evttype == GCEV_RELEASECALL) {
				pline->call_state = GCST_NULL;
			} else {
				unexpected_event = 1;
			}
			break;
		}

		default:
		{
			/* Should never get here */
			printandlog(index, MISC, NULL, "Invalid state in process_inbound_event()"); 
			printandlog(index, STATE, NULL, " ");
			break;
		}
	}

	if (unexpected_event && (evttype != GCEV_UNBLOCKED)) {
		printandlog(index, GC_RESULT_INFO, metaeventp, "Event was unexpected in the current state");
		printandlog(index, STATE, NULL, " ");
	}
}

/****************************************************************
*			NAME: process_offered_event(struct channel *pline)
* DESCRIPTION: Function to process an offered event while in the NULL state
*		 INPUTS: pline - pointer to entry in port table
*		RETURNS: NA
*	  CAUTIONS: Assumes event logging already done
****************************************************************/
static void process_offered_event(METAEVENT *metaeventp, struct channel *pline)
{
	char		dnis[GC_ADDRSIZE];
	char		ani[GC_ADDRSIZE];
	char		_name[AN_MAXCALLIDNAME];
	char		str[MAX_STRING_SIZE];

	/* Save the CRN in port[index] and call Acceptcall */
	pline->call_state = GCST_OFFERED;
	pline->crn = metaeventp->crn;

	/* show some technology specific functionality */
	/* get DNIS, ANI if not ANALOG */
	if (pline->techtype != ANALOG) {
		/* first, get called party number */
		if (gc_GetDNIS(pline->crn, dnis) == GC_SUCCESS) {
			sprintf(str, "gc_GetDNIS(crn=0x%lx) Success - dnis = %s", pline->crn, dnis);
		} else {
			sprintf(str, "gc_GetDNIS(crn=0x%lx) Failure - dnis not available ", pline->crn);
		}
		printandlog(pline->index, GC_APICALL, NULL, str);
		/* do application specific dnis event processing here */
		/* For simplicity's sake, max DDI logic is not shown here */

		/* next get the ANI here */
		if (gc_GetANI(pline->crn, ani) == GC_SUCCESS) {
			sprintf(str, "gc_GetANI(crn=0x%lx) Success - ANI = %s", pline->crn, ani);
		} else {
			sprintf(str, "gc_GetANI(crn=0x%lx) Failure - ANI not available", pline->crn);
		}
		printandlog(pline->index, GC_APICALL, NULL, str);
	} else {
		/* ANI, call info if Analog */
		if (gc_GetANI(pline->crn, ani) == GC_SUCCESS) {
			/* get ANI */		
			sprintf(str, "gc_GetANI(crn=0x%lx) Success - ANI = %s", pline->crn, ani);
		} else {
			sprintf(str, "gc_GetANI(crn=0x%lx) Failure - ANI not available", pline->crn);
		}
		printandlog(pline->index, GC_APICALL, NULL, str);

		/* get the call info */
		if (gc_GetCallInfo(pline->crn, CALLNAME, caller_name) == GC_SUCCESS) {
			sprintf(str, "gc_GetCallInfo(crn=0x%lx, CALLNAME) Success, name = %s",
			pline->crn, caller_name);
		} else {
			sprintf(str, "gc_GetCallInfo(crn=0x%lx, CALLNAME) Failure, name not available",
					pline->crn);
		}
		printandlog(pline->index, GC_APICALL, NULL, str);
	}

	/* Note: if # of rings is == 0 then the outbound side */
	/* may not get the alerting event, depending upon the protocol */ 
	/* if the number of rings is 1, there is an occasional problem in */
	/* in the outbound side's ability to recognize the tone */
	if (gc_AcceptCall(pline->crn, 3, EV_ASYNC) != GC_SUCCESS) {
		sprintf(str, "gc_AcceptCall(crn=0x%lx, # of rings=3, mode=EV_ASYNC) Failed", pline->crn);
		printandlog(pline->index, GC_APIERR, NULL, str);
		exitdemo(1);
	}
	sprintf(str, "gc_AcceptCall(crn=0x%lx, mode=EV_ASYNC) Success", pline->crn);
	printandlog(pline->index, GC_APICALL, NULL, str);
}

/****************************************************************
*			NAME: process_outbound_event(struct channel *pline, METAEVENT *metaeventp)
* DESCRIPTION: Function to process outbound GlobalCall event
*		 INPUTS: pline - pointer to entry in port table
*					metaeventp - pointer to the metaevent structure
*		RETURNS: NA
*	  CAUTIONS: Tightly coupled with process_event() for pre-processing
*					Assumes event logging already done
*					Disconnected event already handled
****************************************************************/
static void process_outbound_event(struct channel *pline, METAEVENT *metaeventp)
{
	int		evttype, index, call_state;
	int		unexpected_event = 0;					/* till proven otherwise */
	char		str[MAX_STRING_SIZE];

	evttype = metaeventp->evttype;
	index = pline->index;
	call_state = pline->call_state;

	switch (call_state)
	{
		/************************************/
		/* first come the call setup states */
		/************************************/
		case GCST_NULL:
		{
			switch (evttype)
			{
				case GCEV_ALERTING:						/* just change the state to alerting - no other action is necessary */
					pline->call_state = GCST_ALERTING;
					break;

				case GCEV_RESETLINEDEV:
				case GCEV_UNBLOCKED:
					/* Make another call if possible */
					gc_demo_makecall(index); 
					break;

				/* This case can happen in some technologies/protocols if the inbound side */
				/* answered the call without ringing (i.e. if acceptcall was issued, */
				/* then the rings parameter in both acceptcall and anwercall was 0 */
				/* if only answercall was issued, then the # of rings was 0 */
				/* The internal GC call state should be Dialing, but the dialing event */
				/* is disabled by default and we did not enable it */
				case GCEV_CONNECTED:
					process_connected_event(pline);
					break;

				default:
					unexpected_event = 1;
					break;
			}
			break;
		}

		case GCST_ALERTING:
		{
			if (evttype == GCEV_CONNECTED) {
				process_connected_event(pline);
			} else {
				unexpected_event = 1;
			}
			break;
		}

		/*************************************/
		/* now come the call teardown states */
		/*************************************/
		case GCST_CONNECTED:
		{
			/*************************************************/
			/* Depending upon your application, you may or	 */
			/* may not have application specific event		 */
			/* handling here for when in the connected state */
			/* You could also have your app specific code	 */
			/* in process_event()									 */
			/*************************************************/
			if (evttype != GCEV_DROPCALL) {			/* recall the outbound side issues a gc_DropCall() */
				unexpected_event = 1;					/* for the purposes of this demo */
				break;
			}
			/* FALL THROUGH ON PURPOSE since this is one of the 2 ways of reaching Idle */
			/* the other being a disconnected event */
		}

		case GCST_DISCONNECTED:
		{
			if (evttype == GCEV_DROPCALL) {
				pline->dropcall_active = NO;

				/* Call ReleaseCall */
				pline->call_state = GCST_IDLE;

				if (gc_ReleaseCallEx(pline->crn, EV_ASYNC) != GC_SUCCESS) {
					sprintf(str, "gc_ReleaseCallEx(crn=0x%lx, EV_ASYNC) Failed", pline->crn);
					printandlog(index, GC_APIERR, NULL, str);
					exitdemo(1);
				}
				sprintf(str, "gc_ReleaseCallEx(crn=0x%lx, EV_ASYNC) Success", pline->crn);
				printandlog(index, GC_APICALL, NULL, str);
				fflush(stdout);
				break;
			} else {
				unexpected_event = 1;
			}
			break;
		}

		case GCST_IDLE:
		{
			if (evttype == GCEV_RELEASECALL) {
				pline->call_state = GCST_NULL;
				pline->makecall_active = NO;					/* makecall is no longer active */
				gc_demo_makecall(index); 
			} else {
				unexpected_event = 1;
			}
			break;
		}

		default:
		{
			/* Should never get here */
			printandlog(index, MISC, NULL, "Invalid state in process_outbound_event()"); 
			break;
		}
	}

	if (unexpected_event && (evttype != GCEV_UNBLOCKED)) {
		printandlog(index, GC_RESULT_INFO, metaeventp, "Event was unexpected in the current state");
		printandlog(index, EVENT, NULL, GCEV_MSG(evttype));
		printandlog(index, STATE, NULL, " ");
	}
}

/****************************************************************
*			NAME: process_connected_event(struct channel *pline)
* DESCRIPTION: Function to process a connected event
*		 INPUTS: pline - pointer to entry in port table
*		RETURNS: NA
*	  CAUTIONS: Assumes event logging already done
*					Recall that this is only done for the outbound side
*					as the GCEV_CONNECTED event is an outbound side event only
****************************************************************/
static void process_connected_event(struct channel *pline)
{
	char		str[MAX_STRING_SIZE];
	char		value;										/* for connect type */
	int		rc;

	/* print connect type */
	rc = gc_GetCallInfo(pline->crn, CONNECT_TYPE, &value);
	if (rc != GC_SUCCESS) {
		if (rc == EGC_UNSUPPORTED) {
			strcpy(str, "call connected - gc_GetCallInfo(CONNECT_TYPE) not supported");
		} else {
			strcpy(str, "call connected - gc_GetCallInfo(CONNECT_TYPE) error\n");
			sprintf(str, "gc_GetCallInfo(crn=0x%lx, CONNECT_TYPE, &value) failed", pline->crn);
			printandlog(pline->index, GC_APIERR, NULL, str);
		}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
wwwwxxxxx欧美| 亚洲免费观看在线观看| 色综合久久久久综合体| 日本不卡一区二区三区| 毛片一区二区三区| 中文字幕一区二区三区蜜月| 欧美一区在线视频| 一本色道久久综合精品竹菊| 国产精品一线二线三线精华| 亚洲国产乱码最新视频 | 精品精品国产高清一毛片一天堂| 成人av网站在线观看免费| 免费成人美女在线观看.| 亚洲欧美乱综合| 国产在线播放一区三区四| 亚洲综合免费观看高清完整版在线| 久久色视频免费观看| 欧美久久久久中文字幕| 91原创在线视频| 国产精品1区二区.| 久久av资源网| 日韩不卡在线观看日韩不卡视频| 亚洲欧美日韩国产成人精品影院| 久久精品在这里| 精品久久久久香蕉网| 在线成人免费观看| 欧美性色欧美a在线播放| 97久久超碰国产精品| 成人午夜在线免费| 国产在线精品免费av| 男人的天堂亚洲一区| 午夜国产精品影院在线观看| 一区二区三区四区高清精品免费观看| 日本一区二区三区四区| 精品成人在线观看| 日韩欧美国产一区二区三区| 欧美久久高跟鞋激| 欧美视频三区在线播放| 欧美中文字幕久久| 欧美专区亚洲专区| 欧美影院精品一区| 在线观看国产精品网站| 97精品国产露脸对白| 91视频免费看| 91黄色免费版| 欧美中文字幕一区二区三区亚洲| 波多野结衣中文字幕一区二区三区| 国产精品自在在线| 国产不卡免费视频| 成人av资源下载| www.亚洲人| 97久久超碰国产精品| 在线精品视频免费观看| 欧美日韩一区精品| 666欧美在线视频| 欧美电影免费观看高清完整版在线 | 日韩一区二区影院| 欧美一区二区成人| 欧美日韩极品在线观看一区| 在线电影院国产精品| 欧美日本一道本| 7878成人国产在线观看| 欧美刺激脚交jootjob| 26uuu亚洲| 国产三级精品视频| 国产精品久久久一区麻豆最新章节| 国产精品另类一区| 日韩理论电影院| 一区二区视频免费在线观看| 一区二区日韩电影| 天天亚洲美女在线视频| 国产一区二区0| 国产成人精品三级| 91丨九色porny丨蝌蚪| 欧美老女人第四色| 久久久久国产一区二区三区四区| 中文字幕一区二区在线观看| 一区二区三区欧美在线观看| 蜜臀a∨国产成人精品| 国产成人精品综合在线观看| 99re免费视频精品全部| 欧美日韩高清在线播放| 久久一区二区视频| 亚洲欧美韩国综合色| 免费日韩伦理电影| gogo大胆日本视频一区| 欧日韩精品视频| 精品国产百合女同互慰| 亚洲人成7777| 国产一区二区电影| 91久久一区二区| 精品国精品国产尤物美女| 亚洲欧美成aⅴ人在线观看| 免费在线一区观看| 成人动漫一区二区| 91精品国产aⅴ一区二区| 欧美极品另类videosde| 日韩激情视频在线观看| 丁香婷婷综合五月| 911精品产国品一二三产区| 日本一区二区三区免费乱视频| 一区二区三区不卡视频在线观看 | 成人av在线播放网址| 欧美一区二区视频在线观看2020 | 成人a级免费电影| 精品国产一区久久| 午夜私人影院久久久久| 成人av在线电影| 精品国产一二三区| 香蕉影视欧美成人| 97久久久精品综合88久久| 2023国产精品| 日本视频在线一区| 色婷婷久久久久swag精品| 国产欧美一区二区三区沐欲| 美国十次综合导航| 欧美精品粉嫩高潮一区二区| 一区二区三区在线观看欧美| 成人av网站大全| 久久国产尿小便嘘嘘| 欧美色男人天堂| 亚洲色图视频免费播放| 成人涩涩免费视频| 国产嫩草影院久久久久| 韩国精品在线观看| 精品久久久久久最新网址| 日本女人一区二区三区| 欧美视频一区二区在线观看| 亚洲精品ww久久久久久p站 | 欧美在线观看禁18| 中文字幕日韩精品一区| 不卡电影一区二区三区| 国产精品久久久久久久久搜平片 | 99在线热播精品免费| 国产婷婷色一区二区三区四区| 国产一区二区三区免费看 | 日韩精品一区二区三区视频在线观看| 午夜一区二区三区视频| 欧美美女喷水视频| 日韩av一级电影| 91精品国产综合久久精品图片| 午夜免费欧美电影| 欧美日韩国产综合久久| 日韩电影免费在线看| 9191国产精品| 狠狠色丁香婷婷综合| 国产喂奶挤奶一区二区三区 | 欧美精品视频www在线观看| 亚洲一区二区三区四区在线 | 精品视频123区在线观看| 一区二区三区蜜桃网| 欧美色偷偷大香| 五月激情六月综合| 欧美精品一区二区高清在线观看| 国产在线不卡视频| 国产精品美日韩| 日本高清免费不卡视频| 亚洲va在线va天堂| 精品国产电影一区二区| 国产麻豆精品视频| 国产精品乱码一区二区三区软件| av在线不卡电影| 午夜精品久久久久久久久久 | 99国产一区二区三精品乱码| 亚洲精品成人精品456| 欧美一区二区三区系列电影| 国产乱子轮精品视频| 18成人在线观看| 777久久久精品| 国产福利一区二区三区| 伊人婷婷欧美激情| 精品久久人人做人人爱| 91在线国产观看| 日韩av中文字幕一区二区 | 一区二区三区美女| 日韩美女一区二区三区| www.欧美日韩| 蜜臀av一区二区在线观看| 1024国产精品| 日韩一区二区麻豆国产| 成人激情小说乱人伦| 日本成人中文字幕在线视频 | 久久国产三级精品| 亚洲欧美色图小说| 精品三级在线看| 色综合久久九月婷婷色综合| 久久99热这里只有精品| 亚洲视频在线一区观看| 精品国产一区二区亚洲人成毛片| 94色蜜桃网一区二区三区| 蜜臀av一区二区在线免费观看| 国产精品久久久久久久午夜片| 欧美一区二区大片| 日本高清不卡一区| 国产91在线观看| 欧美aa在线视频| 一区二区三区**美女毛片| 国产欧美精品一区| 日韩欧美激情四射| 欧美日韩mp4|