瀏覽代碼

Merge branch 'master' of https://github.com/Stasik0/Open62541

FlorianPalm 11 年之前
父節點
當前提交
86ca477ca7
共有 4 個文件被更改,包括 35 次插入30 次删除
  1. 7 6
      README.md
  2. 9 5
      examples/src/opcuaServer.c
  3. 10 10
      src/opcua_binaryEncDec.c
  4. 9 9
      src/opcua_secureChannelLayer.c

+ 7 - 6
README.md

@@ -1,14 +1,15 @@
 Open62541
 Open62541
 =========
 =========
 
 
-An open-source communication stack implementation of OPC UA licensed under LGPL + static linking exception.
-# Getting dependencies
+An open-source communication stack implementation of OPC UA (OPC Unified Architecture) licensed under LGPL + static linking exception.
+
+## Getting dependencies
 ### Ubuntu
 ### Ubuntu
 ##### Getting gcc toolchain:
 ##### Getting gcc toolchain:
 ```bash
 ```bash
 sudo apt-get install build-essential subversion git autoconf libtool texinfo
 sudo apt-get install build-essential subversion git autoconf libtool texinfo
 ```
 ```
-##### Getting and installing check 0.9.12
+##### Getting and installing *check* as unit test framework (http://check.sourceforge.net/):
 ```bash
 ```bash
 $ svn checkout svn://svn.code.sf.net/p/check/code/trunk check-code
 $ svn checkout svn://svn.code.sf.net/p/check/code/trunk check-code
 $ cd check-code
 $ cd check-code
@@ -33,7 +34,7 @@ $ sudo ldconfig
 ##### Get git (IMPORTANT: get 1.8.4, since 1.8.5.2 has a bug):
 ##### Get git (IMPORTANT: get 1.8.4, since 1.8.5.2 has a bug):
 * http://code.google.com/p/msysgit/downloads/detail?name=Git-1.8.4-preview20130916.exe&can=2&q=
 * http://code.google.com/p/msysgit/downloads/detail?name=Git-1.8.4-preview20130916.exe&can=2&q=
 
 
-##### Getting check unit test framework:
+##### Getting and installing *check* as unit testing framework (http://check.sourceforge.net/):
 * Open MinGW\msys\1.0\msys.bat
 * Open MinGW\msys\1.0\msys.bat
 
 
 ```bash
 ```bash
@@ -45,12 +46,12 @@ $ make
 $ make install
 $ make install
 ```
 ```
 
 
-# Clone open62541
+## Clone open62541
 ```bash
 ```bash
 $ git clone https://github.com/acplt/open62541.git
 $ git clone https://github.com/acplt/open62541.git
 ```
 ```
 
 
-# Building 
+## Building 
 * use autogen.sh only first time and whenever aclocal.m4 or configure.ac were modified
 * use autogen.sh only first time and whenever aclocal.m4 or configure.ac were modified
 ```bash
 ```bash
 $ cd open62541
 $ cd open62541

+ 9 - 5
examples/src/opcuaServer.c

@@ -30,8 +30,11 @@ void server_init();
 void server_run();
 void server_run();
 
 
 #endif
 #endif
+
 #define PORT    16664
 #define PORT    16664
-     #define MAXMSG  512
+#define MAXMSG  512
+#define BUFFER_SIZE 8192
+
 int main(void)
 int main(void)
 {
 {
 
 
@@ -54,6 +57,7 @@ void server_init()
 	//call listen
 	//call listen
 
 
 }
 }
