📄 transfer.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 + -