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

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

?? jabber.c

?? SIP Express Router, Linux下的SIP代理服務器,小巧實用,開發測試VoIP設備和應用的必備.
?? C
?? 第 1 頁 / 共 2 頁
字號:
			if((pipe = xj_wlist_check(jwl, &jkey, &p)) < 0)			{				DBG("XJAB:xjab_manage_sipmsg: no open Jabber session for"						" <%.*s>!\n", from_uri.len, from_uri.s);				goto error;			}		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一区二区三区免费野_久草精品视频
日韩高清不卡一区二区| 99天天综合性| 处破女av一区二区| 欧美四级电影在线观看| 欧美大白屁股肥臀xxxxxx| 国产精品久久夜| 久久不见久久见免费视频7| 91麻豆精东视频| 国产婷婷色一区二区三区四区 | 豆国产96在线|亚洲| 欧美在线短视频| 中文字幕国产一区二区| 男女性色大片免费观看一区二区 | 亚洲国产综合在线| 不卡在线观看av| 久久这里只有精品首页| 26uuu欧美| 国产精品1区2区3区在线观看| 丁香婷婷综合网| 欧美色精品天天在线观看视频| 国产日本欧洲亚洲| 免费观看30秒视频久久| 欧美网站一区二区| 成人欧美一区二区三区黑人麻豆| 日本不卡一区二区三区高清视频| 在线视频你懂得一区| 中文字幕一区二区三区色视频| 国产精品66部| 国产亚洲精品超碰| 国产精品一区二区91| 欧美大片一区二区| 麻豆精品视频在线观看免费| 91精品久久久久久久久99蜜臂| 亚洲午夜久久久久久久久电影院| 日本韩国一区二区| 亚洲欧美另类小说| 色综合中文字幕国产 | 国产精品美女久久福利网站| 国产精品99久久久久| 亚洲精品一线二线三线| 国产91精品免费| 亚洲国产精品二十页| 国产91精品在线观看| 国产日韩成人精品| 成人免费高清在线| 综合自拍亚洲综合图不卡区| 91影院在线免费观看| 一区二区三区毛片| 精品视频资源站| 免费成人结看片| 久久综合九色综合欧美就去吻| 国产成人精品免费视频网站| 久久精品男人的天堂| 成人avav影音| 亚洲在线成人精品| 538在线一区二区精品国产| 男女视频一区二区| 久久精品夜夜夜夜久久| 成人黄色免费短视频| 一区二区三区四区精品在线视频| 欧美在线观看一二区| 日本免费新一区视频| 久久精品人人做人人综合 | 精品成人私密视频| 不卡视频免费播放| 亚洲国产wwwccc36天堂| 欧美电影免费观看高清完整版在线 | 精品国产百合女同互慰| 国产99精品视频| 亚洲最新在线观看| 欧美成人艳星乳罩| aa级大片欧美| 蜜桃视频一区二区| 国产精品免费视频观看| 欧美日韩卡一卡二| 国产99久久久国产精品潘金| 亚洲在线一区二区三区| 2019国产精品| 欧美日韩一区二区三区高清 | 日韩欧美国产三级电影视频| 成人av先锋影音| 免费欧美高清视频| 亚洲欧美视频一区| 亚洲精品一区二区三区蜜桃下载 | 国产成人免费视频精品含羞草妖精| 亚洲欧美日韩小说| 久久亚区不卡日本| 欧美日韩精品一区二区天天拍小说| 国产一区二区三区综合| 亚洲综合免费观看高清在线观看| 久久久久国产精品厨房| 欧美区一区二区三区| 99热精品国产| 国产乱色国产精品免费视频| 五月天欧美精品| 亚洲色大成网站www久久九九| 久久综合九色综合欧美亚洲| 欧美军同video69gay| 99久久亚洲一区二区三区青草| 国产主播一区二区| 丝瓜av网站精品一区二区| 亚洲色图20p| 中文字幕亚洲区| 国产免费成人在线视频| 日韩精品一区国产麻豆| 69堂国产成人免费视频| 在线观看不卡一区| 一本一本大道香蕉久在线精品 | 久久综合成人精品亚洲另类欧美 | 成人毛片在线观看| 黄色成人免费在线| 免费看日韩a级影片| 日韩电影免费在线| 午夜不卡av免费| 日日嗨av一区二区三区四区| 亚洲国产人成综合网站| 一区二区三区日韩| 中文字幕中文字幕中文字幕亚洲无线| 久久伊人中文字幕| 久久精品网站免费观看| 精品sm在线观看| 国产欧美精品一区二区色综合朱莉| 久久天堂av综合合色蜜桃网| 久久久精品2019中文字幕之3| 精品人在线二区三区| 精品国产三级电影在线观看| 精品少妇一区二区三区在线播放| 日韩精品一区二| 国产亚洲欧美激情| 国产精品入口麻豆原神| 亚洲欧美自拍偷拍色图| 亚洲三级小视频| 亚洲成人免费视频| 免费观看91视频大全| 狠狠色丁香婷婷综合久久片| 国产suv精品一区二区6| 99国产精品久久| 欧美日产在线观看| 欧美成人福利视频| 欧美韩日一区二区三区四区| 自拍偷拍亚洲综合| 天堂资源在线中文精品| 美脚の诱脚舐め脚责91| 国产99一区视频免费| 91麻豆福利精品推荐| 欧美高清视频在线高清观看mv色露露十八| 91精品国产一区二区三区蜜臀 | 亚洲欧美日韩一区二区| 亚洲小少妇裸体bbw| 久久精品久久99精品久久| 国产精品一区二区三区四区| av激情成人网| 91精品久久久久久久91蜜桃| 国产情人综合久久777777| 亚洲精品免费播放| 久久成人18免费观看| 北条麻妃国产九九精品视频| 欧美日韩精品欧美日韩精品一| 精品捆绑美女sm三区| 亚洲女人小视频在线观看| 日韩精品亚洲一区二区三区免费| 国产成人自拍高清视频在线免费播放| 日本高清不卡在线观看| 久久在线观看免费| 一区二区三区 在线观看视频| 久久精品国产99国产| 在线精品亚洲一区二区不卡| 精品对白一区国产伦| 亚洲影视在线播放| 国产精品66部| 日韩一级精品视频在线观看| 亚洲啪啪综合av一区二区三区| 韩国av一区二区三区四区| 欧美亚洲高清一区| 国产精品污污网站在线观看| 蜜桃一区二区三区在线| 97aⅴ精品视频一二三区| 精品成人在线观看| 日韩在线观看一区二区| 99re热这里只有精品免费视频| 精品91自产拍在线观看一区| 亚洲va韩国va欧美va| 91婷婷韩国欧美一区二区| 亚洲黄色免费电影| 国产一区二区免费视频| 欧美日韩aaa| 亚洲国产一区二区三区青草影视| gogo大胆日本视频一区| 久久久久97国产精华液好用吗| 奇米四色…亚洲| 欧美电影影音先锋| 天天操天天色综合| 欧美视频一区二区三区| 亚洲人成伊人成综合网小说| 成人国产精品免费观看动漫| 久久久国际精品| 国产激情一区二区三区| 久久综合一区二区| 国内精品免费在线观看| 精品美女在线观看|