Beispiel #1
0
  /**
   * Writes a DIMSE-C message.
   *
   * @param pdu the context pdu DICOMClientServer
   * @param transferSyntax transfer syntax.
   * @param classUID the SOP Class UID.
   * @param instanceUID DOCUMENT ME!
   * @param ddo the outgoing DICOM data object (null if none required)
   * @param AETitle byte array to store the destination Application Entity title for C-Moves
   * @exception DICOM_Exception DOCUMENT ME!
   */
  public void write(
      final DICOM_PDUService pdu,
      String transferSyntax,
      final String classUID,
      final String instanceUID,
      final DICOM_Object ddo,
      final byte[] AETitle)
      throws DICOM_Exception {

    if (Preferences.debugLevel(Preferences.DEBUG_COMMS)) {
      Preferences.debug(DICOM_Util.timeStamper() + " CRequest.write: Start \n");
    }

    final DICOM_Object dcor = new DICOM_Object();

    // these are filled in the order of the Part 7 Section 9.1.x charts...
    dcor.setInt16(DICOM_RTC.DD_CommandField, COMMAND);
    dcor.setInt16(DICOM_RTC.DD_MessageID, MSG_ID);

    DICOM_Util.determineSOPClassUIDAndPush(classUID, null, ddo, dcor);

    if ((COMMAND == DICOM_Constants.COMMAND_CStoreRQ) && (ddo != null)) {

      dcor.setStr(DICOM_RTC.DD_AffectedSOPInstanceUID, instanceUID);
      // copy Affected SOP Instance UID
    } else if ((COMMAND == DICOM_Constants.COMMAND_CStoreRQ)) {
      final String s = ddo.getStr(DICOM_RTC.DD_SOPInstanceUID);

      if (s != null) {
        dcor.setStr(DICOM_RTC.DD_AffectedSOPInstanceUID, s);
      }
    }

    dcor.setInt16(
        DICOM_RTC.DD_Priority,
        DICOM_CRequest.MEDIUM); // See class definition for other priority codes

    if (ddo != null) {
      dcor.setInt16(DICOM_RTC.DD_DataSetType, DICOM_Constants.DSTYPE_DATAPRESENT);
    } else {
      dcor.setInt16(DICOM_RTC.DD_DataSetType, DICOM_Constants.DSTYPE_NODATAPRESENT);
    }

    if (COMMAND == DICOM_Constants.COMMAND_CMoveRQ) {

      if (AETitle == null) {
        throw new DICOM_Exception("AETitle = Null");
      }

      final byte[] serverAETitle = new byte[16];
      DICOM_Util.fillByteArray(serverAETitle, ' ');
      DICOM_Util.copyByteArray(serverAETitle, AETitle);

      dcor.setStr(
          DICOM_RTC.DD_MoveDestination,
          DICOM_CRequest.fixMoveDestString(new String(serverAETitle)));
    }

    if (Preferences.debugLevel(Preferences.DEBUG_COMMS)) {
      Preferences.debug(
          DICOM_Util.timeStamper() + " CRequest.write DCO: " + dcor.toString("Command") + "  \n");
    }

    pdu.write(dcor, classUID, (byte) 1); // 1 = Message command information

    if (ddo != null) {
      Preferences.debug(
          DICOM_Util.timeStamper() + " CRequest.write DDO: " + ddo.toString("Data") + "  \n");
      transferSyntax = pdu.getTransferSyntaxID();
      pdu.write(transferSyntax, ddo, classUID, (byte) 0);
    }
  }