+
 void server_run()
 void server_run()
 {
 {
 	UA_connection connection;
 	UA_connection connection;
@@ -61,7 +65,7 @@ void server_run()
 	TL_initConnectionObject(&connection);
 	TL_initConnectionObject(&connection);
 	char optval;
 	char optval;
 	int sockfd, newsockfd, portno, clilen;
 	int sockfd, newsockfd, portno, clilen;
-	char buffer[8192];
+	char buffer[BUFFER_SIZE];
 	struct sockaddr_in serv_addr, cli_addr;
 	struct sockaddr_in serv_addr, cli_addr;
 	int  n;
 	int  n;
 
 
@@ -75,7 +79,7 @@ void server_run()
 
 
 	/* Initialize socket structure */
 	/* Initialize socket structure */
 	bzero((char *) &serv_addr, sizeof(serv_addr));
 	bzero((char *) &serv_addr, sizeof(serv_addr));
-	portno = 16664;
+	portno = PORT;
 	serv_addr.sin_family = AF_INET;
 	serv_addr.sin_family = AF_INET;
 	serv_addr.sin_addr.s_addr = INADDR_ANY;
 	serv_addr.sin_addr.s_addr = INADDR_ANY;
 	serv_addr.sin_port = htons(portno);
 	serv_addr.sin_port = htons(portno);
@@ -111,9 +115,9 @@ void server_run()
 	while(1)
 	while(1)
 	{
 	{
 		/* If connection is established then start communicating */
 		/* If connection is established then start communicating */
-		bzero(buffer,8192);
+		bzero(buffer,BUFFER_SIZE);
 
 
-		n = read( newsockfd,buffer,8192);
+		n = read( newsockfd,buffer,BUFFER_SIZE);
 
 
 		if (n > 0)
 		if (n > 0)
 		{
 		{

+ 10 - 10
src/opcua_binaryEncDec.c

@@ -807,27 +807,27 @@ Int32 UAByteString_calcSize(UA_ByteString *byteString)
 	return UAString_calcSize((UA_String*) byteString);
 	return UAString_calcSize((UA_String*) byteString);
 }
 }
 
 
-/* See 62541-6 §5.2.2.9 */
+/* Serialization of UANodeID is specified in 62541-6, §5.2.2.9 */
 Int32 decodeUANodeId(char const * buf, Int32 *pos, UA_NodeId *dstNodeId)
 Int32 decodeUANodeId(char const * buf, Int32 *pos, UA_NodeId *dstNodeId)
 {
 {
-	// LU: Initialize dstNodeId to gain repeatable results
-	dstNodeId->Namespace = 0;
-	dstNodeId->Identifier.Numeric = 0;
+	// Vars for overcoming decoder_decodeXXX's non-endian-savenes
+	Byte dstByte;
+	UInt16 dstUInt16;
 
 
 	decoder_decodeBuiltInDatatype(buf, BYTE, pos, &(dstNodeId->EncodingByte));
 	decoder_decodeBuiltInDatatype(buf, BYTE, pos, &(dstNodeId->EncodingByte));
 
 
 	switch (dstNodeId->EncodingByte)
 	switch (dstNodeId->EncodingByte)
 	{
 	{
 	case NIEVT_TWO_BYTE: // Table 7
 	case NIEVT_TWO_BYTE: // Table 7
-		decoder_decodeBuiltInDatatype(buf, BYTE, pos,
-				&(dstNodeId->Identifier.Numeric));
+		decoder_decodeBuiltInDatatype(buf, BYTE, pos, &dstByte);
+		dstNodeId->Identifier.Numeric = dstByte;
 		dstNodeId->Namespace = 0; // default OPC UA Namespace
 		dstNodeId->Namespace = 0; // default OPC UA Namespace
 		break;
 		break;
 	case NIEVT_FOUR_BYTE: // Table 8
 	case NIEVT_FOUR_BYTE: // Table 8
-		decoder_decodeBuiltInDatatype(buf, BYTE, pos,
-				&(dstNodeId->Namespace));
-		decoder_decodeBuiltInDatatype(buf, UINT16, pos,
-				&(dstNodeId->Identifier.Numeric));
+		decoder_decodeBuiltInDatatype(buf, BYTE, pos, &dstByte);
+		dstNodeId->Namespace = dstByte;
+		decoder_decodeBuiltInDatatype(buf, UINT16, pos, &dstUInt16);
+		dstNodeId->Identifier.Numeric = dstUInt16;
 		break;
 		break;
 	case NIEVT_NUMERIC: // Table 6, first entry
 	case NIEVT_NUMERIC: // Table 6, first entry
 		decoder_decodeBuiltInDatatype(buf, UINT16, pos,
 		decoder_decodeBuiltInDatatype(buf, UINT16, pos,

+ 9 - 9
src/opcua_secureChannelLayer.c

@@ -119,15 +119,15 @@ Int32 SL_processMessage(UA_connection *connection, UA_ByteString message)
 	Int32 requestedLifetime;
 	Int32 requestedLifetime;
 
 
 	decoder_decodeBuiltInDatatype(message.Data,NODE_ID,&pos,&ServiceRequestType);
 	decoder_decodeBuiltInDatatype(message.Data,NODE_ID,&pos,&ServiceRequestType);
-	UA_NodeId_printf("serviceRequestType=",&ServiceRequestType);
+	UA_NodeId_printf("SL_processMessage - serviceRequestType=",&ServiceRequestType);
 
 
 	if(ServiceRequestType.EncodingByte == NIEVT_FOUR_BYTE)
 	if(ServiceRequestType.EncodingByte == NIEVT_FOUR_BYTE)
 	{
 	{
 		if(ServiceRequestType.Identifier.Numeric == 446) // OpensecureChannelRequest
 		if(ServiceRequestType.Identifier.Numeric == 446) // OpensecureChannelRequest
 		{
 		{
 			decoder_decodeRequestHeader(message.Data, &pos, &requestHeader);
 			decoder_decodeRequestHeader(message.Data, &pos, &requestHeader);
-			UA_String_printf("requestHeader.auditEntryId=",&requestHeader.auditEntryId);
-			UA_NodeId_printf("requestHeader.authenticationToken=", &requestHeader.authenticationToken);
+			UA_String_printf("SL_processMessage - requestHeader.auditEntryId=",&requestHeader.auditEntryId);
+			UA_NodeId_printf("SL_processMessage - requestHeader.authenticationToken=", &requestHeader.authenticationToken);
 
 
 			decoder_decodeBuiltInDatatype(message.Data,UINT32, &pos, &clientProtocolVersion);
 			decoder_decodeBuiltInDatatype(message.Data,UINT32, &pos, &clientProtocolVersion);
 
 
@@ -150,7 +150,7 @@ Int32 SL_processMessage(UA_connection *connection, UA_ByteString message)
 					//TODO return ERROR
 					//TODO return ERROR
 					return UA_ERROR;
 					return UA_ERROR;
 				}
 				}
-				printf("TODO: create new token for a new SecureChannel\n");
+				printf("SL_processMessage - TODO: create new token for a new SecureChannel\n");
 			//	SL_createNewToken(connection);
 			//	SL_createNewToken(connection);
 				break;
 				break;
 			case securityToken_RENEW:
 			case securityToken_RENEW:
@@ -230,9 +230,9 @@ void SL_receive(UA_connection *connection, UA_ByteString *serviceMessage)
 		case packetType_OPN : /* openSecureChannel Message received */
 		case packetType_OPN : /* openSecureChannel Message received */
 
 
 				decodeAASHeader(&secureChannelPacket,&pos,&AAS_Header);
 				decodeAASHeader(&secureChannelPacket,&pos,&AAS_Header);
-				UA_String_printf("AAS_Header.ReceiverThumbprint=", &(AAS_Header.ReceiverThumbprint));
-				UA_String_printf("AAS_Header.SecurityPolicyUri=", &(AAS_Header.SecurityPolicyUri));
-				UA_String_printf("AAS_Header.SenderCertificate=", &(AAS_Header.SenderCertificate));
+				UA_String_printf("SL_receive - AAS_Header.ReceiverThumbprint=", &(AAS_Header.ReceiverThumbprint));
+				UA_String_printf("SL_receive - AAS_Header.SecurityPolicyUri=", &(AAS_Header.SecurityPolicyUri));
+				UA_String_printf("SL_receive - AAS_Header.SenderCertificate=", &(AAS_Header.SenderCertificate));
 				if(SCM_Header.SecureChannelId != 0)
 				if(SCM_Header.SecureChannelId != 0)
 				{
 				{
 
 
@@ -246,8 +246,8 @@ void SL_receive(UA_connection *connection, UA_ByteString *serviceMessage)
 				}
 				}
 
 
 				decodeSequenceHeader(&secureChannelPacket,&pos,&SequenceHeader);
 				decodeSequenceHeader(&secureChannelPacket,&pos,&SequenceHeader);
-				printf("SequenceHeader.RequestId=%d\n",SequenceHeader.RequestId);
-				printf("SequenceHeader.SequenceNr=%d\n",SequenceHeader.SequenceNumber);
+				printf("SL_receive - SequenceHeader.RequestId=%d\n",SequenceHeader.RequestId);
+				printf("SL_receive - SequenceHeader.SequenceNr=%d\n",SequenceHeader.SequenceNumber);
 
 
 				//TODO check that the sequence number is smaller than MaxUInt32 - 1024
 				//TODO check that the sequence number is smaller than MaxUInt32 - 1024
 				connection->secureLayer->sequenceNumber = SequenceHeader.SequenceNumber;
 				connection->secureLayer->sequenceNumber = SequenceHeader.SequenceNumber;