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

📄 sipheader.h

📁 MiniSip Client with DomainKeys Authentication, Sip, Audio communications, Echo Cancel
💻 H
字号:
/*  Copyright (C) 2005, 2004 Erik Eliasson, Johan Bilien    This library is free software; you can redistribute it and/or  modify it under the terms of the GNU Lesser General Public  License as published by the Free Software Foundation; either  version 2.1 of the License, or (at your option) any later version.  This library is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  Lesser General Public License for more details.  You should have received a copy of the GNU Lesser General Public  License along with this library; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*//* * Authors: Erik Eliasson <eliasson@it.kth.se> *          Johan Bilien <jobi@via.ecp.fr>*//* Name * 	SipHeader.h * Author * 	Erik Eliasson, eliasson@it.kth.se * Purpose * */#ifndef SIPHEADER_H#define SIPHEADER_H#include<libmsip/libmsip_config.h>#include<libmutil/MemObject.h>#include<libmutil/minilist.h>#include<libmutil/mtypes.h>#include<map>#include<sys/types.h>/** * @author Erik Eliasson*/#define SIP_HEADER_TYPE_ACCEPT			0#define SIP_HEADER_TYPE_AUTHORIZATION		1#define SIP_HEADER_TYPE_CALLID			2#define SIP_HEADER_TYPE_CONTACT			3#define SIP_HEADER_TYPE_CONTENTLENGTH		4#define SIP_HEADER_TYPE_CONTENTTYPE		5#define SIP_HEADER_TYPE_CSEQ			6#define SIP_HEADER_TYPE_EVENT			7#define SIP_HEADER_TYPE_EXPIRES			8#define SIP_HEADER_TYPE_FROM			9#define SIP_HEADER_TYPE_MAXFORWARDS		10#define SIP_HEADER_TYPE_PROXYAUTHENTICATE	11#define SIP_HEADER_TYPE_PROXYAUTHORIZATION	12#define SIP_HEADER_TYPE_RECORDROUTE		13#define SIP_HEADER_TYPE_ROUTE			14#define SIP_HEADER_TYPE_SUBJECT			15#define SIP_HEADER_TYPE_TO			16#define SIP_HEADER_TYPE_USERAGENT		17#define SIP_HEADER_TYPE_VIA			18#define SIP_HEADER_TYPE_UNKNOWN                 19#define SIP_HEADER_TYPE_ACCEPTCONTACT		20#define SIP_HEADER_TYPE_WARNING			21#define SIP_HEADER_TYPE_REFERTO			22#define SIP_HEADER_TYPE_WWWAUTHENTICATE		25#define SIP_HEADER_TYPE_SUPPORTED		26#define SIP_HEADER_TYPE_UNSUPPORTED		27#define SIP_HEADER_TYPE_REQUIRE			28#define SIP_HEADER_TYPE_RACK			29#define SIP_HEADER_TYPE_RSEQ			30class SipHeaderValue;typedef MRef<SipHeaderValue*>(*SipHeaderFactoryFuncPtr)(const std::string & buf);class LIBMSIP_API SipHeaderFactories{	public:		void addFactory(std::string contentType, SipHeaderFactoryFuncPtr);		SipHeaderFactoryFuncPtr getFactory(const std::string contentType);	private:		std::map<std::string, SipHeaderFactoryFuncPtr > factories;};class LIBMSIP_API SipHeaderParameter:public MObject{	public:		SipHeaderParameter(std::string parseFrom);		SipHeaderParameter(std::string key, std::string value, bool hasEqual);	//hasEqual is there to support ;lr		std::string getMemObjectType(){return "SipHeaderParameter";}		std::string getKey(){return key;}		std::string getValue(){return value;}		void setValue(std::string v){value=v;}		std::string getString();			private:		std::string key;		std::string value;		bool hasEqual;};class LIBMSIP_API SipHeaderValue : public MObject{	public:		SipHeaderValue(int type, const std::string &hName);		virtual std::string getString()=0;			int getType(){return type;}		void setParameter(std::string key, std::string val){			if (val.size()>0){				MRef<SipHeaderParameter*> param = new SipHeaderParameter(key,val,true);				addParameter(param);			}else{				removeParameter(key);			}		}		void addParameter(MRef<SipHeaderParameter*> p){			//If key already exist, change the existing value			//(a key can only exist once)			for (int i=0; i< parameters.size();i++){				if (parameters[i]->getKey()==p->getKey()){					parameters[i]->setValue(p->getValue());					//cerr<<"p->getValue() "+p->getValue()<<endl;					return;				}			}			parameters.push_back(p);		}		bool hasParameter(const std::string &key){			for (int i=0; i< parameters.size();i++){				if (parameters[i]->getKey()==key){					return true;				}			}			return false;		}		std::string getParameter(std::string key){			for (int i=0; i< parameters.size();i++){				if (parameters[i]->getKey()==key){					return parameters[i]->getValue();				}			}			return "";		}		void removeParameter(std::string key){			for (int i=0; i< parameters.size(); i++){				if (parameters[i]->getKey()==key){					parameters.remove(i);					i=0;				}			}				}		std::string getStringWithParameters(){			std::string parameterList;			int nparam = parameters.size();			for (int i=0; i< nparam; i++){				parameterList+=";"+parameters[i]->getString();			}			return getString()+parameterList;		}		const std::string &headerName;	protected:		int type;		minilist<MRef<SipHeaderParameter*> > parameters;};class LIBMSIP_API SipHeader : public MObject{	public:		static SipHeaderFactories headerFactories;				                SipHeader(MRef<SipHeaderValue*> value);		virtual ~SipHeader();		std::string getString();		void addHeaderValue(MRef<SipHeaderValue*> v);                virtual std::string getMemObjectType(){return "SipHeader";}		int32_t getType(){return type;}		int getNoValues(){return headerValues.size();}		MRef<SipHeaderValue *> getHeaderValue(int i){			assert(i < headerValues.size() );			return headerValues[i];		}		static MRef<SipHeader *> parseHeader(const std::string &buildFrom);	private:		int32_t type;		std::string headerName;		minilist<MRef<SipHeaderValue*> > headerValues;};#endif

⌨️ 快捷键说明

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