public static List <ResponsePDU> GetRPCResponse(RequestPDU requestPDU, RemoteService service, int maxTransmitFragmentSize) { byte[] responseBytes = service.GetResponseBytes(requestPDU.OpNum, requestPDU.Data); int offset = 0; List <ResponsePDU> result = new List <ResponsePDU>(); int maxPDUDataLength = maxTransmitFragmentSize - RPCPDU.CommonFieldsLength - ResponsePDU.ResponseFieldsLength; do { ResponsePDU responsePDU = new ResponsePDU(); int pduDataLength = Math.Min(responseBytes.Length - offset, maxPDUDataLength); responsePDU.DataRepresentation = requestPDU.DataRepresentation; responsePDU.CallID = requestPDU.CallID; responsePDU.AllocationHint = (uint)(responseBytes.Length - offset); responsePDU.Data = ByteReader.ReadBytes(responseBytes, offset, pduDataLength); if (offset == 0) { responsePDU.Flags |= PacketFlags.FirstFragment; } if (offset + pduDataLength == responseBytes.Length) { responsePDU.Flags |= PacketFlags.LastFragment; } result.Add(responsePDU); offset += pduDataLength; }while (offset < responseBytes.Length); return(result); }
private static ResponsePDU GetRPCResponse(RequestPDU requestPDU, RemoteService service) { ResponsePDU responsePDU = new ResponsePDU(); PrepareReply(responsePDU, requestPDU); responsePDU.Data = service.GetResponseBytes(requestPDU.OpNum, requestPDU.Data); return(responsePDU); }
public static List <RPCPDU> GetRPCResponse(RequestPDU requestPDU, RemoteService service, int maxTransmitFragmentSize) { List <RPCPDU> result = new List <RPCPDU>(); byte[] responseBytes; try { responseBytes = service.GetResponseBytes(requestPDU.OpNum, requestPDU.Data); } catch (UnsupportedOpNumException) { FaultPDU faultPDU = new FaultPDU { Flags = PacketFlags.FirstFragment | PacketFlags.LastFragment | PacketFlags.DidNotExecute, DataRepresentation = requestPDU.DataRepresentation, CallID = requestPDU.CallID, AllocationHint = RPCPDU.CommonFieldsLength + FaultPDU.FaultFieldsLength, // Windows will return either nca_s_fault_ndr or nca_op_rng_error. Status = FaultStatus.OpRangeError }; result.Add(faultPDU); return(result); } int offset = 0; int maxPDUDataLength = maxTransmitFragmentSize - RPCPDU.CommonFieldsLength - ResponsePDU.ResponseFieldsLength; do { ResponsePDU responsePDU = new ResponsePDU(); int pduDataLength = Math.Min(responseBytes.Length - offset, maxPDUDataLength); responsePDU.DataRepresentation = requestPDU.DataRepresentation; responsePDU.CallID = requestPDU.CallID; responsePDU.AllocationHint = (uint)(responseBytes.Length - offset); responsePDU.Data = ByteReader.ReadBytes(responseBytes, offset, pduDataLength); if (offset == 0) { responsePDU.Flags |= PacketFlags.FirstFragment; } if (offset + pduDataLength == responseBytes.Length) { responsePDU.Flags |= PacketFlags.LastFragment; } result.Add(responsePDU); offset += pduDataLength; }while (offset < responseBytes.Length); return(result); }