소스 검색

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

Julius Pfrommer 9 년 전
부모
커밋
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;