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

Function SendUdpData

source/src/ports/generic_networkhandler.c:552–605  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

550}
551
552EipStatus SendUdpData(struct sockaddr_in *address,
553 int socket_handle,
554 EipUint8 *data,
555 EipUint16 data_length) {
556
557
558
559 OPENER_TRACE_INFO("UDP port to be sent to: %x\n", ntohs(address->sin_port) );
560 UDPHeader header = {
561 .source_port = 2222,
562 .destination_port = ntohs(address->sin_port),
563 .packet_length = kUpdHeaderLength + data_length,
564 .checksum = 0
565 };
566
567 char complete_message[PC_OPENER_ETHERNET_BUFFER_SIZE];
568 memcpy(complete_message + kUpdHeaderLength, data, data_length);
569 UDPHeaderGenerate(&header, (char *)complete_message);
570 UDPHeaderSetChecksum(&header,
571 htons(UDPHeaderCalculateChecksum(complete_message,
572 8 + data_length,
573 interface_configuration_
574 .ip_address,
575 address->sin_addr.s_addr) ) );
576 UDPHeaderGenerate(&header, (char *)complete_message);
577
578 int sent_length = sendto( socket_handle,
579 (char *) complete_message,
580 data_length + kUpdHeaderLength,
581 0,
582 (struct sockaddr *) address,
583 sizeof(*address) );
584
585 if (sent_length < 0) {
586 int error_code = GetSocketErrorNumber();
587 char *error_message = GetErrorMessage(error_code);
588 OPENER_TRACE_ERR(
589 "networkhandler: error with sendto in sendUDPData: %d - %s\n",
590 error_code,
591 error_message);
592 FreeErrorMessage(error_message);
593 return kEipStatusError;
594 }
595
596 if (sent_length != data_length + kUpdHeaderLength) {
597 OPENER_TRACE_WARN(
598 "data length sent_length mismatch; probably not all data was sent in SendUdpData, sent %d of %d\n",
599 sent_length,
600 data_length);
601 return kEipStatusError;
602 }
603
604 return kEipStatusOk;
605}
606
607EipStatus HandleDataOnTcpSocket(int socket) {
608 OPENER_TRACE_INFO("Entering HandleDataOnTcpSocket for socket: %d\n", socket);

Callers 1

SendConnectedDataFunction · 0.85

Calls 6

UDPHeaderGenerateFunction · 0.85
UDPHeaderSetChecksumFunction · 0.85
GetSocketErrorNumberFunction · 0.50
GetErrorMessageFunction · 0.50
FreeErrorMessageFunction · 0.50

Tested by

no test coverage detected