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

📄 su_tag.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 SU_TAG_H/** Defined when <sofia-sip/su_tag.h> has been included. */#define SU_TAG_H/**@SU_TAG * @file sofia-sip/su_tag.h  Object-oriented tags and tag list interface. * * @author Pekka Pessi <Pekka.Pessi@nokia.com> *  * @date Created: Tue Feb 20 19:48:18 2001 ppessi */#ifndef SU_CONFIG_H#include <sofia-sip/su_config.h>#endif#ifndef SU_TYPES_H#include <sofia-sip/su_types.h>#endif#ifndef SU_ALLOC_H#include <sofia-sip/su_alloc.h>#endif#include <stdarg.h>#include <stddef.h> /* ANSI C: size_t */SOFIA_BEGIN_DECLS/** Tag item type */typedef struct tag_type_s const *tag_type_t;/** Tag item value */typedef intptr_t                 tag_value_t;/** Tag list signature */#define TAG_LIST tag_type_t tag, tag_value_t value, .../** Tag item. */typedef struct {  tag_type_t   t_tag;		/**< Tag */  tag_value_t  t_value;		/**< Value */} tagi_t;/** Tag type class */typedef struct tag_class_s const tag_class_t;struct tag_type_s {  char const    *tt_ns;  char const 	*tt_name;  tag_class_t   *tt_class;  tag_value_t    tt_magic;};/** Definition of tag type. */typedef struct tag_type_s const tag_typedef_t[1];/** End of tag list */SOFIAPUBVAR tag_typedef_t tag_null;/** Ignore tag item. */SOFIAPUBVAR tag_typedef_t tag_skip;/** Jump to another tag list */SOFIAPUBVAR tag_typedef_t tag_next;/** Any tag accepted when filtering. */SOFIAPUBVAR tag_typedef_t tag_any;/** @HI Initialize a tag item marking the end of list. */#define TAG_NULL()  (tag_type_t)0, (tag_value_t)0/** @HI Initialize a tag item marking the end of list. */#define TAG_END()   (tag_type_t)0, (tag_value_t)0/** @HI Initialize an empty tag item. */#define TAG_SKIP(x)    tag_skip, (tag_value_t)(x)/** @HI Initialize a tag item pointing to another tag list at @a next. */#define TAG_NEXT(next) tag_next, (tag_value_t)(next)/** @HI Initialize a filter tag item accepting any item. */#define TAG_ANY()   tag_any,  (tag_value_t)0/** @HI Initialize a @a item if condition is true;  * otherwise, initialize an empty tag item. */#define TAG_IF(condition, item) !(condition) ? tag_skip : item/** Convert tag item to a string  */SOFIAPUBFUN int t_snprintf(tagi_t const *t, char b[], size_t size);/** Convert string to a tag value */SOFIAPUBFUN int t_scan(tag_type_t tt, su_home_t *home, char const *s, 		       tag_value_t *return_value);/* Tagarg functions */SOFIAPUBFUN tagi_t *tl_tlist(su_home_t *, tag_type_t, tag_value_t, ...);SOFIAPUBFUN size_t tl_tmove(tagi_t *dst, size_t, tag_type_t, tag_value_t, ...);SOFIAPUBFUN int tl_gets(tagi_t const lst[], tag_type_t, tag_value_t, ...);SOFIAPUBFUN int tl_tgets(tagi_t lst[], tag_type_t, tag_value_t, ...);SOFIAPUBFUN tagi_t *tl_tfilter(su_home_t *, tagi_t const lst[], 			       tag_type_t, tag_value_t, ...);SOFIAPUBFUN int tl_tremove(tagi_t lst[], tag_type_t, tag_value_t, ...);/* Low-level taglist manipulation functions */SOFIAPUBFUN size_t tl_len(tagi_t const lst[]);SOFIAPUBFUN size_t tl_xtra(tagi_t const lst[], size_t offset);SOFIAPUBFUN tagi_t *tl_next(tagi_t const *lst);SOFIAPUBFUN tagi_t *tl_move(tagi_t *dst, tagi_t const src[]);SOFIAPUBFUN tagi_t *tl_dup(tagi_t dst[], tagi_t const lst[], void **bb);SOFIAPUBFUN tagi_t *tl_adup(su_home_t *, tagi_t const lst[]);SOFIAPUBFUN tagi_t const *tl_find(tagi_t const lst[], tag_type_t tt);SOFIAPUBFUN tagi_t *tl_filter(tagi_t *, tagi_t const filter[],			      tagi_t const lst[], void **b);SOFIAPUBFUN tagi_t *tl_afilter(su_home_t *, tagi_t const filter[],			       tagi_t const lst[]);SOFIAPUBFUN tagi_t *tl_filtered_tlist(su_home_t *home, tagi_t const filter[], 				      tag_type_t, tag_value_t, ...);SOFIAPUBFUN size_t  tl_vlen(va_list ap);SOFIAPUBFUN tagi_t *tl_list(tag_type_t tag, tag_value_t value, ...);SOFIAPUBFUN tagi_t *tl_vlist2(tag_type_t tag, tag_value_t value, va_list ap);SOFIAPUBFUN tagi_t *tl_vlist(va_list ap);SOFIAPUBFUN tagi_t *tl_llist(tag_type_t tag, tag_value_t value, ...);SOFIAPUBFUN tagi_t *tl_vllist(tag_type_t tag, tag_value_t value, va_list ap);SOFIAPUBFUN void    tl_vfree(tagi_t *t);/** Align to pointer size */#define SU_ALIGN(x) \((sizeof(void *) - ((intptr_t)(x) & (sizeof(void *) - 1))) & (sizeof(void *) - 1))#if SU_HAVE_INLINEsu_inline tag_value_t tag_int_v(int v) { return (tag_value_t)v; }su_inline tag_value_t tag_int_vr(int *vp) { return (tag_value_t)vp; }su_inline tag_value_t tag_uint_v(unsigned v) { return (tag_value_t)v; }su_inline tag_value_t tag_uint_vr(unsigned *vp) { return (tag_value_t)vp; }su_inline tag_value_t tag_bool_v(int v) { return v != 0; }su_inline tag_value_t tag_bool_vr(int *vp) { return (tag_value_t)vp; }su_inline tag_value_t tag_ptr_v(void *v) { return (tag_value_t)v; }su_inline tag_value_t tag_ptr_vr(void *vp,				 void *v) {return(tag_value_t)vp;}su_inline tag_value_t tag_cptr_v(void const *v) { return (tag_value_t)v; }su_inline tag_value_t tag_cptr_vr(void *vp,				  void const *v) {return(tag_value_t)vp;}su_inline tag_value_t tag_cstr_v(char const *v) { return (tag_value_t)v; }su_inline tag_value_t tag_cstr_vr(char const**vp) {return(tag_value_t)vp;}su_inline tag_value_t tag_str_v(char const *v) { return (tag_value_t)v; }su_inline tag_value_t tag_str_vr(char const **vp) {return(tag_value_t)vp;}#if __cplusplusextern "C++" {  static inline tag_value_t tag_ptr_v(void const *v)  { return (tag_value_t)v; }  static inline tag_value_t tag_ptr_vr(void *vp, void const *p)   { return(tag_value_t)vp; }  static inline tag_value_t tag_str_v(char *v) { return (tag_value_t)v; }  static inline tag_value_t tag_str_vr(char **vp) {return(tag_value_t)vp;}}#endif#else#define tag_int_v(v)   (tag_value_t)(v)#define tag_int_vr(v)  (tag_value_t)(v)#define tag_uint_v(v)  (tag_value_t)(v)#define tag_uint_vr(v) (tag_value_t)(v)#define tag_bool_v(v)  (tag_value_t)(v != 0)#define tag_bool_vr(v) (tag_value_t)(v)#define tag_ptr_v(v)   (tag_value_t)(v)#define tag_ptr_vr(v,x) (tag_value_t)(v)#define tag_cstr_v(v)  (tag_value_t)(v)#define tag_cstr_vr(v) (tag_value_t)(v)#define tag_str_v(v)   (tag_value_t)(v)#define tag_str_vr(v)  (tag_value_t)(v)#endifSOFIA_END_DECLS#endif /** !defined(SU_TAG_H) */

⌨️ 快捷键说明

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