void RepeatingBulkRound::ProcessDataBase(const Id &from, const QByteArray &data) { QByteArray payload; if(!Verify(from, data, payload)) { throw QRunTimeError("Invalid signature or data"); } if(_state == Offline) { throw QRunTimeError("Should never receive a message in the bulk" " round while offline."); } QDataStream stream(payload); int mtype; QByteArray round_id; uint phase; stream >> mtype >> round_id >> phase; MessageType msg_type = (MessageType) mtype; Id rid(round_id); if(rid != GetRoundId()) { throw QRunTimeError("Not this round: " + rid.ToString() + " " + GetRoundId().ToString()); } if(_state == Shuffling) { _log.Pop(); _offline_log.Append(data, from); return; } if(_phase != phase) { if(_phase == phase - 1 && _state == DataSharing) { _log.Pop(); _offline_log.Append(data, from); return; } else { throw QRunTimeError("Received a message for phase: " + QString::number(phase) + ", while in phase: " + QString::number(_phase)); } } else if(_state == PhasePreparation) { _log.Pop(); _offline_log.Append(data, from); return; } switch(msg_type) { case BulkData: HandleBulkData(stream, from); break; default: throw QRunTimeError("Unknown message type"); } }
void BulkRound::ProcessDataBase(const Id &from, const QByteArray &data) { QByteArray payload; if(!Verify(from, data, payload)) { throw QRunTimeError("Invalid signature or data"); } if(_state == Offline) { throw QRunTimeError("Should never receive a message in the bulk" " round while offline."); } QDataStream stream(payload); int mtype; QByteArray round_id; stream >> mtype >> round_id; MessageType msg_type = (MessageType) mtype; Id rid(round_id); if(rid != GetRoundId()) { throw QRunTimeError("Not this round: " + rid.ToString() + " " + GetRoundId().ToString()); } if(_state == Shuffling) { _log.Pop(); _offline_log.Append(data, from); return; } switch(msg_type) { case BulkData: HandleBulkData(stream, from); break; case LoggedBulkData: HandleLoggedBulkData(stream, from); break; case AggregatedBulkData: HandleAggregatedBulkData(stream, from); break; default: throw QRunTimeError("Unknown message type"); } }