zoukankan      html  css  js  c++  java
  • osip结构体

    /**
     * Structure for SIP Message (REQUEST and RESPONSE).
     * @struct osip_message
     */
      struct osip_message
      {
        char *sip_version;                /**< SIP version (SIP request only) */
        osip_uri_t *req_uri;              /**< Request-Uri (SIP request only) */
        char *sip_method;                 /**< METHOD (SIP request only) */

        int status_code;                  /**< Status Code (SIP answer only) */
        char *reason_phrase;              /**< Reason Phrase (SIP answer only) */

    #ifndef MINISIZE
        osip_list_t accepts;             /**< Accept headers */
        osip_list_t accept_encodings;    /**< Accept-Encoding headers */
        osip_list_t accept_languages;    /**< Accept-Language headers */
        osip_list_t alert_infos;         /**< Alert-Info headers */
        osip_list_t allows;              /**< Allows headers */
        osip_list_t authentication_infos;/**< authentication_info headers */
    #endif
        osip_list_t authorizations;      /**< Authorizations headers */
        osip_call_id_t *call_id;          /**< Call-ID header */
    #ifndef MINISIZE
        osip_list_t call_infos;          /**< Call-Infos header */
    #endif
        osip_list_t contacts;            /**< Contacts headers */
    #ifndef MINISIZE
        osip_list_t content_encodings;   /**< Content-Encodings headers */
    #endif
        osip_content_length_t *content_length;   /**< Content-Length header */
        osip_content_type_t *content_type;       /**< Content-Type header */
        osip_cseq_t *cseq;                /**< CSeq header */
    #ifndef MINISIZE
        osip_list_t error_infos;         /**< Error-Info headers */
    #endif
        osip_from_t *from;                /**< From header */
        osip_mime_version_t *mime_version;/**< Mime-Version header */
        osip_list_t proxy_authenticates; /**< Proxy-Authenticate headers */
    #ifndef MINISIZE
        osip_list_t proxy_authentication_infos; /**< P-Authentication-Info headers */
    #endif
        osip_list_t proxy_authorizations;/**< Proxy-authorization headers */
        osip_list_t record_routes;       /**< Record-Route headers */
        osip_list_t routes;              /**< Route headers */
        osip_to_t *to;                    /**< To header */
        osip_list_t vias;                /**< Vias headers */
        osip_list_t www_authenticates;   /**< WWW-Authenticate headers */

        osip_list_t headers;             /**< Other headers */

        osip_list_t bodies;              /**< List of attachements */

        /*
           1: structure and buffer "message" are identical.
           2: buffer "message" is not up to date with the structure info (call osip_message_to_str to update it).
         */
        int message_property;             /**@internal */
        char *message;                    /**@internal */
        size_t message_length;            /**@internal */

        void *application_data;           /**can be used by upper layer*/
      };

      

      typedef struct osip_list osip_list_t;

        struct osip_list

        {

        int nb_elt;

        __node_t *node;

      }

      typedef struct __node  __node_t;

      struct __node

      {

        void *next;      /*next __node_t containing element */

        void *element;  /*element in current node*/

      }

      int

      osip_message_parse (osip_message_t * sip, const char *buf, size_t length)

      {

        return _osip_message_parse(sip, buf, length, 0);

      }

      static int

      _osip_message_parse (osip_message_t *sip, const char *buf, size_t length,

                  int sipfrag)

      {

        int i;

        const char *next_header_index;

        char *tmp;

        char *beg;

        

        tmp = osip_malloc (length + 2);

        if (tmp == NULL)

        {
          OSIP_TRACE (osip_trace

                  (__FILE__, __LINE__, OSIP_ERROR, NULL, 

                  "Could not allocate memory. "));

          return -1;

        }

        beg = tmp;

        memcpy (tmp, buf, length);

        tmp[length] = '';

        osip_util_replace_all_lws (tmp);

        //parse request or status line

        i = __osip_message_startline_parse (sip, tmp, &next_header_inde);

        if (i == -1 && !sipfrag)

        {

          osip_fee(beg);

          return -1;

        }    

        tmp = (char*) next_header_index;

        //parse headers

        i = msg_headers_parse (sip, tmp, &next_header_index);

        if (i == -1)

        {

          OSIP_TRACE (osip_trace

                  (__FILE__, __LINE__, OSIP_ERROR, NULL,

                  "error in msg_header_parse() "));

          osip_free (beg);

          return -1;

        }

        tmp = (char *) next_header_index;

        if (tmp[0] == '' || tmp[1] == '' || tmp[2] == ''}

        {

          if (sip->content_length == NULL)

            osip_message_set_content_length (sip, "0");

          osip_free (beg);

          return 0;

        }

        i = msg_osip_body_parse (sip, tmp, &next_header_index, length - (tmp - beg));

        osip_free (beg);

        if (i == -1)

        {

          OSIP_TRACE (osip_trace

                (__FILE__, __LINE__, OSIP_ERROR, NULL,

                "error in msg_osip_body_parse() "));

          return -1;

        }

        /* this is mandatory in the osip stack */

        if (sip->content_length == NULL)

          osip_message_set_content_length (sip, "0");

        return 0;

    }

      

  • 相关阅读:
    electron-vue脚手架项目初始化时提示: Failed to download repo simulatedgreg/electron-vue: Response code Server Error)
    SqlServer在附加数据库时提示:无法打开物理文件**.mdf 操作系统错误拒绝访问
    ASP.NET的项目怎样在WindowsServer上部署
    Express中错误处理中间件的使用
    Express中间件的应用-路由保护(登录限制)、网站维护、页面404
    ASP.NET中序列化与反序列化-以显示上一次登录的信息为例
    ASP.NET中使用Cache类来缓存页面的信息
    ASP.NET中使用一般处理程序ashx作为后台处理实现响应get和post请求
    ASP.NET中实现复用代码自定义用户控件UserControl的使用
    js加载更多
  • 原文地址:https://www.cnblogs.com/passion-hzhang/p/3994829.html
Copyright © 2011-2022 走看看