open62541 1.4.15
Open source implementation of OPC UA
Loading...
Searching...
No Matches
ua_pubsub_networkmessage.h
Go to the documentation of this file.
1/** This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
4 *
5 * Copyright (c) 2017 - 2018 Fraunhofer IOSB (Author: Tino Bischoff)
6 * Copyright (c) 2017-2019 Fraunhofer IOSB (Author: Andreas Ebner)
7 */
8
9#ifndef UA_PUBSUB_NETWORKMESSAGE_H_
10#define UA_PUBSUB_NETWORKMESSAGE_H_
11
12#include <open62541/types.h>
16
17#ifdef UA_ENABLE_PUBSUB
18
20
21#define UA_NETWORKMESSAGE_MAX_NONCE_LENGTH 16
22
23/** DataSet Payload Header */
28
29/** FieldEncoding Enum */
36
37/** DataSetMessage Type */
44
45/** DataSetMessage Header */
63
64
65
66typedef struct {
70 /* Json keys for the dataSetFields: TODO: own dataSetMessageType for json? */
72 /* This information is for proper en- and decoding needed */
75
80
85
94
99
105
106
117
118
129
130
168
169
170/** Network Message Offsets */
171
172
173/** Offsets for buffered messages in the PubSub fast path. */
193
203
204typedef struct {
205 UA_ByteString buffer; /* The precomputed message buffer */
206 UA_NetworkMessageOffset *offsets; /* Offsets for changes in the message buffer */
208 UA_NetworkMessage *nm; /* The precomputed NetworkMessage for subscriber */
210#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
211 UA_ByteString encryptBuffer; /* The precomputed message buffer is copied
212 * into the encrypt buffer for encryption and
213 * signing*/
214 UA_Byte *payloadPosition; /* Payload Position of the message to encrypt*/
215#endif
217
218void
220
223
226 const UA_ByteString *src, size_t *bufferPosition);
227
228
229
232 UA_Byte **bufPos, const UA_Byte *bufEnd);
233
237
240 const UA_Byte *bufEnd);
241
245 const UA_DataTypeArray *customTypes,
247
248size_t
250 UA_NetworkMessageOffsetBuffer *offsetBuffer,
251 size_t currentOffset);
252
254
255
256
257/** If dataToEncryptStart not-NULL, then it will be set to the start-position of
258 * the payload in the buffer. */
261 UA_Byte **bufPos, const UA_Byte *bufEnd,
262 UA_Byte **dataToEncryptStart);
263
266 UA_Byte **bufPos, const UA_Byte *bufEnd);
267
270 UA_Byte **bufPos, const UA_Byte *bufEnd);
271
274 UA_Byte **bufPos, const UA_Byte *bufEnd);
275
276
277
281
284 UA_NetworkMessage *dst, const UA_DataTypeArray *customTypes,
286
290
293 UA_NetworkMessage* dst, const UA_DataTypeArray *customTypes);
294
298
299/** Also stores the offset if offsetBuffer != NULL */
300size_t
302 UA_NetworkMessageOffsetBuffer *offsetBuffer);
303
304#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
305
307UA_NetworkMessage_signEncrypt(UA_NetworkMessage *nm, UA_MessageSecurityMode securityMode,
308 UA_PubSubSecurityPolicy *policy, void *policyContext,
309 UA_Byte *messageStart, UA_Byte *encryptStart,
310 UA_Byte *sigStart);
311#endif
312
313void
315
316#ifdef UA_ENABLE_JSON_ENCODING
318UA_NetworkMessage_encodeJson(const UA_NetworkMessage *src,
319 UA_Byte **bufPos, const UA_Byte **bufEnd, UA_String *namespaces,
320 size_t namespaceSize, UA_String *serverUris,
321 size_t serverUriSize, UA_Boolean useReversible);
322
323size_t
324UA_NetworkMessage_calcSizeJson(const UA_NetworkMessage *src,
325 UA_String *namespaces, size_t namespaceSize,
326 UA_String *serverUris, size_t serverUriSize,
327 UA_Boolean useReversible);
328
329UA_StatusCode UA_NetworkMessage_decodeJson(UA_NetworkMessage *dst, const UA_ByteString *src);
330#endif
331
333
334#endif /* UA_ENABLE_PUBSUB */
335
336#endif /* UA_PUBSUB_NETWORKMESSAGE_H_ */
#define _UA_BEGIN_DECLS
#undef UA_DEBUG_DUMP_PKGS
Definition config.h:100
#define _UA_END_DECLS
Definition config.h:107
UA_PublisherIdType
Valid PublisherId types from Part 14.
UA_DataSetMessageType dataSetMessageType
UA_DataSetMessage_DeltaFrameField * deltaFrameFields
UA_DataSetMessageHeader header
UA_DataSetMessage_DataDeltaFrameData deltaFrameData
UA_DataSetMessage_DataKeyFrameData keyFrameData
DataSetMetaDataType.
UA_DataSetMessage * dataSetMessages
Datatype arrays with custom type definitions can be added in a linked list to the client or server co...
Definition types.h:878
UA_NetworkMessageOffsetType contentType
UA_NetworkMessageSecurityHeader securityHeader
UA_NetworkMessageType networkMessageType
UA_DataSetPayloadHeader dataSetPayloadHeader
UA_NetworkMessageGroupHeader groupHeader
UA_DataSetPayload dataSetPayload
UA_PublisherIdType publisherIdType
_UA_BEGIN_DECLS typedef bool UA_Boolean
This Source Code Form is subject to the terms of the Mozilla Public License, v.
Definition types.h:27
uint16_t UA_UInt16
Definition types.h:47
uint32_t UA_UInt32
Definition types.h:57
void * dst
Definition types.h:948
uint32_t UA_StatusCode
Definition types.h:82
uint8_t UA_Byte
Definition types.h:37
UA_MessageSecurityMode
MessageSecurityMode.
UA_DateTime UA_UtcTime
UtcTime.
UA_StatusCode UA_NetworkMessage_updateBufferedNwMessage(UA_NetworkMessageOffsetBuffer *buffer, const UA_ByteString *src, size_t *bufferPosition)
UA_StatusCode UA_DataSetMessage_decodeBinary(const UA_ByteString *src, size_t *offset, UA_DataSetMessage *dst, UA_UInt16 dsmSize, const UA_DataTypeArray *customTypes, UA_DataSetMetaDataType *dsm)
void UA_NetworkMessage_clear(UA_NetworkMessage *p)
UA_StatusCode UA_NetworkMessage_updateBufferedMessage(UA_NetworkMessageOffsetBuffer *buffer)
UA_StatusCode UA_DataSetMessage_encodeBinary(const UA_DataSetMessage *src, UA_Byte **bufPos, const UA_Byte *bufEnd)
UA_StatusCode UA_NetworkMessage_decodePayload(const UA_ByteString *src, size_t *offset, UA_NetworkMessage *dst, const UA_DataTypeArray *customTypes, UA_DataSetMetaDataType *dsm)
UA_StatusCode UA_NetworkMessage_decodeFooters(const UA_ByteString *src, size_t *offset, UA_NetworkMessage *dst)
UA_StatusCode UA_NetworkMessage_encodeHeaders(const UA_NetworkMessage *src, UA_Byte **bufPos, const UA_Byte *bufEnd)
UA_StatusCode UA_DataSetMessageHeader_encodeBinary(const UA_DataSetMessageHeader *src, UA_Byte **bufPos, const UA_Byte *bufEnd)
UA_FieldEncoding
FieldEncoding Enum
@ UA_FIELDENCODING_RAWDATA
@ UA_FIELDENCODING_UNKNOWN
@ UA_FIELDENCODING_DATAVALUE
@ UA_FIELDENCODING_VARIANT
UA_StatusCode UA_NetworkMessage_encodeBinary(const UA_NetworkMessage *src, UA_Byte **bufPos, const UA_Byte *bufEnd, UA_Byte **dataToEncryptStart)
If dataToEncryptStart not-NULL, then it will be set to the start-position of the payload in the buffe...
void UA_DataSetMessage_clear(UA_DataSetMessage *p)
size_t UA_NetworkMessage_calcSizeBinary(UA_NetworkMessage *p, UA_NetworkMessageOffsetBuffer *offsetBuffer)
Also stores the offset if offsetBuffer != NULL.
UA_StatusCode UA_NetworkMessage_decodeHeaders(const UA_ByteString *src, size_t *offset, UA_NetworkMessage *dst)
UA_StatusCode UA_NetworkMessage_encodePayload(const UA_NetworkMessage *src, UA_Byte **bufPos, const UA_Byte *bufEnd)
UA_NetworkMessageOffsetType
Network Message Offsets
@ UA_PUBSUB_OFFSETTYPE_TIMESTAMP_NOW
@ UA_PUBSUB_OFFSETTYPE_NETWORKMESSAGE_SEQUENCENUMBER
@ UA_PUBSUB_OFFSETTYPE_PAYLOAD_DATAVALUE
@ UA_PUBSUB_OFFSETTYPE_PAYLOAD_VARIANT_EXTERNAL
@ UA_PUBSUB_OFFSETTYPE_DATASETWRITERID
@ UA_PUBSUB_OFFSETTYPE_NETWORKMESSAGE_FIELDENCDODING
@ UA_PUBSUB_OFFSETTYPE_TIMESTAMP
@ UA_PUBSUB_OFFSETTYPE_PAYLOAD_RAW
@ UA_PUBSUB_OFFSETTYPE_PAYLOAD_VARIANT
@ UA_PUBSUB_OFFSETTYPE_DATASETMESSAGE_SEQUENCENUMBER
@ UA_PUBSUB_OFFSETTYPE_PUBLISHERID
@ UA_PUBSUB_OFFSETTYPE_PAYLOAD_DATAVALUE_EXTERNAL
@ UA_PUBSUB_OFFSETTYPE_WRITERGROUPID
@ UA_PUBSUB_OFFSETTYPE_PAYLOAD_RAW_EXTERNAL
@ UA_PUBSUB_OFFSETTYPE_TIMESTAMP_PICOSECONDS
size_t UA_DataSetMessage_calcSizeBinary(UA_DataSetMessage *p, UA_NetworkMessageOffsetBuffer *offsetBuffer, size_t currentOffset)
void UA_NetworkMessageOffsetBuffer_clear(UA_NetworkMessageOffsetBuffer *nmob)
UA_StatusCode UA_NetworkMessage_decodeBinary(const UA_ByteString *src, size_t *offset, UA_NetworkMessage *dst, const UA_DataTypeArray *customTypes)
@ UA_NETWORKMESSAGE_DISCOVERY_RESPONSE
@ UA_NETWORKMESSAGE_DATASET
@ UA_NETWORKMESSAGE_DISCOVERY_REQUEST
UA_StatusCode UA_DataSetMessageHeader_decodeBinary(const UA_ByteString *src, size_t *offset, UA_DataSetMessageHeader *dst)
UA_DataSetMessageType
DataSetMessage Type.
@ UA_DATASETMESSAGE_KEEPALIVE
@ UA_DATASETMESSAGE_DATAKEYFRAME
@ UA_DATASETMESSAGE_DATADELTAFRAME
@ UA_DATASETMESSAGE_EVENT
UA_StatusCode UA_NetworkMessageHeader_decodeBinary(const UA_ByteString *src, size_t *offset, UA_NetworkMessage *dst)
UA_StatusCode UA_NetworkMessage_encodeFooters(const UA_NetworkMessage *src, UA_Byte **bufPos, const UA_Byte *bufEnd)
#define UA_NETWORKMESSAGE_MAX_NONCE_LENGTH
This Source Code Form is subject to the terms of the Mozilla Public License, v.
Publisher Id Valid types are defined in Part 14, 7.2.2.2.2 NetworkMessage Layout: