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

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

?? rvmegacotermdigitmap.c

?? h.248協(xié)議源碼
?? C
字號:
/******************************************************************************
Filename   : rvmegacotermdigitmap.c
Description: Structures and functions to save digitmap information
******************************************************************************
                Copyright (c) 1999 RADVision Inc.
************************************************************************
NOTICE:
This document contains information that is proprietary to RADVision LTD.
No part of this publication may be reproduced in any form whatsoever 
without written prior approval by RADVision LTD..

RADVision LTD. reserves the right to revise this publication and make 
changes without obligation to notify any person of such revisions or 
changes.
******************************************************************************
$Revision:$
$Date:1.9.01$
$Author: D.Elbert$
******************************************************************************/
#include "rvalloc.h"
#include "rvstring.h"
#include "rvwildcard.h"
#include "rvmap.h"
#include "rvmutex.h"

#include "rvmegacoobjects.h"
#include "rvmdm.h"
#include "rvmegacotermmgr.h"
#include "rvmegacoterm.h"
#include "rvmegacoerrors.h"
#include "rvmegacotermevent.h"

#define flipCurrentTimer(x)	 ((x)->digitMapCurTimer=((x)->digitMapCurTimer+1)%2)


#define RvMegacoDigitMapConstructCopy		rvMegacoDigitMapConstructCopy
#define RvMegacoDigitMapDestruct		    rvMegacoDigitMapDestruct

rvDefineMap(RvIString,RvMegacoDigitMap)

void rvMegacoDigitMapDBConstruct(RvMegacoDigitMapDB* db,RvAlloc* alloc) {
	rvMapConstruct(RvIString,RvMegacoDigitMap)(&db->maps,alloc);
	rvMutexConstruct(&db->mutex);
}

void rvMegacoDigitMapDBDestruct(RvMegacoDigitMapDB* db) {
	rvMapDestruct(&db->maps);
	rvMutexDestruct(&db->mutex);
}

void rvMegacoDigitMapDBCopy(RvMegacoDigitMapDB* dest,const RvMegacoDigitMapDB* src) {
	rvMapCopy(&dest->maps,&src->maps);		
}

static RvMegacoDigitMap* findLocalDigitMap(RvMegacoDigitMapDB* db,const RvString* id) {
	return (RvMegacoDigitMap*)rvMapGetValue(RvIString,RvMegacoDigitMap)(&db->maps,id);	
}

/* Get a local digitmap */
static const RvMegacoDigitMap* getLocalDigitMap(RvMegacoDigitMapDB* db,const RvString* id) {
	RvMegacoDigitMap* map;
	rvMutexLock(&db->mutex);
	map = findLocalDigitMap(db,id);
	rvMutexUnlock(&db->mutex);
	return map;
}

/* Will define or overwrite a local digitmap */
static void setLocalDigitMap(RvMegacoDigitMapDB* db,const RvString* id,const RvMegacoDigitMap* newMap) {
	RvMegacoDigitMap* map;
	rvMutexLock(&db->mutex);
	map = findLocalDigitMap(db,id);
	if(map==NULL) {
		rvMapSetValue(RvIString,RvMegacoDigitMap)(&db->maps,id,newMap);
	}
	else {
		rvMegacoDigitMapCopy(map,newMap);
	}
	rvMutexUnlock(&db->mutex);
	return;
}

static void deleteLocalDigitMap(RvMegacoDigitMapDB* db,const RvString* id) {
	rvMutexLock(&db->mutex);
	rvMapRemove(RvIString,RvMegacoDigitMap)(&db->maps,id);
	rvMutexUnlock(&db->mutex);
	return;
}

/* Look for the digtmap,first in the termination and then in the root termination */
RvBool setCurrentDigitMap(RvMegacoTerm* x,const RvString* id) {
	const RvMegacoDigitMap* map = getLocalDigitMap(&x->storedDigitMaps,id);
	if(map==NULL) {
		RvMegacoTerm* rootTerm = rvMegacoTermMgrGetRootTermination(x->context->termMgr);	
		map = getLocalDigitMap(&rootTerm->storedDigitMaps,id);
	}
	if(map!=NULL) {
		rvMegacoDigitMapCopy(&x->digitMap,map);
		return rvTrue;
	}
	return rvFalse;
}



