ua_transport.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #ifndef UA_TRANSPORT_H_
  2. #define UA_TRANSPORT_H_
  3. #include "ua_types.h"
  4. #include "ua_types_encoding_binary.h"
  5. #include "ua_application.h"
  6. static const UA_Int32 SL_HEADER_LENGTH = 0;
  7. enum ConnectionState {
  8. CONNECTIONSTATE_CLOSED,
  9. CONNECTIONSTATE_OPENING,
  10. CONNECTIONSTATE_ESTABLISHED,
  11. CONNECTIONSTATE_CLOSE
  12. };
  13. typedef struct Session {
  14. UA_Int32 sessionId;
  15. Application *application;
  16. } Session;
  17. typedef enum {
  18. UA_SECURITYTOKEN_ISSUE = 0,
  19. UA_SECURITYTOKEN_RENEW = 1
  20. } SecurityTokenRequestType;
  21. typedef enum {
  22. UA_SECURITYMODE_INVALID = 0,
  23. UA_SECURITYMODE_SIGN = 1,
  24. UA_SECURITYMODE_SIGNANDENCRYPT = 2
  25. } SecurityMode;
  26. /* MessageType */
  27. typedef UA_Int32 UA_MessageType;
  28. enum UA_MessageType {
  29. UA_MESSAGETYPE_HEL = 0x48454C, // H E L
  30. UA_MESSAGETYPE_ACK = 0x41434B, // A C k
  31. UA_MESSAGETYPE_ERR = 0x455151, // E R R
  32. UA_MESSAGETYPE_OPN = 0x4F504E, // O P N
  33. UA_MESSAGETYPE_MSG = 0x4D5347, // M S G
  34. UA_MESSAGETYPE_CLO = 0x434C4F // C L O
  35. };
  36. UA_TYPE_PROTOTYPES(UA_MessageType)
  37. UA_TYPE_BINARY_ENCODING(UA_MessageType)
  38. void UA_MessageType_printf(char *label, UA_MessageType* p);
  39. /** @brief TCP Header */
  40. typedef struct UA_OPCUATcpMessageHeader {
  41. UA_MessageType messageType;
  42. UA_Byte isFinal;
  43. UA_UInt32 messageSize;
  44. } UA_OPCUATcpMessageHeader;
  45. UA_TYPE_PROTOTYPES(UA_OPCUATcpMessageHeader)
  46. UA_TYPE_BINARY_ENCODING(UA_OPCUATcpMessageHeader)
  47. /** @brief Hello Message */
  48. typedef struct UA_OPCUATcpHelloMesage {
  49. UA_UInt32 protocolVersion;
  50. UA_UInt32 receiveBufferSize;
  51. UA_UInt32 sendBufferSize;
  52. UA_UInt32 maxMessageSize;
  53. UA_UInt32 maxChunkCount;
  54. UA_String endpointUrl;
  55. } UA_OPCUATcpHelloMessage;
  56. UA_TYPE_PROTOTYPES(UA_OPCUATcpHelloMessage)
  57. UA_TYPE_BINARY_ENCODING(UA_OPCUATcpHelloMessage)
  58. /** @brief Acknowledge Message */
  59. typedef struct UA_OPCUATcpAcknowledgeMessage {
  60. UA_UInt32 protocolVersion;
  61. UA_UInt32 receiveBufferSize;
  62. UA_UInt32 sendBufferSize;
  63. UA_UInt32 maxMessageSize;
  64. UA_UInt32 maxChunkCount;
  65. } UA_OPCUATcpAcknowledgeMessage;
  66. UA_TYPE_PROTOTYPES(UA_OPCUATcpAcknowledgeMessage)
  67. UA_TYPE_BINARY_ENCODING(UA_OPCUATcpAcknowledgeMessage)
  68. /** @brief Secure Layer Sequence Header */
  69. typedef struct UA_SecureConversationMessageHeader {
  70. UA_OPCUATcpMessageHeader messageHeader;
  71. UA_UInt32 secureChannelId;
  72. } UA_SecureConversationMessageHeader;
  73. UA_TYPE_PROTOTYPES(UA_SecureConversationMessageHeader)
  74. UA_TYPE_BINARY_ENCODING(UA_SecureConversationMessageHeader)
  75. /** @brief Security Header> */
  76. typedef struct UA_AsymmetricAlgorithmSecurityHeader {
  77. UA_ByteString securityPolicyUri;
  78. UA_ByteString senderCertificate;
  79. UA_ByteString receiverCertificateThumbprint;
  80. UA_UInt32 requestId;
  81. } UA_AsymmetricAlgorithmSecurityHeader;
  82. UA_TYPE_PROTOTYPES(UA_AsymmetricAlgorithmSecurityHeader)
  83. UA_TYPE_BINARY_ENCODING(UA_AsymmetricAlgorithmSecurityHeader)
  84. /** @brief Secure Layer Symmetric Algorithm Header */
  85. typedef struct UA_SymmetricAlgorithmSecurityHeader {
  86. UA_UInt32 tokenId;
  87. } UA_SymmetricAlgorithmSecurityHeader;
  88. UA_TYPE_PROTOTYPES(UA_SymmetricAlgorithmSecurityHeader)
  89. UA_TYPE_BINARY_ENCODING(UA_SymmetricAlgorithmSecurityHeader)
  90. /** @brief Secure Layer Sequence Header */
  91. typedef struct UA_SequenceHeader {
  92. UA_UInt32 sequenceNumber;
  93. UA_UInt32 requestId;
  94. } UA_SequenceHeader;
  95. UA_TYPE_PROTOTYPES(UA_SequenceHeader)
  96. UA_TYPE_BINARY_ENCODING(UA_SequenceHeader)
  97. /** @brief Secure Conversation Message Footer */
  98. typedef struct UA_SecureConversationMessageFooter {
  99. UA_Int32 paddingSize;
  100. UA_Byte* padding;
  101. UA_Byte signature;
  102. } UA_SecureConversationMessageFooter;
  103. UA_TYPE_PROTOTYPES(UA_SecureConversationMessageFooter)
  104. UA_TYPE_BINARY_ENCODING(UA_SecureConversationMessageFooter)
  105. /** @brief Secure Conversation Message Abort Body */
  106. typedef struct UA_SecureConversationMessageAbortBody {
  107. UA_UInt32 error;
  108. UA_String reason;
  109. } UA_SecureConversationMessageAbortBody;
  110. UA_TYPE_PROTOTYPES(UA_SecureConversationMessageAbortBody)
  111. UA_TYPE_BINARY_ENCODING(UA_SecureConversationMessageAbortBody)
  112. #endif /* UA_TRANSPORT_H_ */