inet_msg_pack.c
来自「最新MTK手机软件源码」· C语言 代码 · 共 1,737 行 · 第 1/5 页
C
1,737 行
} /* end of sip_msg_pack_cseq */
/*****************************************************************************
* FUNCTION
* inet_msg_pack_content_range
* DESCRIPTION
* This function packs the inet_content_range_struct header value.
* PARAMETERS
* app_type [IN] application type
* arg [IN] pointer of header value
* buf [IN] buffer to store packed header value
* buf_len [IN] available data size of buffer
* r_size [IN/OUT] real data size to pack
* RETURNS
* INET result code
*****************************************************************************/
inet_result_enum inet_msg_pack_content_range(
kal_uint8 app_type,
void *arg,
kal_char *buf,
kal_int32 buf_len,
kal_int32 *r_size)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 m, size = 0;
inet_content_range_struct *content_range = (inet_content_range_struct*) arg;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
CHECK_INET_PARAM(arg, INET_RESULT_ERROR) if (content_range->unit_name)
{
m = _snprintf(buf + size, buf_len - size, "%s ", content_range->unit_name);
CHECK_INET_PACK_ENBUF(m) size += m;
}
if (content_range->first_pos == -1 && content_range->last_pos == -1)
{
m = _snprintf(buf + size, buf_len - size, "%s", "*/");
CHECK_INET_PACK_ENBUF(m) size += m;
}
else
{
m = _snprintf(buf + size, buf_len - size, "%d-%d/", content_range->first_pos, content_range->last_pos);
CHECK_INET_PACK_ENBUF(m) size += m;
}
if (content_range->instance_length == -1)
{
m = _snprintf(buf + size, buf_len - size, "%s", "*");
CHECK_INET_PACK_ENBUF(m) size += m;
}
else
{
m = _snprintf(buf + size, buf_len - size, "%d", content_range->instance_length);
CHECK_INET_PACK_ENBUF(m) size += m;
}
*r_size = size;
return INET_RESULT_OK;
} /* end of inet_msg_pack_content_range */
/*****************************************************************************
* FUNCTION
* inet_msg_pack_via
* DESCRIPTION
* This function packs the inet_via_struct header value.
* PARAMETERS
* app_type [IN] application type
* arg [IN] pointer of header value
* buf [IN] buffer to store packed header value
* buf_len [IN] available data size of buffer
* r_size [IN/OUT] real data size to pack
* RETURNS
* INET result code
*****************************************************************************/
/* Eg "SIP/2.0/UDP 172.21.120.118:2412;branch=z9hG4bK30155.5037.0\r\n" */
inet_result_enum inet_msg_pack_via(kal_uint8 app_type, void *arg, kal_char *buf, kal_int32 buf_len, kal_int32 *r_size)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 l;
kal_int32 size = 0;
inet_result_enum ret;
inet_via_struct *via = (inet_via_struct*) arg;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
CHECK_INET_PARAM(arg, INET_RESULT_ERROR) if (via->proto_name)
{
l = _snprintf(buf + size, buf_len - size, "%s/", via->proto_name);
CHECK_INET_PACK_ENBUF(l) size += l;
}
if (via->version)
{
l = _snprintf(buf + size, buf_len - size, "%s", via->version);
CHECK_INET_PACK_ENBUF(l) size += l;
}
if (via->transport)
{
l = _snprintf(buf + size, buf_len - size, "/%s", via->transport);
CHECK_INET_PACK_ENBUF(l) size += l;
}
if (via->host)
{
l = _snprintf(buf + size, buf_len - size, " %s", via->host);
CHECK_INET_PACK_ENBUF(l) size += l;
}
if (via->port)
{
l = _snprintf(buf + size, buf_len - size, ":%d", via->port);
CHECK_INET_PACK_ENBUF(l) size += l;
}
if (via->param_list)
{
if ((ret = inet_msg_pack_param_list(
app_type,
(void*)via->param_list,
buf + size,
buf_len - size,
&l)) != INET_RESULT_OK)
{
return ret;
}
size += l;
}
if (via->comment)
{
l = _snprintf(buf + size, buf_len - size, " %s", via->comment);
CHECK_INET_PACK_ENBUF(l) size += l;
}
*r_size = size;
return INET_RESULT_OK;
} /* end of inet_msg_pack_via */
/*****************************************************************************
* FUNCTION
* inet_msg_pack_via_list
* DESCRIPTION
* This function packs the inet_via_list_struct header value.
* PARAMETERS
* app_type [IN] application type
* arg [IN] pointer of header value
* buf [IN] buffer to store packed header value
* buf_len [IN] available data size of buffer
* r_size [IN/OUT] real data size to pack
* RETURNS
* INET result code
*****************************************************************************/
/* Eg "SIP/2.0/UDP 172.21.120.118:2412;branch=z9hG4bK30155.5037.0\r\n" */
inet_result_enum inet_msg_pack_via_list(
kal_uint8 app_type,
void *arg,
kal_char *buf,
kal_int32 buf_len,
kal_int32 *r_size)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 l;
kal_int32 size = 0;
inet_result_enum ret;
inet_via_list_struct *via_list = (inet_via_list_struct*) arg;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
CHECK_INET_PARAM(arg, INET_RESULT_ERROR) while (via_list)
{
if (via_list->object)
{
if ((ret = inet_msg_pack_via(
app_type,
(void*)via_list->object,
buf + size,
buf_len - size,
&l)) != INET_RESULT_OK)
{
return ret;
}
size += l;
if (via_list->next && via_list->next->object)
{
l = _snprintf(buf + size, buf_len - size, ", ");
CHECK_INET_PACK_ENBUF(l) size += l;
}
}
via_list = via_list->next;
}
*r_size = size;
return INET_RESULT_OK;
} /* end of inet_msg_pack_via */
/*****************************************************************************
* FUNCTION
* inet_msg_pack_retry_after
* DESCRIPTION
* This function packs the retry-after header value.
* PARAMETERS
* app_type [IN] application type
* arg [IN] pointer of header value
* buf [IN] buffer to store packed header value
* buf_len [IN] available data size of buffer
* r_size [IN/OUT] real data size to pack
* RETURNS
* INET result code
*****************************************************************************/
inet_result_enum inet_msg_pack_retry_after(
kal_uint8 app_type,
void *arg,
kal_char *buf,
kal_int32 buf_len,
kal_int32 *r_size)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 m, size = 0;
inet_retry_after_struct *retry_after = (inet_retry_after_struct*) arg;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
CHECK_INET_PARAM(arg, INET_RESULT_ERROR) if (retry_after->isDateString == KAL_FALSE)
{
m = _snprintf(buf + size, buf_len - size, "%d", retry_after->time);
CHECK_INET_PACK_ENBUF(m);
size += m;
}
else
{
kal_char dateStringBuf[50];
if (applib_dt_time2rfc1123dateString(retry_after->time, dateStringBuf))
{
m = _snprintf(buf + size, buf_len - size, "%s", dateStringBuf);
CHECK_INET_PACK_ENBUF(m);
size += m;
}
else
{
m = _snprintf(buf + size, buf_len - size, "%s", "0");
CHECK_INET_PACK_ENBUF(m);
size += m;
}
}
*r_size = size;
return INET_RESULT_OK;
} /* inet_msg_pack_retry_after */
/*****************************************************************************
* FUNCTION
* inet_msg_pack_if_range
* DESCRIPTION
* This function packs the IF-Range header value.
* PARAMETERS
* app_type [IN] application type
* arg [IN] pointer of header value
* buf [IN] buffer to store packed header value
* buf_len [IN] available data size of buffer
* r_size [IN/OUT] real data size to pack
* RETURNS
* INET result code
*****************************************************************************/
inet_result_enum inet_msg_pack_if_range(
kal_uint8 app_type,
void *arg,
kal_char *buf,
kal_int32 buf_len,
kal_int32 *r_size)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 m, size = 0;
inet_int_str_struct *if_range = (inet_int_str_struct*) arg;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
CHECK_INET_PARAM(arg, INET_RESULT_ERROR) if (if_range->str_value)
{
/* entity-tag */
m = _snprintf(buf, buf_len, "%s", if_range->str_value);
CHECK_INET_PACK_ENBUF(m) size += m;
}
else if (if_range->int_value != 0)
{
/* HTTP-date */
kal_char dateString[50];
if (applib_dt_time2rfc1123dateString(if_range->int_value, dateString) == KAL_TRUE)
{
m = _snprintf(buf, buf_len, "%s", dateString);
CHECK_INET_PACK_ENBUF(m) size += m;
}
}
*r_size = size;
return INET_RESULT_OK;
} /* end of inet_msg_pack_if_range */
/*****************************************************************************
* FUNCTION
* inet_msg_pack_method
* DESCRIPTION
* This function packs the value of method header .
* PARAMETERS
* app_type [IN] application type
* arg [IN] pointer of header value
* buf [IN] buffer to store packed header value
* buf_len [IN] available data size of buffer
* r_size [IN/OUT] real data size to pack
* RETURNS
* INET result code
*****************************************************************************/
inet_result_enum inet_msg_pack_method(
kal_uint8 app_type,
void *arg,
kal_char *buf,
kal_int32 buf_len,
kal_int32 *r_size)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 l;
inet_int_str_struct *method = (inet_int_str_struct*) arg;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (!method || (method->int_value > INET_METHOD_NUM && !method->str_value) /* kevin */ )
{
return INET_RESULT_ERROR;
}
if (method->str_value)
{
l = _snprintf(buf, buf_len, "%s", method->str_value);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?