void IDicomServerHandler.OnReceiveAssociateRequest(DicomServer server, ServerAssociationParameters association) { if (_verifier != null) { DicomRejectResult result; DicomRejectReason reason; bool verified = _verifier(_context, association, out result, out reason); if (verified == false) { server.SendAssociateReject(result, DicomRejectSource.ServiceUser, reason); LogAdapter.Logger.Info("Association rejected from {0} to {1}", association.CallingAE, association.CalledAE); return; } } // Let the extensions have its say on whether a presentation context is really acceptable. // bool atLeastOneAccepted = false; foreach (byte pcid in association.GetPresentationContextIDs()) { if (association.GetPresentationContextResult(pcid) == DicomPresContextResult.Accept) { IDicomScp <TContext> scp = _extensionList[pcid]; DicomPresContextResult res = scp.VerifyAssociation(association, pcid); if (res != DicomPresContextResult.Accept) { association.GetPresentationContext(pcid).ClearTransfers(); association.SetPresentationContextResult(pcid, res); } else { atLeastOneAccepted = true; } } } if (!atLeastOneAccepted) { LogAdapter.Logger.Info("None of the proposed presentation context is accepted. Rejecting association from {0} to {1}", association.CallingAE, association.CalledAE); server.SendAssociateReject(DicomRejectResult.Permanent, DicomRejectSource.ServiceUser, DicomRejectReason.NoReasonGiven); return; } server.SendAssociateAccept(association); // Optimization to speed query performance Task.Factory.StartNew(() => LogAdapter.Logger.Info("Received association:\r\n{0}", association.ToString())); }
public void OnReceiveAssociateRequest(DicomServer server, ServerAssociationParameters association) { if (_delayAssociationAccept.Checked) { Thread.Sleep(TimeSpan.FromSeconds(35)); } if (_rejectAssociation.Checked) { server.SendAssociateReject(DicomRejectResult.Permanent, DicomRejectSource.ServiceUser, DicomRejectReason.CallingAENotRecognized); } else { server.SendAssociateAccept(association); } }