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 + -
显示快捷键?