示例#1
0
/* 
 * Get calling number from Remote-Party-ID header
 * param msg SIP message
 * param rpiduser User part of Remote-Party-ID header
 * param buffersize Size of fromuser buffer
 * return 0 success, -1 failure
 */
int ospGetRpidUserpart(
    struct sip_msg* msg, 
    char* rpiduser, 
    int buffersize)
{
    struct to_body* rpid;
    struct sip_uri uri;
    int result = -1;

    rpiduser[0] = '\0';

    if (_osp_use_rpid != 0) {
        if (msg->rpid != NULL) {
            if (parse_rpid_header(msg) == 0) {
                rpid = get_rpid(msg);
                if (parse_uri(rpid->uri.s, rpid->uri.len, &uri) == 0) {
                    ospCopyStrToBuffer(&uri.user, rpiduser, buffersize);
                    ospSkipPlus(rpiduser);
                    result = 0;
                } else {
                    LM_ERR("failed to parse RPID uri\n");
                }
            } else {
                LM_ERR("failed to parse RPID header\n");
            }
        } else {
            LM_DBG("without RPID header\n");
        }
    } else {
        LM_DBG("do not use RPID header\n");
    }

    return result;
}
/*
 * Get user part from Remote-Party-ID header
 * param msg SIP message
 * param user User part of Remote-Party-ID header
 * param bufsize Size of fromuser buffer
 * return 0 success, 1 without RPID, -1 failure
 */
int ospGetRpidUserpart(
    struct sip_msg* msg,
    char* rpiduser,
    int bufsize)
{
    struct to_body* rpid;
    struct sip_uri uri;
    int result = -1;

    if ((rpiduser != NULL) && (bufsize > 0)) {
        rpiduser[0] = '\0';
        if (msg->rpid != NULL) {
            if (parse_rpid_header(msg) == 0) {
                rpid = get_rpid(msg);
                if (parse_uri(rpid->uri.s, rpid->uri.len, &uri) == 0) {
                    ospCopyStrToBuffer(&uri.user, rpiduser, bufsize);
                    ospSkipUserParam(rpiduser);
                    result = 0;
                } else {
                    LM_ERR("failed to parse RPID uri\n");
                }
            } else {
                LM_ERR("failed to parse RPID uri\n");
            }
        } else {
            LM_DBG("without RPID header\n");
            result = 1;
        }
    } else {
        LM_ERR("bad parameters to parse user part from RPID\n");
    }

    return result;
}