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

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

?? watcher.c

?? 用來作為linux中SIP SERVER,完成VOIP網(wǎng)絡(luò)電話中服務器的功能
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Presence Agent, watcher structure and related functions * * $Id: watcher.c,v 1.17.2.1 2005/06/06 16:27:32 andrei Exp $ * * Copyright (C) 2001-2003 FhG Fokus * * This file is part of ser, a free SIP server. * * ser 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 * * For a license to use the ser software under conditions * other than those described here, or to purchase support for this * software, please contact iptel.org by e-mail at the following addresses: *    info@iptel.org * * ser 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 "paerrno.h"#include "../../db/db.h"#include "../../dprint.h"#include "../../parser/parse_event.h"#include "../../mem/shm_mem.h"#include "../../trim.h"#include "../../ut.h"#include "pa_mod.h"#include "common.h"#include "watcher.h"#include "presentity.h"char *doctype_name[] = {	[DOC_XPIDF] = "DOC_XPIDF",	[DOC_LPIDF] = "DOC_LPIDF",	[DOC_PIDF] = "DOC_PIDF",	[DOC_WINFO] = "DOC_WINFO",	[DOC_XCAP_CHANGE] = "DOC_XCAP_CHANGE",	[DOC_LOCATION] = "DOC_LOCATION"};char *event_package_name[] = {	[EVENT_OTHER] = "unknown",	[EVENT_PRESENCE] = "presence",	[EVENT_PRESENCE_WINFO] = "presence.winfo",	[EVENT_XCAP_CHANGE] = "xcap-change",	[EVENT_LOCATION] = "location",	NULL};static str watcher_status_names[] = {     [WS_PENDING] = { "pending", 7 },     [WS_ACTIVE] = { "active", 6 },     [WS_WAITING] = { "waiting", 7 },     [WS_TERMINATED] = { "terminated", 10 },     { 0, 0 }};static str watcher_event_names[] = {     [WE_SUBSCRIBE]   = { "subscribe",   9 },     [WE_APPROVED]    = { "approved",    8 },     [WE_DEACTIVATED] = { "deactivated", 11 },     [WE_PROBATION]   = { "probation",   9 },     [WE_REJECTED]    = { "rejected",    8 },     [WE_TIMEOUT]     = { "timeout",     7 },     [WE_GIVEUP]      = { "giveup",      6 },     [WE_NORESOURCE]  = { "noresource",  10 },     { 0, 0 }};int event_package_from_string(str *epname) {     int i;     for (i = 0; event_package_name[i]; i++) {	  if (strcasecmp(epname->s, event_package_name[i]) == 0) {	       return i;	  }     }     return 0;}watcher_status_t watcher_status_from_string(str *wsname) {     int i;     for (i = 0; watcher_status_names[i].len; i++) {	  if (str_strcasecmp(wsname, &watcher_status_names[i]) == 0) {	       return i;	  }     }     return 0;}watcher_event_t watcher_event_from_string(str *wename) {     int i;     for (i = 0; watcher_event_names[i].len; i++) {	  if (str_strcasecmp(wename, &watcher_event_names[i]) == 0) {	       return i;	  }     }     return 0;}#define S_ID_LEN 64/* be sure s!=NULL *//* compute a hash value for a string */unsigned int compute_hash(unsigned int _h, char* s, int len){	#define h_inc h+=v^(v>>3);			char* p;	register unsigned v;	register unsigned h = _h;	for(p=s; p<=(s+len-4); p+=4)	{		v=(*p<<24)+(p[1]<<16)+(p[2]<<8)+p[3];		h_inc;	}		v=0;	for(;p<(s+len); p++)	{		v<<=8;		v+=*p;	}	h_inc;	return h;}static char hbuf[2048];static int watcher_assign_statement_id(presentity_t *presentity, watcher_t *watcher){	unsigned int h = 0;	char *dn = doctype_name[watcher->accept];	if (1) {		int len = 0;		strncpy(hbuf+len, presentity->uri.s, presentity->uri.len);		len += presentity->uri.len;		strncpy(hbuf+len, dn, strlen(dn));		len += strlen(dn);		strncpy(hbuf+len, watcher->uri.s, watcher->uri.len);		len += watcher->uri.len;		h = compute_hash(0, hbuf, len);	} else {		h = compute_hash(0, presentity->uri.s, presentity->uri.len);		h = compute_hash(h, dn, strlen(dn));		h = compute_hash(h, watcher->uri.s, watcher->uri.len);	}	watcher->s_id.len = sprintf(watcher->s_id.s, "SID%08x", h);	return 0;}/* * Create a new watcher structure but do not write to database */int new_watcher_no_wb(presentity_t *_p, str* _uri, time_t _e, int event_package, doctype_t _a, dlg_t* _dlg, 		      str *_dn, watcher_t** _w){	watcher_t* watcher;	/* Check parameters */	if (!_uri && !_dlg && !_w) {		LOG(L_ERR, "new_watcher(): Invalid parameter value\n");		return -1;	}	/* Allocate memory buffer for watcher_t structure and uri string */	watcher = (watcher_t*)shm_malloc(sizeof(watcher_t) + _uri->len + _dn->len + S_ID_LEN);	if (!watcher) {		paerrno = PA_NO_MEMORY;	        LOG(L_ERR, "new_watcher(): No memory left\n");		return -1;	}	memset(watcher, 0, sizeof(watcher_t));	/* Copy uri string */	watcher->uri.s = (char*)watcher + S_ID_LEN + sizeof(watcher_t);	watcher->uri.len = _uri->len;	memcpy(watcher->uri.s, _uri->s, _uri->len);		/* Copy display_name string */	watcher->display_name.s = (char*)watcher + S_ID_LEN + sizeof(watcher_t) + _uri->len;	watcher->display_name.len = _dn->len;	memcpy(watcher->display_name.s, _dn->s, _dn->len);	watcher->s_id.s = (char*)watcher + sizeof(watcher_t);	watcher->s_id.len = 0;	watcher->event_package = event_package;	watcher->expires = _e; /* Expires value */	watcher->accept = _a;  /* Accepted document type */	watcher->dialog = _dlg; /* Dialog handle */	watcher->event = WE_SUBSCRIBE;	*_w = watcher;	return 0;}/* * Create a new watcher structure */int new_watcher(presentity_t *_p, str* _uri, time_t _e, int event_package, doctype_t _a, dlg_t* _dlg, 		str *_dn, watcher_t** _w){     int rc;     watcher_t* watcher;     /* Check parameters */     if (!_uri && !_dlg && !_w) {	  LOG(L_ERR, "new_watcher(): Invalid parameter value\n");	  return -1;     }     rc = new_watcher_no_wb(_p, _uri, _e, event_package, _a, _dlg, _dn, _w);     if (rc < 0) {	  return rc;     } else {	  watcher = *_w;     }     if (use_db) {	  db_key_t query_cols[11];	  db_op_t query_ops[11];	  db_val_t query_vals[11];	  db_key_t result_cols[5];	  db_res_t *res;	  int n_query_cols = 0;	  int n_result_cols = 0;	  int s_id_col, status_col, display_name_col, event_col;	  char *package = event_package_name[watcher->event_package];	  LOG(L_ERR, "new_watcher starting\n");	  query_cols[n_query_cols] = "r_uri";	  query_ops[n_query_cols] = OP_EQ;	  query_vals[n_query_cols].type = DB_STR;	  query_vals[n_query_cols].nul = n_query_cols;	  query_vals[n_query_cols].val.str_val.s = _p->uri.s;	  query_vals[n_query_cols].val.str_val.len = _p->uri.len;	  n_query_cols++;	  LOG(L_ERR, "new_watcher:  _p->uri=%.*s\n", _p->uri.len, _p->uri.s);	  query_cols[n_query_cols] = "w_uri";	  query_ops[n_query_cols] = OP_EQ;	  query_vals[n_query_cols].type = DB_STR;	  query_vals[n_query_cols].nul = 0;	  query_vals[n_query_cols].val.str_val.s = watcher->uri.s;	  query_vals[n_query_cols].val.str_val.len = watcher->uri.len;	  n_query_cols++;	  LOG(L_ERR, "db_new_watcher:  watcher->uri=%.*s\n", watcher->uri.len, watcher->uri.s);	  query_cols[n_query_cols] = "package";	  query_ops[n_query_cols] = OP_EQ;	  query_vals[n_query_cols].type = DB_STR;	  query_vals[n_query_cols].nul = 0;	  query_vals[n_query_cols].val.str_val.s = package;	  query_vals[n_query_cols].val.str_val.len = strlen(package);	  n_query_cols++;	  LOG(L_ERR, "new_watcher:  watcher->package=%s\n", package);	  result_cols[s_id_col = n_result_cols++] = "s_id";	  result_cols[status_col = n_result_cols++] = "status";	  result_cols[event_col = n_result_cols++] = "event";	  result_cols[display_name_col = n_result_cols++] = "display_name";			  if (pa_dbf.use_table(pa_db, watcherinfo_table) < 0) {		  LOG(L_ERR, "new_watcher: Error in use_table\n");		  return -1;	  }	  	  if (pa_dbf.query (pa_db, query_cols, query_ops, query_vals,			result_cols, n_query_cols, n_result_cols, 0, &res) < 0) {		  LOG(L_ERR, "new_watcher: Error while querying tuple\n");		  return -1;	  }	  LOG(L_INFO, "new_watcher: getting values: res=%p res->n=%d\n",	      res, (res ? res->n : 0));	  if (res && res->n > 0) {	       /* fill in tuple structure from database query result */	       db_row_t *row = &res->rows[0];	       db_val_t *row_vals = ROW_VALUES(row);	       str s_id = { 0, 0 };	       str status = { 0, 0 };	       str event_str = { 0, 0 };	       watcher_event_t watcher_event = WE_SUBSCRIBE;	       if (!row_vals[s_id_col].nul) {		    s_id.s = (char*)row_vals[s_id_col].val.string_val;		    s_id.len = strlen(s_id.s);	       }	       if (!row_vals[status_col].nul) {		    status.s = (char*)row_vals[status_col].val.string_val;		    status.len = strlen(status.s);	       }	       if (!row_vals[event_col].nul) {		    event_str.s = (char*)row_vals[event_col].val.string_val;		    event_str.len = strlen(event_str.s);		    watcher_event = watcher_event_from_string(&event_str);	       }	       watcher->event = watcher_event;	       	       LOG(L_ERR, "new_watcher: status=%.*s\n", status.len, status.s);	       if (status.len) {		    watcher->status = watcher_status_from_string(&status);	       } else {		    watcher->status = WS_ACTIVE;	       }	       if (s_id.s) {		    strncpy(watcher->s_id.s, s_id.s, S_ID_LEN);		    watcher->s_id.len = strlen(s_id.s);	       }	  } else {	       watcher_assign_statement_id(_p, watcher);	       query_cols[n_query_cols] = "s_id";	       query_vals[n_query_cols].type = DB_STR;	       query_vals[n_query_cols].nul = 0;	       query_vals[n_query_cols].val.str_val.s = watcher->s_id.s;	       query_vals[n_query_cols].val.str_val.len = watcher->s_id.len;	       n_query_cols++;	       query_cols[n_query_cols] = "status";	       query_vals[n_query_cols].type = DB_STR;	       query_vals[n_query_cols].nul = 0;	       if (new_watcher_pending) {		    query_vals[n_query_cols].val.str_val.s = "pending";		    query_vals[n_query_cols].val.str_val.len = strlen("pending");	       } else {		    query_vals[n_query_cols].val.str_val.s = "active";		    query_vals[n_query_cols].val.str_val.len = strlen("active");	       }	       n_query_cols++;	       query_cols[n_query_cols] = "event";	       query_vals[n_query_cols].type = DB_STR;	       query_vals[n_query_cols].nul = 0;	       query_vals[n_query_cols].val.str_val = watcher_event_names[watcher->event];	       n_query_cols++;	       query_cols[n_query_cols] = "display_name";	       query_vals[n_query_cols].type = DB_STR;	       query_vals[n_query_cols].nul = 0;	       query_vals[n_query_cols].val.str_val.s = watcher->display_name.s;	       query_vals[n_query_cols].val.str_val.len = watcher->display_name.len;	       n_query_cols++;	       query_cols[n_query_cols] = "accepts";	       query_vals[n_query_cols].type = DB_INT;	       query_vals[n_query_cols].nul = 0;	       query_vals[n_query_cols].val.int_val = watcher->accept;	       n_query_cols++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看高清| 欧美调教femdomvk| 丝袜亚洲另类丝袜在线| 国产精品久99| 国产精品久久久久久一区二区三区| 亚洲男女一区二区三区| 国产乱国产乱300精品| 国产精品一色哟哟哟| 欧美日本精品一区二区三区| 欧美一区二区三区在线电影| 日韩视频免费观看高清在线视频| 欧美成人video| 亚洲精品少妇30p| 一区二区三区精品| 日本成人超碰在线观看| 国内国产精品久久| proumb性欧美在线观看| 欧美在线综合视频| 日韩欧美一区在线| 日韩一级片在线播放| 亚洲在线免费播放| 免费视频一区二区| 成人av电影免费在线播放| 欧美亚洲禁片免费| 亚洲卡通动漫在线| 99国产精品久久久久| 日韩精品中文字幕一区二区三区 | 国产午夜精品久久久久久久| 久久精品人人做人人综合 | 91.xcao| 久久男人中文字幕资源站| 亚洲婷婷在线视频| 日韩1区2区日韩1区2区| 欧美日韩成人激情| 亚洲成在人线免费| 成人黄色一级视频| 国产三级久久久| 无吗不卡中文字幕| 欧美一区二区三区电影| 一级特黄大欧美久久久| 欧美艳星brazzers| 亚洲超碰97人人做人人爱| 欧美三级日韩三级| 国产欧美日韩一区二区三区在线观看 | 欧美一区二区三区在线观看视频| 亚洲成人先锋电影| 91精品国产高清一区二区三区蜜臀| 丝袜诱惑亚洲看片| 欧美精品一区二区久久久| 亚洲国产裸拍裸体视频在线观看乱了| 黑人精品欧美一区二区蜜桃| 欧美电影精品一区二区| 国产精一区二区三区| 国产精品久久久久久久久久免费看 | 日韩欧美国产一区在线观看| 精品一区二区三区在线观看| 欧美三级日韩三级| 久久精品国产亚洲5555| 51精品秘密在线观看| 美美哒免费高清在线观看视频一区二区 | 国产欧美日韩视频在线观看| 成人av电影在线观看| 洋洋成人永久网站入口| 日韩色在线观看| 成人午夜av在线| 国产亚洲精品aa| 一本大道久久a久久精品综合| 国产欧美日韩中文久久| 在线精品国精品国产尤物884a| 亚洲大片在线观看| 国产日产亚洲精品系列| 在线观看欧美精品| 九九九精品视频| 亚洲精品五月天| 欧美精品一区男女天堂| 97精品国产露脸对白| 日本系列欧美系列| 中文字幕在线免费不卡| 高清不卡一区二区| 中文字幕在线观看一区| 6080yy午夜一二三区久久| 懂色av噜噜一区二区三区av| 婷婷中文字幕综合| 中文字幕一区二区三区色视频| 欧美精品tushy高清| 青娱乐精品视频| 亚洲天堂a在线| 欧美精品一区二区三区蜜臀| 色综合视频在线观看| 国产一级精品在线| 国产精品成人在线观看| 欧美精品一区二区高清在线观看| 麻豆91在线观看| 亚洲一级二级在线| 国产精品高潮久久久久无| 欧美xxxxx牲另类人与| 欧美三级日本三级少妇99| 一本一道久久a久久精品综合蜜臀| 国产综合久久久久久久久久久久| 亚洲成人在线观看视频| 国产精品久久久久久久蜜臀| 国产亚洲制服色| 久久综合久久综合九色| 欧美在线观看你懂的| 色综合天天综合给合国产| 日韩精品一级中文字幕精品视频免费观看| 中文字幕国产精品一区二区| 日本高清不卡视频| 久久精品国产一区二区三| 五月天激情综合网| 亚洲福中文字幕伊人影院| 亚洲精品国产视频| 一区二区三区日韩| 亚洲精品乱码久久久久久黑人 | 成人免费视频网站在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 精品三级av在线| 欧美大肚乱孕交hd孕妇| 日韩一区二区三区电影在线观看| 欧美美女网站色| 欧美女孩性生活视频| 777xxx欧美| 欧美一区二区三区在线观看视频| 日韩亚洲欧美成人一区| 欧美精品一区二区三区蜜桃视频| 久久伊99综合婷婷久久伊| 久久久一区二区三区| 久久久国际精品| 亚洲国产成人在线| 一区二区三区欧美视频| 亚洲1区2区3区视频| 日韩中文字幕区一区有砖一区| 热久久国产精品| 国产精品69毛片高清亚洲| 成人看片黄a免费看在线| 99热在这里有精品免费| 欧美亚洲丝袜传媒另类| 日韩一区二区三区免费观看| 国产亚洲欧美日韩俺去了| 亚洲视频一二三| 午夜不卡av免费| 国产激情视频一区二区在线观看| 丝袜脚交一区二区| 激情国产一区二区| 91视频www| 不卡一区二区中文字幕| 在线观看亚洲精品| 欧美成人三级在线| 中文字幕中文字幕在线一区| 亚洲国产婷婷综合在线精品| 国精产品一区一区三区mba桃花| av网站一区二区三区| 91麻豆精品国产| 国产精品久久久久久久裸模| 日韩精品免费视频人成| 成人av免费网站| 欧美一区二区视频在线观看2022| 国产精品欧美久久久久一区二区| 久久久久久久性| 亚洲一线二线三线久久久| 国产一区二区在线视频| 欧美最猛黑人xxxxx猛交| 久久美女艺术照精彩视频福利播放| 亚洲视频一二区| 久久99精品久久久久久国产越南| 91麻豆免费视频| 久久久亚洲高清| 亚洲成人中文在线| bt7086福利一区国产| 久久综合九色综合97婷婷女人 | 亚洲国产精品成人综合| 日本vs亚洲vs韩国一区三区| 菠萝蜜视频在线观看一区| 日韩欧美在线1卡| 亚洲午夜在线电影| 成人av在线播放网站| 久久一区二区三区四区| 五月天国产精品| 欧美视频你懂的| 国产精品一区在线| 这里只有精品99re| 一区二区日韩av| 一本大道久久精品懂色aⅴ| 国产亚洲一区二区三区在线观看| 日韩av一区二| 欧美日韩aaaaaa| 亚洲亚洲精品在线观看| 色综合天天综合网天天看片| 国产精品色哟哟| 国产成人日日夜夜| 久久精品人人做| 国产一区二区福利视频| 精品国产伦一区二区三区观看方式| 午夜电影久久久| 7777精品伊人久久久大香线蕉| 亚洲图片一区二区| 欧美三级视频在线观看| 亚洲线精品一区二区三区八戒| 欧洲精品一区二区| 亚洲国产精品一区二区www在线|