changeset 1078:e61f4cba278c

Added support for C_ECHO command.
author neelin <neelin>
date Tue, 08 Jul 1997 23:15:09 +0000
parents a385df086a89
children aa4b14f73bd7
files conversion/dicomserver/dicom_element_defs.h conversion/dicomserver/dicomserver.c conversion/dicomserver/reply.c
diffstat 3 files changed, 47 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/conversion/dicomserver/dicom_element_defs.h
+++ b/conversion/dicomserver/dicom_element_defs.h
@@ -42,6 +42,8 @@
 /* Define commands */
 #define ACR_C_STORE_RQ    0x0001
 #define ACR_C_STORE_RSP   0x8001
+#define ACR_C_ECHO_RQ     0x0030
+#define ACR_C_ECHO_RSP    0x8030
 
 /* Define dataset type */
 #define ACR_NULL_DATASET 0x0101
--- a/conversion/dicomserver/dicomserver.c
+++ b/conversion/dicomserver/dicomserver.c
@@ -4,9 +4,12 @@
 @GLOBALS    : 
 @CREATED    : January 28, 1997 (Peter Neelin)
 @MODIFIED   : $Log: dicomserver.c,v $
-@MODIFIED   : Revision 4.0  1997-05-07 20:06:20  neelin
-@MODIFIED   : Release of minc version 0.4
+@MODIFIED   : Revision 4.1  1997-07-08 23:15:09  neelin
+@MODIFIED   : Added support for C_ECHO command.
 @MODIFIED   :
+ * Revision 4.0  1997/05/07  20:06:20  neelin
+ * Release of minc version 0.4
+ *
  * Revision 1.2  1997/03/11  13:10:48  neelin
  * Working version of dicomserver.
  *
@@ -26,7 +29,7 @@
 ---------------------------------------------------------------------------- */
 
 #ifndef lint
-static char rcsid[]="$Header: /private-cvsroot/minc/conversion/dicomserver/dicomserver.c,v 4.0 1997-05-07 20:06:20 neelin Rel $";
+static char rcsid[]="$Header: /private-cvsroot/minc/conversion/dicomserver/dicomserver.c,v 4.1 1997-07-08 23:15:09 neelin Exp $";
 #endif
 
 #include <sys/types.h>
@@ -255,17 +258,28 @@
       /* Data transfer */
       case ACR_PDU_DATA_TF:
 
-         /* Check command and state */
-         acr_command = acr_find_short(group_list, ACR_Command, -1);
-         if ((state != WAITING_FOR_DATA) || 
-             (acr_command != ACR_C_STORE_RQ)) {
+         /* Check state */
+         if (state != WAITING_FOR_DATA) {
             status = ACR_HIGH_LEVEL_ERROR;
             state = DISCONNECTING;
             break;
          }
 
-         /* Compose a reply */
-         output_message = data_reply(input_message);
+         /* Check command and compose a reply */
+         acr_command = acr_find_short(group_list, ACR_Command, -1);
+         switch (acr_command) {
+         case ACR_C_STORE_RQ:
+         case ACR_C_ECHO_RQ:
+            output_message = data_reply(input_message);
+            break;
+         default:
+            status = ACR_HIGH_LEVEL_ERROR;
+            state = DISCONNECTING;
+            break;
+         }
+
+         /* Carry on only if we have a store command */
+         if (acr_command != ACR_C_STORE_RQ) break;
 
          /* Get rid of the command groups */
          group_list = skip_command_groups(group_list);
--- a/conversion/dicomserver/reply.c
+++ b/conversion/dicomserver/reply.c
@@ -4,9 +4,12 @@
 @GLOBALS    : 
 @CREATED    : January 28, 1997 (Peter Neelin)
 @MODIFIED   : $Log: reply.c,v $
-@MODIFIED   : Revision 4.0  1997-05-07 20:06:20  neelin
-@MODIFIED   : Release of minc version 0.4
+@MODIFIED   : Revision 4.1  1997-07-08 23:15:09  neelin
+@MODIFIED   : Added support for C_ECHO command.
 @MODIFIED   :
+ * Revision 4.0  1997/05/07  20:06:20  neelin
+ * Release of minc version 0.4
+ *
  * Revision 1.1  1997/03/04  20:56:47  neelin
  * Initial revision
  *
@@ -473,6 +476,7 @@
 public Acr_Message data_reply(Acr_Message input_message)
 {
    Acr_Group group, input_group;
+   int reply_command;
 
    /* Print log message */
    if (Do_logging >= HIGH_LOGGING) {
@@ -483,6 +487,16 @@
    /* Get the input group list */
    input_group = acr_get_message_group_list(input_message);
 
+   /* Figure out the reply that we need */
+   switch (acr_find_short(input_group, ACR_Command, -1)) {
+   case ACR_C_STORE_RQ:
+      reply_command = ACR_C_STORE_RSP; break;
+   case ACR_C_ECHO_RQ:
+      reply_command = ACR_C_ECHO_RSP; break;
+   default:
+      reply_command = ACR_C_ECHO_RSP; break;
+   }
+
    /* Create the reply */
    group = acr_create_group(ACR_MESSAGE_GID);
 
@@ -490,14 +504,16 @@
    acr_group_add_element(group,
       acr_create_element_string(ACR_Affected_SOP_class_UID, 
          acr_find_string(input_group, ACR_Affected_SOP_class_UID, "")));
-   SAVE_SHORT(group, ACR_Command, ACR_C_STORE_RSP);
+   SAVE_SHORT(group, ACR_Command, reply_command);
    SAVE_SHORT(group, ACR_Message_id_brt, 
               acr_find_short(input_group, ACR_Message_id, 0));
    SAVE_SHORT(group, ACR_Dataset_type, ACR_NULL_DATASET);
    SAVE_SHORT(group, ACR_Status, ACR_SUCCESS);
-   acr_group_add_element(group,
-      acr_create_element_string(ACR_Affected_SOP_instance_UID, 
-         acr_find_string(input_group, ACR_Affected_SOP_instance_UID, "")));
+   if (reply_command == ACR_C_STORE_RSP) {
+      acr_group_add_element(group,
+         acr_create_element_string(ACR_Affected_SOP_instance_UID, 
+            acr_find_string(input_group, ACR_Affected_SOP_instance_UID, "")));
+   }
 
    return make_message(group);