vector MessageHandler::incomingHandler()

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;
}