public static BindAckPDU GetRPCBindResponse(BindPDU bindPDU, RemoteService service) { BindAckPDU bindAckPDU = new BindAckPDU(); bindAckPDU.Flags = PacketFlags.FirstFragment | PacketFlags.LastFragment; bindAckPDU.DataRepresentation = bindPDU.DataRepresentation; bindAckPDU.CallID = bindPDU.CallID; // See DCE 1.1: Remote Procedure Call - 12.6.3.6 // The client should set the assoc_group_id field either to 0 (zero), to indicate a new association group, // or to the known value. When the server receives a value of 0, this indicates that the client // has requested a new association group, and it assigns a server unique value to the group. if (bindPDU.AssociationGroupID == 0) { bindAckPDU.AssociationGroupID = m_associationGroupID; m_associationGroupID++; if (m_associationGroupID == 0) { m_associationGroupID++; } } else { bindAckPDU.AssociationGroupID = bindPDU.AssociationGroupID; } bindAckPDU.SecondaryAddress = @"\PIPE\" + service.PipeName; bindAckPDU.MaxTransmitFragmentSize = bindPDU.MaxReceiveFragmentSize; bindAckPDU.MaxReceiveFragmentSize = bindPDU.MaxTransmitFragmentSize; foreach (ContextElement element in bindPDU.ContextList) { ResultElement resultElement = new ResultElement(); if (element.AbstractSyntax.InterfaceUUID.Equals(service.InterfaceGuid)) { int index = IndexOfSupportedTransferSyntax(element.TransferSyntaxList); if (index >= 0) { resultElement.Result = NegotiationResult.Acceptance; resultElement.TransferSyntax = element.TransferSyntaxList[index]; } else if (element.TransferSyntaxList.Contains(new SyntaxID(BindTimeFeatureIdentifier3, 1))) { // [MS-RPCE] 3.3.1.5.3 // If the server supports bind time feature negotiation, it MUST reply with the result // field in the p_result_t structure of the bind_ack PDU equal to negotiate_ack. resultElement.Result = NegotiationResult.NegotiateAck; resultElement.Reason = RejectionReason.AbstractSyntaxNotSupported; } else { resultElement.Result = NegotiationResult.ProviderRejection; resultElement.Reason = RejectionReason.ProposedTransferSyntaxesNotSupported; } } else { resultElement.Result = NegotiationResult.ProviderRejection; resultElement.Reason = RejectionReason.AbstractSyntaxNotSupported; } bindAckPDU.ResultList.Add(resultElement); } return(bindAckPDU); }
public RPCPipeStream(RemoteService service) { m_service = service; m_outputStreams = new List <MemoryStream>(); }
public RPCPipeStream(RemoteService service) { m_service = service; m_outputStream = new MemoryStream(); }