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

Function CheckElectronicKeyData

source/src/cip/cipconnectionmanager.c:972–1048  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

970}
971
972EipStatus CheckElectronicKeyData(
973 EipUint8 key_format,
974 void *key_data,
975 EipUint16 *extended_status
976 ) {
977 /* Default return value */
978 *extended_status = kConnectionManagerExtendedStatusCodeSuccess;
979
980 /* Check key format */
981 if (4 != key_format) {
982 *extended_status =
983 kConnectionManagerExtendedStatusCodeErrorInvalidSegmentTypeInPath;
984 return kEipStatusError;
985 }
986
987 bool compatiblity_mode = ElectronicKeyFormat4GetMajorRevisionCompatibility(
988 key_data);
989
990 /* Check VendorID and ProductCode, must match, or 0 */
991 if ( ( (ElectronicKeyFormat4GetVendorId(key_data) != vendor_id_) &&
992 (ElectronicKeyFormat4GetVendorId(key_data) != 0) )
993 || ( (ElectronicKeyFormat4GetProductCode(key_data) != product_code_)
994 && (ElectronicKeyFormat4GetProductCode(key_data) != 0) ) ) {
995 *extended_status =
996 kConnectionManagerExtendedStatusCodeErrorVendorIdOrProductcodeError;
997 return kEipStatusError;
998 } else {
999 /* VendorID and ProductCode are correct */
1000
1001 /* Check DeviceType, must match or 0 */
1002 if ( (ElectronicKeyFormat4GetDeviceType(key_data) != device_type_)
1003 && (ElectronicKeyFormat4GetDeviceType(key_data) != 0) ) {
1004 *extended_status =
1005 kConnectionManagerExtendedStatusCodeErrorDeviceTypeError;
1006 return kEipStatusError;
1007 } else {
1008 /* VendorID, ProductCode and DeviceType are correct */
1009
1010 if (false == compatiblity_mode) {
1011 /* Major = 0 is valid */
1012 if (0 == ElectronicKeyFormat4GetMajorRevision(key_data) ) {
1013 return kEipStatusOk;
1014 }
1015
1016 /* Check Major / Minor Revision, Major must match, Minor match or 0 */
1017 if ( (ElectronicKeyFormat4GetMajorRevision(key_data) !=
1018 revision_.major_revision)
1019 || ( (ElectronicKeyFormat4GetMinorRevision(key_data) !=
1020 revision_.minor_revision)
1021 && (ElectronicKeyFormat4GetMinorRevision(key_data) != 0) ) ) {
1022 *extended_status =
1023 kConnectionManagerExtendedStatusCodeErrorRevisionMismatch;
1024 return kEipStatusError;
1025 }
1026 } else {
1027 /* Compatibility mode is set */
1028
1029 /* Major must match, Minor != 0 and <= MinorRevision */

Callers 1

ParseConnectionPathFunction · 0.85

Tested by

no test coverage detected