@@ -57,47 +57,46 @@ Workload::~Workload()
5757 */
5858std::string Workload::get_workload (void )
5959{
60- crust_status_t crust_status = CRUST_SUCCESS;
6160 sgx_sha256_hash_t srd_root;
6261 uint64_t srd_workload = 0 ;
63- json::JSON wl_json;
6462 json::JSON md_json;
6563 memset (srd_root, 0 , sizeof (sgx_sha256_hash_t ));
64+ std::string wl_str;
6665
6766 // ----- workload info ----- //
6867 id_get_metadata (md_json);
69- // Srd info
70- this ->get_srd_info (&srd_root, &srd_workload, md_json);
71- wl_json[WL_SRD][WL_SRD_ROOT_HASH] = hexstring_safe (srd_root, HASH_LENGTH);
72- wl_json[WL_SRD][WL_SRD_SPACE] = srd_workload / 1024 / 1024 / 1024 ;
73- wl_json[WL_SRD][WL_SRD_REMAINING_TASK] = get_srd_change ();
7468 // file info
69+ wl_str.append (" {" );
70+ wl_str.append (" \" " ).append (WL_FILES).append (" \" :{" );
7571 if (md_json.hasKey (ID_FILE) && md_json[ID_FILE].size () > 0 )
7672 {
7773 for (int i = 0 ; i < md_json[ID_FILE].size (); i++)
7874 {
79- json::JSON tmp_json;
80- tmp_json[WL_FILE_SEALED_SIZE] = md_json[ID_FILE][i][FILE_SIZE];
81- tmp_json[WL_FILE_STATUS] = md_json[ID_FILE][i][FILE_STATUS];
82- // Get old hash
83- uint8_t *p_meta = NULL ;
84- size_t meta_len = 0 ;
85- crust_status = persist_get_unsafe ((md_json[ID_FILE][i][FILE_HASH].ToString ()+" _meta" ).c_str (), &p_meta, &meta_len);
86- if (CRUST_SUCCESS == crust_status && p_meta != NULL )
75+ std::string tmp_str = " {" ;
76+ tmp_str.append (" \" " ).append (WL_FILE_SEALED_SIZE).append (" \" :" )
77+ .append (std::to_string (md_json[ID_FILE][i][FILE_SIZE].ToInt ())).append (" ," );
78+ tmp_str.append (" \" " ).append (WL_FILE_STATUS).append (" \" :" )
79+ .append (" \" " ).append (md_json[ID_FILE][i][FILE_STATUS].ToString ()).append (" \" }" );
80+ wl_str.append (" \" " ).append (md_json[ID_FILE][i][FILE_HASH].ToString ()).append (" \" :" ).append (tmp_str);
81+ if (i != md_json[ID_FILE].size () - 1 )
8782 {
88- json::JSON org_file_json = json::JSON::Load (std::string (reinterpret_cast <char *>(p_meta), meta_len));
89- free (p_meta);
90- tmp_json[WL_FILE_OLD_HASH] = org_file_json[FILE_OLD_HASH].ToString ();
91- tmp_json[WL_FILE_OLD_SIZE] = org_file_json[FILE_OLD_SIZE].ToInt ();
83+ wl_str.append (" ," );
9284 }
93- std::string tmp_str = tmp_json.dump ();
94- remove_char (tmp_str, ' \n ' );
95- wl_json[WL_FILES][md_json[ID_FILE][i][FILE_HASH].ToString ()] = tmp_str;
9685 }
9786 }
87+ wl_str.append (" }," );
88+ // Srd info
89+ this ->get_srd_info (&srd_root, &srd_workload, md_json);
90+ wl_str.append (" \" " ).append (WL_SRD).append (" \" :{" );
91+ wl_str.append (" \" " ).append (WL_SRD_ROOT_HASH).append (" \" :" )
92+ .append (" \" " ).append (hexstring_safe (srd_root, HASH_LENGTH)).append (" \" ," );
93+ wl_str.append (" \" " ).append (WL_SRD_SPACE).append (" \" :" )
94+ .append (" \" " ).append (std::to_string (srd_workload / 1024 / 1024 / 1024 )).append (" \" ," );
95+ wl_str.append (" \" " ).append (WL_SRD_REMAINING_TASK).append (" \" :" )
96+ .append (" \" " ).append (std::to_string (get_srd_change ())).append (" \" }" );
97+ wl_str.append (" }" );
9898
9999 // Store workload
100- std::string wl_str = wl_json.dump ();
101100 store_large_data (wl_str.c_str (), wl_str.size (), ocall_store_workload);
102101
103102 return wl_str;
@@ -161,6 +160,7 @@ crust_status_t Workload::get_srd_info(sgx_sha256_hash_t *srd_root_out, uint64_t
161160 return CRUST_MALLOC_FAILED;
162161 }
163162 memcpy (hashs + hashs_len, hash_u, HASH_LENGTH);
163+ free (hash_u);
164164 hashs_len += HASH_LENGTH;
165165 }
166166 }
@@ -290,6 +290,7 @@ crust_status_t Workload::restore_srd(json::JSON g_hashs)
290290 clean_data ();
291291 return CRUST_UNEXPECTED_ERROR;
292292 }
293+ free (g_hash);
293294 this ->srd_path2hashs_m [it->first ].push_back (g_hash);
294295 }
295296 }
0 commit comments