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

Function AssembleForwardCloseResponse

source/src/cip/cipconnectionmanager.c:871–917  ·  view source on GitHub ↗

INT8 assembleFWDCloseResponse(UINT16 pa_ConnectionSerialNr, UINT16 pa_OriginatorVendorID, UINT32 pa_OriginatorSerialNr, S_CIP_MR_Request *pa_MRRequest, S_CIP_MR_Response *pa_MRResponse, S_CIP_CPF_Data *pa_CPF_data, INT8 pa_status, INT8 *pa_msg) * create FWDClose response dependent on status. * pa_ConnectionSerialNr requested ConnectionSerialNr * pa_OriginatorVendorID requested Origi

Source from the content-addressed store, hash-verified

869 * -1 .. error
870 */
871EipStatus AssembleForwardCloseResponse(
872 EipUint16 connection_serial_number,
873 EipUint16 originatior_vendor_id,
874 EipUint32 originator_serial_number,
875 CipMessageRouterRequest *message_router_request,
876 CipMessageRouterResponse *message_router_response,
877 EipUint16 extended_error_code
878 ) {
879 /* write reply information in CPF struct dependent of pa_status */
880 CipCommonPacketFormatData *common_data_packet_format_data =
881 &g_common_packet_format_data_item;
882 EipByte *message = message_router_response->data;
883 common_data_packet_format_data->item_count = 2;
884 common_data_packet_format_data->data_item.type_id =
885 kCipItemIdUnconnectedDataItem;
886
887 AddNullAddressItem(common_data_packet_format_data);
888
889 AddIntToMessage(connection_serial_number, &message);
890 AddIntToMessage(originatior_vendor_id, &message);
891 AddDintToMessage(originator_serial_number, &message);
892
893 message_router_response->reply_service = (0x80
894 | message_router_request->service);
895 message_router_response->data_length = 10; /* if there is no application specific data */
896
897 if (kConnectionManagerExtendedStatusCodeSuccess == extended_error_code) {
898 *message = 0; /* no application data */
899 message_router_response->general_status = kCipErrorSuccess;
900 message_router_response->size_of_additional_status = 0;
901 } else {
902 *message = *message_router_request->data; /* remaining path size */
903 if (kConnectionManagerExtendedStatusWrongCloser == extended_error_code) {
904 message_router_response->general_status = kCipErrorPrivilegeViolation;
905 } else {
906 message_router_response->general_status = kCipErrorConnectionFailure;
907 message_router_response->additional_status[0] = extended_error_code;
908 message_router_response->size_of_additional_status = 1;
909 }
910 }
911
912 message++;
913 *message = 0; /* reserved */
914 message++;
915
916 return kEipStatusOkSend;
917}
918
919CipConnectionObject *GetConnectedObject(const EipUint32 connection_id) {
920 DoublyLinkedListNode *iterator = connection_list.first;

Callers 1

ForwardCloseFunction · 0.85

Calls 3

AddNullAddressItemFunction · 0.85
AddIntToMessageFunction · 0.85
AddDintToMessageFunction · 0.85

Tested by

no test coverage detected