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

📄 msg_types.h

📁 this is simple sip stack.
💻 H
字号:
/* * This file is part of the Sofia-SIP package * * Copyright (C) 2005 Nokia Corporation. * * Contact: Pekka Pessi <pekka.pessi@nokia.com> * * 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., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * */#ifndef MSG_TYPES_H/** Defined when <sofia-sip/msg_types.h> has been included. */#define MSG_TYPES_H/**@file sofia-sip/msg_types.h * @brief Types for messages and common headers *  * @author Pekka Pessi <Pekka.Pessi@nokia.com> *  * @date Created: Thu Jan 23 15:43:17 2003 ppessi * */#ifndef SU_CONFIG_H#include <sofia-sip/su_config.h>#endifSOFIA_BEGIN_DECLS/** Message class. */typedef struct msg_mclass_s       msg_mclass_t;/** Header class. */typedef struct msg_hclass_s const msg_hclass_t;/** Header reference. */typedef struct msg_href_s         msg_href_t;/** Message object. */typedef struct msg_s              msg_t;#ifndef MSG_TIME_T_DEFINED#define MSG_TIME_T_DEFINED/** Time in seconds since epoch (1900-Jan-01 00:00:00). */typedef unsigned long msg_time_t;#endif#ifndef MSG_TIME_MAX/** Latest time that can be expressed with msg_time_t. @HIDE */#define MSG_TIME_MAX ((msg_time_t)ULONG_MAX)#endif#ifndef MSG_PUB_T#ifdef MSG_OBJ_T #define MSG_PUB_T MSG_OBJ_T#else#define MSG_PUB_T struct msg_pub_s#endif#endif/**Public protocol-specific message structure for accessing the message.  *  * This type can be either #sip_t, #rtsp_t or #http_t, depending on the * message. The base structure used by msg module is defined in struct * #msg_pub_s. */typedef MSG_PUB_T msg_pub_t;#ifndef MSG_HDR_T#define MSG_HDR_T union msg_header_u#endif/** Any protocol-specific header object */typedef MSG_HDR_T msg_header_t;typedef struct msg_common_s         msg_common_t;typedef struct msg_separator_s      msg_separator_t;typedef struct msg_payload_s        msg_payload_t;typedef struct msg_unknown_s        msg_unknown_t;typedef struct msg_error_s          msg_error_t;typedef msg_common_t msg_frg_t;typedef char const            	   *msg_param_t;typedef struct msg_numeric_s  	    msg_numeric_t;typedef struct msg_generic_s  	    msg_generic_t;typedef struct msg_list_s     	    msg_list_t;typedef struct msg_auth_s     	    msg_auth_t;#define MSG_HEADER_N 16377/** Common part of the header objects (or message fragments).  * * This structure is also known as #sip_common_t or #rtsp_common_t. */struct msg_common_s {  msg_header_t       *h_succ;	/**< Pointer to succeeding fragment. */  msg_header_t      **h_prev;	/**< Pointer to preceeding fragment. */  msg_hclass_t       *h_class;	/**< Header class. */  void const         *h_data;	/**< Fragment data */  unsigned            h_len;    /**< Fragment length (including CRLF) */};/** Message object, common view */struct msg_pub_s {  msg_common_t        msg_common[1]; /**< Recursive */  msg_pub_t          *msg_next;  void               *msg_user;  unsigned            msg_size;  unsigned            msg_flags;  msg_error_t        *msg_error;  msg_header_t       *msg_request;  msg_header_t       *msg_status;  msg_header_t       *msg_headers[MSG_HEADER_N];};#define msg_ident msg_common->h_class/** Numeric header.  * * A numeric header has a 32-bit integer as its value. */struct msg_numeric_s {  msg_common_t   x_common[1];	    /**< Common fragment info */  msg_numeric_t *x_next;	    /**< Link to next header */  unsigned long  x_value;	    /**< Numeric header value */};/** Generic header.  * * A generic header does not have any internal structure. Its value is * represented as a string. */struct msg_generic_s {  msg_common_t   g_common[1];	    /**< Common fragment info */  msg_generic_t *g_next;	    /**< Link to next header */  char const    *g_string;	    /**< Header value */};/** List header.  *  * A list header consists of comma-separated list of tokens. */struct msg_list_s {  msg_common_t       k_common[1];   /**< Common fragment info */  msg_list_t        *k_next;	    /**< Link to next header */  msg_param_t       *k_items;	    /**< List of items */};/** Authentication header.  * * An authentication header has authentication scheme name and * comma-separated list of parameters as its value. */struct msg_auth_s {  msg_common_t       au_common[1];  /**< Common fragment info */  msg_auth_t        *au_next;	    /**< Link to next header */  char const        *au_scheme;	    /**< Auth-scheme like Basic or Digest */  msg_param_t const *au_params;	    /**< Comma-separated parameters */};/** Unknown header. */struct msg_unknown_s {  msg_common_t    un_common[1];  /**< Common fragment info */  msg_unknown_t  *un_next;	 /**< Link to next unknown header */  char const     *un_name;	 /**< Header name */  char const     *un_value;	 /**< Header field value */};/** Erroneus header. */struct msg_error_s {  msg_common_t    er_common[1];  /**< Common fragment info */  msg_error_t    *er_next;	 /**< Link to next header */  char const     *er_name;       /**< Name of bad header (if any). */};/** Separator. */struct msg_separator_s {  msg_common_t    sep_common[1]; /**< Common fragment info */  msg_error_t    *sep_next;	 /**< Dummy link to next header */  char            sep_data[4];	 /**< NUL-terminated separator */};/** Message payload. */struct msg_payload_s {  msg_common_t    pl_common[1];	    /**< Common fragment info */  msg_payload_t  *pl_next;	    /**< Next payload chunk */  char           *pl_data;	    /**< Data - may contain NUL */  unsigned        pl_len;	    /**< Length of message payload */};/** Any header. */union msg_header_u {  msg_common_t    sh_common[1];	    /**< Common fragment info */  struct {    msg_common_t  shn_common;    msg_header_t *shn_next;  }               sh_header_next[1];#define sh_next   sh_header_next->shn_next#define sh_class  sh_common->h_class#define sh_succ   sh_common->h_succ#define sh_prev   sh_common->h_prev#define sh_data   sh_common->h_data#define sh_len    sh_common->h_len  msg_generic_t   sh_generic[1];  msg_numeric_t   sh_numeric[1];  msg_list_t      sh_list[1];  msg_auth_t      sh_auth[1];  msg_separator_t sh_separator[1];  msg_payload_t   sh_payload[1];  msg_unknown_t   sh_unknown[1];  msg_error_t     sh_error[1];};/* ====================================================================== *//* Types used when handling streaming */typedef struct msg_buffer_s msg_buffer_t;/** Buffer for message body. */struct msg_buffer_s {  char           *b_data;	    /**< Data - may contain NUL */  unsigned        b_size;	    /**< Length of message payload */  unsigned        b_used;	    /**< Used data */  unsigned        b_avail;	    /**< Available data */  unsigned        b_complete;	    /**< This buffer completes the message */  msg_buffer_t   *b_next;	    /**< Next buffer */  msg_payload_t  *b_chunks;	    /**< List of body chunks */};#define MSG_SSIZE_MAX (UINT_MAX)/* ====================================================================== *//**Define how to handle existing headers  * when a new header is added to a message.  */typedef enum {  msg_kind_single,		/**< Only one header is allowed */  msg_kind_append,		/**< New header is appended */  msg_kind_list,		/**< A token list header, 				 * new header is combined with old one. */  msg_kind_apndlist,		/**< A complex list header. */  msg_kind_prepend		/**< New header is prepended */} msg_header_kind_t;struct su_home_s;typedef int msg_parse_f(struct su_home_s *, msg_header_t *, char *, int);typedef int msg_print_f(char buf[], int bufsiz, 			msg_header_t const *, int flags);typedef char *msg_dup_f(msg_header_t *dst, msg_header_t const *src, 			char *buf, int bufsiz);typedef int msg_xtra_f(msg_header_t const *h, int offset);typedef int msg_update_f(msg_common_t *, char const *name, int namelen,			 char const *value);/** Factory object for a header.  *  * The #msg_hclass_t object, "header class", defines how a header is * handled. It has parsing and printing functions, functions used to copy * header objects, header name and other information used when parsing, * printing, removing, adding and replacing headers within a message. */struct msg_hclass_s{  int               hc_hash;	/**< Header name hash or ID */  msg_parse_f      *hc_parse;	/**< Parse header. */  msg_print_f      *hc_print;	/**< Print header. */  msg_xtra_f       *hc_dxtra;	/**< Calculate extra size for dup */  msg_dup_f        *hc_dup_one;	/**< Duplicate one header. */  msg_update_f     *hc_update;	/**< Update parameter(s) */  char const 	   *hc_name;	/**< Full name. */  short             hc_len;	/**< Length of hc_name. */  char              hc_short[2];/**< Short name, if any. */  unsigned char     hc_size;	/**< Size of header structure. */  unsigned char     hc_params;	/**< Offset of parameters */  unsigned /* msg_header_kind_t */                    hc_kind:3;	/**< Kind of header:				 * single, append, list, apndlist, prepend. */  unsigned          hc_critical:1; /**< True if header is critical */  unsigned          /*pad*/:0;};/* ====================================================================== *//* Deprecated types *//** Reference to message object. @deprecated Use msg_t. */typedef struct msg_s msg_ref_t;/** Alternative name for msg_pub_t. @deprecated Use msg_pub_t. */typedef msg_pub_t msg_obj_t;	/** Alternative name for msg_header_t. @deprecated Use msg_header_t. */typedef MSG_HDR_T msg_hdr_t;SOFIA_END_DECLS#endif /* !defined MSG_TYPES_H */

⌨️ 快捷键说明

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