public static object ParseRequest(byte[] request) { if (request.Length < 1) { Console.Error.WriteLine("Received request with no bytes"); return(new Common.InvalidRequest()); } if (request[0] == 1) { return(Common.GetQuoteRequest.ParseRequest(request)); } if (request[0] == 2) { return(InitializeDBRequest.ParseRequest(request)); } if (request[0] == 3) { return(AddRowRequest.ParseRequest(request)); } if (request[0] == 4) { return(QueryRequest.ParseRequest(request)); } Console.Error.WriteLine("Received request with invalid type"); return(new Common.InvalidRequest()); }
public byte[] HandleRequest(byte[] requestBytes) { object request = DiffPrivRequest.ParseRequest(requestBytes); if (request is Common.GetQuoteRequest) { GetQuoteResponse getQuoteResponse = new GetQuoteResponse(0, key_pair); return(getQuoteResponse.Encode()); } if (request is InitializeDBRequest) { InitializeDBRequest r = (InitializeDBRequest)request; if (rows_received != 0) { Console.Error.WriteLine("Received request to initialize DB after receiving rows"); return(DiffPrivSrvResponse.EncodeInitializeDBResponse(18)); } if (r.budget_num < r.budget_den) { Console.Error.WriteLine("Received request to initialize DB with budget < 1"); return(DiffPrivSrvResponse.EncodeInitializeDBResponse(16)); } budget = new BigRational(r.budget_num, r.budget_den); rows.Clear(); return(DiffPrivSrvResponse.EncodeInitializeDBResponse(0)); } if (request is AddRowRequest) { byte[] ciphertext = ((AddRowRequest)request).ciphertext; byte[] plaintext; try { plaintext = key_pair.Decrypt(ciphertext, false); } catch { Console.Error.WriteLine("Received undecryptable add-row request"); return(DiffPrivSrvResponse.EncodeAddRowResponse()); } HandleAddRowRequest(plaintext); return(DiffPrivSrvResponse.EncodeAddRowResponse()); } if (request is QueryRequest) { QueryRequest r = (QueryRequest)request; return(HandleQueryRequest(r)); } return(InvalidResponse.Encode()); }