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

📄 osip_message_to_str.c

📁 最新osip源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    }  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;      size_t header_len = 0;      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;        }      header_len = strlen (tmp);      if (_osip_message_realloc (&message, dest, header_len + 3, &malloc_size) < 0)        return -1;      message = osip_str_append (message, tmp);      osip_free (tmp);      message = osip_strn_append (message, CRLF, 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_accept_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;  i =    strcat_headers_one_per_line (dest, &malloc_size, &message,                                 sip->authentication_infos,                                 "Authentication-Info: ", 21,                                 ((int (*)(void *, char **))                                  &osip_authentication_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->proxy_authentication_infos,                                 "Proxy-Authentication-Info: ", 27,                                 ((int (*)(void *, char **))                                  &osip_authentication_info_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 (_osip_message_realloc (&message, dest, 16, &malloc_size) < 0)    return -1;  if (sipfrag && osip_list_eol (sip->bodies, 0))    {      /* end of headers */      osip_strncpy (message, CRLF, 2);      message = message + 2;      /* same remark as at the beginning of the method */      sip->message_property = 1;      sip->message = osip_strdup (*dest);      sip->message_length = message - *dest;      if (message_length != NULL)        *message_length = message - *dest;      return 0;                 /* it's all done */    }  osip_strncpy (message, "Content-Length: ", 16);  message = message + 16;  /* 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 */    message = osip_strn_append (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...       */      content_length_to_modify = message;      message = osip_str_append (message, "     ");    }  /*  } */  message = osip_strn_append (message, CRLF, 2);  /* end of headers */  message = osip_strn_append (message, CRLF, 2);  start_of_bodies = message;  total_length = start_of_bodies - *dest;  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);      sip->message_length = total_length;      if (message_length != NULL)        *message_length = total_length;      return 0;                 /* it's all done */    }  if (sip->mime_version != NULL && sip->content_type      && sip->content_type->type      && !osip_strcasecmp (sip->content_type->type, "multipart"))    {      osip_generic_param_t *ct_param = NULL;      /* find the boundary */      i = osip_generic_param_get_byname (sip->content_type->gen_params,                                         "boundary", &ct_param);      if ((i >= 0) && ct_param && ct_param->gvalue)        {          size_t len = strlen (ct_param->gvalue);          if (len > MIME_MAX_BOUNDARY_LEN)            {              osip_free (*dest);              *dest = NULL;              return -1;            }          boundary = osip_malloc (len + 5);          osip_strncpy (boundary, CRLF, 2);          osip_strncpy (boundary + 2, "--", 2);          if (ct_param->gvalue[0] == '"' && ct_param->gvalue[len - 1] == '"')            osip_strncpy (boundary + 4, ct_param->gvalue + 1, len - 2);          else            osip_strncpy (boundary + 4, ct_param->gvalue, len);        }    }  pos = 0;  while (!osip_list_eol (sip->bodies, pos))    {      osip_body_t *body;      size_t body_length;      body = (osip_body_t *) osip_list_get (sip->bodies, pos);      if (boundary)        {          /* Needs at most 77 bytes,             last realloc allocate at least 100 bytes extra */          message = osip_str_append (message, boundary);          message = osip_strn_append (message, CRLF, 2);        }      i = osip_body_to_str (body, &tmp, &body_length);      if (i != 0)        {          osip_free (*dest);          *dest = NULL;          if (boundary)            osip_free (boundary);          return -1;        }      if (malloc_size < message - *dest + 100 + body_length)        {          size_t size = message - *dest;          int offset_of_body;          int offset_content_length_to_modify = 0;          offset_of_body = (int) (start_of_bodies - *dest);          if (content_length_to_modify != NULL)            offset_content_length_to_modify =              (int) (content_length_to_modify - *dest);          malloc_size = message - *dest + body_length + 100;          *dest = osip_realloc (*dest, malloc_size);          if (*dest == NULL)            {              osip_free (tmp);  /* fixed 09/Jun/2005 */              if (boundary)                osip_free (boundary);              return -1;            }          start_of_bodies = *dest + offset_of_body;          if (content_length_to_modify != NULL)            content_length_to_modify = *dest + offset_content_length_to_modify;          message = *dest + size;        }      memcpy (message, tmp, body_length);      message[body_length] = '\0';      osip_free (tmp);      message = message + body_length;      pos++;    }  if (boundary)    {      /* Needs at most 79 bytes,         last realloc allocate at least 100 bytes extra */      message = osip_str_append (message, boundary);      message = osip_strn_append (message, "--", 2);      message = osip_strn_append (message, CRLF, 2);      osip_free (boundary);      boundary = NULL;    }  if (content_length_to_modify == NULL)    {      osip_free (*dest);      *dest = NULL;      return -1;    }  /* we NOW have the length of bodies: */  {    size_t size = message - start_of_bodies;    char tmp2[15];    total_length += size;    sprintf (tmp2, "%i", size);    /* do not use osip_strncpy here! */    strncpy (content_length_to_modify + 5 - strlen (tmp2), tmp2, strlen (tmp2));  }  /* same remark as at the beginning of the method */  sip->message_property = 1;  sip->message = osip_malloc (total_length + 1);  if (sip->message != NULL)    {      memcpy (sip->message, *dest, total_length);      sip->message[total_length] = '\0';      sip->message_length = total_length;      if (message_length != NULL)        *message_length = total_length;    }  return 0;}intosip_message_to_str (osip_message_t * sip, char **dest, size_t * message_length){  return _osip_message_to_str (sip, dest, message_length, 0);}intosip_message_to_str_sipfrag (osip_message_t * sip, char **dest,                             size_t * message_length){  return _osip_message_to_str (sip, dest, message_length, 1);}

⌨️ 快捷键说明

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