📄 msg_read.c
字号:
i = strcat_simple_header (dest, &malloc_size, &message, sip->from, "From: ", 6, ((int (*)(void *, char **)) &from_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; i = strcat_simple_header (dest, &malloc_size, &message, sip->to, "To: ", 4, ((int (*)(void *, char **)) &to_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; i = strcat_simple_header (dest, &malloc_size, &message, sip->call_id, "Call-ID: ", 9, ((int (*)(void *, char **)) &call_id_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; i = strcat_simple_header (dest, &malloc_size, &message, sip->cseq, "CSeq: ", 6, ((int (*)(void *, char **)) &cseq_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; i = strcat_headers_one_per_line (dest, &malloc_size, &message, sip->contacts, "Contact: ", 9, ((int (*)(void *, char **)) &contact_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; i = strcat_headers_one_per_line (dest, &malloc_size, &message, sip->authorizations, "Authorization: ", 15, ((int (*)(void *, char **)) &authorization_2char), &next); if (i != 0) { sfree (*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 **)) &www_authenticate_2char), &next); if (i != 0) { sfree (*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 **)) &www_authenticate_2char), &next); if (i != 0) { sfree (*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 **)) &authorization_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; pos = 0; while (!list_eol (sip->headers, pos)) { header_t *header; header = (header_t *) list_get (sip->headers, pos); i = header_2char (header, &tmp); if (i == -1) { sfree (*dest); *dest = NULL; return -1; } sstrncpy (message, tmp, strlen (tmp)); sfree (tmp); message = message + strlen (message); sstrncpy (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 **)) &content_length_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; i = strcat_simple_header (dest, &malloc_size, &message, sip->content_type, "Content-Type: ", 14, ((int (*)(void *, char **)) &content_type_2char), &next); if (i != 0) { sfree (*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 **)) &content_length_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; i = strcat_simple_header (dest, &malloc_size, &message, sip->mime_version, "Mime-Version: ", 14, ((int (*)(void *, char **)) &content_length_2char), &next); if (i != 0) { sfree (*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 **)) &call_info_2char), &next); if (i != 0) { sfree (*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 **)) &call_info_2char), &next); if (i != 0) { sfree (*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 **)) &call_info_2char), &next); if (i != 0) { sfree (*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 **)) &content_type_2char), &next); if (i != 0) { sfree (*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 **)) &accept_encoding_2char), &next); if (i != 0) { sfree (*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 **)) &accept_encoding_2char), &next); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } message = next; /* we have to create the body before adding the contentlength */ sstrncpy (message, "Content-Length: ", 16); message = message + strlen (message); /* SIPit Day1 ALWAYS RECALCULATE? if (sip->contentlength!=NULL) { i = content_length_2char(sip->contentlength, &tmp); if (i==-1) { sfree(*dest); *dest = NULL; return -1; } sstrncpy(message,tmp,strlen(tmp)); sfree(tmp); } else { */ if (list_eol (sip->bodies, 0)) /* no body */ sstrncpy (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... */ sstrncpy (message, " ", 5); content_length_to_modify = message; } /* } */ message = message + strlen (message); sstrncpy (message, CRLF, 2); message = message + 2; /* end of headers */ sstrncpy (message, CRLF, 2); message = message + 2; if (list_eol (sip->bodies, 0)) {#ifdef USE_TMP_BUFFER /* same remark as at the beginning of the method */ sip->message_property = 1; sip->message = sgetcopy (*dest);#endif return 0; /* it's all done */ } start_of_bodies = message; pos = 0; while (!list_eol (sip->bodies, pos)) { body_t *body; body = (body_t *) list_get (sip->bodies, pos); if (sip->mime_version != NULL) { sstrncpy (message, "--++", strlen ("--++")); message = message + strlen (message); sstrncpy (message, CRLF, 2); message = message + 2; } i = body_2char (body, &tmp); if (i != 0) { sfree (*dest); *dest = NULL; return -1; } sstrncpy (message, tmp, strlen (tmp)); sfree (tmp); message = message + strlen (message); pos++; } if (sip->mime_version != NULL) { sstrncpy (message, "--++--", strlen ("--++--")); message = message + strlen (message); sstrncpy (message, CRLF, 2); message = message + 2; /* ADDED at SIPit day1: Is this needed for MIME type? sstrncpy(message,CRLF,2); message = message + 2; strncpy(message,"\0",1); */ } if (content_length_to_modify == NULL) { sfree (*dest); *dest = NULL; return -1; } /* we NOW have the length of bodies: */ { int size = strlen (start_of_bodies); /* replace xxxxx by size */ tmp = (char *) smalloc (15); /* to be improved? !!!could be an issue for authentication!!! */#ifdef OLD_CODE sprintf (tmp, "%i ", size); /* do not use sstrncpy here! */ strncpy (content_length_to_modify, tmp, 5);#else sprintf (tmp, "%i", size); strncpy (content_length_to_modify+5-strlen(tmp), tmp, strlen(tmp));#endif sfree (tmp); }#ifdef USE_TMP_BUFFER /* same remark as at the beginning of the method */ sip->message_property = 1; sip->message = sgetcopy (*dest);#endif return 0;}#ifdef ENABLE_TRACE#ifdef _WIN32_WCEvoid msg_logrequest (sip_t * sip, char *fmt) {}void msg_logresponse (sip_t * sip, char *fmt) {}#elsevoidmsg_logresponse (sip_t * sip, char *fmt){ char *tmp1; char *tmp2; int i; if (1 == is_trace_level_activate (TRACE_LEVEL4)) { i = msg_2char (sip, &tmp1); if (i != -1) { osip_trace (__FILE__, __LINE__, TRACE_LEVEL4, stdout, "MESSAGE :\n%s\n", tmp1); sfree (tmp1); } else osip_trace (__FILE__, __LINE__, TRACE_LEVEL4, stdout, "MESSAGE : Could not make a string of message!!!!\n"); } if (1 == is_trace_level_activate (TRACE_LEVEL0)) { i = from_2char (sip->from, &tmp1); if (i == -1) return; i = to_2char (sip->to, &tmp2); if (i == -1) return; osip_trace (__FILE__, __LINE__, TRACE_LEVEL0, NULL, fmt, sip->strtline->statuscode, sip->strtline->reasonphrase, sip->cseq->method, tmp1, tmp2, sip->cseq->number, sip->call_id->number); sfree (tmp1); sfree (tmp2); }}voidmsg_logrequest (sip_t * sip, char *fmt){ char *tmp1; char *tmp2; int i; if (1 == is_trace_level_activate (TRACE_LEVEL4)) { i = msg_2char (sip, &tmp1); if (i != -1) { osip_trace (__FILE__, __LINE__, TRACE_LEVEL4, stdout, "<app.c> MESSAGE :\n%s\n", tmp1); sfree (tmp1); } else osip_trace (__FILE__, __LINE__, TRACE_LEVEL4, stdout, "<app.c> MESSAGE :\n Could not make a string of message\n"); } if (1 == is_trace_level_activate (TRACE_LEVEL0)) { i = from_2char (sip->from, &tmp1); if (i == -1) return; i = to_2char (sip->to, &tmp2); if (i == -1) return; osip_trace (__FILE__, __LINE__, TRACE_LEVEL0, NULL, fmt, sip->cseq->method, tmp1, tmp2, sip->cseq->number, sip->call_id->number); sfree (tmp1); sfree (tmp2); }}#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -