78 lines
2.8 KiB
C
78 lines
2.8 KiB
C
|
/*
|
||
|
* Copyright(c) 2006 to 2022 ZettaScale Technology and others
|
||
|
*
|
||
|
* This program and the accompanying materials are made available under the
|
||
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
||
|
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||
|
* v. 1.0 which is available at
|
||
|
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||
|
*
|
||
|
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||
|
*/
|
||
|
#ifndef NN_MISC_H
|
||
|
#define NN_MISC_H
|
||
|
|
||
|
#include "dds/ddsi/q_protocol.h"
|
||
|
|
||
|
#if defined (__cplusplus)
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
DDS_INLINE_EXPORT inline seqno_t fromSN (const nn_sequence_number_t sn) {
|
||
|
uint64_t sn_high = (uint32_t) sn.high;
|
||
|
return (sn_high << 32) | sn.low;
|
||
|
}
|
||
|
|
||
|
DDS_INLINE_EXPORT inline bool validating_fromSN (const nn_sequence_number_t sn, seqno_t *res) {
|
||
|
// fromSN does not checks whatsoever (and shouldn't because it is used quite a lot)
|
||
|
// Valid sequence numbers are in [1 .. 2**63-1] union { SEQUENCE_NUMBER_UNKNOWN }
|
||
|
// where SEQUENCE_NUMBER_UNKNOWN is the usual abomination: ((2**32-1) << 32)
|
||
|
//
|
||
|
// As far as I can tell, there are no messages where SEQUENCE_NUMBER_UNKNOWN is actually a
|
||
|
// valid input (it would perhaps have been an elegant way to mark pre-emptive HEARTBEATs and
|
||
|
// ACKNACKs, but convention is different). So we reject them as invalid until we are forced
|
||
|
// to do differently. That leaves [1 .. 2**63-1]
|
||
|
//
|
||
|
// Since we use uint64_t, we can easily test by checking whether (s-1) is in [0 .. 2**63-1)
|
||
|
const seqno_t tmp = fromSN (sn);
|
||
|
*res = tmp;
|
||
|
return (tmp - 1) < MAX_SEQ_NUMBER;
|
||
|
}
|
||
|
|
||
|
DDS_INLINE_EXPORT inline nn_sequence_number_t toSN (seqno_t n) {
|
||
|
nn_sequence_number_t x;
|
||
|
x.high = (int32_t) (n >> 32);
|
||
|
x.low = (uint32_t) n;
|
||
|
return x;
|
||
|
}
|
||
|
|
||
|
unsigned char normalize_data_datafrag_flags (const SubmessageHeader_t *smhdr);
|
||
|
|
||
|
#ifdef DDS_HAS_NETWORK_PARTITIONS
|
||
|
int WildcardOverlap(char * p1, char * p2);
|
||
|
#endif
|
||
|
|
||
|
extern const ddsi_guid_t nullguid;
|
||
|
DDS_EXPORT bool guid_prefix_zero (const ddsi_guid_prefix_t *a);
|
||
|
DDS_EXPORT int guid_prefix_eq (const ddsi_guid_prefix_t *a, const ddsi_guid_prefix_t *b);
|
||
|
DDS_EXPORT int guid_eq (const struct ddsi_guid *a, const struct ddsi_guid *b);
|
||
|
DDS_EXPORT int ddsi2_patmatch (const char *pat, const char *str);
|
||
|
|
||
|
#ifdef DDS_HAS_NETWORK_PARTITIONS
|
||
|
struct ddsi_config;
|
||
|
struct ddsi_config_partitionmapping_listelem;
|
||
|
struct ddsi_config_partitionmapping_listelem *find_partitionmapping (const struct ddsi_config *cfg, const char *partition, const char *topic);
|
||
|
int is_ignored_partition (const struct ddsi_config *cfg, const char *partition, const char *topic);
|
||
|
#endif
|
||
|
#ifdef DDS_HAS_NETWORK_CHANNELS
|
||
|
struct ddsi_config;
|
||
|
struct ddsi_config_channel_listelem;
|
||
|
struct ddsi_config_channel_listelem *find_channel (const struct config *cfg, nn_transport_priority_qospolicy_t transport_priority);
|
||
|
#endif
|
||
|
|
||
|
#if defined (__cplusplus)
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* NN_MISC_H */
|