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

📄 header.c

📁 sip代理服务器源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	if(url==NULL||buff==NULL)		return -1;	//DisplayName	strcpy(tmp,buff);	res=analyze_displayname(tmp,url);	//UserInfot	strcpy(tmp,buff);	res=analyze_user_info(tmp,url);	//if(res!=0) return res;	//HostPort	strcpy(tmp,buff);	res=analyze_host_port(tmp,url);	if(res!=0) return res;	//Analyze URI Params	//>で矢机误を贿める	strcpy(tmp,buff);	ptr=strchr(tmp,'>');	if(ptr!=NULL){		*ptr='\0';	}	//セミコロンがあれば、パラメ〖タがある	ptr=strchr(tmp,';');	if(ptr!=NULL){		res=analyze_params(++ptr,&(url->param));		if(res!=OK) return res;	}	//AUX Parameter	strcpy(tmp,buff);	ptr=strchr(tmp,'>');	if(ptr!=NULL){		if(NULL!=(strchr(++ptr,';'))){			if(strlen(ptr)>CLEN){				logging(2,"extra param too long");				logging(2,ptr);				return NG;			}else{				strcpy(url->aux,ptr);			}			//tag猛を藐叫			if(strncmp(ptr,";tag=",strlen(";tag="))==0){				ptr+=strlen(";tag=");				strcpy(url->tag,ptr);			}		}	}	return OK;}int AnalyzeIntHeader(char *buff,int  *val){	if(val==NULL||buff==NULL) return -1;	*val = atoi(buff);	return OK;}int AnalyzeCharHeader(char *buff, char *val){	char	*ptr;	if(buff==NULL||val==NULL)	return -1;	ptr=SkipChars(buff,' ');	if(strlen(ptr) >CLEN-1) return -2;	strcpy(val,ptr);	return 0;}int AnalyzeVia(char *buff,VIA *via){	char	*ptr;	char	*ptr1;	char	tmp[SCLEN];	int	len;	int	ret;	ptr=buff;	len=SCLEN;	ptr=SkipChars(ptr,' ');	ptr=SeparateLex1(ptr,'/',tmp,&len);	if(len>0 && len <SCLEN && ptr!=NULL){		strcpy(via->proto,tmp);	}else{		return NG;	}	len=SCLEN;	ptr=SeparateLex1(ptr,'/',tmp,&len);	if(len>0 && len <SCLEN && ptr!=NULL){		strcpy(via->ver,tmp);	}else{		return NG-1;	}	len=SCLEN;	ptr=SeparateLex1(ptr,' ',tmp,&len);	if(len>0 && len <SCLEN && ptr!=NULL){		strcpy(via->trans,tmp);	}else{		return NG-2;	}	ptr=SkipChars(ptr,' ');	len=SCLEN;	//ポ〖ト戎规はあるか々	ptr1=SeparateLex1(ptr,':',tmp,&len);	if(ptr1!=NULL){		ptr=ptr1;			if(len>0 && len <SCLEN ){			//ポ〖ト戎规がある			strcpy(via->host,tmp);			ptr1=SeparateLex1(ptr,';',tmp,&len);			//パラメ〖タまであるか 			if(ptr1!=NULL){				if(len>0 && len <SCLEN){					//ポ〖ト戎规はありパラメ〖タもある 					via->port=atoi(tmp);				}else{					return NG-3;				}			}else{				//ポ〖ト戎规はあるがパラメ〖タはない 				via->port=atoi(ptr);			}			ptr=ptr1;		}else{			return NG-4;		}	}else{		//ポ〖ト戎规がない 		via->port=SIP_PORT;		ptr1=SeparateLex1(ptr,';',tmp,&len);		//パラメ〖タまであるか 		if(len>0 && len <SCLEN && ptr1!=NULL){			//ポ〖ト戎规はありパラメ〖タもある 			strcpy(via->host,tmp);		}else{			strcpy(via->host,ptr);		}		ptr=ptr1;	}	//パラメ〖タの豺老 	if(ptr!=NULL) {			ret=analyze_params(ptr,&(via->param));		if(ret!=OK){			return NG-4;		}	}	return OK;	}int AnalyzeCSeq(char *buff,CSEQ *cseq){	char	tmp[2][128];	char	*ptr[2];	ptr[0]=tmp[0];ptr[1]=tmp[1];	SeparateLex(buff,' ',ptr,2);	cseq->seq=atoi(tmp[0]);	strcpy(cseq->method,tmp[1]);	return 0;	}int AddVia(VIA **top,unsigned char *hash){	VIA	*ptr;	char	branch[256];	//topからはじまるVIAセリ〖の办戎呵介に极サ〖バ攫鼠を纳裁する	//办戎呵稿のVIAを梳まえる	//	//VIAエリアを澄瘦する	ptr=(VIA *)malloc(sizeof(VIA));	if(ptr==NULL){		logging(1,"memory short (234)");		return NG;	}	memset(ptr,0,sizeof(VIA));	//攫鼠肋年	strcpy(ptr->proto,"SIP");	strcpy(ptr->ver,"2.0");	strcpy(ptr->trans,"UDP");	strcpy(ptr->host,HOSTID);	ptr->port=HOSTPORT;	sprintf(branch,"%s%s",MAGIC,hash);	*branch='\0';		strcpy(ptr->param.branch,branch);	//纳裁する	if(NULL==*top){		*top=ptr;	}else{		ptr->next=*top;		*top=ptr;	}	return OK;}int AddURI(URI **top){	URI	*ptr;	//topからはじまるURIセリ〖の办戎呵介に极サ〖バ攫鼠を纳裁する	//	//URIエリアを澄瘦する	ptr=(URI *)malloc(sizeof(URI));	if(ptr==NULL){		logging(1,"memory short (2345)");		return NG;	}	memset(ptr,0,sizeof(URI));	//纳裁する	if(NULL==*top){		*top=ptr;	}else{		ptr->next=*top;		*top=ptr;	}	//攫鼠肋年	strcpy(ptr->host,HOSTID);	ptr->port=HOSTPORT;	sprintf(ptr->username,"NTTPC%d",getpid());	return OK;}int SearchVia(VIA **top,char *host,int *port){	VIA	*ptr;	//VIA topが极尸であるかどうか浮汉する	ptr=*top;	if (ptr==NULL){		logging(2,"Not found Via in Response(344)");		return NG;	}	//极サ〖バ案かどうか浮汉する	if(strcmp(HOSTID,ptr->host)==0){		//极サ〖バ案である		*top=ptr->next;		//呵稿萨VIAを久殿する		free(ptr);		ptr=*top;	}	strcpy(host,ptr->host);	*port=ptr->port;	return OK;}int DeleteURI(URI **top){	URI	*ptr;	if(top==NULL){		logging(3,"Invlid parameter BUG(Delete URI)");		return NG;	}	//URI topが极尸であるかどうか浮汉する	ptr=*top;	if (ptr==NULL){		return OK;	}	//极サ〖バ案かどうか浮汉する	if(strcmp(HOSTID,ptr->host)==0){		//极サ〖バ案である		*top=ptr->next;		//呵稿萨VIAを久殿する		free(ptr);	}	return OK;}void DisplayURI(int level,URI *uri){	printf("DisplayName:%s\n",uri->display);	printf("UserName:%s\n",uri->username);	printf("Password:%s\n",uri->password);	printf("Host:%s\n",uri->host);	printf("Port:%d\n",uri->port);	printf("tag:%s\n",uri->param.tag);	printf("maddr:%s\n",uri->param.maddr);	printf("branch:%s\n",uri->param.branch);	printf("ttl:%d\n",uri->param.ttl);	printf("lr:%d\n",uri->param.lr);	printf("transport:%s\n",uri->param.transport);	printf("user:%s\n",uri->param.user);	printf("method:%s\n",uri->param.method);	printf("param.aux:%s\n",uri->param.aux);	printf("tag:%s\n",uri->tag);	printf("aux:%s\n",uri->aux);	printf("------------------------------\n");}void DisplayPAUTH(PAUTH *pauth){	if(pauth==NULL) return;	printf("realm=%s\n",pauth->realm);	printf("domain=%s\n",pauth->domain);	printf("qop=%s\n",pauth->qop);	printf("opaque=%s\n",pauth->opaque);	printf("nonce=%s\n",pauth->nonce);	printf("cnonce=%s\n",pauth->cnonce);	printf("nc=%s\n",pauth->nc);	printf("uri=%s\n",pauth->uri);	printf("username=%s\n",pauth->username);	printf("algorithm=%s\n",pauth->algorithm);	printf("stale=%s\n",pauth->stale);	printf("response=%s\n",pauth->response);	printf("aux=%s\n",pauth->aux);}#ifdef TESTstatic void trim(char *p){	for(;*p;p++){		if(*p==0x0d||*p==0x0a){			*p='\0';			break;		}	}}static void test_URI(int argc ,char **argv){	char	buff[256];	FILE	*fp;	URI	url;	int	res;	if(argc<2){		exit(0);	}	fp=fopen(argv[1],"r");	if(fp==NULL){		exit(0);	}	for(;fgets(buff,200,fp);){		trim(buff);		memset(&url,0,sizeof(URI));		printf("------------------------\n");		printf("%s\n",buff);		printf("----\n");		res=AnalyzeURI(buff,&url);		printf("res=%d\n",res);		if(res==OK){			DisplayURI(1,&url);		}	}	fclose(fp);}static void testVIA(int argc,char **argv){		VIA	via;	int ret;	char	mes[]="SIP/2.0/UDP 10.1.2.3:5060;branch=sidugy9suga;received=192.168.10.2";			printf("Original mes=%s\n",mes);	memset(&via,0,sizeof(VIA));	ret=AnalyzeVia(mes,&via);	printf("ret=%d\n",ret);	printf("proto=%s\n",via.proto);	printf("ver=%s\n",via.ver);	printf("trans=%s\n",via.trans);	printf("host=%s\n",via.host);	printf("port=%d\n",via.port);	printf("branch=%s\n",via.param.branch);}main(int argc,char **argv){	testVIA(argc,argv);		//test_URI(argc,argv);}#endif

⌨️ 快捷键说明

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