Ejemplo n.º 1
0
        // Contains common functionality when sending a message.
        private void SendMessage(DicomMessage dicomMessage, int presentationContextId)
        {
            //
            // Administration.
            //

            dicomMessage.IsSend = true;

            AddMessage(dicomMessage);

            if (SendingMessageEvent != null)
            {
                SendingMessageEvent(dicomMessage);
            }

            //
            // Perform the actual sending.
            //

            Dvtk.Sessions.SendReturnCode sendReturnCode = Dvtk.Sessions.SendReturnCode.Failure;

            if (presentationContextId == -1)
            {
                sendReturnCode = DvtkScriptSession.Send(dicomMessage.DvtkDataDicomMessage);
            }
            else
            {
                sendReturnCode = DvtkScriptSession.Send(dicomMessage.DvtkDataDicomMessage, presentationContextId);
            }

            //
            // If an error is encountered while sending, throw an exception.
            //

            if (sendReturnCode != Dvtk.Sessions.SendReturnCode.Success)
            {
                if ((presentationContextId != -1) && this.hasOpenConnection)
                {
                    PresentationContext presentationContextUsed = null;

                    foreach (PresentationContext presentationContext in this.lastAssociateAc.PresentationContexts)
                    {
                        if (presentationContext.ID == presentationContextId)
                        {
                            presentationContextUsed = presentationContext;
                            break;
                        }
                    }

                    //
                    // Check and log if the reason for the failure to send is because of an illegal presentation context ID used.
                    //

                    if (presentationContextUsed == null)
                    {
                        throw new DicomProtocolMessageSendException("Ilegal presentation context ID " + presentationContextId.ToString() + " used while sending Dicom Message.", sendReturnCode);
                    }
                    else if (presentationContextUsed.Result != 0)
                    {
                        throw new DicomProtocolMessageSendException("Not accepted presentation context used, with presentation context ID " + presentationContextId.ToString() + " and result " + presentationContextUsed.Result.ToString() + " while sending Dicom Message.", sendReturnCode);
                    }
                }

                throw new DicomProtocolMessageSendException("Error while trying to send a " + dicomMessage.ToString() + " (" + sendReturnCode.ToString() + ")", sendReturnCode);
            }
        }