Hello, There is a mistake when copy params of content-type at line 1065 of sip_parser.c. If ctype_hdr->media.param is an empty list, body->content_type.param wouldn't be empty after copy because param->next is pointed to &ctype_hdr->media.param, not &body->content_type.param. Then pjsip_endpt_create_request_fwd() will always loop inside pjsip_param_clone(). stateless_proxy.c is helpful to repeat this issue. regards, Gang 1050 if (ctype_hdr && scanner->curptr!=scanner->end) { 1051 /* New: if Content-Type indicates that this is a multipart 1052 * message body, parse it. 1053 */ 1054 const pj_str_t STR_MULTIPART = { "multipart", 9 }; 1055 pjsip_msg_body *body; 1056 1057 if (pj_stricmp(&ctype_hdr->media.type, &STR_MULTIPART)==0) { 1058 body = pjsip_multipart_parse(pool, scanner->curptr, 1059 scanner->end - scanner->curptr, 1060 &ctype_hdr->media, 0); 1061 } else { 1062 body = PJ_POOL_ALLOC_T(pool, pjsip_msg_body); 1063 body->content_type.type = ctype_hdr->media.type; 1064 body->content_type.subtype = ctype_hdr->media.subtype; 1065 body->content_type.param = ctype_hdr->media.param; 1066 1067 body->data = scanner->curptr; 1068 body->len = scanner->end - scanner->curptr; 1069 body->print_body = &pjsip_print_text_body; 1070 body->clone_data = &pjsip_clone_text_data; 1071 } 1072 1073 msg->body = body; 1074 }