in samplecode/psi/MessageHandler/MessageHandler.cpp [92:149]
string MessageHandler::generateMSG1() {
int retGIDStatus = 0;
int count = 0;
sgx_status_t ret;
sgx_ra_context_t context = INT_MAX;
sgx_ra_msg1_t sgxMsg1Obj;
ret = this->enclave->raInit(&context);
if (SGX_SUCCESS != ret) {
Log("Error, call enclave_init_ra fail", log::error);
return "";
}
while (1) {
retGIDStatus = sgx_ra_get_msg1(context,
this->enclave->getID(),
sgx_ra_get_ga,
&sgxMsg1Obj);
if (retGIDStatus == SGX_SUCCESS) {
break;
} else if (retGIDStatus == SGX_ERROR_BUSY) {
if (count == 5) { //retried 5 times, so fail out
Log("Error, sgx_ra_get_msg1 is busy - 5 retries failed", log::error);
break;;
} else {
sleep(3);
count++;
}
} else { //error other than busy
Log("Error, failed to generate MSG1", log::error);
break;
}
}
if (SGX_SUCCESS == retGIDStatus) {
Log("MSG1 generated Successfully");
Messages::MessageMSG1 msg;
msg.set_type(RA_MSG1);
msg.set_context(context);
for (auto x : sgxMsg1Obj.g_a.gx)
msg.add_gax(x);
for (auto x : sgxMsg1Obj.g_a.gy)
msg.add_gay(x);
for (auto x : sgxMsg1Obj.gid) {
msg.add_gid(x);
}
return nm->serialize(msg);
}
return "";
}