MCPcopy Create free account
hub / github.com/EIPStackGroup/OpENer / HandleReceivedExplictTcpData

Function HandleReceivedExplictTcpData

source/src/enet_encap/encap.c:152–234  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150}
151
152int HandleReceivedExplictTcpData(int socket,
153 EipUint8 *buffer,
154 size_t length,
155 int *remaining_bytes,
156 struct sockaddr *originator_address,
157 ENIPMessage *const outgoing_message) {
158 OPENER_TRACE_INFO("Handles data for TCP socket: %d\n", socket);
159 EipStatus return_value = kEipStatusOk;
160 EncapsulationData encapsulation_data = { 0 };
161 /* eat the encapsulation header*/
162 /* the structure contains a pointer to the encapsulated data*/
163 /* returns how many bytes are left after the encapsulated data*/
164 *remaining_bytes = CreateEncapsulationStructure(buffer, length,
165 &encapsulation_data);
166
167 if (kEncapsulationHeaderOptionsFlag == encapsulation_data.options) /*TODO generate appropriate error response*/
168 {
169 if (*remaining_bytes >= 0) /* check if the message is corrupt: header size + claimed payload size > than what we actually received*/
170 {
171 /* full package or more received */
172 encapsulation_data.status = kEncapsulationProtocolSuccess;
173 return_value = kEipStatusOkSend;
174 /* most of these functions need a reply to be send */
175 switch (encapsulation_data.command_code) {
176 case (kEncapsulationCommandNoOperation):
177 OPENER_TRACE_INFO("NOP\n");
178 /* NOP needs no reply and does nothing */
179 return_value = kEipStatusOk;
180 break;
181
182 case (kEncapsulationCommandListServices):
183 OPENER_TRACE_INFO("List services\n");
184 HandleReceivedListServicesCommand(&encapsulation_data,
185 outgoing_message);
186 break;
187
188 case (kEncapsulationCommandListIdentity):
189 OPENER_TRACE_INFO("List identity\n");
190 HandleReceivedListIdentityCommandTcp(&encapsulation_data,
191 outgoing_message);
192 break;
193
194 case (kEncapsulationCommandListInterfaces):
195 OPENER_TRACE_INFO("List interfaces\n");
196 HandleReceivedListInterfacesCommand(&encapsulation_data,
197 outgoing_message);
198 break;
199
200 case (kEncapsulationCommandRegisterSession):
201 OPENER_TRACE_INFO("Register session\n");
202 HandleReceivedRegisterSessionCommand(socket,
203 &encapsulation_data,
204 outgoing_message);
205 break;
206
207 case (kEncapsulationCommandUnregisterSession):
208 OPENER_TRACE_INFO("unregister session\n");
209 return_value = HandleReceivedUnregisterSessionCommand(

Callers 1

HandleDataOnTcpSocketFunction · 0.85

Tested by

no test coverage detected