private FutureRSP SendDataset(ActiveAssociation active, DcmParser parser, Dataset ds) { String sopInstUID = ds.GetString(Tags.SOPInstanceUID); if (sopInstUID == null) { log.Error( "SOP instance UID is null" ); return null; } String sopClassUID = ds.GetString(Tags.SOPClassUID); if (sopClassUID == null) { log.Error( "SOP class UID is null" ); return null; } PresContext pc = null; Association assoc = active.Association; if (parser != null) { if (parser.DcmDecodeParam.encapsulated) { String tsuid = ds.GetFileMetaInfo().TransferSyntaxUID; if ((pc = assoc.GetAcceptedPresContext(sopClassUID, tsuid)) == null) { log.Error( "SOP class UID not supported" ); return null; } } else if ((pc = assoc.GetAcceptedPresContext(sopClassUID, UIDs.ImplicitVRLittleEndian)) == null && (pc = assoc.GetAcceptedPresContext(sopClassUID, UIDs.ExplicitVRLittleEndian)) == null && (pc = assoc.GetAcceptedPresContext(sopClassUID, UIDs.ExplicitVRBigEndian)) == null) { log.Error( "SOP class UID not supported" ); return null; } return active.Invoke(aFact.NewDimse(pc.pcid(), oFact.NewCommand().InitCStoreRQ(assoc.NextMsgID(), sopClassUID, sopInstUID, 0), new FileDataSource(parser, ds, new byte[2048]))); } else { if ((ds.GetFileMetaInfo() != null) && (ds.GetFileMetaInfo().TransferSyntaxUID != null)) { String tsuid = ds.GetFileMetaInfo().TransferSyntaxUID; if ((pc = assoc.GetAcceptedPresContext(sopClassUID, tsuid)) == null) { log.Error( "SOP class UID not supported" ); return null; } } else if ((pc = assoc.GetAcceptedPresContext(sopClassUID, UIDs.ImplicitVRLittleEndian)) == null && (pc = assoc.GetAcceptedPresContext(sopClassUID, UIDs.ExplicitVRLittleEndian)) == null && (pc = assoc.GetAcceptedPresContext(sopClassUID, UIDs.ExplicitVRBigEndian)) == null) { log.Error( "SOP class UID not supported" ); return null; } return active.Invoke(aFact.NewDimse(pc.pcid(), oFact.NewCommand().InitCStoreRQ(assoc.NextMsgID(), sopClassUID, sopInstUID, 0), ds)); } return null; }
// Private ------------------------------------------------------- private void DoMultiRsp(ActiveAssociation assoc, Dimse rq, Command rspCmd, MultiDimseRsp mdr) { try { assoc.AddCancelListener(rspCmd.MessageIDToBeingRespondedTo, mdr.CancelListener); do { Dataset rspData = mdr.next(assoc, rq, rspCmd); Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd, rspData); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); } while (rspCmd.IsPending()); } finally { mdr.release(); } }
protected override void DoCEcho(ActiveAssociation assoc, Dimse rq, Command rspCmd) { rspCmd.PutUS(Tags.Status,DcmServiceBase.SUCCESS); }
protected virtual void DoCEcho(ActiveAssociation assoc, Dimse rq, Command rspCmd) { // rq.getDataset(); // read out dataset throw defEx; }
protected virtual Dataset DoNSet(ActiveAssociation assoc, Dimse rq, Command rspCmd) { org.dicomcs.data.Dataset generatedAux = rq.Dataset; // read out dataset throw defEx; }
protected virtual void DoAfterRsp(ActiveAssociation assoc, Dimse rsp) { }
public virtual void n_set(ActiveAssociation assoc, Dimse rq) { Command rqCmd = rq.Command; Command rspCmd = objFact.NewCommand(); rspCmd.InitNSetRSP(rqCmd.MessageID, rqCmd.RequestedSOPClassUID, rqCmd.RequestedSOPInstanceUID, SUCCESS); Dataset rspData = null; try { rspData = DoNSet(assoc, rq, rspCmd); } catch (DcmServiceException e) { e.WriteTo(rspCmd); } Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd, rspData); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); }
public virtual void c_store(ActiveAssociation assoc, Dimse rq) { Command rqCmd = rq.Command; Command rspCmd = objFact.NewCommand(); rspCmd.InitCStoreRSP(rqCmd.MessageID, rqCmd.AffectedSOPClassUID, rqCmd.AffectedSOPInstanceUID, SUCCESS); try { DoCStore(assoc, rq, rspCmd); } catch (DcmServiceException e) { e.WriteTo(rspCmd); } Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); }
public virtual void c_move(ActiveAssociation assoc, Dimse rq) { Command rqCmd = rq.Command; Command rspCmd = objFact.NewCommand(); rspCmd.InitCMoveRSP(rqCmd.MessageID, rqCmd.AffectedSOPClassUID, PENDING); try { DoMultiRsp(assoc, rq, rspCmd, DoCMove(assoc, rq, rspCmd)); } catch (DcmServiceException e) { e.WriteTo(rspCmd); Dimse rsp = assocFact.NewDimse(rq.pcid(), rspCmd); assoc.Association.Write(rsp); DoAfterRsp(assoc, rsp); } }
protected override void DoCStore(ActiveAssociation assoc, Dimse rq, Command rspCmd) { Command rqCmd = rq.Command; Stream ins = rq.DataAsStream; try { String instUID = rqCmd.AffectedSOPInstanceUID; String classUID = rqCmd.AffectedSOPClassUID; DcmDecodeParam decParam = DcmDecodeParam.ValueOf(rq.TransferSyntaxUID); Dataset ds = objFact.NewDataset(); DcmParser parser = parserFact.NewDcmParser(ins); parser.DcmHandler = ds.DcmHandler; parser.ParseDataset(decParam, Tags.PixelData); ds.SetFileMetaInfo( objFact.NewFileMetaInfo(classUID, instUID, rq.TransferSyntaxUID) ); FileInfo file = toFile(ds); storeToFile(parser, ds, file, (DcmEncodeParam) decParam); rspCmd.PutUS(Tags.Status, SUCCESS); } catch (System.Exception e) { log.Error(e.Message, e); throw new DcmServiceException(PROCESSING_FAILURE, e); } finally { ins.Close(); } }