Ver código fonte

Merge #180 branch 'SharifuddinAmin-master'

Martin Melik-Merkumians 6 anos atrás
pai
commit
c415c95688
1 arquivos alterados com 13 adições e 13 exclusões
  1. 13 13
      source/src/enet_encap/encap.c

+ 13 - 13
source/src/enet_encap/encap.c

@@ -77,8 +77,7 @@ typedef struct {
   EipInt32 time_out;       /**< time out in milli seconds */
   int socket;       /**< associated socket */
   struct sockaddr_in receiver;
-  EipByte message[ENCAP_MAX_DELAYED_ENCAP_MESSAGE_SIZE];
-  size_t message_size;
+  ENIPMessage outgoing_message;
 } DelayedEncapsulationMessage;
 
 EncapsulationInterfaceInformation g_interface_information;
@@ -407,11 +406,15 @@ void HandleReceivedListIdentityCommandUdp(const int socket,
                                           const EncapsulationData *const receive_data,
                                           ENIPMessage *const outgoing_message) {
   DelayedEncapsulationMessage *delayed_message_buffer = NULL;
+  ENIPMessage* p_outgoing_message = NULL;
 
   for (size_t i = 0; i < ENCAP_NUMBER_OF_SUPPORTED_DELAYED_ENCAP_MESSAGES;
        i++) {
     if (kEipInvalidSocket == g_delayed_encapsulation_messages[i].socket) {
       delayed_message_buffer = &(g_delayed_encapsulation_messages[i]);
+
+      p_outgoing_message = &(delayed_message_buffer->outgoing_message);
+      InitializeENIPMessage(p_outgoing_message);
       break;
     }
   }
@@ -424,12 +427,7 @@ void HandleReceivedListIdentityCommandUdp(const int socket,
     DetermineDelayTime(receive_data->communication_buffer_start,
                        delayed_message_buffer);
 
-    memcpy(&(delayed_message_buffer->message[0]),
-           receive_data->communication_buffer_start,
-           ENCAPSULATION_HEADER_LENGTH);
-
-    EncapsulateListIdentityResponseMessage(
-      receive_data, outgoing_message);
+    EncapsulateListIdentityResponseMessage(receive_data, p_outgoing_message);
   }
 }
 
@@ -523,7 +521,8 @@ void DetermineDelayTime(const EipByte *const buffer_start,
   } else if (kListIdentityMinimumDelayTime > maximum_delay_time) {       /* if maximum_delay_time is between 1 and 500ms set it to 500ms */
     maximum_delay_time = kListIdentityMinimumDelayTime;
   }
-  delayed_message_buffer->time_out = (maximum_delay_time * rand() ) / RAND_MAX;      /* Sets delay time between 0 and maximum_delay_time */
+
+  delayed_message_buffer->time_out = rand() % maximum_delay_time ;
 }
 
 void EncapsulateRegisterSessionCommandResponseMessage(
@@ -861,10 +860,11 @@ void ManageEncapsulationMessages(const MilliSeconds elapsed_time) {
       g_delayed_encapsulation_messages[i].time_out -= elapsed_time;
       if (0 >= g_delayed_encapsulation_messages[i].time_out) {
         /* If delay is reached or passed, send the UDP message */
-        SendUdpData(&(g_delayed_encapsulation_messages[i].receiver),
-                    g_delayed_encapsulation_messages[i].socket,
-                    &(g_delayed_encapsulation_messages[i].message[0]),
-                    g_delayed_encapsulation_messages[i].message_size);
+        sendto(g_delayed_encapsulation_messages[i].socket,
+                    (char *) g_delayed_encapsulation_messages[i].outgoing_message.message_buffer,
+                    g_delayed_encapsulation_messages[i].outgoing_message.used_message_length, 0,
+                    (struct sockaddr *) &(g_delayed_encapsulation_messages[i].receiver), 
+                    sizeof(struct sockaddr));
         g_delayed_encapsulation_messages[i].socket = kEipInvalidSocket;
       }
     }