# &adminguide;

## Overview

This module provides functions for checking and managing the SDP payloads of SIP messages.

Examples of functions this module offers: remove codecs from SDP, check the media stream types and return attributes of SDP document. For the full list of the features provided by this module and the implementation state, please read the list of exported functions.

## Dependencies

### &kamailio; Modules

The following modules must be loaded before this module:

- none.

### External Libraries or Applications

The following libraries or applications must be installed before running &kamailio; with this module loaded:

- None

## Parameters

The module does not export any config parameter yet.

## Functions

### `sdp_remove_codecs_by_id(list)`

Remove the codecs provided in the parameter 'list' from all media streams found in SDP payload. The parameter 'list' must be one item or a comma separated list of numeric codec IDs. The parameter can be a static string or a variable holding the list of numeric codec IDs.

This function can be used from ANY_ROUTE.

#### `sdp_remove_codecs_by_id` usage

    ...
    # remove PCMU
    sdp_remove_codecs_by_id("0");
    # remove PCMU, PCMA and GSM
    sdp_remove_codecs_by_id("0,8,3");
    ...

### `sdp_remove_codecs_by_name(list)`

Remove the codecs provided in the parameter 'list' from all media streams found in SDP payload. The parameter 'list' must be one item or a comma separated list of codec names. The parameter can be a static string or a variable holding the list of codec names.

This function can be used from ANY_ROUTE.

#### `sdp_remove_codecs_by_name` usage

    ...
    # remove PCMU
    sdp_remove_codecs_by_name("PCMU");
    # remove PCMU, PCMA and GSM
    sdp_remove_codecs_by_name("PCMU,PCMA,GSM");
    ...

### `sdp_remove_line_by_prefix(string)`

Remove all SDP attribute lines beginning with 'string' in all media streams.

This function can be used from ANY_ROUTE.

#### `sdp_remove_line_by_prefix` usage

    ...
    if ($si == "2001:DB8::8:800:200C:417A"
            and ( has_body("application/sdp") or has_body("multipart/mixed")))
    {
        xlog("L_INFO", "Cleaning ugly SDP from $si\n");
        sdp_remove_codecs_by_name("X-NSE");
        sdp_remove_line_by_prefix("a=X-");
    }

    ...

### `sdp_keep_codecs_by_id(list [, mtype])`

Keep only the codecs provided in the parameter 'list' from all media streams found in SDP payload. The parameter 'list' must be one item or a comma separated list of numeric codec IDs. The parameter can be a static string or a variable holding the list of numeric codec IDs.

Optional parameter mtype can be provided to apply the operations only to the streams matching m=mtype.

This function can be used from ANY_ROUTE.

#### `sdp_keep_codecs_by_id` usage

    ...
    # keep only PCMU
    sdp_keep_codecs_by_id("0");
    # keep PCMU, PCMA and GSM in audio stream
    sdp_keep_codecs_by_id("0,8,3", "audio");
    ...

### `sdp_keep_codecs_by_name(list [, mtype])`

Keep only the codecs provided in the parameter 'list' from all media streams found in SDP payload. The parameter 'list' must be one or a comma separated list of codec names. The parameter can be a static string or a variable holding the list of codec names.

Optional parameter mtype can be provided to apply the operations only to the streams matching m=mtype.

This function can be used from ANY_ROUTE.

#### `sdp_keep_codecs_by_name` usage

    ...
    # keep only PCMU
    sdp_keep_codecs_by_name("PCMU");
    # keep PCMU, PCMA and GSM
    sdp_keep_codecs_by_name("PCMU,PCMA,GSM");
    ...

### `sdp_with_media(type)`

Return true of the SDP has 'media=type ...' line. Useful to check the content of the RTP sessions, such as 'audio' or 'video'. The parameter can be static string or variable holding the media type.

This function can be used from ANY_ROUTE.

#### `sdp_with_media` usage

    ...
    # check for video stream
    if(sdp_with_media("video"))
    {
        # the session has a video stream
    }
    ...

### `sdp_remove_media(type)`

Remove the streams that match on 'm=type ...' line. The parameter can be static string or variable holding the media type.

This function can be used from ANY_ROUTE.

#### `sdp_remove_media` usage

    ...
    # remove video stream
    sdp_remove_media("video");
    ...

### `sdp_with_transport(type)`

Return true of the SDP has 'media=media port type ...' line. Useful to check the transport of the RTP sessions, such as 'RTP/AVP', 'RTP/SAVP' or 'RTP/SAVPF'. The parameter can be static string or variable holding the transport type.

This function can be used from ANY_ROUTE.

#### `sdp_with_transport` usage

    ...
    # check for RTP/SAVP stream
    if(sdp_with_transport("RTP/SAVP"))
    {
        # the session has a SRTP/SAVP stream
    }
    ...

### `sdp_remove_transport(type)`

Remove the streams that match on 'm=media port type ...' line. The parameter can be static string or variable holding the transport type.

This function can be used from ANY_ROUTE.

#### `sdp_remove_transport` usage

    ...
    # remove stream with transport RTP/AVP
    sdp_remove_transport("RTP/AVP");
    ...

### `sdp_with_codecs_by_id(list)`

Returns true if any of the codecs provided in the parameter 'list' from all media streams is found in SDP payload. The parameter 'list' must be one or a comma separated list of numeric codec IDs. The parameter can be a static string or a variable holding the list of numeric codec IDs.

This function can be used from ANY_ROUTE.

#### `sdp_with_codecs_by_id` usage

    ...
    # test for PCMU
    if(sdp_with_codecs_by_id("0")) { ... }
    # test for PCMU, PCMA or GSM
    if(sdp_with_codecs_by_id("0,8,3")) { ... }
    ...

### `sdp_with_codecs_by_name(list)`

Returns true if any of the codecs provided in the parameter 'list' from all media streams is found in SDP payload. The parameter 'list' must be one item or a comma separated list of codec names. The parameter can be a static string or a variable holding the list of codec names.

This function can be used from ANY_ROUTE.

#### `sdp_with_codecs_by_name` usage

    ...
    # test for PCMU
    if(sdp_with_codecs_by_name("PCMU")) { ... }
    # test for PCMU, PCMA or GSM
    if(sdp_with_codecs_by_name("PCMU,PCMA,GSM")) { ... }
    ...

### `sdp_print(level)`

Print the SDP internal structure to log 'level'. The parameter can be static integer or variable holding the integer value of the log level.

This function can be used from ANY_ROUTE.

#### `sdp_print` usage

    ...
    # print the SDP
    sdp_print("1");
    ...

### `sdp_get(avpvar)`

Store the SDP part of message body in an AVP. Return 1 if SDP is found, -1 on error and -2 if there is no SDP part in the message body.

This function can be used from ANY_ROUTE.

#### `sdp_get` usage

    ...
    sdp_get("$avp(sdp)");
    ...

### `sdp_content()`

Return true if the SIP message has SDP body or a SDP part in body.

This function can be used from ANY_ROUTE.

#### `sdp_content` usage

    ...
    if(sdp_content()) {
        ...
    }
    ...

### `sdp_get_line_startswith(avpvar, string)`

Store the search part of SDP body message with line beginning with 'string' in an AVP. Return 1 if 'string' is found in SDP, -1 on error and -2 if there is no SDP part in the message body.

This function can be used from ANY_ROUTE.

#### `sdp_get_line_startswith` usage

    ...
    if(sdp_get_line_startswith("$avp(mline)", "m=")) {
    	xlog("m-line: $avp(mline)\n");
    }
    ...