/* Process the digitmap descriptor */
void rvMegacoTermProcessDigitMap(RvMegacoTerm * x,const RvMegacoDigitMapDescriptor * digitMapDescr,RvMegacoCommandReply * commReply) {
	RvBool isNameSet,isDigitMapSet;
	const RvMegacoDigitMap* map;

	if(!rvMegacoDigitMapDescriptorIsSet(digitMapDescr))
		return ; /* Nothing to process */

	isNameSet = (strlen(rvMegacoDigitMapDescriptorGetName(digitMapDescr))!=0);
	map = rvMegacoDigitMapDescriptorGetDigitMap(digitMapDescr);
	isDigitMapSet = rvMegacoDigitMapGetSize(map);

	/* Both set: define or redefine a digitmap */
	if(isNameSet && isDigitMapSet) 
		setLocalDigitMap(&x->storedDigitMaps,&digitMapDescr->name,map);

	/* Only name set: find and install map */
	else if(isNameSet) {
		deleteLocalDigitMap(&x->storedDigitMaps,&digitMapDescr->name);
	}

	return;
}

/* Timers */
static void digitMapTimerProcess(RvTimer* t, void* term) {
	RvMegacoTerm * x = (RvMegacoTerm *)term;

	/* Verify that is the correct timer,otherwise 
	   ignore */
	rvMutexLock(&x->mutex);
	if( rvTimerGetId(t) == rvTimerGetId(&x->digitMapTimer[x->digitMapCurTimer]) ) {
		rvMegacoTermDigitMapTimerProcess(x);
	}
	rvMutexUnlock(&x->mutex);
}

static void digitMapTimerStop(RvMegacoTerm* x) {
	rvMutexLock(&x->mutex);
	rvTimerStop(&x->digitMapTimer[x->digitMapCurTimer]);
	flipCurrentTimer(x);
	rvMutexUnlock(&x->mutex);
}

void rvMegacoTermDigitMapTimerRestart(RvMegacoTerm* x,RvMilliseconds time) {
	rvMutexLock(&x->mutex);
	rvTimerStop(&x->digitMapTimer[x->digitMapCurTimer]);
	flipCurrentTimer(x);
	rvTimerReset(&x->digitMapTimer[x->digitMapCurTimer],time);
	rvMutexUnlock(&x->mutex);
}

static void digitMapTimerStart(RvMegacoTerm* x,RvMilliseconds time) {
	rvMutexLock(&x->mutex);
	rvTimerReset(&x->digitMapTimer[x->digitMapCurTimer],time);
	rvMutexUnlock(&x->mutex);
}

void rvMegacoTermDigitMapTimerConstruct(RvMegacoTerm* x) {
	x->digitMapCurTimer = 0;
	rvTimerConstruct(&x->digitMapTimer[0],0,digitMapTimerProcess,x);
	rvTimerConstruct(&x->digitMapTimer[1],0,digitMapTimerProcess,x);
}

void rvMegacoTermDigitMapTimerDestruct(RvMegacoTerm* x) {
	rvTimerDestruct(&x->digitMapTimer[0]);
	rvTimerDestruct(&x->digitMapTimer[1]);
}

void rvMegacoTermDeactivateDigitMap(RvMegacoTerm * x) {
	/* Shouldn't usually be true,check for sanity*/
	if( x->digitMapActive == rvTrue) {
		digitMapTimerStop(x);
		x->digitMapActive = rvFalse;
	}
}

static void activateDigitMap(RvMegacoTerm * x) {
	int time = rvMegacoDigitMapGetStartTimeout(&x->digitMap)*1000;
	digitMapTimerStart(x,time);
	/* Set the flag */
	x->digitMapActive = rvTrue;
}

