private static bool NegotiateAssociation(AssociationParameters cp, ServerAssociationParameters sp) { foreach (DicomPresContext clientContext in cp.GetPresentationContexts()) { TransferSyntax selectedSyntax = null; foreach (DicomPresContext serverContext in sp.GetPresentationContexts()) { if (clientContext.AbstractSyntax.Uid.Equals(serverContext.AbstractSyntax.Uid)) { foreach (TransferSyntax ts in serverContext.GetTransfers()) { if (clientContext.HasTransfer(ts)) { selectedSyntax = ts; break; } } } if (selectedSyntax != null) { break; } } if (selectedSyntax != null) { clientContext.ClearTransfers(); clientContext.AddTransfer(selectedSyntax); clientContext.SetResult(DicomPresContextResult.Accept); } else { // No contexts accepted, set if abstract or transfer syntax reject clientContext.SetResult(0 == sp.FindAbstractSyntax(clientContext.AbstractSyntax) ? DicomPresContextResult.RejectAbstractSyntaxNotSupported : DicomPresContextResult.RejectTransferSyntaxesNotSupported); } } bool anyValidContexts = false; foreach (DicomPresContext clientContext in cp.GetPresentationContexts()) { if (clientContext.Result == DicomPresContextResult.Accept) { anyValidContexts = true; break; } } if (anyValidContexts == false) { return(false); } return(true); }
public RawPDU Write() { RawPDU pdu = new RawPDU((byte)0x02); pdu.Write("Version", (ushort)0x0001); pdu.Write("Reserved", 0x00, 2); pdu.Write("Called AE", _assoc.CalledAE, 16, ' '); pdu.Write("Calling AE", _assoc.CallingAE, 16, ' '); pdu.Write("Reserved", 0x00, 32); // Application Context pdu.Write("Item-Type", (byte)0x10); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Application Context Name", DicomUids.DICOMApplicationContextName.UID); pdu.WriteLength16(); foreach (DicomPresContext pc in _assoc.GetPresentationContexts()) { // Presentation Context pdu.Write("Item-Type", (byte)0x21); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Presentation Context ID", (byte)pc.ID); pdu.Write("Reserved", (byte)0x00); pdu.Write("Result", (byte)pc.Result); pdu.Write("Reserved", (byte)0x00); // Transfer Syntax pdu.Write("Item-Type", (byte)0x40); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); if (pc.AcceptedTransferSyntax != null) // { pdu.Write("Transfer Syntax UID", pc.AcceptedTransferSyntax.DicomUid.UID); } pdu.WriteLength16(); pdu.WriteLength16(); } // User Data Fields pdu.Write("Item-Type", (byte)0x50); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); // Maximum PDU pdu.Write("Item-Type", (byte)0x51); pdu.Write("Reserved", (byte)0x00); pdu.Write("Item-Length", (ushort)0x0004); pdu.Write("Max PDU Length", (uint)_assoc.LocalMaximumPduLength); // Implementation Class UID pdu.Write("Item-Type", (byte)0x52); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Implementation Class UID", DicomImplementation.ClassUID.UID); pdu.WriteLength16(); // Implementation Version pdu.Write("Item-Type", (byte)0x55); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Implementation Version", DicomImplementation.Version); pdu.WriteLength16(); pdu.WriteLength16(); return(pdu); }
public RawPDU Write() { RawPDU pdu = new RawPDU(0x01); pdu.Write("Version", (ushort)0x0001); pdu.Write("Reserved", 0x00, 2); pdu.Write("Called AE", _assoc.CalledAE, 16, ' '); pdu.Write("Calling AE", _assoc.CallingAE, 16, ' '); pdu.Write("Reserved", 0x00, 32); // Application Context pdu.Write("Item-Type", (byte)0x10); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Application Context Name", DicomUids.DICOMApplicationContextName.UID); pdu.WriteLength16(); if (_assoc.GetPresentationContexts().Count == 0) { throw new DicomException("No presentation contexts set for association"); } foreach (DicomPresContext pc in _assoc.GetPresentationContexts()) { // Presentation Context pdu.Write("Item-Type", (byte)0x20); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Presentation Context ID", (byte)pc.ID); pdu.Write("Reserved", (byte)0x00, 3); // Abstract Syntax pdu.Write("Item-Type", (byte)0x30); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Abstract Syntax UID", pc.AbstractSyntax.Uid); pdu.WriteLength16(); if (pc.GetTransfers().Count == 0) { throw new DicomException("No transfer syntaxes set for presentation context " + pc.AbstractSyntax.Name); } // Transfer Syntax foreach (TransferSyntax ts in pc.GetTransfers()) { pdu.Write("Item-Type", (byte)0x40); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Transfer Syntax UID", ts.DicomUid.UID); pdu.WriteLength16(); } pdu.WriteLength16(); } // User Data Fields pdu.Write("Item-Type", 0x50); pdu.Write("Reserved", 0x00); pdu.MarkLength16("Item-Length"); // Maximum PDU pdu.Write("Item-Type", 0x51); pdu.Write("Reserved", 0x00); pdu.Write("Item-Length", (ushort)0x0004); pdu.Write("Max PDU Length", _assoc.LocalMaximumPduLength); // Asychronous Window if (_assoc.LocalMaxOperationsInvoked != 1 || _assoc.LocalMaxOperationsPerformed != 1) { pdu.Write("Item-Type", (byte)0x53); pdu.Write("Reserved", (byte)0x00); pdu.Write("Item-Length", (ushort)0x0004); pdu.Write("Max Operations Invoked", (ushort)_assoc.LocalMaxOperationsInvoked); pdu.Write("Max Operations Invoked", (ushort)_assoc.LocalMaxOperationsPerformed); } // SCU / SCP Role Selection // Implementation Class UID pdu.Write("Item-Type", (byte)0x52); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Implementation Class UID", DicomImplementation.ClassUID.UID); pdu.WriteLength16(); // Implementation Version pdu.Write("Item-Type", (byte)0x55); pdu.Write("Reserved", (byte)0x00); pdu.MarkLength16("Item-Length"); pdu.Write("Implementation Version", DicomImplementation.Version); pdu.WriteLength16(); pdu.WriteLength16(); return(pdu); }
private static bool NegotiateAssociation(AssociationParameters cp, ServerAssociationParameters sp) { foreach (DicomPresContext clientContext in cp.GetPresentationContexts()) { TransferSyntax selectedSyntax = null; foreach (DicomPresContext serverContext in sp.GetPresentationContexts()) { if (clientContext.AbstractSyntax.Uid.Equals(serverContext.AbstractSyntax.Uid)) { foreach (TransferSyntax ts in serverContext.GetTransfers()) { if (clientContext.HasTransfer(ts)) { selectedSyntax = ts; break; } } } if (selectedSyntax != null) break; } if (selectedSyntax != null) { clientContext.ClearTransfers(); clientContext.AddTransfer(selectedSyntax); clientContext.SetResult(DicomPresContextResult.Accept); } else { // No contexts accepted, set if abstract or transfer syntax reject clientContext.SetResult(0 == sp.FindAbstractSyntax(clientContext.AbstractSyntax) ? DicomPresContextResult.RejectAbstractSyntaxNotSupported : DicomPresContextResult.RejectTransferSyntaxesNotSupported); } } bool anyValidContexts = false; foreach (DicomPresContext clientContext in cp.GetPresentationContexts()) { if (clientContext.Result == DicomPresContextResult.Accept) { anyValidContexts = true; break; } } if (anyValidContexts == false) { return false; } return true; }