@@ -347,7 +347,10 @@ func fmt_profile_endata(endata_name string, metadata []parser.MultiParam) (strin
347347 // fmt.Println("skip encode....")
348348 c_encode = ""
349349 c_free = ""
350- last_varname = endata_name
350+ c_encode = "raw_data_t " + endata_name + "_t = {" + endata_name + ", 0};\n "
351+ c_encode += endata_name + "_t.size = strlen(" + endata_name + ");\n "
352+ c_encode += "raw_data_t *" + endata_name + "_p = &" + endata_name + "_t;\n "
353+ last_varname = endata_name + "_p"
351354 } else {
352355 c_encode = "raw_data_t *raw_data_" + endata_name + " = base64_de(" + endata_name + ", strlen(" + endata_name + "));\n " + c_encode
353356 c_free = "safe_free(&raw_data_" + endata_name + ");\n " + c_free
@@ -371,6 +374,23 @@ func fmt_profile_endata(endata_name string, metadata []parser.MultiParam) (strin
371374 return c_encode , c_free , data_storetype
372375}
373376
377+ func get_match_string (mini_match_length int , subdata string , profiledata string , is_predata bool ) string {
378+ match_str := ""
379+ for {
380+ if (is_predata ) {
381+ match_str = subdata [len (subdata )- mini_match_length :]
382+ } else {
383+ match_str = subdata [0 :mini_match_length ]
384+ }
385+ if strings .Count (profiledata , match_str ) == 1 {
386+ break
387+ } else {
388+ mini_match_length += 1
389+ }
390+ }
391+ return match_str
392+ }
393+
374394func fmt_profile_dedata (dedata_name string , metadata []parser.MultiParam ) (string , string , string ) {
375395 c_encode := ""
376396 c_free := ""
@@ -414,23 +434,31 @@ func fmt_profile_dedata(dedata_name string, metadata []parser.MultiParam) (strin
414434 last_varname = "raw_data"
415435 }
416436 c_payload := ""
437+ profile_data := ""
417438 if (prepend_data != "" ) {
418- prepend_data = prepend_data [len (prepend_data )- 6 :]
439+ profile_data = prepend_data
440+ prepend_data = get_match_string (6 , prepend_data , profile_data , true )
419441 c_payload += fmt_go_2_c ("pre_data" , prepend_data )
420442 } else {
421443 // fmt.Println("[error]: c2profile -> http-get{ Server { Output { prepend: not found } } }")
422444 }
423445 if (append_data != "" ) {
424- append_data = append_data [0 :6 ]
446+ profile_data += append_data
447+ append_data = get_match_string (6 , append_data , profile_data , false )
425448 c_payload += fmt_go_2_c ("add_data" , append_data )
426449 } else {
427450 // fmt.Println("[error]: c2profile -> http-get{ Server { Output { prepend: not found } } }")
428451 }
429452
430- c_payload += "raw_data_t *raw_data = find_payload(rawData, rawData_len, c_pre_data, c_add_data);\n \n "
453+ c_payload += "raw_data_t *raw_data = find_payload(rawData, rawData_len, c_pre_data, c_add_data);\n \n "
431454
432455 c_encode = c_payload + c_encode
433- c_encode += "\n raw_data_t *en_out = base64_en(" + last_varname + "->data, " + last_varname + "->size);\n "
456+ if (last_varname == "raw_data" ) {
457+ c_encode += "\n raw_data_t *en_out = raw_data;\n "
458+ } else {
459+ c_encode += "\n raw_data_t *en_out = base64_en(" + last_varname + "->data, " + last_varname + "->size);\n "
460+ c_free += "safe_free(&raw_data);\n "
461+ }
434462
435463 return c_encode , c_free , data_storetype
436464}
@@ -531,7 +559,7 @@ func fmt_profile_get_client(http_get *parser.HttpGet) string{
531559 c_code += "\n " + c_free
532560 c_code += "\n "
533561 c_code += "*outputData_len = http_body->size;\n "
534- c_code += "*outputData = http_body->data;\n "
562+ c_code += "*outputData = http_body->data;\n "
535563
536564 fmt_c_code := ""
537565 for _ , i := range strings .Split (c_code , "\n " ) {
@@ -549,7 +577,7 @@ func fmt_profile_get_server(http_get *parser.HttpGet) string{
549577 c_code += "\n " + c_free
550578 c_code += "\n "
551579 c_code += "*outputData_len = en_out->size;\n "
552- c_code += "*outputData = en_out->data;\n "
580+ c_code += "*outputData = en_out->data;\n "
553581
554582 fmt_c_code := ""
555583 for _ , i := range strings .Split (c_code , "\n " ) {
@@ -655,7 +683,7 @@ func fmt_profile_post_client(http_post *parser.HttpPost) string{
655683 c_code += c_free
656684 c_code += "\n "
657685 c_code += "*outputData_len = http_body->size;\n "
658- c_code += "*outputData = http_body->data;\n "
686+ c_code += "*outputData = http_body->data;\n "
659687
660688 fmt_c_code := ""
661689 for _ , i := range strings .Split (c_code , "\n " ) {
0 commit comments