浏览代码

Return an error when receiving a publish on sessions with no subscription

Julius Pfrommer 8 年之前
父节点
当前提交
dac2957d40
共有 1 个文件被更改,包括 11 次插入0 次删除
  1. 11 0
      src/server/ua_services_subscription.c

+ 11 - 0
src/server/ua_services_subscription.c

@@ -225,6 +225,17 @@ void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session,
 void
 Service_Publish(UA_Server *server, UA_Session *session, const UA_PublishRequest *request,
                 UA_UInt32 requestId) {
+	/* Return an error if the session has no subscription */
+	if(LIST_EMPTY(&session->serverSubscriptions)) {
+		UA_PublishResponse response;
+		UA_PublishResponse_init(&response);
+		response.responseHeader.requestHandle = request->requestHeader.requestHandle;
+		response.responseHeader.serviceResult = UA_STATUSCODE_BADNOSUBSCRIPTION;
+		UA_SecureChannel_sendBinaryMessage(session->channel, requestId, &response,
+			                               &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
+		return;
+	}
+
     // todo error handling for malloc
     UA_PublishResponseEntry *entry = UA_malloc(sizeof(UA_PublishResponseEntry));
     entry->requestId = requestId;