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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gc_basic_call_model.c

?? dialogic gcwithvoice
?? C
?? 第 1 頁 / 共 5 頁
字號:
{
	char		dnis[GC_ADDRSIZE];
	char		ani[GC_ADDRSIZE];
	char		caller_name[GC_ADDRSIZE];
	char		str[MAX_STRING_SIZE];
	int		callindex;

	/* Retrieve CRN */
	callindex = existCRN(metaeventp->crn, pline);
	if (callindex == OUT_OF_RANGE) {
		printandlog(pline->index, MISC, NULL, "metaeventp->crn unexpectedly not found for a GCEV_OFFERED event", 0);
		exitdemo(1);
	}

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

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

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

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

	/* 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->call[callindex].crn, 3, EV_ASYNC) != GC_SUCCESS) {
		sprintf(str, "gc_AcceptCall(crn=0x%lx, # of rings=3, mode=EV_ASYNC) Failed", pline->call[callindex].crn);
		printandlog(pline->index, GC_APIERR, NULL, str, 0);
		exitdemo(1);
	}
	sprintf(str, "gc_AcceptCall(crn=0x%lx, mode=EV_ASYNC) Success", pline->call[callindex].crn);
	printandlog(pline->index, GC_APICALL, NULL, str, 0);
			if ( dx_clrdigbuf( pline->chdev ) == -1 ) {
      }

}

/****************************************************************
*			NAME: process_call_related_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_call_related_outbound_event(struct channel *pline, METAEVENT *metaeventp)
{
	int		evttype, index;
	int		unexpected_event = 0;					/* till proven otherwise */
	char		str[MAX_STRING_SIZE];
	int		callindex;

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

	/* Retrieve CRN */
	callindex = existCRN(metaeventp->crn, pline);
	if (callindex == OUT_OF_RANGE) {
		/* CRN not found, so log error and return from function. */
		sprintf(str, "CRN not found");
		printandlog(pline->index, MISC_WITH_NL, NULL, str, 0);
		return;
	}

	switch (pline->call[callindex].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[callindex].call_state = GCST_ALERTING;
					break;

				case GCEV_PROCEEDING:					/* just change the state to proceeding - no other action is necessary */
					pline->call[callindex].call_state = GCST_PROCEEDING;
					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, metaeventp);
					break;

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

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

      case GCST_PROCEEDING:
      {
			switch (evttype)
			{
				case GCEV_ALERTING:						/* just change the state to alerting - no other action is necessary */
					pline->call[callindex].call_state = GCST_ALERTING;
					break;

				case GCEV_CONNECTED:
					process_connected_event(pline, metaeventp);
					break;

				default:
					unexpected_event = 1;
					break;
			}
			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->call[callindex].dropcall_active = NO;

				/* Call ReleaseCall */
				pline->call[callindex].call_state = GCST_IDLE;

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

		case GCST_IDLE:
		{
			if (evttype == GCEV_RELEASECALL) {
				pline->call[callindex].call_state = GCST_NULL;
				pline->call[callindex].crn = 0;
				pline->makecall_active = NO;					/* makecall is no longer active */
            if(pline->intercall_delay)  /* Set Inter-call Delay if specified */
            {
           		time(&pline->intercall_time);
 		         pline->intercall_time += pline->intercall_delay;
            }
				gc_demo_makecall(index); 
			} else {
				unexpected_event = 1;
			}
			break;
		}

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

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

/****************************************************************
*			NAME: process_connected_event(struct channel *pline, METAEVENT *metaeventp)
* 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, METAEVENT *metaeventp)
{
	char		str[MAX_STRING_SIZE];
	char		value;										/* for connect type */
	int		rc;
	int		callindex;

	/* Retrieve CRN */
	callindex = existCRN(metaeventp->crn, pline);
	if (callindex == OUT_OF_RANGE) {
		/* CRN not found, so log error and return from function. */
		sprintf(str, "CRN not found");
		printandlog(pline->index, MISC_WITH_NL, NULL, str, 0);
		return;
	}

	/* Obtain connect type reason if not H323 nor SIP */
	if ((pline->techtype != H323) && 
		(pline->techtype != SIP) && 
		(pline->techtype != SS7)){
		/* print connect type */
		rc = gc_GetCallInfo(pline->call[callindex].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->call[callindex].crn);
				printandlog(pline->index, GC_APIERR, NULL, str, 0);
			}
		} else {
			switch (value)
			{
				case GCCT_CAD :
					strcpy(str, "call connected - cadence break");
					break;

				case GCCT_LPC :
					strcpy(str, "call connected - loop current drop");
					break;

				case GCCT_PVD :
					strcpy(str, "call connected - voice detection");
					break;

				case GCCT_PAMD :
					strcpy(str, "call connected - answering machine");
					break;

				case GCCT_FAX :
					strcpy(str, "call connected - FAX machine");
					break;

				case GCCT_NA :
					strcpy(str, "call connected - call progress not applicable");
					break;
	
				default :
					strcpy(str, "call connected - unknown connect type");
					break;
			}
		}
		printandlog(pline->index, MISC, NULL, str, 0); 
	}

	pline->call[callindex].call_state = GCST_CONNECTED;
	pline->numb_calls++;							/* Increment the total calls on this device */
	out_calls++;									/* Increment the total outbound calls on all devices */
	outbound_application(pline);				/* call your application specific code here */
}

