⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transfer.c

📁 sip代理服务器源码
💻 C
字号:
/***********************************************************************\	SIP Server		Date		Ver		Author		MemoRandom	Jul 3,2002	1.0		Hiroaki Hata	Created	(C) 2002 All Copyrights reserved. *************************************************************************/#include <sys/types.h>#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <netdb.h>#include "udp.h"#include "sipd.h"#include "parser.h"#define	DEBUG if(debug==1){#define DBGint Transfer(MESSAGE *mes){	MESSAGE	nmes;	int ret;	int selfdomain;	URI	contact;	char	sbuff[3000];	char	host[CLEN];	char	tmp[CLEN];	int	port;	int	i;	int	auth=NO;	char	passwd[128];	unsigned char hash[48];	nmes.header.contact=&contact;	//nmes.header.via=&via;	nmes.header.via=NULL;	//啪流黎を疯年する	switch(mes->start.type){	case RESPONSE:	//レスポンスならViaヘッダから啪流黎を疯年する		ret=SearchVia(&mes->header.via,host,&port);		/* bug ? 2003/5/29		//Record-Routeのトップが极尸なら猴近		ret=DeleteURI(&mes->header.recordroute);		*/		//啪流バッファを浩菇喇する		ret=MakeSendBuffer(mes,sbuff);		if(ret!=OK){			sprintf(sbuff,"Send:Make buffer error(Response)=%d\n"					,ret);			logging(2,sbuff);			return ret;		}		break;	//リクエストなら	//极ドメイン案もRouteヘッダを借妄するように恃构 Aug.27 2003	case REQUEST:		selfdomain=0;		for(i=0;i<DOMAIN_MAX;i++){			//极ドメイン案であるか浮汉する			if(strcmp(domain[i],mes->header.to.host)==0){				selfdomain=1;				break;			}		}			//啪流黎を疯年する		if(selfdomain == 0){		//戮ドメイン案				ret=SearchTransferAddress(mes,host,&port,&auth,passwd);			if(ret!=OK){				Response(E_NOTFOUND,mes);				logging(2,"Self Domain Table Search");				return OK;			}		}else{		//极ドメイン案				ret=SearchTransferAddress(mes,host,&port,&auth,passwd);			//Routeヘッダの柒推は痰浑して、Toからあて黎をきめる			//极デ〖タベ〖スを浮瑚してContactを滇める			strcpy(nmes.header.from.username,					mes->header.to.username);			strcpy(nmes.header.from.host,					mes->header.to.host);			ret=GetREGDB(&nmes);			//DBにヒットしなかった			if(ret==0){				Response(E_NOTFOUND,mes);				return OK;			}else if(ret>0){				//デ〖タベ〖スにヒットした啪流黎がある				strcpy(host, nmes.header.contact->host);				port=nmes.header.contact->port;				if(port==0) port=SIP_PORT;					}else{				//デ〖タベ〖スアクセスエラ〖				logging(3,"DB Error (transfer)");				return NG;			}		}		//Maxfordsをデクリメント		if(mes->header.maxforwards==0 ||				mes->header.maxforwards==1){			Response(E_MANYHOP,mes);			return OK;		}		mes->header.maxforwards--;		//极サ〖バのVIAヘッダを纳裁する		CalcHash(mes,hash);		ret=AddVia(&mes->header.via,hash);		if(ret!=OK){			return ret;		}		//Record-Routeの赁掐		ret=AddURI(&mes->header.recordroute);		if(ret!=OK){			return ret;		}	}	if(ret!=OK){		return ret;	}	if(auth==YES && mes->start.type==REQUEST			&& mes->start.message==M_INVITE){		//千沮が涩妥なサ〖バにINVITEを流る眷圭はステ〖トフル瓢侯		strcpy(mes->to_ip,host);		mes->to_port=port;		ret=GetAuthentication(mes,passwd);	}else{		//啪流バッファを浩菇喇する		ret=MakeSendBuffer(mes,sbuff);		if(ret!=OK){			sprintf(sbuff,"Send:Make buffer error(request)=%d" 					,ret);			logging(2,sbuff);			return ret;		}DEBUG		logging(9,"------------浩菇喇バッファ-------------");		logging(9,sbuff);		logging(9,"------------啪流-----------------------");		sprintf(tmp,"Recv from IP:%s",mes->ip);		logging(9,tmp);		sprintf(tmp,"Sent to     :%s",host);		logging(9,tmp);DEND#ifndef EMULATION 		SendData(host, port, sbuff,strlen(sbuff));#endif	}	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -