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

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

?? jabber.c

?? 性能優秀的SIP Proxy
?? C
?? 第 1 頁 / 共 2 頁
字號:
			}		break;		default:			DBG("XJAB:xjab_manage_sipmsg: ERROR:strange SIP msg type!\n");			goto error;	}	// if is for going ONLINE/OFFLINE we do not need the destination	if(type==XJ_GO_ONLINE || type==XJ_GO_OFFLINE)		goto prepare_job;		// determination of destination	// - try to get it from new_uri, r-uri or to hdr, but check it against	// jdomain and aliases	dst.len = 0;	if( msg->new_uri.len > 0)	{		dst.s = msg->new_uri.s;		dst.len = msg->new_uri.len;		if(xj_wlist_check_aliases(jwl, &dst))			dst.len = 0;#ifdef XJ_EXTRA_DEBUG		else			DBG("XJAB:xjab_manage_sipmsg: using NEW URI for destination\n");#endif	}		if (dst.len == 0 &&  msg->first_line.u.request.uri.s != NULL			&& msg->first_line.u.request.uri.len > 0 )	{		dst.s = msg->first_line.u.request.uri.s;		dst.len = msg->first_line.u.request.uri.len;		if(xj_wlist_check_aliases(jwl, &dst))			dst.len = 0;#ifdef XJ_EXTRA_DEBUG		else			DBG("XJAB:xjab_manage_sipmsg: using R-URI for destination\n");#endif	}	if(dst.len == 0 && msg->to->parsed)	{		dst.s = ((struct to_body*)msg->to->parsed)->uri.s;		dst.len = ((struct to_body*)msg->to->parsed)->uri.len;		if(dst.s == NULL || xj_wlist_check_aliases(jwl, &dst))			dst.len = 0;#ifdef XJ_EXTRA_DEBUG		else			DBG("XJAB:xjab_manage_sipmsg: using TO-URI for destination\n");#endif	}		if(dst.len == 0)	{		DBG("XJAB:xjab_manage_sipmsg: destination not found in SIP message\n");		goto error;	}		/** skip 'sip:' and parameters in destination address */	if(xj_extract_aor(&dst, 1))	{		DBG("ERROR:xjab_manage_sipmsg: cannot get AoR for destination\n");		goto error;	}#ifdef XJ_EXTRA_DEBUG	DBG("XJAB:xjab_manage_sipmsg: DESTINATION after correction [%.*s].\n",				dst.len, dst.s);#endif	prepare_job:	//putting the SIP message parts in share memory to be accessible by workers    jsmsg = (xj_sipmsg)shm_malloc(sizeof(t_xj_sipmsg));	memset(jsmsg, 0, sizeof(t_xj_sipmsg));    if(jsmsg == NULL)    	return -1;		switch(type)	{		case XJ_SEND_MESSAGE:			jsmsg->msg.len = body.len;			if((jsmsg->msg.s = (char*)shm_malloc(jsmsg->msg.len+1)) == NULL)			{				shm_free(jsmsg);				goto error;			}			strncpy(jsmsg->msg.s, body.s, jsmsg->msg.len);		break;		case XJ_GO_ONLINE:		case XJ_GO_OFFLINE:			dst.len = 0;			dst.s = 0;		case XJ_JOIN_JCONF:		case XJ_EXIT_JCONF:			jsmsg->msg.len = 0;			jsmsg->msg.s = NULL;		break;		default:			DBG("XJAB:xjab_manage_sipmsg: this SHOULD NOT appear\n");			shm_free(jsmsg);			goto error;	}	if(dst.len>0)	{		jsmsg->to.len = dst.len;		if((jsmsg->to.s = (char*)shm_malloc(jsmsg->to.len+1))==NULL)		{			if(type == XJ_SEND_MESSAGE)				shm_free(jsmsg->msg.s);			shm_free(jsmsg);			goto error;		}		strncpy(jsmsg->to.s, dst.s, jsmsg->to.len);	}	else	{		jsmsg->to.len = 0;		jsmsg->to.s   = 0;	}	jsmsg->jkey = p;	jsmsg->type = type;	//jsmsg->jkey->hash = jkey.hash;	DBG("XJAB:xjab_manage_sipmsg:%d: sending <%p> to worker through <%d>\n",			getpid(), jsmsg, pipe);	// sending the SHM pointer of SIP message to the worker	fl = write(pipe, &jsmsg, sizeof(jsmsg));	if(fl != sizeof(jsmsg))	{		DBG("XJAB:xjab_manage_sipmsg: error when writing to worker pipe!\n");		if(type == XJ_SEND_MESSAGE)			shm_free(jsmsg->msg.s);		shm_free(jsmsg->to.s);		shm_free(jsmsg);		goto error;	}		return 1;error:	return -1;}/** * destroy function of module */void destroy(void){	int i;#ifdef XJ_EXTRA_DEBUG	DBG("XJAB: Unloading module ...\n");#endif	if(pipes)	{ // close the pipes		for(i = 0; i < nrw; i++)		{			if(pipes[i])			{				close(pipes[i][0]);				close(pipes[i][1]);			}			pkg_free(pipes[i]);		}		pkg_free(pipes);	}	// cleaning MySQL connections	if(db_con != NULL)	{		for(i = 0; i<nrw; i++)			jabber_dbf.close(db_con[i]);		shm_free(db_con);	}				xj_wlist_free(jwl);	DBG("XJAB: Unloaded ...\n");}/** * register a watcher function for a Jabber user' presence */void xj_register_watcher(str *from, str *to, void *cbf, void *pp){	xj_sipmsg jsmsg = NULL;	t_xj_jkey jkey, *jp;	int pipe, fl;	str from_uri, to_uri;	if(!to || !from || !cbf)		return;#ifdef XJ_EXTRA_DEBUG	DBG("XJAB:xj_register_watcher: from=[%.*s] to=[%.*s]\n", from->len,	    from->s, to->len, to->s);#endif	from_uri.s = from->s;	from_uri.len = from->len;	if(xj_extract_aor(&from_uri, 0))	{		DBG("ERROR:xjab_manage_sipmsg: cannot get AoR from FROM header\n");		goto error;	}	jkey.hash = xj_get_hash(&from_uri, NULL);	jkey.id = &from_uri;	if((pipe = xj_wlist_get(jwl, &jkey, &jp)) < 0)	{		DBG("XJAB:xj_register_watcher: cannot find pipe of the worker!\n");		goto error;	}		//putting the SIP message parts in share memory to be accessible by workers	jsmsg = (xj_sipmsg)shm_malloc(sizeof(t_xj_sipmsg));	memset(jsmsg, 0, sizeof(t_xj_sipmsg));	if(jsmsg == NULL)		goto error;		jsmsg->msg.len = 0;	jsmsg->msg.s = NULL;		to_uri.s = to->s;	to_uri.len = to->len;	/** skip 'sip:' and parameters in destination address */	if(xj_extract_aor(&to_uri, 1))	{		DBG("ERROR:xjab_manage_sipmsg: cannot get AoR for destination\n");		goto error;	}#ifdef XJ_EXTRA_DEBUG	DBG("XJAB:xj_register_watcher: DESTINATION after correction [%.*s].\n",	    to_uri.len, to_uri.s);#endif	jsmsg->to.len = to_uri.len;	if((jsmsg->to.s = (char*)shm_malloc(jsmsg->to.len+1)) == NULL)	{		if(jsmsg->msg.s)			shm_free(jsmsg->msg.s);		shm_free(jsmsg);		goto error;	}	strncpy(jsmsg->to.s, to_uri.s, jsmsg->to.len);	jsmsg->to.s[jsmsg->to.len] = '\0';	jsmsg->jkey = jp;	jsmsg->type = XJ_REG_WATCHER;	//jsmsg->jkey->hash = jkey.hash;		jsmsg->cbf = (pa_callback_f)cbf;	jsmsg->p = pp;#ifdef XJ_EXTRA_DEBUG	DBG("XJAB:xj_register_watcher:%d: sending <%p> to worker through <%d>\n",	    getpid(), jsmsg, pipe);#endif	// sending the SHM pointer of SIP message to the worker	fl = write(pipe, &jsmsg, sizeof(jsmsg));	if(fl != sizeof(jsmsg))	{		DBG("XJAB:xj_register_watcher: error when writing to worker pipe!\n");		if(jsmsg->msg.s)			shm_free(jsmsg->msg.s);		shm_free(jsmsg->to.s);		shm_free(jsmsg);		goto error;	}	 error:	return;}/** * unregister a watcher for a Jabber user' presence */void xj_unregister_watcher(str *from, str *to, void *cbf, void *pp){	if(!to || !from)		return;}/** * check if all SER2Jab workers are still alive * - if not, try to launch new ones */void xjab_check_workers(int mpid){	int i, n, stat;	//DBG("XJAB:%d:xjab_check_workers: time=%d\n", mpid, get_ticks());	if(!jwl || jwl->len <= 0)		return;	for(i=0; i < jwl->len; i++)	{		if(jwl->workers[i].pid > 0)		{			stat = 0;			n = waitpid(jwl->workers[i].pid, &stat, WNOHANG);			if(n == 0 || n!=jwl->workers[i].pid)				continue;					LOG(L_ERR,"XJAB:xjab_check_workers: worker[%d][pid=%d] has exited"				" - status=%d err=%d errno=%d\n", i, jwl->workers[i].pid, 				stat, n, errno);			xj_wlist_clean_jobs(jwl, i, 1);			xj_wlist_set_pid(jwl, -1, i);		}		#ifdef XJ_EXTRA_DEBUG		DBG("XJAB:%d:xjab_check_workers: create a new worker[%d]\n", mpid, i);#endif		if ( (stat=fork())<0 )		{#ifdef XJ_EXTRA_DEBUG			DBG("XJAB:xjab_check_workers: error - cannot launch new"				" worker[%d]\n", i);#endif			LOG(L_ERR, "XJAB:xjab_check_workers: error - worker[%d] lost"				" forever \n", i);			return;		}		if (stat == 0)		{			if(xj_wlist_set_pid(jwl, getpid(), i) < 0)			{				LOG(L_ERR, "XJAB:xjab_check_workers: error setting new"					" worker's pid - w[%d]\n", i);				return;			}			xj_worker_process(jwl,jaddress,jport,i,db_con[i], &jabber_dbf);			exit(0);		}	}			}#ifdef HAVE_IHTTP/** * Module's information retrieval - function to use with iHttp module * */ int xjab_mod_info(ih_req_p _irp, void *_p, char *_bb, int *_bl, 		char *_hb, int *_hl){	if(!_irp || !_bb || !_bl || *_bl <= 0 || !_hb || !_hl || *_hl <= 0)		return -1;	*_hl = 0;	*_hb = 0;		strcpy(_bb, "<h4>SER2Jabber Gateway</h4>");	strcat(_bb, "<br>Module parameters:<br>");	strcat(_bb, "<br> -- db table = ");	strcat(_bb, db_table);	strcat(_bb, "<br> -- workers = ");	strcat(_bb, int2str(nrw, NULL));	strcat(_bb, "<br> -- max jobs per worker = ");	strcat(_bb, int2str(max_jobs, NULL));	strcat(_bb, "<br> -- jabber server address = ");	strcat(_bb, jaddress);	strcat(_bb, "<br> -- jabber server port = ");	strcat(_bb, int2str(jport, NULL));	strcat(_bb, "<br> -- aliases = ");	strcat(_bb, (jaliases)?jaliases:"NULL");	strcat(_bb, "<br> -- jabber domain = ");	strcat(_bb, (jdomain)?jdomain:"NULL");	strcat(_bb, "<br> -- proxy address = ");	strcat(_bb, (proxy)?proxy:"NULL");	strcat(_bb, "<br> -- delay time = ");	strcat(_bb, int2str(delay_time, NULL));	strcat(_bb, "<br> -- sleep time = ");	strcat(_bb, int2str(sleep_time, NULL));	strcat(_bb, "<br> -- cache time = ");	strcat(_bb, int2str(cache_time, NULL));	strcat(_bb, "<br> -- check time = ");	strcat(_bb, int2str(check_time, NULL));		*_bl = strlen(_bb);	return 0;}/** * SER2Jab connection management - function to use with iHttp module * - be aware of who is able to use the ihttp because he can close any  *   open connection between SER and Jabber server */ int xjab_connections(ih_req_p _irp, void *_p, char *_bb, int *_bl, 		char *_hb, int *_hl){	t_xj_jkey jkey, *p;	str _u;	ih_param_p _ipp = NULL;	int idx, i, maxcount;	char *cp;	if(!_irp || !_bb || !_bl || *_bl <= 0 || !_hb || !_hl || *_hl <= 0)		return -1;		*_hl = 0;	*_hb = 0;	idx = -1;	strcpy(_bb, "<h4>Active XMPP connections</h4>");		if(_irp->params)	{		strcat(_bb, "<br><b>Close action is alpha release!</b><br>");		_ipp = _irp->params;		i = 0;		while(_ipp)		{			switch(_ipp->name[0])			{				case 'w':					idx = 0;					cp = _ipp->value;					while(*cp && *cp>='0' && *cp<='9')					{						idx = idx*10 + *cp-'0';						cp++;					}					i++;				break;				case 'u':					_u.s = _ipp->value;					_u.len = strlen(_ipp->value);					jkey.id = &_u;					i++;				break;				case 'i':					jkey.hash = 0;					cp = _ipp->value;					while(*cp && *cp>='0' && *cp<='9')					{						jkey.hash = jkey.hash*10 + *cp-'0';						cp++;					}					i++;				break;							}			_ipp = _ipp->next;		}		if(i!=3 || idx < 0 || idx >= jwl->len)		{			strcat(_bb, "<br><b><i>Bad parameters!</i></b>\n");		}		else		{			strcat(_bb, "<br><b><i>The connection of [");			strcat(_bb, _u.s);			if(xj_wlist_set_flag(jwl, &jkey, XJ_FLAG_CLOSE) < 0)				strcat(_bb, "] does not exist!</i></b>\n");			else				strcat(_bb, "] was scheduled for closing!</i></b>\n");		}		*_bl = strlen(_bb);		return 0;	}		if(jwl!=NULL && jwl->len > 0 && jwl->workers!=NULL)	{		for(idx=0; idx<jwl->len; idx++)		{			strcat(_bb, "<br><b><i>Worker[");			strcat(_bb, int2str(idx, NULL));			strcat(_bb, "]</i></b> &nbsp;&nbsp;pid=");			strcat(_bb, int2str(jwl->workers[idx].pid, NULL));			strcat(_bb, " &nbsp;&nbsp;nr of jobs=");			strcat(_bb, int2str(jwl->workers[idx].nr, NULL));			if(!jwl->workers[idx].sip_ids)				continue;			lock_set_get(jwl->sems, idx);			maxcount = count234(jwl->workers[idx].sip_ids);			for (i = 0; i < maxcount; i++) 			{				p = (xj_jkey)index234(jwl->workers[idx].sip_ids, i);				if(p == NULL)					continue;				strcat(_bb, "<br>&nbsp;&nbsp;&nbsp;");				strcat(_bb, int2str(i, NULL));				strcat(_bb, ".&nbsp;&nbsp;&nbsp;");				strcat(_bb, "<a href=\"xjabc?w=");				strcat(_bb, int2str(idx, NULL));				strcat(_bb, "&i=");				strcat(_bb, int2str(p->hash, NULL));				strcat(_bb, "&u=");				strncat(_bb, p->id->s, p->id->len);				strcat(_bb, "\">close</a>");				strcat(_bb, "&nbsp;&nbsp;&nbsp;");				strcat(_bb, int2str(p->hash, NULL));				strcat(_bb, "&nbsp;&nbsp;&nbsp;");				strncat(_bb, p->id->s, p->id->len);			}			lock_set_release(jwl->sems, idx);		}	}		*_bl = strlen(_bb);	return 0;}#endif // HAVE_IHTTP

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级欧美三级在线观看| 欧美大白屁股肥臀xxxxxx| 日韩成人精品在线观看| 国产片一区二区三区| 精品视频全国免费看| 国产麻豆日韩欧美久久| 亚洲一区二区三区四区不卡| 精品91自产拍在线观看一区| 欧美视频第二页| 成人激情黄色小说| 麻豆专区一区二区三区四区五区| 亚洲欧洲在线观看av| 久久综合国产精品| 欧美日本在线观看| 色综合视频在线观看| 国产福利精品导航| 久久精品国产成人一区二区三区 | 国产美女久久久久| 亚洲成a人v欧美综合天堂| 国产精品无遮挡| 久久一日本道色综合| 日韩午夜av电影| 在线成人小视频| 欧洲日韩一区二区三区| 成人激情小说乱人伦| 国产一区视频网站| 激情欧美一区二区| 日本aⅴ亚洲精品中文乱码| 亚洲一区二区三区四区中文字幕 | 欧美国产激情二区三区| 精品久久久三级丝袜| 欧美精品v国产精品v日韩精品| 色呦呦日韩精品| 色综合网色综合| 99久久er热在这里只有精品66| 高清日韩电视剧大全免费| 国产一区二区伦理片| 久久精品噜噜噜成人av农村| 免费欧美在线视频| 日本中文在线一区| 美洲天堂一区二卡三卡四卡视频| 性久久久久久久久久久久| 亚洲成在人线免费| 天天射综合影视| 日韩主播视频在线| 日韩高清欧美激情| 毛片一区二区三区| 欧美高清视频www夜色资源网| 91国偷自产一区二区三区成为亚洲经典 | 国产酒店精品激情| 国产伦精一区二区三区| 国产美女视频一区| 成人午夜精品一区二区三区| 懂色av一区二区三区蜜臀| 成人av午夜电影| 91麻豆精品一区二区三区| 一本到高清视频免费精品| 色香蕉成人二区免费| 欧洲日韩一区二区三区| 在线不卡一区二区| 精品国产乱码久久久久久牛牛| 精品国产乱码久久久久久久久| 337p粉嫩大胆噜噜噜噜噜91av| 国产亚洲精品中文字幕| 中文字幕在线不卡一区二区三区 | 日韩美女视频一区二区| 亚洲精品菠萝久久久久久久| 亚洲成人免费看| 日本aⅴ亚洲精品中文乱码| 激情六月婷婷综合| 97久久久精品综合88久久| 欧美在线观看一区二区| 欧美一区二区私人影院日本| 久久久久久久久久美女| 中文字幕一区二区5566日韩| 亚洲一区av在线| 老司机午夜精品| 成人av网站在线观看免费| 在线观看区一区二| 精品欧美黑人一区二区三区| 欧美国产精品专区| 亚洲成人动漫av| 国产一区二区三区四| 99久久国产综合精品色伊| 欧美久久高跟鞋激| 中文一区在线播放| 午夜精品福利一区二区蜜股av| 国模娜娜一区二区三区| 在线观看av一区二区| 26uuu精品一区二区| 一区二区三区欧美日| 国产综合色产在线精品| 99精品国产一区二区三区不卡| 欧美日韩激情一区二区三区| 久久久久久久国产精品影院| 一区二区免费在线播放| 国产乱码精品1区2区3区| 欧美影视一区在线| 欧美国产日韩a欧美在线观看| 亚洲一区二区影院| 丁香五精品蜜臀久久久久99网站| 欧美年轻男男videosbes| 国产精品久久久久久一区二区三区 | 欧美影视一区在线| 中文字幕av一区二区三区高| 水蜜桃久久夜色精品一区的特点| 成人h动漫精品一区二| 欧美大黄免费观看| 亚洲国产综合91精品麻豆| 国产91在线|亚洲| 日韩免费视频一区二区| 亚洲自拍偷拍九九九| 成人avav影音| 久久精品视频在线看| 奇米777欧美一区二区| 欧美综合欧美视频| 国产精品福利一区二区三区| 极品瑜伽女神91| 日韩欧美中文字幕一区| 亚洲国产日日夜夜| 色噜噜久久综合| 最新国产精品久久精品| 国产成人亚洲综合色影视| 精品久久一区二区三区| 麻豆一区二区三区| 日韩一区二区三区视频在线观看| 亚洲成人在线免费| 欧美曰成人黄网| 亚洲免费高清视频在线| 色综合天天综合在线视频| 中文字幕一区二区三区av| 成人免费看视频| 国产欧美日韩麻豆91| 国产一区二区影院| 精品99久久久久久| 国产精品91一区二区| 久久精子c满五个校花| 国产一区在线不卡| 国产女主播视频一区二区| 国产91精品在线观看| 国产日韩精品一区二区三区 | 自拍偷自拍亚洲精品播放| www.激情成人| 亚洲欧洲av一区二区三区久久| 99久久99久久久精品齐齐| 亚洲精品视频在线| 欧美日韩在线不卡| 日韩国产高清在线| 精品乱人伦小说| 国产精品资源在线看| 欧美激情综合五月色丁香小说| 成人av资源在线观看| 亚洲乱码中文字幕综合| 欧美日韩精品免费观看视频| 亚洲成人激情综合网| 日韩一区二区视频| 国产传媒一区在线| 成人欧美一区二区三区视频网页| 91在线国内视频| 午夜精品久久久久久久久| 欧美不卡一区二区| 成人一区二区三区在线观看| 亚洲视频资源在线| 欧美日韩综合在线| 精品一区二区三区在线观看| 国产欧美视频一区二区三区| 色视频成人在线观看免| 日韩电影免费在线| 国产日本欧洲亚洲| 日本韩国欧美一区二区三区| 午夜欧美在线一二页| 精品国产1区二区| 成人av影院在线| 五月激情综合色| 国产视频一区不卡| 欧美午夜精品久久久| 久久精品国产色蜜蜜麻豆| 1024国产精品| 欧美一区二区免费| 9i看片成人免费高清| 图片区小说区区亚洲影院| 国产亚洲精品超碰| 欧美四级电影网| 国产.欧美.日韩| 日精品一区二区三区| 国产精品久久久久久久蜜臀| 欧美精品精品一区| 97精品久久久午夜一区二区三区| 五月天一区二区三区| 国产精品不卡在线| 日韩欧美电影一二三| aaa亚洲精品| 精品亚洲成a人在线观看| 亚洲欧美韩国综合色| 欧美成人女星排名| 欧美日韩中文字幕一区二区| 顶级嫩模精品视频在线看| 男男视频亚洲欧美| 一区二区激情小说| 国产精品五月天|