/****************************************************************
*			NAME: enable_alarm_notification(struct channel *pline)
* DESCRIPTION: Enables all alarms notification for pline
*					Also fills in pline->mediah
*		  INPUT: pline - pointer to channel data structure
*		RETURNS: None - exits if error
*	  CAUTIONS: Does not sanity checking as to whether or not the technology supports
*				   alarms - assumes caller has done that already
****************************************************************/
static void	enable_alarm_notification(struct channel *pline)
{
	char		str[MAX_STRING_SIZE];
	int		alarm_ldev;						/* linedevice that alarms come on */


	alarm_ldev = pline->ldev;				/* until proven otherwise */
	if (pline->techtype

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久蜜臀av麻豆| 国产乱人伦偷精品视频免下载 | 欧美一级片在线看| 国产91精品一区二区麻豆网站 | 国产喷白浆一区二区三区| 欧美影院一区二区| 国产91色综合久久免费分享| 蜜臀91精品一区二区三区| 亚洲美女偷拍久久| 欧美国产禁国产网站cc| 26uuu国产日韩综合| 911精品国产一区二区在线| 色综合久久中文字幕综合网| 成人午夜激情在线| 国产在线播放一区| 免费欧美在线视频| 五月激情综合网| 亚洲一区二区精品久久av| 国产精品久久一级| 国产精品午夜春色av| 久久久久久亚洲综合| 欧美精品一区二区三区四区 | 亚洲黄色av一区| 国产精品免费观看视频| 国产欧美在线观看一区| 久久久国产午夜精品| 精品久久久久久久久久久久久久久 | 欧美国产激情二区三区| 精品不卡在线视频| 日韩免费福利电影在线观看| 日韩免费视频一区| 精品国产百合女同互慰| 精品国产人成亚洲区| 精品国产乱码久久久久久牛牛 | 国产成人午夜高潮毛片| 国产一区二区福利视频| 国产呦萝稀缺另类资源| 国产一区二区在线观看免费| 精品一区二区三区视频| 久久99国产精品免费网站| 久久国产生活片100| 国内久久精品视频| 国产精品系列在线观看| 成人在线视频首页| 99精品久久免费看蜜臀剧情介绍| 91香蕉视频mp4| 日本伦理一区二区| 欧美日韩成人综合在线一区二区| 欧美日韩成人激情| 日韩欧美美女一区二区三区| 精品日本一线二线三线不卡| 久久久蜜臀国产一区二区| 欧美激情一区二区在线| 亚洲欧美另类小说视频| 亚洲福利视频三区| 蜜桃91丨九色丨蝌蚪91桃色| 国产一区不卡视频| gogo大胆日本视频一区| 欧美日韩欧美一区二区| 日韩欧美激情四射| 国产三级精品视频| 亚洲欧美一区二区三区极速播放| 亚洲午夜一区二区| 久久99国产精品免费网站| 成人爱爱电影网址| 欧美丝袜丝交足nylons图片| 欧美一区国产二区| 国产精品丝袜一区| 亚洲一区二区三区中文字幕| 久久99这里只有精品| 成人毛片视频在线观看| 欧美午夜理伦三级在线观看| 日韩欧美中文一区二区| 国产精品久久久久久久裸模 | 99视频一区二区三区| 欧美区一区二区三区| 国产女人18毛片水真多成人如厕 | 91女人视频在线观看| 欧美日韩在线三区| 中文字幕va一区二区三区| 亚洲黄色尤物视频| 国产一区二区h| 欧美性大战久久久久久久| 日韩欧美一区二区免费| 亚洲欧洲日本在线| 日韩成人免费看| 成人国产精品免费| 欧美一区二区三区白人| 国产精品二三区| 奇米一区二区三区av| 99这里只有久久精品视频| 欧美精品在欧美一区二区少妇| 国产欧美久久久精品影院| 日本 国产 欧美色综合| 91在线看国产| 久久尤物电影视频在线观看| 性做久久久久久久免费看| 成人黄色一级视频| 亚洲精品一区二区三区蜜桃下载 | 这里只有精品电影| 亚洲视频资源在线| 精品在线播放午夜| 欧美性受xxxx黑人xyx性爽| 国产女人18水真多18精品一级做| 亚洲国产一区二区视频| 国产a视频精品免费观看| 欧美特级限制片免费在线观看| 国产精品乱人伦| 久久成人免费网| 欧美日韩一区三区| 中文字幕一区二| 国产一区二区精品久久| 欧美二区在线观看| 亚洲欧美电影一区二区| 丁香六月综合激情| 久久午夜电影网| 男女男精品视频网| 欧美三级在线看| 亚洲三级电影全部在线观看高清| 精品制服美女久久| 日韩精品在线一区| 男女激情视频一区| 91精品国产综合久久久久久久久久| 亚洲精品国产品国语在线app| 成人动漫一区二区| 国产精品盗摄一区二区三区| 国产福利一区二区三区视频在线| 精品福利av导航| 久久国产人妖系列| 欧美高清一级片在线| 午夜久久电影网| 欧美日韩久久一区二区| 午夜久久久久久电影| 9191精品国产综合久久久久久| 日韩精品一区第一页| 91精品午夜视频| 日本系列欧美系列| 欧美亚洲日本国产| 性久久久久久久| 欧美一区二区国产| 久热成人在线视频| 久久夜色精品国产欧美乱极品| 精品一区二区三区在线播放视频| 欧美本精品男人aⅴ天堂| 日韩av电影天堂| 精品国产自在久精品国产| 国模冰冰炮一区二区| 久久精品网站免费观看| 成人激情免费视频| 亚洲激情男女视频| 欧美一区二区视频在线观看2020 | 色综合久久中文综合久久97 | 夜夜操天天操亚洲| 51精品视频一区二区三区| 六月丁香婷婷久久| 欧美韩国日本不卡| 欧美亚洲国产一区在线观看网站| 亚洲18女电影在线观看| 欧美成人女星排行榜| 国产一区二区调教| 亚洲乱码国产乱码精品精98午夜| 欧美性感一类影片在线播放| 久久99精品久久久久久动态图| 亚洲男人天堂一区| 99在线精品免费| 一区二区三区在线免费视频| 欧美日韩精品一区二区三区蜜桃 | 国产精品久久久久久久久免费樱桃| 99在线精品观看| 日韩激情中文字幕| 精品不卡在线视频| 一本久道久久综合中文字幕| 日韩黄色免费电影| 国产欧美一区二区精品秋霞影院| 欧美综合欧美视频| 国产自产v一区二区三区c| 国产精品国产a| 欧美精品第1页| 成人精品国产一区二区4080| 图片区小说区国产精品视频| 久久久精品黄色| 欧美人与性动xxxx| 成人黄色在线视频| 天堂成人国产精品一区| 国产精品三级电影| 制服丝袜中文字幕亚洲| 成人高清免费观看| 麻豆精品国产91久久久久久| 日韩理论片在线| 久久午夜色播影院免费高清| 欧美色图一区二区三区| 成人综合婷婷国产精品久久蜜臀| 亚洲午夜激情网站| 国产精品免费久久| 久久综合狠狠综合久久综合88| 欧美午夜在线观看| 91啪亚洲精品| 国产成人精品亚洲777人妖 | 91女人视频在线观看| 国产一区二区福利|