protected override void OnConnected() { DcmAssociate associate = new DcmAssociate(); byte pcid = associate.AddPresentationContext(DicomUID.VerificationSOPClass); associate.AddTransferSyntax(pcid, DicomTransferSyntax.ImplicitVRLittleEndian); associate.CalledAE = CalledAE; associate.CallingAE = CallingAE; associate.MaximumPduLength = MaxPduSize; SendAssociateRequest(associate); }
/// <summary> /// Reads A-ASSOCIATE-RQ from PDU buffer /// </summary> /// <param name="raw">PDU buffer</param> public void Read(RawPDU raw) { uint l = raw.Length; raw.ReadUInt16("Version"); raw.SkipBytes("Reserved", 2); _assoc.CalledAE = raw.ReadString("Called AE", 16); _assoc.CallingAE = raw.ReadString("Calling AE", 16); raw.SkipBytes("Reserved", 32); l -= 2 + 2 + 16 + 16 + 32; while (l > 0) { byte type = raw.ReadByte("Item-Type"); raw.SkipBytes("Reserved", 1); ushort il = raw.ReadUInt16("Item-Length"); l -= 4 + (uint)il; if (type == 0x10) { // Application Context raw.SkipBytes("Application Context", il); } else if (type == 0x20) { // Presentation Context byte id = raw.ReadByte("Presentation Context ID"); raw.SkipBytes("Reserved", 3); il -= 4; while (il > 0) { byte pt = raw.ReadByte("Presentation Context Item-Type"); raw.SkipBytes("Reserved", 1); ushort pl = raw.ReadUInt16("Presentation Context Item-Length"); string sx = raw.ReadString("Presentation Context Syntax UID", pl); if (pt == 0x30) { _assoc.AddPresentationContext(id, DicomUID.Lookup(sx)); } else if (pt == 0x40) { _assoc.AddTransferSyntax(id, DicomTransferSyntax.Lookup(sx)); } il -= (ushort)(4 + pl); } } else if (type == 0x50) { // User Information while (il > 0) { byte ut = raw.ReadByte("User Information Item-Type"); raw.SkipBytes("Reserved", 1); ushort ul = raw.ReadUInt16("User Information Item-Length"); il -= (ushort)(4 + ul); if (ut == 0x51) { _assoc.MaximumPduLength = raw.ReadUInt32("Max PDU Length"); } else if (ut == 0x52) { _assoc.ImplementationClass = new DicomUID(raw.ReadString("Implementation Class UID", ul), "Implementation Class UID", DicomUidType.Unknown); } else if (ut == 0x55) { _assoc.ImplementationVersion = raw.ReadString("Implementation Version", ul); } else if (ut == 0x53) { _assoc.AsyncOpsInvoked = raw.ReadUInt16("Asynchronous Operations Invoked"); _assoc.AsyncOpsPerformed = raw.ReadUInt16("Asynchronous Operations Performed"); } else if (ut == 0x54) { raw.SkipBytes("SCU/SCP Role Selection", ul); /* * ushort rsul = raw.ReadUInt16(); * if ((rsul + 4) != ul) { * throw new DicomNetworkException("SCU/SCP role selection length (" + ul + " bytes) does not match uid length (" + rsul + " + 4 bytes)"); * } * raw.ReadChars(rsul); // Abstract Syntax * raw.ReadByte(); // SCU role * raw.ReadByte(); // SCP role */ } else { Debug.Log.Error("Unhandled user item: 0x{0:x2} ({1} + 4 bytes)", ut, ul); raw.SkipBytes("Unhandled User Item", ul); } } } } }
protected override void OnConnected() { DcmAssociate associate = new DcmAssociate(); byte pcid = associate.AddPresentationContext(DicomUID.PrinterSOPClass); associate.AddTransferSyntax(pcid, DicomTransferSyntax.ExplicitVRLittleEndian); associate.AddTransferSyntax(pcid, DicomTransferSyntax.ImplicitVRLittleEndian); pcid = associate.AddPresentationContext(DicomUID.BasicGrayscalePrintManagementMetaSOPClass); associate.AddTransferSyntax(pcid, DicomTransferSyntax.ExplicitVRLittleEndian); associate.AddTransferSyntax(pcid, DicomTransferSyntax.ImplicitVRLittleEndian); pcid = associate.AddPresentationContext(DicomUID.BasicColorPrintManagementMetaSOPClass); associate.AddTransferSyntax(pcid, DicomTransferSyntax.ExplicitVRLittleEndian); associate.AddTransferSyntax(pcid, DicomTransferSyntax.ImplicitVRLittleEndian); associate.CalledAE = CalledAE; associate.CallingAE = CallingAE; associate.MaximumPduLength = MaxPduSize; SendAssociateRequest(associate); }