فهرست منبع

Cleanup: Handle Identity object's Reset service with too much parameters

Did some cleanup to handle the Identity object's Reset service now also
with too much parameter data. This will return now an error response
with the general status set to kCipErrorTooMuchData.

Signed-off-by: Stefan Mätje <stefan.maetje@esd.eu>
Stefan Mätje 6 سال پیش
والد
کامیت
36e0d45840
1فایلهای تغییر یافته به همراه14 افزوده شده و 15 حذف شده
  1. 14 15
      source/src/cip/cipidentity.c

+ 14 - 15
source/src/cip/cipidentity.c

@@ -97,37 +97,36 @@ static EipStatus Reset(CipInstance *instance,
   message_router_response->size_of_additional_status = 0;
   message_router_response->size_of_additional_status = 0;
   message_router_response->general_status = kCipErrorSuccess;
   message_router_response->general_status = kCipErrorSuccess;
 
 
-  if (message_router_request->request_path_size == 1) {
-    switch (message_router_request->data[0]) {
-      case 0: /* Reset type 0 -> emulate device reset / Power cycle */
+  if (message_router_request->request_path_size > 1) {
+    message_router_response->general_status = kCipErrorTooMuchData;
+  }
+  else {
+    CipOctet reset_type = 0;  /* The default type if type parameter was omitted. */
+    if (message_router_request->request_path_size == 1) {
+      reset_type = message_router_request->data[0];
+    }
+    switch (reset_type) {
+      case 0: /* Reset type 0 -> Emulate power cycle */
         if ( kEipStatusError == ResetDevice() ) {
         if ( kEipStatusError == ResetDevice() ) {
           message_router_response->general_status = kCipErrorInvalidParameter;
           message_router_response->general_status = kCipErrorInvalidParameter;
         }
         }
         break;
         break;
 
 
-      case 1: /* Reset type 1 -> reset to device settings */
+      case 1: /* Reset type 1 -> Return to factory defaults & power cycle*/
         if ( kEipStatusError == ResetDeviceToInitialConfiguration() ) {
         if ( kEipStatusError == ResetDeviceToInitialConfiguration() ) {
           message_router_response->general_status = kCipErrorInvalidParameter;
           message_router_response->general_status = kCipErrorInvalidParameter;
         }
         }
         break;
         break;
 
 
-      /* case 2: Not supported Reset type 2 -> Return to factory defaults except communications parameters */
+      /* case 2: Not supported Reset type 2 ->
+        Return to factory defaults except communications parameters & power cycle*/
 
 
       default:
       default:
         message_router_response->general_status = kCipErrorInvalidParameter;
         message_router_response->general_status = kCipErrorInvalidParameter;
         break;
         break;
     }
     }
-  } else /*TODO: Should be if (pa_stMRRequest->DataLength == 0)*/
-  {
-    /* The same behavior as if the data value given would be 0
-       emulate device reset */
-
-    if ( kEipStatusError == ResetDevice() ) {
-      message_router_response->general_status = kCipErrorInvalidParameter;
-    } else {
-      /* eip_status = EIP_OK; */
-    }
   }
   }
+
   message_router_response->data_length = 0;
   message_router_response->data_length = 0;
   return eip_status;
   return eip_status;
 }
 }