OSIP 中message_property作用

     最近在处理OSIP中碰到发现协议栈在osip_osip_message_t结构体有三个内部变量如下:

  struct osip_message
  {

     ...........................

     int message_property;             /**@internal */
     char *message;                   
/**@internal */
     size_t message_length;           
/**@internal */

     ..................

  };

刚开始一直不知道是做什么用的,而且每次对osip_osip_message_t结构体进行操作时都会将message_property进行赋值

如在设置allow函数中:

int
osip_message_set_allow (osip_message_t * sip, const char *hvalue)
{
  osip_allow_t *allow;
  int i;

  if (hvalue == NULL || hvalue[0] == '\0')
    return OSIP_SUCCESS;

  i = osip_allow_init (&allow);
  if (i != 0)
    return i;
  i = osip_allow_parse (allow, hvalue);
  if (i != 0)
    {
      osip_allow_free (allow);
      return i;
    }
  sip->message_property = 2;
  osip_list_add (&sip->allows, allow, -1);
  return OSIP_SUCCESS;
}

通过研究才发现message_property 是为了标记结构体中

 

char *message;                    /**@internal */

 

里面存储的message是不是最新结构体转换过来的字符串,如果是那么下次要将结构体转换为字符串时,只要直接拷贝message就可以了,不用再进行转换.

如果不是最新转换过来的,那么就要先把message释放掉,然后再重新转换过来,再将message_property设置为1(表明当前的message保存着最新的消息)。

当然如果我们设置了osip_osip_message_t结构体的话就要将message_property设置为2表明当前的结构体被改变了,如果想要得到字符串,那么需要将message 释放掉

然后重新转换.

代码中如下:

static int
_osip_message_to_str (osip_message_t * sip, char **dest,
                      size_t * message_length, int sipfrag)
{

      ...................

 if (1 == osip_message_get__property (sip))
      {                         /* message is already available in "message" */

        *dest = osip_malloc (sip->message_length + 1);
        if (*dest == NULL)
          return OSIP_NOMEM;
        memcpy (*dest, sip->message, sip->message_length);
        (*dest)[sip->message_length] = '\0';
        if (message_length != NULL)
          *message_length = sip->message_length;
        return OSIP_SUCCESS;
    } else
      {
        /* message should be rebuilt: delete the old one if exists. */
        osip_free (sip->message);
        sip->message = NULL;
      }

     .....................

}

 

message_property值有如下几种(其中4是我因为需要使用扩展的,表明message中存的是body结构体转换过来的字符串)

/*
  * 1:sip->message存放的字符串是最新的结构体转换过来的.
  * 2:sip->message中存放的字符串不是最新的结构体转换过来的,可能结构体中的某个参数被修改了,所以需要重新转换.
  * 3:初始化的值,应该表示sip->message为空.
  * 4:表示sip->message中存放的是最新的body结构体转换给来的字符串.
  */

 

 

代码中还有和message_property相关的函数,如下:

int
osip_message_get__property (const osip_message_t * sip)
{
  if (sip == NULL)
    return OSIP_BADPARAMETER;
  return sip->message_property;
}

int
osip_message_force_update (osip_message_t * sip)
{
  if (sip == NULL)
    return OSIP_BADPARAMETER;
  sip->message_property = 2;
  return OSIP_SUCCESS;
}

 

 

auth:JobPan

date:2011-10-14


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值