⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osip_message_to_str.c

📁 嵌入式产品中的osip的源代码.
💻 C
📖 第 1 页 / 共 2 页
字号:
  message = message + strlen (message);  osip_strncpy (message, CRLF, 2);  message = message + 2;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message, sip->vias,				 "Via: ", 5,				 ((int (*)(void *, char **))				  &osip_via_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,				 sip->record_routes, "Record-Route: ", 14,				 ((int (*)(void *, char **))				  &osip_record_route_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message, sip->routes,				 "Route: ", 7,				 ((int (*)(void *, char **))				  &osip_route_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i = strcat_simple_header (dest, &malloc_size, &message,			    sip->from, "From: ", 6,			    ((int (*)(void *, char **)) &osip_from_to_str),			    &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i = strcat_simple_header (dest, &malloc_size, &message,			    sip->to, "To: ", 4,			    ((int (*)(void *, char **)) &osip_to_to_str),			    &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i = strcat_simple_header (dest, &malloc_size, &message,			    sip->call_id, "Call-ID: ", 9,			    ((int (*)(void *, char **)) &osip_call_id_to_str),			    &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i = strcat_simple_header (dest, &malloc_size, &message,			    sip->cseq, "CSeq: ", 6,			    ((int (*)(void *, char **)) &osip_cseq_to_str),			    &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message, sip->contacts,				 "Contact: ", 9,				 ((int (*)(void *, char **))				  &osip_contact_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i = strcat_headers_one_per_line (dest, &malloc_size, &message,				   sip->authorizations, "Authorization: ", 15,				   ((int (*)(void *, char **))				    &osip_authorization_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,				 sip->www_authenticates, "WWW-Authenticate: ",				 18,				 ((int (*)(void *, char **))				  &osip_www_authenticate_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,				 sip->proxy_authenticates,				 "Proxy-Authenticate: ", 20,				 ((int (*)(void *, char **))				  &osip_www_authenticate_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,				 sip->proxy_authorizations,				 "Proxy-Authorization: ", 21,				 ((int (*)(void *, char **))				  &osip_authorization_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  pos = 0;  while (!osip_list_eol (sip->headers, pos))    {      osip_header_t *header;      header = (osip_header_t *) osip_list_get (sip->headers, pos);      i = osip_header_to_str (header, &tmp);      if (i == -1)	{	  osip_free (*dest);	  *dest = NULL;	  return -1;	}      if (malloc_size < (size_t) (message - *dest + 100 + 16))	{	  size_t size = message - *dest;	  malloc_size = message - *dest + 16 + 100;	  *dest = realloc (*dest, malloc_size);	  if (*dest == NULL)	    return -1;	  message = *dest + size;	}      osip_strncpy (message, tmp, strlen (tmp));      osip_free (tmp);      message = message + strlen (message);      osip_strncpy (message, CRLF, 2);      message = message + 2;      pos++;    }  i =    strcat_headers_all_on_one_line (dest, &malloc_size, &message, sip->allows,				    "Allow: ", 7,				    ((int (*)(void *, char **))				     &osip_content_length_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i = strcat_simple_header (dest, &malloc_size, &message,			    sip->content_type, "Content-Type: ", 14,			    ((int (*)(void *, char **))			     &osip_content_type_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_all_on_one_line (dest, &malloc_size, &message,				    sip->content_encodings,				    "Content-Encoding: ", 18,				    ((int (*)(void *, char **))				     &osip_content_length_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i = strcat_simple_header (dest, &malloc_size, &message,			    sip->mime_version, "Mime-Version: ", 14,			    ((int (*)(void *, char **))			     &osip_content_length_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,				 sip->call_infos, "Call-Info: ", 11,				 ((int (*)(void *, char **))				  &osip_call_info_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,				 sip->alert_infos, "Alert-Info: ", 12,				 ((int (*)(void *, char **))				  &osip_call_info_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,				 sip->error_infos, "Error-Info: ", 12,				 ((int (*)(void *, char **))				  &osip_call_info_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_all_on_one_line (dest, &malloc_size, &message,				    sip->accepts, "Accept: ", 8,				    ((int (*)(void *, char **))				     &osip_content_type_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_all_on_one_line (dest, &malloc_size, &message,				    sip->accept_encodings,				    "Accept-Encoding: ", 17,				    ((int (*)(void *, char **))				     &osip_accept_encoding_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  i =    strcat_headers_all_on_one_line (dest, &malloc_size, &message,				    sip->accept_languages,				    "Accept-Language: ", 17,				    ((int (*)(void *, char **))				     &osip_accept_encoding_to_str), &next);  if (i != 0)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  message = next;  /* we have to create the body before adding the contentlength */  /* add enough lenght for "Content-Length: " */  if (malloc_size < (size_t) (message - *dest + 100 + 16))    {      size_t size = message - *dest;      malloc_size = message - *dest + 16 + 100;      *dest = realloc (*dest, malloc_size);      if (*dest == NULL)	return -1;      message = *dest + size;    }  osip_strncpy (message, "Content-Length: ", 16);  message = message + strlen (message);  /* SIPit Day1     ALWAYS RECALCULATE?     if (sip->contentlength!=NULL)     {     i = osip_content_length_to_str(sip->contentlength, &tmp);     if (i==-1) {     osip_free(*dest);     *dest = NULL;     return -1;     }     osip_strncpy(message,tmp,strlen(tmp));     osip_free(tmp);     }     else     { */  if (osip_list_eol (sip->bodies, 0))	/* no body */    osip_strncpy (message, "0", 1);  else    {      /* BUG: p130 (rfc2543bis-04)         "No SP after last token or quoted string"         In fact, if extra spaces exist: the stack can't be used         to make user-agent that wants to make authentication...         This should be changed...       */      osip_strncpy (message, "     ", 5);      content_length_to_modify = message;    }  /*  } */  message = message + strlen (message);  osip_strncpy (message, CRLF, 2);  message = message + 2;  /* end of headers */  osip_strncpy (message, CRLF, 2);  message = message + 2;  if (osip_list_eol (sip->bodies, 0))    {      /* same remark as at the beginning of the method */      sip->message_property = 1;      sip->message = osip_strdup (*dest);      return 0;			/* it's all done */    }  start_of_bodies = message;  pos = 0;  while (!osip_list_eol (sip->bodies, pos))    {      osip_body_t *body;      body = (osip_body_t *) osip_list_get (sip->bodies, pos);      if (sip->mime_version != NULL)	{	  osip_strncpy (message, "--++", strlen ("--++"));	  message = message + strlen (message);	  osip_strncpy (message, CRLF, 2);	  message = message + 2;	}      i = osip_body_to_str (body, &tmp);      if (i != 0)	{	  osip_free (*dest);	  *dest = NULL;	  return -1;	}      if (malloc_size < message - *dest + 100 + strlen (tmp))	{	  size_t size = message - *dest;	  malloc_size = message - *dest + strlen (tmp) + 100;	  *dest = realloc (*dest, malloc_size);	  if (*dest == NULL)	    return -1;	  message = *dest + size;	}      osip_strncpy (message, tmp, strlen (tmp));      osip_free (tmp);      message = message + strlen (message);      pos++;    }  if (sip->mime_version != NULL)    {      osip_strncpy (message, "--++--", strlen ("--++--"));      message = message + strlen (message);      osip_strncpy (message, CRLF, 2);      message = message + 2;      /* ADDED at SIPit day1:  Is this needed for MIME type?         osip_strncpy(message,CRLF,2);         message = message + 2;         strncpy(message,"\0",1); */    }  if (content_length_to_modify == NULL)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  /* we NOW have the length of bodies: */  {    size_t size = strlen (start_of_bodies);    char tmp[15];    sprintf (tmp, "%i", size);    /* do not use osip_strncpy here! */    strncpy (content_length_to_modify + 5 - strlen (tmp), tmp, strlen (tmp));  }  /* same remark as at the beginning of the method */  sip->message_property = 1;  sip->message = osip_strdup (*dest);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -