| 222 | } |
| 223 | |
| 224 | CipConnectionObject *GetInputOnlyConnection( |
| 225 | const CipConnectionObject *const RESTRICT connection_object, |
| 226 | EipUint16 *const extended_error) { |
| 227 | |
| 228 | for (size_t i = 0; i < OPENER_CIP_NUM_INPUT_ONLY_CONNS; ++i) { |
| 229 | if (g_input_only_connections[i].output_assembly |
| 230 | == connection_object->consumed_path.instance_id) { /* we have the same output assembly */ |
| 231 | if (g_input_only_connections[i].input_assembly |
| 232 | != connection_object->produced_path.instance_id) { |
| 233 | *extended_error = |
| 234 | kConnectionManagerExtendedStatusCodeInvalidProducingApplicationPath; |
| 235 | break; |
| 236 | } |
| 237 | if (g_input_only_connections[i].config_assembly |
| 238 | != connection_object->configuration_path.instance_id) { |
| 239 | *extended_error = |
| 240 | kConnectionManagerExtendedStatusCodeInconsistentApplicationPathCombo; |
| 241 | break; |
| 242 | } |
| 243 | |
| 244 | for (size_t j = 0; j < OPENER_CIP_NUM_INPUT_ONLY_CONNS_PER_CON_PATH; |
| 245 | ++j) { |
| 246 | if (kConnectionObjectStateTimedOut |
| 247 | == ConnectionObjectGetState(&(g_input_only_connections[i]. |
| 248 | connection_data[j]) ) |
| 249 | && ConnectionObjectEqualOriginator(connection_object, |
| 250 | &(g_input_only_connections[i]. |
| 251 | connection_data[j]) ) ) |
| 252 | { |
| 253 | g_input_only_connections[i].connection_data[j]. |
| 254 | connection_close_function( |
| 255 | &g_input_only_connections[i].connection_data[j]); |
| 256 | return &(g_input_only_connections[i].connection_data[j]); |
| 257 | } |
| 258 | } |
| 259 | |
| 260 | for (size_t j = 0; j < OPENER_CIP_NUM_INPUT_ONLY_CONNS_PER_CON_PATH; |
| 261 | ++j) { |
| 262 | if (kConnectionObjectStateNonExistent |
| 263 | == ConnectionObjectGetState(&(g_input_only_connections[i]. |
| 264 | connection_data[j]) ) ) { |
| 265 | return &(g_input_only_connections[i].connection_data[j]); |
| 266 | } |
| 267 | } |
| 268 | *extended_error = |
| 269 | kConnectionManagerExtendedStatusCodeTargetObjectOutOfConnections; |
| 270 | break; |
| 271 | } |
| 272 | } |
| 273 | return NULL; |
| 274 | } |
| 275 | |
| 276 | CipConnectionObject *GetListenOnlyConnection( |
| 277 | const CipConnectionObject *const RESTRICT connection_object, |
no test coverage detected