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

📄 diameter_msg.h

📁 用来作为linux中SIP SERVER,完成VOIP网络电话中服务器的功能
💻 H
字号:
/* * $Id: diameter_msg.h,v 1.3 2004/08/24 08:58:25 janakj Exp $ * * 2003-04-07 created by bogdan * * Copyright (C) 2002-2003 FhG Fokus * * This file is part of disc, a free diameter server/client. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License  * along with this program; if not, write to the Free Software  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ifndef _AAA_DIAMETER_MSG_H#define _AAA_DIAMETER_MSG_H#include "../../str.h"#include "../../mem/mem.h"#define ad_malloc	pkg_malloc#define ad_free		pkg_free/*********************************** AAA TYPES *******************************/#define AAA_NO_VENDOR_ID           0#define VER_SIZE                   1#define MESSAGE_LENGTH_SIZE        3#define FLAGS_SIZE                 1#define COMMAND_CODE_SIZE          3#define APPLICATION_ID_SIZE        4#define HOP_BY_HOP_IDENTIFIER_SIZE 4#define END_TO_END_IDENTIFIER_SIZE 4#define AVP_CODE_SIZE      4#define AVP_FLAGS_SIZE     1#define AVP_LENGTH_SIZE    3#define AVP_VENDOR_ID_SIZE 4#define AAA_MSG_HDR_SIZE  \	(VER_SIZE + MESSAGE_LENGTH_SIZE + FLAGS_SIZE + COMMAND_CODE_SIZE +\	APPLICATION_ID_SIZE+HOP_BY_HOP_IDENTIFIER_SIZE+END_TO_END_IDENTIFIER_SIZE)#define AVP_HDR_SIZE(_flags_)  \	(AVP_CODE_SIZE+AVP_FLAGS_SIZE+AVP_LENGTH_SIZE+\	AVP_VENDOR_ID_SIZE*(((_flags_)&AAA_AVP_FLAG_VENDOR_SPECIFIC)!=0) )/* message codes */#ifndef WORDS_BIGENDIAN	#define AS_MSG_CODE      0x12010000	#define AC_MSG_CODE      0x0f010000	#define CE_MSG_CODE      0x01010000	#define DW_MSG_CODE      0x18010000	#define DP_MSG_CODE      0x1a010000	#define RA_MSG_CODE      0x02010000	#define ST_MSG_CODE      0x13010000	#define MASK_MSG_CODE    0xffffff00#else	#error BIG endian detected!!	#define AS_MSG_CODE      0x00000112	#define AC_MSG_CODE      0x0000010f	#define CE_MSG_CODE      0x00000101	#define DW_MSG_CODE      0x00000118	#define DP_MSG_CODE      0x0000011a	#define RA_MSG_CODE      0x00000102	#define ST_MSG_CODE      0x00000113	#define MASK_MSG_CODE    0x00ffffff#endiftypedef unsigned int    AAACommandCode;typedef unsigned int    AAAVendorId;typedef unsigned int    AAAExtensionId;typedef unsigned int    AAA_AVPCode;typedef unsigned int    AAAValue;typedef unsigned int    AAAApplicationId;typedef void*           AAAApplicationRef;typedef str             AAASessionId;typedef unsigned int    AAAMsgIdentifier;typedef unsigned char   AAAMsgFlag;/* Status codes returned by functions in the AAA API */typedef enum {	AAA_ERR_NOT_FOUND = -2,         /* handle or id not found */	AAA_ERR_FAILURE   = -1,         /* unspecified failure during an AAA op. */	AAA_ERR_SUCCESS   =  0,         /* AAA operation succeeded */	AAA_ERR_NOMEM,                  /* op. caused memory to be exhausted */	AAA_ERR_PROTO,                  /*  AAA protocol error */	AAA_ERR_SECURITY,	AAA_ERR_PARAMETER,	AAA_ERR_CONFIG,	AAA_ERR_UNKNOWN_CMD,	AAA_ERR_MISSING_AVP,	AAA_ERR_ALREADY_INIT,	AAA_ERR_TIMED_OUT,	AAA_ERR_CANNOT_SEND_MSG,	AAA_ERR_ALREADY_REGISTERED,	AAA_ERR_CANNOT_REGISTER,	AAA_ERR_NOT_INITIALIZED,	AAA_ERR_NETWORK_ERROR,} AAAReturnCode;/* The following are AVP data type codes. They correspond directly to * the AVP data types outline in the Diameter specification [1]: */typedef enum {	AAA_AVP_DATA_TYPE,	AAA_AVP_STRING_TYPE,	AAA_AVP_ADDRESS_TYPE,	AAA_AVP_INTEGER32_TYPE,	AAA_AVP_INTEGER64_TYPE,	AAA_AVP_TIME_TYPE,} AAA_AVPDataType;/* The following are used for AVP header flags and for flags in the AVP *  wrapper struct and AVP dictionary definitions. */typedef enum {	AAA_AVP_FLAG_NONE               = 0x00,	AAA_AVP_FLAG_MANDATORY          = 0x40,	AAA_AVP_FLAG_RESERVED           = 0x1F,	AAA_AVP_FLAG_VENDOR_SPECIFIC    = 0x80,	AAA_AVP_FLAG_END_TO_END_ENCRYPT = 0x20,} AAA_AVPFlag;/* List with all known application identifiers */typedef enum {	AAA_APP_DIAMETER_COMMON_MSG  = 0,	AAA_APP_NASREQ               = 1,	AAA_APP_MOBILE_IP            = 2,	AAA_APP_DIAMETER_BASE_ACC    = 3,	AAA_APP_RELAY                = 0xffffffff,}AAA_APP_IDS;/* The following are the result codes returned from remote servers as * part of messages */typedef enum {	AAA_MUTI_ROUND_AUTH           = 1001,	AAA_SUCCESS                   = 2001,	AAA_COMMAND_UNSUPPORTED       = 3001,	AAA_UNABLE_TO_DELIVER         = 3002,	AAA_REALM_NOT_SERVED          = 3003,	AAA_TOO_BUSY                  = 3004,	AAA_LOOP_DETECTED             = 3005,	AAA_REDIRECT_INDICATION       = 3006,	AAA_APPLICATION_UNSUPPORTED   = 3007,	AAA_INVALID_HDR_BITS          = 3008,	AAA_INVALID_AVP_BITS          = 3009,	AAA_UNKNOWN_PEER              = 3010,	AAA_AUTHENTICATION_REJECTED   = 4001,	AAA_OUT_OF_SPACE              = 4002,	AAA_ELECTION_LOST             = 4003,	AAA_AVP_UNSUPPORTED           = 5001,	AAA_UNKNOWN_SESSION_ID        = 5002,	AAA_AUTHORIZATION_REJECTED    = 5003,	AAA_INVALID_AVP_VALUE         = 5004,	AAA_MISSING_AVP               = 5005,	AAA_RESOURCES_EXCEEDED        = 5006,	AAA_CONTRADICTING_AVPS        = 5007,	AAA_AVP_NOT_ALLOWED           = 5008,	AAA_AVP_OCCURS_TOO_MANY_TIMES = 5009,	AAA_NO_COMMON_APPLICATION     = 5010,	AAA_UNSUPPORTED_VERSION       = 5011,	AAA_UNABLE_TO_COMPLY          = 5012,	AAA_INVALID_BIT_IN_HEADER     = 5013,	AAA_INVALIS_AVP_LENGTH        = 5014,	AAA_INVALID_MESSGE_LENGTH     = 5015,	AAA_INVALID_AVP_BIT_COMBO     = 5016,	AAA_NO_COMMON_SECURITY        = 5017,} AAAResultCode;typedef enum {	AVP_User_Name                     =    1,	AVP_Class                         =   25,	AVP_Session_Timeout               =   27,	AVP_Proxy_State                   =   33,	AVP_Host_IP_Address               =  257,	AVP_Auth_Application_Id            =  258,	AVP_Vendor_Specific_Application_Id=  260,	AVP_Redirect_Max_Cache_Time       =  262,	AVP_Session_Id                    =  263,	AVP_Origin_Host                   =  264,	AVP_Supported_Vendor_Id           =  265,	AVP_Vendor_Id                     =  266,	AVP_Result_Code                   =  268,	AVP_Product_Name                  =  269,	AVP_Session_Binding               =  270,	AVP_Disconnect_Cause              =  273,	AVP_Auth_Request_Type             =  274,	AVP_Auth_Grace_Period             =  276,	AVP_Auth_Session_State            =  277,	AVP_Origin_State_Id               =  278,	AVP_Proxy_Host                    =  280,	AVP_Error_Message                 =  281,	AVP_Record_Route                  =  282,	AVP_Destination_Realm             =  283,	AVP_Proxy_Info                    =  284,	AVP_Re_Auth_Request_Type          =  285,	AVP_Authorization_Lifetime        =  291,	AVP_Redirect_Host                 =  292,	AVP_Destination_Host              =  293,	AVP_Termination_Cause             =  295,	AVP_Origin_Realm                  =  296,/* begin SIP AAA with DIAMETER*/	AVP_Resource					  =  400,	AVP_Response					  =  401,		AVP_Challenge					  =  402,	AVP_Method						  =  403,	AVP_Service_Type				  =  404,	AVP_User_Group					  =  405,	AVP_SIP_MSGID					  =  406	/* end SIP AAA with DIAMETER */}AAA_AVPCodeNr;/*   The following type allows the client to specify which direction to *   search for an AVP in the AVP list: */typedef enum {	AAA_FORWARD_SEARCH = 0,	AAA_BACKWARD_SEARCH} AAASearchType;typedef enum {	AAA_ACCT_EVENT = 1,	AAA_ACCT_START = 2,	AAA_ACCT_INTERIM = 3,	AAA_ACCT_STOP = 4} AAAAcctMessageType;typedef enum {	AVP_DUPLICATE_DATA,	AVP_DONT_FREE_DATA,	AVP_FREE_DATA,} AVPDataStatus;/* The following structure contains a message AVP in parsed format */typedef struct avp {	struct avp *next;	struct avp *prev;	enum {		AAA_RADIUS,		AAA_DIAMETER	} packetType;	AAA_AVPCode code;	AAA_AVPFlag flags;	AAA_AVPDataType type;	AAAVendorId vendorId;	str data;	unsigned char free_it;} AAA_AVP;/* The following structure is used for representing lists of AVPs on the * message: */typedef struct _avp_list_t {	AAA_AVP *head;	AAA_AVP *tail;} AAA_AVP_LIST;/* The following structure contains the full AAA message: */typedef struct _message_t {	AAAMsgFlag          flags;	AAACommandCode      commandCode;	AAAApplicationId    applicationId;	AAAMsgIdentifier    endtoendId;	AAAMsgIdentifier    hopbyhopId;	AAASessionId        *sId;	AAA_AVP             *sessionId;	AAA_AVP             *orig_host;	AAA_AVP             *orig_realm;	AAA_AVP             *dest_host;	AAA_AVP             *dest_realm;	AAA_AVP             *res_code;	AAA_AVP             *auth_ses_state;	AAA_AVP_LIST        avpList;	str                 buf;	void                *in_peer;} AAAMessage;/**************************** AAA MESSAGE FUNCTIONS **************************//* MESSAGES */#define is_req(_msg_) \	(((_msg_)->flags)&0x80)AAAMessage *AAAInMessage(		AAACommandCode commandCode,		AAAApplicationId appId);AAAReturnCode AAAFreeMessage(		AAAMessage **message);AAAReturnCode AAASetMessageResultCode(		AAAMessage *message,		AAAResultCode resultCode);void AAAPrintMessage(		AAAMessage *msg);AAAReturnCode AAABuildMsgBuffer(		AAAMessage *msg );AAAMessage* AAATranslateMessage(		unsigned char* source,		unsigned int sourceLen,		int attach_buf );/* AVPS */#define AAACreateAndAddAVPToMessage(_msg_,_code_,_flags_,_vdr_,_data_,_len_) \	( AAAAddAVPToMessage(_msg_, \	AAACreateAVP(_code_,_flags_,_vdr_,_data_,_len_, AVP_DUPLICATE_DATA),\	(_msg_)->avpList.tail) )AAA_AVP* AAACreateAVP(		AAA_AVPCode code,		AAA_AVPFlag flags,		AAAVendorId vendorId,		char *data,		unsigned int length,		AVPDataStatus data_status);AAA_AVP* AAACloneAVP(		AAA_AVP *avp,		unsigned char duplicate_data );AAAReturnCode AAAAddAVPToMessage(		AAAMessage *msg,		AAA_AVP *avp,		AAA_AVP *position);AAA_AVP *AAAFindMatchingAVP(		AAAMessage *msg,		AAA_AVP *startAvp,		AAA_AVPCode avpCode,		AAAVendorId vendorId,		AAASearchType searchType);AAAReturnCode AAARemoveAVPFromMessage(		AAAMessage *msg,		AAA_AVP *avp);AAAReturnCode AAAFreeAVP(		AAA_AVP **avp);AAA_AVP* AAAGetFirstAVP(		AAA_AVP_LIST *avpList);AAA_AVP* AAAGetLastAVP(		AAA_AVP_LIST *avpList);AAA_AVP* AAAGetNextAVP(		AAA_AVP *avp);AAA_AVP* AAAGetPrevAVP(		AAA_AVP *avp);char *AAAConvertAVPToString(		AAA_AVP *avp,		char *dest,		unsigned int destLen);#endif

⌨️ 快捷键说明

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