static const pj_str_t STR_IP6 = { "IP6", 3};
static const pj_str_t STR_SENDRECV = { "sendrecv", 8 };
static const pj_str_t STR_SENDONLY = { "sendonly", 8 };
+ static const pj_str_t STR_INACTIVE = { "inactive", 8 };
+ static const pj_str_t STR_RECVONLY = { "recvonly", 8 };
pjmedia_sdp_media *media;
const char *hostip = NULL;
struct ast_sockaddr addr;
media->attr[media->attr_count++] = attr;
}
- /* Add the sendrecv attribute - we purposely don't keep track because pjmedia-sdp will automatically change our offer for us */
attr = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_attr);
- attr->name = !session_media->locally_held ? STR_SENDRECV : STR_SENDONLY;
+ if (session_media->locally_held) {
+ if (session_media->remotely_held) {
+ attr->name = STR_INACTIVE; /* To place on hold a recvonly stream, send inactive */
+ } else {
+ attr->name = STR_SENDONLY; /* Send sendonly to initate a local hold */
+ }
+ } else {
+ if (session_media->remotely_held) {
+ attr->name = STR_RECVONLY; /* Remote has sent sendonly, reply recvonly */
+ } else {
+ attr->name = STR_SENDRECV; /* No hold in either direction */
+ }
+ }
media->attr[media->attr_count++] = attr;
/* If we've got rtcp-mux enabled, add it unless we received an offer without it */