ua_transport.h 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #ifndef UA_TRANSPORT_H_
  2. #define UA_TRANSPORT_H_
  3. #include "opcua.h"
  4. #include "ua_application.h"
  5. static const UA_Int32 SL_HEADER_LENGTH = 0;
  6. enum ConnectionState {
  7. CONNECTIONSTATE_CLOSED,
  8. CONNECTIONSTATE_OPENING,
  9. CONNECTIONSTATE_ESTABLISHED,
  10. CONNECTIONSTATE_CLOSE
  11. };
  12. typedef struct Session_T {
  13. UA_Int32 sessionId;
  14. Application *application;
  15. } Session;
  16. typedef enum {
  17. UA_SECURITYTOKEN_ISSUE = 0,
  18. UA_SECURITYTOKEN_RENEW = 1
  19. } SecurityTokenRequestType;
  20. typedef enum {
  21. UA_SECURITYMODE_INVALID = 0,
  22. UA_SECURITYMODE_SIGN = 1,
  23. UA_SECURITYMODE_SIGNANDENCRYPT = 2
  24. } SecurityMode;
  25. /* MessageType */
  26. typedef UA_Int32 UA_MessageType;
  27. enum UA_MessageType {
  28. UA_MESSAGETYPE_HEL = 0x48454C, // H E L
  29. UA_MESSAGETYPE_ACK = 0x41434B, // A C k
  30. UA_MESSAGETYPE_ERR = 0x455151, // E R R
  31. UA_MESSAGETYPE_OPN = 0x4F504E, // O P N
  32. UA_MESSAGETYPE_MSG = 0x4D5347, // M S G
  33. UA_MESSAGETYPE_CLO = 0x434C4F // C L O
  34. };
  35. UA_Int32 UA_MessageType_calcSize(UA_MessageType const * ptr);
  36. UA_Int32 UA_MessageType_encodeBinary(UA_MessageType const * src, UA_Int32* pos, UA_ByteString* dst);
  37. UA_Int32 UA_MessageType_decodeBinary(UA_ByteString const * src, UA_Int32* pos, UA_MessageType* dst);
  38. UA_Int32 UA_MessageType_delete(UA_MessageType* p);
  39. UA_Int32 UA_MessageType_deleteMembers(UA_MessageType* p);
  40. void UA_MessageType_printf(char *label, UA_MessageType* p);
  41. /** @name UA_UA_OPCUATcpMessageHeader */
  42. /** @brief TCP Header */
  43. typedef struct UA_OPCUATcpMessageHeader_T {
  44. UA_MessageType messageType; // MessageType instead of UInt32
  45. UA_Byte isFinal;
  46. UA_UInt32 messageSize;
  47. } UA_OPCUATcpMessageHeader;
  48. UA_Int32 UA_OPCUATcpMessageHeader_calcSize(UA_OPCUATcpMessageHeader const* ptr);
  49. UA_Int32 UA_OPCUATcpMessageHeader_encodeBinary(UA_OPCUATcpMessageHeader const* src, UA_Int32* pos, UA_ByteString* dst);
  50. UA_Int32 UA_OPCUATcpMessageHeader_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_OPCUATcpMessageHeader* dst);
  51. UA_Int32 UA_OPCUATcpMessageHeader_delete(UA_OPCUATcpMessageHeader* p);
  52. UA_Int32 UA_OPCUATcpMessageHeader_deleteMembers(UA_OPCUATcpMessageHeader* p);
  53. UA_Int32 UA_OPCUATcpMessageHeader_init(UA_OPCUATcpMessageHeader * p);
  54. UA_Int32 UA_OPCUATcpMessageHeader_new(UA_OPCUATcpMessageHeader ** p);
  55. /** @name UA_UA_OPCUATcpHelloMessage */
  56. /** @brief Hello Message */
  57. typedef struct UA_OPCUATcpHelloMessage_T {
  58. UA_UInt32 protocolVersion;
  59. UA_UInt32 receiveBufferSize;
  60. UA_UInt32 sendBufferSize;
  61. UA_UInt32 maxMessageSize;
  62. UA_UInt32 maxChunkCount;
  63. UA_String endpointUrl;
  64. } UA_OPCUATcpHelloMessage;
  65. UA_Int32 UA_OPCUATcpHelloMessage_calcSize(UA_OPCUATcpHelloMessage const* ptr);
  66. UA_Int32 UA_OPCUATcpHelloMessage_encodeBinary(UA_OPCUATcpHelloMessage const* src, UA_Int32* pos, UA_ByteString* dst);
  67. UA_Int32 UA_OPCUATcpHelloMessage_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_OPCUATcpHelloMessage* dst);
  68. UA_Int32 UA_OPCUATcpHelloMessage_delete(UA_OPCUATcpHelloMessage* p);
  69. UA_Int32 UA_OPCUATcpHelloMessage_deleteMembers(UA_OPCUATcpHelloMessage* p);
  70. UA_Int32 UA_OPCUATcpHelloMessage_init(UA_OPCUATcpHelloMessage * p);
  71. UA_Int32 UA_OPCUATcpHelloMessage_new(UA_OPCUATcpHelloMessage ** p);
  72. /** @name UA_UA_OPCUATcpAcknowledgeMessage */
  73. /** @brief Acknowledge Message */
  74. typedef struct UA_OPCUATcpAcknowledgeMessage_T {
  75. UA_UInt32 protocolVersion;
  76. UA_UInt32 receiveBufferSize;
  77. UA_UInt32 sendBufferSize;
  78. UA_UInt32 maxMessageSize;
  79. UA_UInt32 maxChunkCount;
  80. } UA_OPCUATcpAcknowledgeMessage;
  81. UA_Int32 UA_OPCUATcpAcknowledgeMessage_calcSize(UA_OPCUATcpAcknowledgeMessage const* ptr);
  82. UA_Int32 UA_OPCUATcpAcknowledgeMessage_encodeBinary(UA_OPCUATcpAcknowledgeMessage const* src, UA_Int32* pos, UA_ByteString* dst);
  83. UA_Int32 UA_OPCUATcpAcknowledgeMessage_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_OPCUATcpAcknowledgeMessage* dst);
  84. UA_Int32 UA_OPCUATcpAcknowledgeMessage_delete(UA_OPCUATcpAcknowledgeMessage* p);
  85. UA_Int32 UA_OPCUATcpAcknowledgeMessage_deleteMembers(UA_OPCUATcpAcknowledgeMessage* p);
  86. UA_Int32 UA_OPCUATcpAcknowledgeMessage_init(UA_OPCUATcpAcknowledgeMessage * p);
  87. UA_Int32 UA_OPCUATcpAcknowledgeMessage_new(UA_OPCUATcpAcknowledgeMessage ** p);
  88. /** @name UA_UA_SecureConversationMessageHeader */
  89. /** @brief Secure Layer Sequence Header */
  90. typedef struct UA_SecureConversationMessageHeader_T {
  91. // UA_OPCUATcpMessageHeader messageHeader; // Treated with custom code
  92. UA_UInt32 secureChannelId;
  93. } UA_SecureConversationMessageHeader;
  94. UA_Int32 UA_SecureConversationMessageHeader_calcSize(UA_SecureConversationMessageHeader const* ptr);
  95. UA_Int32 UA_SecureConversationMessageHeader_encodeBinary(UA_SecureConversationMessageHeader const* src, UA_Int32* pos, UA_ByteString* dst);
  96. UA_Int32 UA_SecureConversationMessageHeader_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_SecureConversationMessageHeader* dst);
  97. UA_Int32 UA_SecureConversationMessageHeader_delete(UA_SecureConversationMessageHeader* p);
  98. UA_Int32 UA_SecureConversationMessageHeader_deleteMembers(UA_SecureConversationMessageHeader* p);
  99. UA_Int32 UA_SecureConversationMessageHeader_init(UA_SecureConversationMessageHeader * p);
  100. UA_Int32 UA_SecureConversationMessageHeader_new(UA_SecureConversationMessageHeader ** p);
  101. /** @name UA_UA_AsymmetricAlgorithmSecurityHeader */
  102. /** @brief Security Header> */
  103. typedef struct UA_AsymmetricAlgorithmSecurityHeader_T {
  104. UA_ByteString securityPolicyUri;
  105. UA_ByteString senderCertificate;
  106. UA_ByteString receiverCertificateThumbprint;
  107. // UA_UInt32 requestId; // Dealt with in the SequenceHeader
  108. } UA_AsymmetricAlgorithmSecurityHeader;
  109. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_calcSize(UA_AsymmetricAlgorithmSecurityHeader const* ptr);
  110. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(UA_AsymmetricAlgorithmSecurityHeader const* src, UA_Int32* pos, UA_ByteString* dst);
  111. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_AsymmetricAlgorithmSecurityHeader* dst);
  112. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_delete(UA_AsymmetricAlgorithmSecurityHeader* p);
  113. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(UA_AsymmetricAlgorithmSecurityHeader* p);
  114. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_init(UA_AsymmetricAlgorithmSecurityHeader * p);
  115. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_new(UA_AsymmetricAlgorithmSecurityHeader ** p);
  116. /** @name UA_UA_SymmetricAlgorithmSecurityHeader */
  117. /** @brief Secure Layer Symmetric Algorithm Header */
  118. typedef struct UA_SymmetricAlgorithmSecurityHeader_T {
  119. UA_UInt32 tokenId;
  120. } UA_SymmetricAlgorithmSecurityHeader;
  121. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_calcSize(UA_SymmetricAlgorithmSecurityHeader const* ptr);
  122. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_encodeBinary(UA_SymmetricAlgorithmSecurityHeader const* src, UA_Int32* pos, UA_ByteString* dst);
  123. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_SymmetricAlgorithmSecurityHeader* dst);
  124. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_delete(UA_SymmetricAlgorithmSecurityHeader* p);
  125. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_deleteMembers(UA_SymmetricAlgorithmSecurityHeader* p);
  126. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_init(UA_SymmetricAlgorithmSecurityHeader * p);
  127. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_new(UA_SymmetricAlgorithmSecurityHeader ** p);
  128. /** @name UA_UA_SequenceHeader */
  129. /** @brief Secure Layer Sequence Header */
  130. typedef struct UA_SequenceHeader_T {
  131. UA_UInt32 sequenceNumber;
  132. UA_UInt32 requestId;
  133. } UA_SequenceHeader;
  134. UA_Int32 UA_SequenceHeader_calcSize(UA_SequenceHeader const* ptr);
  135. UA_Int32 UA_SequenceHeader_encodeBinary(UA_SequenceHeader const* src, UA_Int32* pos, UA_ByteString* dst);
  136. UA_Int32 UA_SequenceHeader_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_SequenceHeader* dst);
  137. UA_Int32 UA_SequenceHeader_delete(UA_SequenceHeader* p);
  138. UA_Int32 UA_SequenceHeader_deleteMembers(UA_SequenceHeader* p);
  139. UA_Int32 UA_SequenceHeader_init(UA_SequenceHeader * p);
  140. UA_Int32 UA_SequenceHeader_new(UA_SequenceHeader ** p);
  141. /** @name UA_UA_SecureConversationMessageFooter */
  142. /** @brief Secure Conversation Message Footer */
  143. typedef struct UA_SecureConversationMessageFooter_T {
  144. UA_Int32 paddingSize;
  145. UA_Byte** padding;
  146. UA_Byte signature;
  147. } UA_SecureConversationMessageFooter;
  148. UA_Int32 UA_SecureConversationMessageFooter_calcSize(UA_SecureConversationMessageFooter const* ptr);
  149. UA_Int32 UA_SecureConversationMessageFooter_encodeBinary(UA_SecureConversationMessageFooter const* src, UA_Int32* pos, UA_ByteString* dst);
  150. UA_Int32 UA_SecureConversationMessageFooter_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_SecureConversationMessageFooter* dst);
  151. UA_Int32 UA_SecureConversationMessageFooter_delete(UA_SecureConversationMessageFooter* p);
  152. UA_Int32 UA_SecureConversationMessageFooter_deleteMembers(UA_SecureConversationMessageFooter* p);
  153. UA_Int32 UA_SecureConversationMessageFooter_init(UA_SecureConversationMessageFooter * p);
  154. UA_Int32 UA_SecureConversationMessageFooter_new(UA_SecureConversationMessageFooter ** p);
  155. /** @name UA_UA_SecureConversationMessageAbortBody */
  156. /** @brief Secure Conversation Message Abort Body */
  157. typedef struct UA_SecureConversationMessageAbortBody_T {
  158. UA_UInt32 error;
  159. UA_String reason;
  160. } UA_SecureConversationMessageAbortBody;
  161. UA_Int32 UA_SecureConversationMessageAbortBody_calcSize(UA_SecureConversationMessageAbortBody const* ptr);
  162. UA_Int32 UA_SecureConversationMessageAbortBody_encodeBinary(UA_SecureConversationMessageAbortBody const* src, UA_Int32* pos, UA_ByteString* dst);
  163. UA_Int32 UA_SecureConversationMessageAbortBody_decodeBinary(UA_ByteString const* src, UA_Int32* pos, UA_SecureConversationMessageAbortBody* dst);
  164. UA_Int32 UA_SecureConversationMessageAbortBody_delete(UA_SecureConversationMessageAbortBody* p);
  165. UA_Int32 UA_SecureConversationMessageAbortBody_deleteMembers(UA_SecureConversationMessageAbortBody* p);
  166. UA_Int32 UA_SecureConversationMessageAbortBody_init(UA_SecureConversationMessageAbortBody * p);
  167. UA_Int32 UA_SecureConversationMessageAbortBody_new(UA_SecureConversationMessageAbortBody ** p);
  168. #endif /* UA_TRANSPORT_H_ */