Browse Source

fixes #354, the server is still , unfortunately, not reacting properly

Stasik0 8 years ago
parent
commit
e8bab926bd
3 changed files with 19 additions and 9 deletions
  1. 12 4
      examples/client_stateless.c
  2. 6 2
      src/server/ua_server_binary.c
  3. 1 3
      src/server/ua_services_attribute.c

+ 12 - 4
examples/client_stateless.c

@@ -19,7 +19,7 @@ int main(int argc , char *argv[])
 	UA_ByteString message;
 	message.data = (UA_Byte*)malloc(1000*sizeof(UA_Byte));
 	message.length = 1000;
-	UA_UInt32 messageEncodedLength = 0;
+	//UA_UInt32 messageEncodedLength = 0;
 	UA_Byte server_reply[2000];
 	unsigned int messagepos = 0;
 
@@ -82,16 +82,15 @@ int main(int argc , char *argv[])
 	UA_QualifiedName_init(&(req.nodesToRead[0].dataEncoding));
 
 
-	messageEncodedLength = UA_TcpMessageHeader_calcSizeBinary(&reqTcpHeader) +
+	/**messageEncodedLength = UA_TcpMessageHeader_calcSizeBinary(&reqTcpHeader) +
 			UA_UInt32_calcSizeBinary(&reqSecureChannelId)+
 			UA_UInt32_calcSizeBinary(&reqTokenId)+
 			UA_SequenceHeader_calcSizeBinary(&reqSequenceHeader)+
 			UA_NodeId_calcSizeBinary(&reqRequestType) +
-			UA_ReadRequest_calcSizeBinary(&req);
+			UA_ReadRequest_calcSizeBinary(&req);**/
 
 	UA_TcpMessageHeader_init(&reqTcpHeader);
 	reqTcpHeader.messageTypeAndFinal = UA_MESSAGETYPEANDFINAL_MSGF;
-	reqTcpHeader.messageSize = messageEncodedLength;
 
 	UA_TcpMessageHeader_encodeBinary(&reqTcpHeader, &message, &messagepos);
 	UA_UInt32_encodeBinary(&reqSecureChannelId, &message, &messagepos);
@@ -99,6 +98,15 @@ int main(int argc , char *argv[])
 	UA_SequenceHeader_encodeBinary(&reqSequenceHeader, &message, &messagepos);
 	UA_NodeId_encodeBinary(&reqRequestType, &message, &messagepos);
 	UA_ReadRequest_encodeBinary(&req, &message, &messagepos);
+    reqTcpHeader.messageSize = messagepos;
+    messagepos=0;
+
+    UA_TcpMessageHeader_encodeBinary(&reqTcpHeader, &message, &messagepos);
+    UA_UInt32_encodeBinary(&reqSecureChannelId, &message, &messagepos);
+    UA_UInt32_encodeBinary(&reqTokenId, &message, &messagepos);
+    UA_SequenceHeader_encodeBinary(&reqSequenceHeader, &message, &messagepos);
+    UA_NodeId_encodeBinary(&reqRequestType, &message, &messagepos);
+    UA_ReadRequest_encodeBinary(&req, &message, &messagepos);
 
 
 	//Send some data

+ 6 - 2
src/server/ua_server_binary.c

@@ -203,7 +203,7 @@ static void processMSG(UA_Connection *connection, UA_Server *server, const UA_By
         anonymousChannel.connection = connection;
         clientChannel = &anonymousChannel;
 #ifdef EXTENSION_STATELESS
-        anonymousChannel.session = &anonymousSession;
+        UA_SecureChannel_attachSession(&anonymousChannel, &anonymousSession);
 #endif
     }
 
@@ -212,7 +212,11 @@ static void processMSG(UA_Connection *connection, UA_Server *server, const UA_By
     UA_SequenceHeader sequenceHeader;
     retval = UA_UInt32_decodeBinary(msg, pos, &tokenId);
     retval |= UA_SequenceHeader_decodeBinary(msg, pos, &sequenceHeader);
+#ifndef EXTENSION_STATELESS
     if(retval != UA_STATUSCODE_GOOD || tokenId==0) //0 is invalid
+#else
+    if(retval != UA_STATUSCODE_GOOD)
+#endif
         return;
 
     if(clientChannel != &anonymousChannel){
@@ -372,7 +376,7 @@ static void processMSG(UA_Connection *connection, UA_Server *server, const UA_By
         r.responseHeader.serviceResult = UA_STATUSCODE_BADSERVICEUNSUPPORTED;
 #ifdef EXTENSION_STATELESS
         if(retval != UA_STATUSCODE_GOOD)
-            r.serviceResult = retval;
+            r.responseHeader.serviceResult = retval;
 #endif
         UA_SecureChannel_sendBinaryMessage(clientChannel, sequenceHeader.requestId, &r,
                                            &UA_TYPES[UA_TYPES_SERVICEFAULT]);

+ 1 - 3
src/server/ua_services_attribute.c

@@ -411,9 +411,7 @@ void Service_Read(UA_Server *server, UA_Session *session, const UA_ReadRequest *
 		size_t offset = 0;
         UA_Connection *c = UA_NULL;
         UA_SecureChannel *sc = session->channel;
-        if(sc)
-            c = session->sc;
-        if(!c) {
+        if(!sc) {
             response->responseHeader.serviceResult = UA_STATUSCODE_BADINTERNALERROR;
             return;
         }