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

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

?? destination.c

?? 性能優(yōu)秀的SIP Proxy
?? C
字號(hào):
/* * openser osp module.  * * This module enables openser to communicate with an Open Settlement  * Protocol (OSP) server.  The Open Settlement Protocol is an ETSI  * defined standard for Inter-Domain VoIP pricing, authorization * and usage exchange.  The technical specifications for OSP  * (ETSI TS 101 321 V4.1.1) are available at www.etsi.org. * * Uli Abend was the original contributor to this module. *  * Copyright (C) 2001-2005 Fhg Fokus * * This file is part of openser, a free SIP server. * * openser is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version * * openser is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "../../sr_module.h"#include "../../mem/mem.h"#include "../../usr_avp.h"#include "destination.h"#include "usage.h"#include <time.h>/* A list of destination URIs */str ORIG_OSPDESTS_LABEL = {"_orig_osp_dests_",16};str TERM_OSPDESTS_LABEL = {"_term_osp_dests_",16};static int saveDestination(osp_dest* dest, str* label);static osp_dest* getLastOrigDestination();static void recordCode(int code, osp_dest* dest);static int isTimeToReportUsage(int code);osp_dest* initDestination(osp_dest* dest) {	memset(dest,0,sizeof(osp_dest));	dest->sizeofcallid   =  sizeof(dest->callid);	dest->sizeoftoken    =  sizeof(dest->osptoken);	return dest;}int saveOrigDestination(osp_dest* dest) {	DBG("osp: Saving originating destination\n");	return saveDestination(dest,&ORIG_OSPDESTS_LABEL);}int saveTermDestination(osp_dest* dest) {	DBG("osp: Saving terminating destination\n");	return saveDestination(dest,&TERM_OSPDESTS_LABEL);}/** Save destination as an AVP *  name - label *  value - osp_dest wrapped in a string * *  Returns: 0 - success, -1 failure */static int saveDestination(osp_dest* dest, str* label) {	str wrapper;	int status = -1;	DBG("osp: Saving destination to avp\n");	wrapper.s   = (char *)dest;	wrapper.len = sizeof(osp_dest);	/* add_avp will make a private copy of both the name and value in shared memory.	 * memory will be released by TM at the end of the transaction	 */	if (add_avp(AVP_NAME_STR|AVP_VAL_STR,(int_str)*label,(int_str)wrapper) == 0) {		status = 0;		DBG("osp: Saved\n");	} else {		LOG(L_ERR, "ERROR: osp: Failed to add_avp destination\n");	}	return status;}/** Retrieved an unused orig destination from an AVP *  name - ORIG_OSPDESTS_LABEL *  value - osp_dest wrapped in a string *  There can be 0, 1 or more orig destinations.  Find the 1st unused destination (used==0), *  return it, and mark it as used (used==1). * *  Returns: NULL on failure */osp_dest* getNextOrigDestination() {	osp_dest*       retVal   = NULL;	osp_dest*       dest     = NULL;	struct usr_avp* dest_avp = NULL;	int_str         dest_val;	DBG("osp: Looking for the first unused orig destination\n");	for (	dest_avp=search_first_avp(AVP_NAME_STR|AVP_VAL_STR,(int_str)ORIG_OSPDESTS_LABEL,NULL,0);		dest_avp != NULL;		dest_avp=search_next_avp(dest_avp,NULL)) {		get_avp_val(dest_avp, &dest_val);		/* osp dest is wrapped in a string */		dest = (osp_dest *)dest_val.s.s;		if (dest->used == 0) {			DBG("osp: Found\n");			break;		} else {			DBG("osp: This destination has already been used\n");		}	}	if (dest != NULL && dest->used==0) {		dest->used = 1;		retVal = dest;	} else {		DBG("osp: There is no unused destinations\n");	}	return retVal;}/** Retrieved the last used orig destination from an AVP *  name - ORIG_OSPDESTS_LABEL *  value - osp_dest wrapped in a string *  There can be 0, 1 or more destinations.  Find the last used destination (used==1), *  and return it. * *  Returns: NULL on failure */osp_dest* getLastOrigDestination() {	osp_dest* dest = NULL;	osp_dest* last_dest = NULL;	struct usr_avp* dest_avp = NULL;	int_str   dest_val;	for (	dest_avp=search_first_avp(AVP_NAME_STR|AVP_VAL_STR,(int_str)ORIG_OSPDESTS_LABEL,NULL,0);		dest_avp != NULL;		dest_avp=search_next_avp(dest_avp,NULL)) {		get_avp_val(dest_avp, &dest_val);		/* osp dest is wrapped in a string */		dest = (osp_dest *)dest_val.s.s;		if (dest->used == 1) {			last_dest = dest;			DBG("osp: getLastOrigDestination: updating curent destination to '%s'\n",last_dest->destination);		} else {			break;		}	}	return last_dest;}/** Retrieved the term destination from an AVP *  name - TERM_OSPDESTS_LABEL *  value - osp_dest wrapped in a string *  There can be 0 or 1 term destinations.  Find and return it. * *  Returns: NULL on failure (no term destination) */osp_dest* getTermDestination() {	osp_dest* term_dest = NULL;	struct usr_avp* dest_avp = NULL;	int_str   dest_val;	dest_avp=search_first_avp(AVP_NAME_STR|AVP_VAL_STR,(int_str)TERM_OSPDESTS_LABEL,NULL,0);	if (dest_avp) {		get_avp_val(dest_avp, &dest_val);		/* osp dest is wrapped in a string */		term_dest = (osp_dest *)dest_val.s.s;	}	return term_dest;}void recordEvent(int client_code, int server_code) {	DBG("osp: recordEvent: client code %d / server code %d\n",client_code, server_code);	osp_dest* dest;	if (client_code!=0 && (dest=getLastOrigDestination())) {		recordCode(client_code,dest);		if (isTimeToReportUsage(server_code)==0) {			reportOrigCallSetUpUsage();		}	} 	if (server_code!=0 && (dest=getTermDestination())) {		recordCode(server_code,dest);		if (isTimeToReportUsage(server_code)==0) {			reportTermCallSetUpUsage();		}	}}static int isTimeToReportUsage(int code){	int isTime = -1;	if (code >= 200) {		isTime = 0;	}	return isTime;}void recordCode(int code, osp_dest* dest) {	DBG("osp: recordCode: recording code %d\n",code);	dest->last_code = code;	switch (code) {		case 100:			if (!dest->time_100) {				dest->time_100 = time(NULL);			} else {				DBG("osp: recordCode: 100 has already been recorded\n");			}			break;		case 180:		case 181:		case 182:		case 183:			if (!dest->time_180) {				dest->time_180 = time(NULL);			} else {				DBG("osp: recordCode: 180, 181, 182 or 183 has allready been recorded\n");			}			break;		case 200:		case 202:			if (!dest->time_200) {				dest->time_200 = time(NULL);			} else {				DBG("osp: recordCode: 200 or 202 has allready been recorded\n");			}			break;		default:			DBG("osp: recordCode: will not record time for this code\n");	}}void dumpDebugInfo() {	osp_dest*       dest     = NULL;	struct usr_avp* dest_avp = NULL;	int_str         dest_val;	int             i = 0;	DBG("osp: dumpDebugInfo: IN\n");	for (	dest_avp=search_first_avp(AVP_NAME_STR|AVP_VAL_STR,(int_str)ORIG_OSPDESTS_LABEL,NULL,0);		dest_avp != NULL;		dest_avp=search_next_avp(dest_avp,NULL)) {		get_avp_val(dest_avp, &dest_val);		/* osp dest is wrapped in a string */		dest = (osp_dest *)dest_val.s.s;		DBG("osp: dumpDebugInfo: .....orig index...'%d'\n", i);		dumbDestDebugInfo(dest);		i++;	}	if (i==0) {		DBG("osp: dumpDebugInfo: There is no orig OSPDESTS AVP\n");	}	dest_avp=search_first_avp(AVP_NAME_STR|AVP_VAL_STR,(int_str)TERM_OSPDESTS_LABEL,NULL,0);	if (dest_avp) {		get_avp_val(dest_avp, &dest_val);		/* osp dest is wrapped in a string */		dest = (osp_dest *)dest_val.s.s;		DBG("osp: dumpDebugInfo: .....destination......\n");		dumbDestDebugInfo(dest);	} else {		DBG("osp: dumpDebugInfo: There is no dest OSPDESTS AVP\n");	}	DBG("osp: dumpDebugInfo: OUT\n");}void dumbDestDebugInfo(osp_dest *dest) {	DBG("osp: dumpDebugInfo: dest->destination...'%s'\n", dest->destination);	DBG("osp: dumpDebugInfo: dest->used..........'%d'\n", dest->used);	DBG("osp: dumpDebugInfo: dest->last_code.....'%d'\n", dest->last_code);	DBG("osp: dumpDebugInfo: dest->time_100......'%d'\n", (unsigned int)dest->time_100);	DBG("osp: dumpDebugInfo: dest->time_180......'%d'\n", (unsigned int)dest->time_180);	DBG("osp: dumpDebugInfo: dest->time_200......'%d'\n", (unsigned int)dest->time_200);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品伊人久久久久av影院 | 中文字幕 久热精品 视频在线 | 日韩视频免费观看高清完整版在线观看| 日本女人一区二区三区| 国产精品大尺度| 精品久久久三级丝袜| 色婷婷综合久色| 欧美变态凌虐bdsm| 91浏览器在线视频| 国产成人激情av| 麻豆精品精品国产自在97香蕉| 亚洲视频一区二区在线观看| 久久综合九色综合欧美就去吻 | 国产iv一区二区三区| 日韩精品电影一区亚洲| 中文字幕亚洲精品在线观看| 精品国产髙清在线看国产毛片| 欧美在线免费播放| 色综合天天综合| 成人三级伦理片| 国产美女视频一区| 久久99久久99小草精品免视看| 亚洲成人一区二区在线观看| 亚洲天堂久久久久久久| 国产欧美一区二区在线观看| 精品少妇一区二区三区视频免付费 | 亚洲综合自拍偷拍| 国产精品久久久久久久久久久免费看| 精品国产制服丝袜高跟| 日韩欧美色电影| 欧美一级一区二区| 91精品国产一区二区三区蜜臀| 欧美日韩国产成人在线免费| 色中色一区二区| 91色九色蝌蚪| 色哟哟欧美精品| 色域天天综合网| 在线亚洲+欧美+日本专区| 99视频有精品| 9l国产精品久久久久麻豆| 99麻豆久久久国产精品免费| a级精品国产片在线观看| 国产成人av资源| 欧美疯狂做受xxxx富婆| 国产精品美女一区二区在线观看| 国内精品国产三级国产a久久| 日韩成人精品在线| 日韩av电影免费观看高清完整版| 亚洲一级电影视频| 香蕉影视欧美成人| 男男成人高潮片免费网站| 久久国产三级精品| 国产乱理伦片在线观看夜一区| 久久国产成人午夜av影院| 狠狠色狠狠色综合| 成人免费福利片| 91在线精品一区二区三区| 日本精品视频一区二区| 欧美高清视频在线高清观看mv色露露十八| 欧美日韩精品高清| 久久综合久色欧美综合狠狠| 国产欧美视频一区二区| 亚洲另类中文字| 天使萌一区二区三区免费观看| 日精品一区二区| 国产一区二区福利| 一本大道综合伊人精品热热| 911国产精品| 毛片一区二区三区| 韩国在线一区二区| 99精品国产91久久久久久| 在线91免费看| 久久久久九九视频| 国产精品国产三级国产aⅴ原创| 亚洲一区二区影院| 另类小说色综合网站| 成人动漫一区二区在线| 欧美性色综合网| 久久色视频免费观看| 亚洲免费在线观看视频| 日韩成人av影视| www.亚洲国产| 日韩欧美专区在线| 国产精品电影一区二区| 欧美一级日韩免费不卡| 久久久久国产免费免费| 99综合电影在线视频| 国产精品一区二区91| 日本电影亚洲天堂一区| 日韩一级免费一区| 中文字幕五月欧美| 久色婷婷小香蕉久久| 一本色道久久综合精品竹菊| 日韩精品一区在线观看| 夜夜嗨av一区二区三区网页| 极品瑜伽女神91| 欧美午夜片在线看| 国产精品毛片高清在线完整版| 日精品一区二区| 99re这里只有精品首页| 精品国免费一区二区三区| 亚洲综合男人的天堂| 国产成人av电影在线播放| 91精品欧美久久久久久动漫| 1024国产精品| 国产成人av福利| 日韩精品一区二区三区中文精品| 亚洲视频1区2区| 国产成人午夜99999| 日韩一区二区三区视频在线观看| 一区二区三区国产豹纹内裤在线| 国产河南妇女毛片精品久久久| 日韩午夜精品视频| 午夜电影一区二区三区| 色欧美片视频在线观看在线视频| 久久久久久久久99精品| 精品一区二区久久久| 欧美高清hd18日本| 亚洲电影视频在线| 91国在线观看| 国产精品久久久久天堂| 国产精品99久久久久久似苏梦涵| 日韩欧美国产精品| 男女男精品视频网| 日韩一级大片在线观看| 五月婷婷激情综合网| 欧美午夜免费电影| 亚洲主播在线观看| 欧美亚洲国产一区二区三区| 亚洲乱码一区二区三区在线观看| 成人在线视频一区二区| 欧美国产精品一区二区| 国产精品99久久不卡二区| 国产亚洲视频系列| 国产成a人无v码亚洲福利| 久久久精品国产免大香伊| 韩国欧美国产1区| 久久久久久亚洲综合影院红桃 | 国产欧美一区二区三区在线老狼 | 国产激情一区二区三区桃花岛亚洲| 日韩区在线观看| 另类小说图片综合网| 日韩免费观看高清完整版| 久久成人免费网站| 久久婷婷色综合| 国产精品99久| 亚洲欧美成aⅴ人在线观看| 在线免费观看视频一区| 亚洲国产视频直播| 9191国产精品| 国产高清亚洲一区| 国产精品人人做人人爽人人添| 91浏览器在线视频| 午夜精彩视频在线观看不卡| 91精品国产黑色紧身裤美女| 激情国产一区二区| 国产欧美久久久精品影院| 99免费精品视频| 亚洲高清视频在线| 精品嫩草影院久久| 成人免费av资源| 亚洲一二三四久久| 日韩三级免费观看| 成人免费观看视频| 一区二区三区国产精华| 欧美xxxxx裸体时装秀| 成人一区在线观看| 亚洲国产精品精华液网站| 日韩欧美黄色影院| 成人免费看片app下载| 亚洲一区二区精品视频| 日韩免费视频线观看| 99精品桃花视频在线观看| 午夜精品福利一区二区三区av | 一区二区三区精品在线| 91精品欧美综合在线观看最新 | 国产美女av一区二区三区| 国产精品欧美久久久久一区二区 | 7777精品伊人久久久大香线蕉最新版| 韩国一区二区三区| 亚洲在线视频免费观看| 日韩精品中午字幕| 91久久精品一区二区二区| 麻豆传媒一区二区三区| 中文字幕在线观看不卡| 欧美一区二区三区免费| 99久久综合国产精品| 蜜臀av性久久久久蜜臀aⅴ四虎 | 大陆成人av片| 欧美一区二区三区在线视频| 国产欧美日韩综合| 久久精品国产**网站演员| 波多野结衣91| 久久99国产精品久久99| 亚洲黄色小说网站| 国产欧美一区二区精品婷婷 | 蜜臀91精品一区二区三区| 国产精品美女久久久久aⅴ| 日韩欧美亚洲国产另类 | 国产亚洲1区2区3区|