in samplecode/psi/MessageHandler/MessageHandler.cpp [578:651]
vector<string> MessageHandler::incomingHandler(string v, int type) {
vector<string> res;
string s;
bool ret;
switch (type) {
case RA_VERIFICATION: { //Verification request
Messages::InitialMessage init_msg;
ret = init_msg.ParseFromString(v);
if (ret && init_msg.type() == RA_VERIFICATION) {
s = this->handleVerification();
res.push_back(to_string(RA_MSG0));
}
}
break;
case RA_MSG0: { //Reply to MSG0
Messages::MessageMsg0 msg0;
ret = msg0.ParseFromString(v);
if (ret && (msg0.type() == RA_MSG0)) {
s = this->handleMSG0(msg0);
res.push_back(to_string(RA_MSG1));
}
}
break;
case RA_MSG2: { //MSG2
Messages::MessageMSG2 msg2;
ret = msg2.ParseFromString(v);
if (ret && (msg2.type() == RA_MSG2)) {
s = this->handleMSG2(msg2);
res.push_back(to_string(RA_MSG3));
}
}
break;
case RA_ATT_RESULT: { //Reply to MSG3
Messages::AttestationMessage att_msg;
ret = att_msg.ParseFromString(v);
if (ret && att_msg.type() == RA_ATT_RESULT) {
s = this->handleAttestationResult(att_msg);
res.push_back(to_string(RA_PSI_SLAT));
}
}
break;
case RA_PSI_HASHDATA: {
Messages::MessagePsiHashData data_msg;
ret = data_msg.ParseFromString(v);
if (ret && data_msg.type() == RA_PSI_HASHDATA) {
s = this->handlePsiHashData(data_msg);
res.push_back(to_string(RA_PSI_RESULT));
}
}
break;
case RA_PSI_HASHDATA_FINISHED: {
Messages::MessagePsiHashDataFinished finish_msg;
ret = finish_msg.ParseFromString(v);
if (ret && finish_msg.type() == RA_PSI_HASHDATA_FINISHED) {
bool again = false;
s = this->handlePsiHashDataFinished(finish_msg, &again);
if (again) {
res.push_back(to_string(RA_PSI_RESULT));
} else {
res.push_back(to_string(RA_PSI_INTERSECT));
}
}
}
break;
default:
Log("Unknown type: %d", type, log::error);
break;
}
res.push_back(s);
return res;
}