コード例 #1
0
ファイル: BasicSCU.cs プロジェクト: sleighter/dicom-sharp
        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;
        }
コード例 #2
0
 // 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();
     }
 }
コード例 #3
0
 protected override void DoCEcho(ActiveAssociation assoc, Dimse rq, Command rspCmd)
 {
     rspCmd.PutUS(Tags.Status,DcmServiceBase.SUCCESS);
 }
コード例 #4
0
 protected virtual void DoCEcho(ActiveAssociation assoc, Dimse rq, Command rspCmd)
 {
     //      rq.getDataset(); // read out dataset
     throw defEx;
 }
コード例 #5
0
 protected virtual Dataset DoNSet(ActiveAssociation assoc, Dimse rq, Command rspCmd)
 {
     org.dicomcs.data.Dataset generatedAux = rq.Dataset; // read out dataset
     throw defEx;
 }
コード例 #6
0
 protected virtual void DoAfterRsp(ActiveAssociation assoc, Dimse rsp)
 {
 }
コード例 #7
0
 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);
 }
コード例 #8
0
 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);
 }
コード例 #9
0
 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);
     }
 }
コード例 #10
0
ファイル: StoreSCP.cs プロジェクト: sleighter/dicom-sharp
 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();
     }
 }