int
osip_content_type_clone (const osip_content_type_t * ctt, osip_content_type_t ** dest)
{
  int i;
  osip_content_type_t *ct;

  *dest = NULL;
  if (ctt == NULL)
    return OSIP_BADPARAMETER;

  i = osip_content_type_init (&ct);
  if (i != 0)                   /* allocation failed */
    return i;
  if (ctt->type != NULL)
    ct->type = osip_strdup (ctt->type);
  if (ctt->subtype != NULL)
    ct->subtype = osip_strdup (ctt->subtype);

  {
    osip_generic_param_t *dest_param;
    osip_list_iterator_t it;
    osip_generic_param_t *u_param = (osip_generic_param_t*) osip_list_get_first(&ctt->gen_params, &it);
    while (u_param != OSIP_SUCCESS) {
      i = osip_generic_param_clone (u_param, &dest_param);
      if (i != 0) {
        osip_content_type_free (ct);
        return i;
      }
      osip_list_add (&ct->gen_params, dest_param, -1);
      u_param = (osip_generic_param_t *) osip_list_get_next(&it);
    }
  }
  *dest = ct;
  return OSIP_SUCCESS;
}
Example #2
0
int
main (int argc, char **argv)
{
  FILE *content_types_file;


  osip_content_type_t *content_type;
  char *a_content_type;
  char *dest;
  char *res;

  content_types_file = fopen (argv[1], "r");
  if (content_types_file == NULL)
    {
      fprintf (stdout,
	       "Failed to open %s file.\nUsage: tcontent_type content_types.txt\n",
	       argv[1]);
      exit (0);
    }

  a_content_type = (char *) osip_malloc (200);
  res = fgets (a_content_type, 200, content_types_file);	/* lines are under 200 */
  while (res != NULL)
    {

      int errcode;

      /* remove the last '\n' before parsing */
      strncpy (a_content_type + strlen (a_content_type) - 1, "\0", 1);

      if (0 != strncmp (a_content_type, "#", 1))
	{
	  /* allocate & init content_type */
	  osip_content_type_init (&content_type);
	  printf ("=================================================\n");
	  printf ("CONTENT_TYPE TO PARSE: |%s|\n", a_content_type);
	  errcode = osip_content_type_parse (content_type, a_content_type);
	  if (errcode != -1)
	    {
	      if (osip_content_type_to_str (content_type, &dest) != -1)
		{
		  printf ("result:                |%s|\n", dest);
		  osip_free (dest);
		}
	    }
	  else
	    printf ("Bad content_type format: %s\n", a_content_type);
	  osip_content_type_free (content_type);
	  printf ("=================================================\n");
	}
      res = fgets (a_content_type, 200, content_types_file);	/* lines are under 200 */
    }
  osip_free (a_content_type);
  return 0;
}
int
osip_content_type_clone (const osip_content_type_t * ctt,
			 osip_content_type_t ** dest)
{
  int i;
  osip_content_type_t *ct;

  *dest = NULL;
  if (ctt == NULL)
    return -1;
  if (ctt->type == NULL)
    return -1;
  if (ctt->subtype == NULL)
    return -1;

  i = osip_content_type_init (&ct);
  if (i != 0)			/* allocation failed */
    return -1;
  ct->type = osip_strdup (ctt->type);
  ct->subtype = osip_strdup (ctt->subtype);

  {
    int pos = 0;
    osip_generic_param_t *u_param;
    osip_generic_param_t *dest_param;

    while (!osip_list_eol (ctt->gen_params, pos))
      {
	u_param =
	  (osip_generic_param_t *) osip_list_get (ctt->gen_params, pos);
	i = osip_generic_param_clone (u_param, &dest_param);
	if (i != 0)
	  {
	    osip_content_type_free (ct);
	    osip_free (ct);
	    return -1;
	  }
	osip_list_add (ct->gen_params, dest_param, -1);
	pos++;
      }
  }
  *dest = ct;
  return 0;
}
Example #4
0
int
osip_body_set_contenttype (osip_body_t * body, const char *hvalue)
{
  int i;

  if (body == NULL)
    return -1;
  if (hvalue == NULL)
    return -1;

  i = osip_content_type_init (&(body->content_type));
  if (i != 0)
    return -1;
  i = osip_content_type_parse (body->content_type, hvalue);
  if (i != 0)
    {
      osip_content_type_free (body->content_type);
      body->content_type = NULL;
      return -1;
    }
  return 0;
}
Example #5
0
/* returns -1 on error. */
int osip_message_set_content_type(osip_message_t * sip, const char *hvalue)
{
	int i;

	if (sip->content_type != NULL)
		return OSIP_BADPARAMETER;

	if (hvalue == NULL || hvalue[0] == '\0')
		return OSIP_SUCCESS;

	i = osip_content_type_init(&(sip->content_type));
	if (i != 0)
		return i;
	sip->message_property = 2;
	i = osip_content_type_parse(sip->content_type, hvalue);
	if (i != 0) {
		osip_content_type_free(sip->content_type);
		sip->content_type = NULL;
		return i;
	}
	return OSIP_SUCCESS;
}
/* returns -1 on error. */
int
osip_message_set_content_type (osip_message_t * sip, const char *hvalue)
{
  int i;

  if (sip->content_type != NULL)
    return -1;

  if (hvalue == NULL || hvalue[0] == '\0')
    return 0;

  i = osip_content_type_init (&(sip->content_type));
  if (i != 0)
    return -1;
  sip->message_property = 2;
  i = osip_content_type_parse (sip->content_type, hvalue);
  if (i != 0)
    {
      osip_content_type_free (sip->content_type);
      sip->content_type = NULL;
    }
  return 0;
}