1da59bc46SPawel Dziepak /* 2da59bc46SPawel Dziepak * Copyright 2012 Haiku, Inc. All rights reserved. 3da59bc46SPawel Dziepak * Distributed under the terms of the MIT License. 4da59bc46SPawel Dziepak * 5da59bc46SPawel Dziepak * Authors: 6da59bc46SPawel Dziepak * Paweł Dziepak, pdziepak@quarnos.org 7da59bc46SPawel Dziepak */ 8da59bc46SPawel Dziepak 9da59bc46SPawel Dziepak 10da59bc46SPawel Dziepak #include "RPCReply.h" 11da59bc46SPawel Dziepak 12*1e67a2cdSPawel Dziepak #include <debug.h> 13da59bc46SPawel Dziepak #include <util/kernel_cpp.h> 14da59bc46SPawel Dziepak 15feb15cc6SPawel Dziepak #include "RPCDefs.h" 16feb15cc6SPawel Dziepak 17da59bc46SPawel Dziepak 18da59bc46SPawel Dziepak using namespace RPC; 19da59bc46SPawel Dziepak 20da59bc46SPawel Dziepak Reply(void * buffer,int size)21da59bc46SPawel DziepakReply::Reply(void* buffer, int size) 22da59bc46SPawel Dziepak : 23da59bc46SPawel Dziepak fError(B_OK), 24da59bc46SPawel Dziepak fStream(buffer, size), 25da59bc46SPawel Dziepak fBuffer(buffer) 26da59bc46SPawel Dziepak { 27*1e67a2cdSPawel Dziepak ASSERT(buffer != NULL); 28*1e67a2cdSPawel Dziepak 29da59bc46SPawel Dziepak fXID = fStream.GetUInt(); 30b82f4c07SPawel Dziepak if (fStream.GetInt() != REPLY) { 31b82f4c07SPawel Dziepak fError = B_BAD_VALUE; 32b82f4c07SPawel Dziepak return; 33b82f4c07SPawel Dziepak } 34b82f4c07SPawel Dziepak 35b82f4c07SPawel Dziepak if (fStream.GetInt() == MSG_ACCEPTED) { 36b82f4c07SPawel Dziepak fStream.GetInt(); 37da59bc46SPawel Dziepak fStream.GetOpaque(NULL); 38b82f4c07SPawel Dziepak 39b82f4c07SPawel Dziepak switch (fStream.GetInt()) { 40b82f4c07SPawel Dziepak case SUCCESS: 41b82f4c07SPawel Dziepak return; 42b82f4c07SPawel Dziepak case PROG_UNAVAIL: 43b82f4c07SPawel Dziepak case PROG_MISMATCH: 44b82f4c07SPawel Dziepak case PROC_UNAVAIL: 45b82f4c07SPawel Dziepak fError = B_DEVICE_NOT_FOUND; 46b82f4c07SPawel Dziepak return; 47b82f4c07SPawel Dziepak case GARBAGE_ARGS: 48b82f4c07SPawel Dziepak fError = B_MISMATCHED_VALUES; 49b82f4c07SPawel Dziepak return; 50b82f4c07SPawel Dziepak case SYSTEM_ERR: 51b82f4c07SPawel Dziepak fError = B_ERROR; 52b82f4c07SPawel Dziepak return; 53b82f4c07SPawel Dziepak default: 54b82f4c07SPawel Dziepak fError = B_BAD_VALUE; 55b82f4c07SPawel Dziepak return; 56b82f4c07SPawel Dziepak } 57b82f4c07SPawel Dziepak } else { // MSG_DENIED 58b82f4c07SPawel Dziepak if (fStream.GetInt() == RPC_MISMATCH) { 59b82f4c07SPawel Dziepak fError = B_DEVICE_NOT_FOUND; 60b82f4c07SPawel Dziepak return; 61b82f4c07SPawel Dziepak } else { // AUTH_ERROR 62b82f4c07SPawel Dziepak fError = B_PERMISSION_DENIED; 63b82f4c07SPawel Dziepak return; 64b82f4c07SPawel Dziepak } 65b82f4c07SPawel Dziepak } 66da59bc46SPawel Dziepak } 67da59bc46SPawel Dziepak 68da59bc46SPawel Dziepak ~Reply()69da59bc46SPawel DziepakReply::~Reply() 70da59bc46SPawel Dziepak { 71da59bc46SPawel Dziepak free(fBuffer); 72da59bc46SPawel Dziepak } 73da59bc46SPawel Dziepak 74