public void OnResponseRecieved(CStoreResponse resp, Association asc) { asc.Logger.Log("<-- DIMSE" + resp.GetLogString()); resp.LogData(asc); asc.LastActive = DateTime.Now; dms.RaiseDIMSEResponseReceived(resp, asc); if (resp.Status != (ushort)Status.PENDING) { AssociationMessenger.SendReleaseRequest(asc); } }
public void HandleCStoreRequest(DicomAssociation association, CStoreRequest cStoreRequest) { association.ReceiveDataSet(cStoreRequest, PresentationContextID, stream => { }); var cStoreResponse = new CStoreResponse { AffectedSOPClassUID = cStoreRequest.AffectedSOPClassUID, AffectedSOPInstanceUID = cStoreRequest.AffectedSOPInstanceUID, Status = 0x0000 }; association.SendResponse(PresentationContextID, cStoreResponse, cStoreRequest.MessageID); }
public void OnRequestRecieved(CStoreRequest req, Association asc) { asc.Logger.Log("<-- DIMSE" + req.GetLogString()); req.LogData(asc); asc.LastActive = DateTime.Now; asc.State = NetworkState.TRANSPORT_CONNECTION_OPEN; var resp = new CStoreResponse(req, Status.SUCCESS); var syntax = req.Data.FindFirst(TagHelper.SOPClassUID); dms.RaiseDIMSERequestReceived(req, asc); if (syntax != null) { if (asc.PresentationContexts.Any(p => p.Id == req.DataPresentationContextId)) { try { var success = CStorePayloadAction != null?CStorePayloadAction.Invoke(req.Data, asc) : false; resp.Status = success ? resp.Status : (ushort)Status.FAILURE; PDataMessenger.Send(resp, asc, asc.PresentationContexts.First(p => p.Id == req.DataPresentationContextId)); } catch (Exception e) { resp.Status = (ushort)Status.FAILURE; PDataMessenger.Send(resp, asc); } } else { //Abstract syntax not supported resp.Status = (ushort)Status.FAILURE; PDataMessenger.Send(resp, asc); } } }
private void SetDefaultActions() { CEchoRequestReceivedAction = (cEchoReq, asc) => { asc.Logger.Log("<-- DIMSE" + cEchoReq.GetLogString()); if (!asc.ServiceClass.SupportedAbstractSyntaxes.Contains(AbstractSyntax.VERIFICATION)) { return; } asc.LastActive = DateTime.Now; asc.State = NetworkState.TRANSPORT_CONNECTION_OPEN; var response = new CEchoResponse(cEchoReq, Status.SUCCESS); PDataMessenger.Send(response, asc); RaiseDIMSERequestReceived <CEchoRequest>(cEchoReq, asc); }; CEchoResponseReceivedAction = (cEchoRp, asc) => { asc.Logger.Log("<-- DIMSE" + cEchoRp.GetLogString()); asc.LastActive = DateTime.Now; RaiseDIMSEResponseReceived <CEchoResponse>(cEchoRp, asc); AssociationMessenger.SendReleaseRequest(asc); }; CFindResponseReceivedAction = (cFindResp, asc) => { asc.Logger.Log("<-- DIMSE" + cFindResp.GetLogString()); asc.LastActive = DateTime.Now; RaiseDIMSEResponseReceived <CFindResponse>(cFindResp, asc); cFindResp.LogData(asc); if (cFindResp.Status != (ushort)Status.PENDING) { AssociationMessenger.SendReleaseRequest(asc); } }; CMoveRequestReceivedAction = (cMoveReq, asc) => { asc.Logger.Log("<-- DIMSE" + cMoveReq.GetLogString()); cMoveReq.LogData(asc); asc.LastActive = DateTime.Now; asc.State = NetworkState.TRANSPORT_CONNECTION_OPEN; RaiseDIMSERequestReceived <CMoveRequest>(cMoveReq, asc); throw new NotImplementedException(); }; CMoveResponseReceivedAction = (cMoveRes, asc) => { asc.Logger.Log("<-- DIMSE" + cMoveRes.GetLogString()); cMoveRes.LogData(asc); asc.LastActive = DateTime.Now; RaiseDIMSEResponseReceived <CMoveResponse>(cMoveRes, asc); if (cMoveRes.Status != (ushort)Status.PENDING) { AssociationMessenger.SendReleaseRequest(asc); } }; CStoreRequestReceivedAction = async(req, asc) => { asc.Logger.Log("<-- DIMSE" + req.GetLogString()); req.LogData(asc); asc.LastActive = DateTime.Now; asc.State = NetworkState.TRANSPORT_CONNECTION_OPEN; var resp = new CStoreResponse(req, Status.SUCCESS); IDICOMElement syntax = req.Data.FindFirst(TagHelper.SOPCLASS_UID); RaiseDIMSERequestReceived <CStoreRequest>(req, asc); if (syntax != null) { //If can store (supported Abstract Syntax) - Try if (asc.PresentationContexts.Any(p => p.Id == req.DataPresentationContextId)) { try { bool success = CStorePayloadAction(req.Data, asc); resp.Status = success ? resp.Status : (ushort)Status.FAILURE; PDataMessenger.Send(resp, asc, asc.PresentationContexts.First(p => p.Id == req.DataPresentationContextId)); } catch (Exception e) { resp.Status = (ushort)Status.FAILURE; PDataMessenger.Send(resp, asc); } } else { //Abstract syntax not supported resp.Status = (ushort)Status.FAILURE; PDataMessenger.Send(resp, asc); } } }; CStoreResponseReceivedAction = (cStoreResp, asc) => { asc.Logger.Log("<-- DIMSE" + cStoreResp.GetLogString()); cStoreResp.LogData(asc); asc.LastActive = DateTime.Now; RaiseDIMSEResponseReceived <CStoreResponse>(cStoreResp, asc); if (cStoreResp.Status != (ushort)Status.PENDING) { AssociationMessenger.SendReleaseRequest(asc); } }; CStorePayloadAction = (dcm, asc) => { return(true); }; }