static ios::Error
defensiveProcessIncomingMessagePointer(virt_ptr<IPCKDriver> driver,
                                       virt_ptr<IPCKDriverRequest> request,
                                       virt_ptr<IPCKDriverRequestBlock> *outRequestBlock)
{
   auto index = request - driver->requestsBuffer;
   if (index >= IPCKRequestsPerCore || index < 0) {
      return ios::Error::Invalid;
   }

   if (driver->requestBlocks[index].request != request) {
      return ios::Error::Invalid;
   }

   auto requestBlock = virt_addrof(driver->requestBlocks[index]);
   auto flags = requestBlock->flags.value();
   if (flags.requestState() == IPCKDriverRequestBlock::Unallocated) {
      return ios::Error::Invalid;
   }

   requestBlock->flags =
      flags.replyState(IPCKDriverRequestBlock::ReceivedReply);
   *outRequestBlock = requestBlock;
   return ios::Error::OK;
}
示例#2
0
void GetSecretCommand::process(CommandHandler &command)
{
    QByteArray secret = command.user->readSetting("localSecret").toByteArray();
    if (secret.size() != 16)
    {
        command.sendReply(ProtocolCommand::InternalError);
        return;
    }

    command.sendReply(replyState(true, true, 0x00), secret);
}