/* Install an active digitMap */
RvBool rvMegacoTermProcessDigitMapParameter(RvMegacoTerm * x,const RvMegacoRequestedEvent* reqEvent,
											RvMegacoCommandReply * commReply) {
	RvBool isNameSet,isDigitMapSet;
	const RvMegacoDigitMap* map;
	const RvMegacoDigitMapDescriptor * digitMapDescr;
	const RvMegacoPackageItem* name;
	RvMdmError error;

	rvMdmErrorConstruct_(&error);

	digitMapDescr = rvMegacoRequestedEventGetEmbDigitMap(reqEvent);
	name = rvMegacoRequestedEventGetName(reqEvent);

	if(!rvMegacoDigitMapDescriptorIsSet(digitMapDescr))
		return rvTrue; /* Nothing to process */

	rvMegacoTermDeactivateDigitMap(x);

	/* Initialize DigitMap state variables */
	rvStringResize(&x->dialString,0);
	/* If first timer expires with no digits, match is partial */
	x->digitMapStat = RV_MEGACODIGITMAP_PARTIALMATCH;
	x->digitMapMedia = NULL;
	x->digitMapReqEvent = reqEvent;

	/* Set the digitMap information */
	x->digitMapEC = rvMdmTermMgrGetDigitMapPkgInfo_(x->context->termMgr->mdmTermMgr,
													rvMegacoPackageItemGetPackage(name));
	if(x->digitMapEC==NULL) {
		rvMegacoTermSendErrorMsg(x,&error,RV_MEGACOERROR_NO_DIGITMAP,
									 "Media Gateway does not have a digit map",commReply);
		return rvFalse;
	}

	isNameSet = (strlen(rvMegacoDigitMapDescriptorGetName(digitMapDescr))!=0);
	map = rvMegacoDigitMapDescriptorGetDigitMap(digitMapDescr);
	isDigitMapSet = rvMegacoDigitMapGetSize(map);

	/* Assume that name and map are not both set. First try map, then name */
	if( isDigitMapSet ) {
		rvMegacoDigitMapCopy(&x->digitMap,rvMegacoDigitMapDescriptorGetDigitMap(digitMapDescr));		
	}

	/* Only name set: find and install map */
	else if(isNameSet) {
		if( !setCurrentDigitMap(x,&digitMapDescr->name) ) {
			rvMegacoTermSendErrorMsg(x,&error,RV_MEGACOERROR_NO_DIGITMAP,
									 "Media Gateway does not have a digit map",commReply);
			return rvFalse;
		}
	}

	activateDigitMap(x);

	return rvTrue;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色精品在线视频| 亚洲男同1069视频| 中文字幕中文字幕一区| 爽好久久久欧美精品| 成人av免费网站| 精品噜噜噜噜久久久久久久久试看| 一区二区在线看| 不卡免费追剧大全电视剧网站| 91麻豆精品久久久久蜜臀| 亚洲免费观看高清在线观看| 国产成人精品免费| 精品久久久久久最新网址| 日本不卡一二三区黄网| 欧美三级一区二区| 一区二区三区在线视频观看| 波多野结衣在线一区| 国产丝袜美腿一区二区三区| 蜜桃视频第一区免费观看| 欧美日韩视频不卡| 亚洲影院在线观看| 91激情五月电影| 亚洲人妖av一区二区| 成人av在线一区二区三区| 国产视频不卡一区| 国产成人精品免费视频网站| 国产欧美精品在线观看| 国产成人免费av在线| 中文字幕精品—区二区四季| 国产成人av电影免费在线观看| 精品国产乱码久久久久久图片| 激情欧美一区二区三区在线观看| 欧美va在线播放| 国产原创一区二区| 国产亚洲欧美日韩日本| 国产河南妇女毛片精品久久久 | 亚洲同性同志一二三专区| 国产乱码精品一区二区三区av | 欧美一区三区二区| 三级久久三级久久久| 7777精品伊人久久久大香线蕉经典版下载 | 国产成人精品综合在线观看| 国产嫩草影院久久久久| a美女胸又www黄视频久久| 亚洲欧美一区二区三区极速播放 | 欧美精品一区二区三区视频| 国产一区二区主播在线| 国产日本欧洲亚洲| av一区二区三区黑人| 一区二区三区中文字幕精品精品 | 99国产欧美久久久精品| 亚洲欧美日韩国产另类专区| 欧美色图第一页| 久88久久88久久久| 国产精品嫩草影院av蜜臀| 色成年激情久久综合| 日韩综合小视频| 精品免费日韩av| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲欧美经典视频| 欧美另类变人与禽xxxxx| 国产在线精品一区在线观看麻豆| 国产精品视频一二三| 在线观看日韩电影| 久久不见久久见免费视频1| 国产日产亚洲精品系列| 欧美日韩综合色| 国产精品911| 亚洲国产精品久久不卡毛片| www日韩大片| 欧美亚洲动漫精品| 国产福利精品一区| 水蜜桃久久夜色精品一区的特点| 国产日韩一级二级三级| 欧美丝袜第三区| 国产盗摄视频一区二区三区| 亚洲国产精品一区二区www| 久久久久久久综合狠狠综合| 欧美网站大全在线观看| 成人高清免费在线播放| 免费成人av资源网| 亚洲色图欧洲色图| 国产亚洲短视频| 欧美一区二区私人影院日本| 99re8在线精品视频免费播放| 裸体歌舞表演一区二区| 亚洲影院在线观看| 亚洲欧美色综合| 国产蜜臀97一区二区三区| 日韩欧美在线1卡| 欧美日韩综合不卡| 91久久精品一区二区三| 成人精品高清在线| 精品制服美女久久| 免费人成精品欧美精品 | 亚洲精品亚洲人成人网在线播放| 日韩精品专区在线影院观看| 欧美日韩一区二区三区不卡| 一本大道综合伊人精品热热| 成人免费视频视频在线观看免费 | 一本久道中文字幕精品亚洲嫩| 国产成人免费在线视频| 精品午夜久久福利影院| 日日欢夜夜爽一区| 五月天精品一区二区三区| 亚洲乱码国产乱码精品精的特点| 国产精品久久久久久妇女6080| 国产日产欧美一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 欧美白人最猛性xxxxx69交| 欧美老年两性高潮| 欧美人妖巨大在线| 欧美日本在线一区| 91精品麻豆日日躁夜夜躁| 欧美日本视频在线| 欧美一区国产二区| 日韩欧美成人激情| 久久人人爽人人爽| 国产女主播在线一区二区| 国产女人18毛片水真多成人如厕| 国产调教视频一区| 亚洲欧美在线观看| 亚洲精品高清在线观看| 亚洲第一搞黄网站| 青青草成人在线观看| 国产在线播放一区二区三区| 国产成人亚洲综合a∨猫咪| youjizz久久| 色哟哟欧美精品| 欧美一三区三区四区免费在线看| 日韩欧美123| 国产精品无码永久免费888| 一区二区三区色| 日本sm残虐另类| 国产91综合一区在线观看| 99v久久综合狠狠综合久久| 日本韩国精品一区二区在线观看| 欧美三级视频在线| 亚洲精品一区二区三区在线观看| 久久综合国产精品| 亚洲另类在线一区| 久久精品国产99久久6| 成人av先锋影音| 欧美精品一二三四| 久久精品亚洲国产奇米99| 亚洲激情av在线| 国内精品久久久久影院一蜜桃| aaa亚洲精品| 日韩一区二区三区电影 | 99久久亚洲一区二区三区青草| 91福利精品视频| 久久久精品日韩欧美| 亚洲欧美日韩综合aⅴ视频| 蜜桃久久久久久| 在线国产亚洲欧美| 久久女同精品一区二区| 亚洲电影一区二区| 国产成人精品一区二| 欧美一区2区视频在线观看| 国产精品伦理在线| 久久99精品一区二区三区| 色中色一区二区| 久久亚洲二区三区| 亚洲风情在线资源站| 国产成人aaa| 精品国产1区2区3区| 亚洲成人精品一区二区| 99r精品视频| 国产亚洲成aⅴ人片在线观看| 日韩精品欧美精品| 91视频一区二区三区| 久久色在线观看| 日本最新不卡在线| 欧美视频完全免费看| 国产精品第13页| 丰满白嫩尤物一区二区| 精品免费一区二区三区| 日韩av在线播放中文字幕| 欧美午夜电影网| 亚洲精品videosex极品| 97se亚洲国产综合自在线观| 国产视频一区不卡| 国产麻豆成人精品| 日韩三级视频在线观看| 爽爽淫人综合网网站| 欧美日韩高清影院| 亚洲另类在线一区| 色狠狠一区二区三区香蕉| 中文字幕亚洲电影| 99久久精品情趣| 国产精品久久久久久久久快鸭| 国产成人在线视频网址| 国产网红主播福利一区二区| 国产一区高清在线| 国产日韩欧美精品综合| 国产成人av电影在线观看| 中文字幕乱码久久午夜不卡 | 国产在线不卡一卡二卡三卡四卡| 欧美一卡二卡在线观看| 日本美女一区二区| 精品乱码亚洲一区二区不卡|