Exemplo n.º 1
0
static SdpMessageContext *
kms_sdp_agent_create_offer_impl (KmsSdpAgent * agent, GError ** error)
{
  struct SdpOfferData data;
  SdpMessageContext *ctx;
  SdpIPv ipv;

  SDP_AGENT_LOCK (agent);
  ipv = (agent->priv->use_ipv6) ? IPV6 : IPV4;

  ctx = kms_sdp_message_context_new (ipv, agent->priv->addr, error);
  if (ctx == NULL) {
    SDP_AGENT_UNLOCK (agent);
    return NULL;
  }

  kms_sdp_message_context_set_type (ctx, KMS_SDP_OFFER);

  data.ctx = ctx;
  data.agent = agent;

  g_slist_foreach (agent->priv->handlers, (GFunc) create_media_offers, &data);
  SDP_AGENT_UNLOCK (agent);

  return ctx;
}
Exemplo n.º 2
0
SdpMessageContext *
kms_sdp_message_context_new_from_sdp (GstSDPMessage * sdp, GError ** error)
{
  struct SdpMediaContextData data;
  SdpMessageContext *ctx;
  const GstSDPOrigin *o;
  SdpIPv ipv;

  o = gst_sdp_message_get_origin (sdp);

  if (g_strcmp0 (o->addrtype, ORIGIN_ATTR_ADDR_TYPE_IP4) == 0) {
    ipv = IPV4;
  } else if (g_strcmp0 (o->addrtype, ORIGIN_ATTR_ADDR_TYPE_IP4) == 0) {
    ipv = IPV6;
  } else {
    g_set_error (error, KMS_SDP_AGENT_ERROR, SDP_AGENT_INVALID_PARAMETER,
        "Invalid IP version '%s'", o->addrtype);
    return NULL;
  }

  ctx = kms_sdp_message_context_new (ipv, o->addr, error);
  if (ctx == NULL) {
    return NULL;
  }

  if (!kms_sdp_message_context_parse_groups_from_offer (ctx, sdp, error)) {
    goto error;
  }

  if (!copy_session_attributes (ctx, sdp, error)) {
    goto error;
  }

  data.ctx = ctx;
  data.err = error;

  if (!sdp_utils_for_each_media (sdp, (GstSDPMediaFunc) add_media_context,
          &data)) {
    g_set_error_literal (error, KMS_SDP_AGENT_ERROR, SDP_AGENT_UNEXPECTED_ERROR,
        "can not create SDP context");
    goto error;
  }

  return ctx;

error:
  kms_sdp_message_context_destroy (ctx);
  return NULL;
}
Exemplo n.º 3
0
static SdpMessageContext *
kms_sdp_agent_create_answer_impl (KmsSdpAgent * agent,
    const GstSDPMessage * offer, GError ** error)
{
  struct SdpAnswerData data;
  SdpMessageContext *ctx;
  gboolean bundle;
  SdpIPv ipv;

  SDP_AGENT_LOCK (agent);
  ipv = (agent->priv->use_ipv6) ? IPV6 : IPV4;
  bundle = g_slist_length (agent->priv->groups) > 0;
  SDP_AGENT_UNLOCK (agent);

  ctx = kms_sdp_message_context_new (ipv, agent->priv->addr, error);
  if (ctx == NULL) {
    return NULL;
  }

  kms_sdp_message_context_set_type (ctx, KMS_SDP_ANSWER);

  if (bundle
      && !kms_sdp_message_context_parse_groups_from_offer (ctx, offer, error)) {
    goto error;
  }

  if (!kms_sdp_message_context_set_common_session_attributes (ctx, offer,
          error)) {
    goto error;
  }

  data.agent = agent;
  data.ctx = ctx;
  data.err = error;

  if (!sdp_utils_for_each_media (offer, (GstSDPMediaFunc) create_media_answer,
          &data)) {
    goto error;
  }

  return ctx;

error:
  kms_sdp_message_context_unref (ctx);

  return NULL;
}