Esempio n. 1
0
int
sdp_message_k_key_set (sdp_message_t * sdp, int pos_media, char *keytype, char *keydata)
{
  sdp_key_t *key;
  sdp_media_t *med;

  if (sdp == NULL)
    return OSIP_BADPARAMETER;
  if ((pos_media != -1) && (osip_list_size (&sdp->m_medias) < pos_media + 1))
    return OSIP_UNDEFINED_ERROR;
  sdp_key_init (&key);
  key->k_keytype = keytype;
  key->k_keydata = keydata;
  if (pos_media == -1) {
    sdp->k_key = key;
    return OSIP_SUCCESS;
  }
  med = (sdp_media_t *) osip_list_get (&sdp->m_medias, pos_media);
  med->k_key = key;
  return OSIP_SUCCESS;
}
Esempio n. 2
0
int
sdp_message_k_key_set (sdp_message_t * sdp, int pos_media, char *keytype,
                       char *keydata)
{
  sdp_key_t *key;
  sdp_media_t *med;

  if (sdp == NULL)
    return -1;
  if ((pos_media != -1) && (osip_list_size (&sdp->m_medias) < pos_media + 1))
    return -1;
  sdp_key_init (&key);
  key->k_keytype = keytype;
  key->k_keydata = keydata;
  if (pos_media == -1)
    {
      sdp->k_key = key;
      return 0;
    }
  med = (sdp_media_t *) osip_list_get (&sdp->m_medias, pos_media);
  med->k_key = key;
  return 0;
}
Esempio n. 3
0
static int
sdp_message_parse_k (sdp_message_t * sdp, char *buf, char **next)
{
  char *equal;
  char *crlf;
  int i;
  char *colon;
  sdp_key_t *k_header;
  char *tmp;
  char *tmp_next;

  *next = buf;

  equal = buf;
  while ((*equal != '=') && (*equal != '\0'))
    equal++;
  if (*equal == '\0')
    return ERR_ERROR;

  /* check if header is "k" */
  if (equal[-1] != 'k')
    return ERR_DISCARD;

  crlf = equal + 1;

  while ((*crlf != '\r') && (*crlf != '\n') && (*crlf != '\0'))
    crlf++;
  if (*crlf == '\0')
    return ERR_ERROR;
  if (crlf == equal + 1)
    return ERR_ERROR;		/* k=\r ?? bad header */

  tmp = equal + 1;

  i = sdp_key_init (&k_header);
  if (i != 0)
    return ERR_ERROR;
  /* k=key-type[:key-data] */

  /* is there any key-data? */
  colon = strchr (equal + 1, ':');
  if ((colon != NULL) && (colon < crlf))
    {
      /* att-field is alpha-numeric */
      i = __osip_set_next_token (&(k_header->k_keytype), tmp, ':', &tmp_next);
      if (i != 0)
	{
	  sdp_key_free (k_header);
	  return -1;
	}
      tmp = tmp_next;

      i =
	__osip_set_next_token (&(k_header->k_keydata), tmp, '\r', &tmp_next);
      if (i != 0)
	{
	  i =
	    __osip_set_next_token (&(k_header->k_keydata), tmp, '\n',
				   &tmp_next);
	  if (i != 0)
	    {
	      sdp_key_free (k_header);
	      return -1;
	    }
	}
    }
  else
    {
      i =
	__osip_set_next_token (&(k_header->k_keytype), tmp, '\r', &tmp_next);
      if (i != 0)
	{
	  i =
	    __osip_set_next_token (&(k_header->k_keytype), tmp, '\n',
				   &tmp_next);
	  if (i != 0)
	    {
	      sdp_key_free (k_header);
	      return -1;
	    }
	}
    }

  /* add the key at the correct place:
     if there is no media line yet, then the "k=" is the
     global one.
   */
  i = osip_list_size (sdp->m_medias);
  if (i == 0)
    sdp->k_key = k_header;
  else
    {
      sdp_media_t *last_sdp_media =
	(sdp_media_t *) osip_list_get (sdp->m_medias, i - 1);
      last_sdp_media->k_key = k_header;
    }

  if (crlf[1] == '\n')
    *next = crlf + 2;
  else
    *next = crlf + 1;
  return WF;
}