📄 osip_message_to_str.c
字号:
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 + -