|
@@ -28,11 +28,11 @@ setApplicationDescriptionFromRegisteredServer(const UA_FindServersRequest *reque
|
|
retval |= UA_String_copy(®isteredServer->productUri, &target->productUri);
|
|
retval |= UA_String_copy(®isteredServer->productUri, &target->productUri);
|
|
|
|
|
|
// if the client requests a specific locale, select the corresponding server name
|
|
// if the client requests a specific locale, select the corresponding server name
|
|
- if (request->localeIdsSize) {
|
|
|
|
|
|
+ if(request->localeIdsSize) {
|
|
UA_Boolean appNameFound = UA_FALSE;
|
|
UA_Boolean appNameFound = UA_FALSE;
|
|
- for (size_t i =0; i<request->localeIdsSize && !appNameFound; i++) {
|
|
|
|
- for (size_t j =0; j<registeredServer->serverNamesSize; j++) {
|
|
|
|
- if (UA_String_equal(&request->localeIds[i], ®isteredServer->serverNames[j].locale)) {
|
|
|
|
|
|
+ for(size_t i =0; i<request->localeIdsSize && !appNameFound; i++) {
|
|
|
|
+ for(size_t j =0; j<registeredServer->serverNamesSize; j++) {
|
|
|
|
+ if(UA_String_equal(&request->localeIds[i], ®isteredServer->serverNames[j].locale)) {
|
|
retval |= UA_LocalizedText_copy(®isteredServer->serverNames[j],
|
|
retval |= UA_LocalizedText_copy(®isteredServer->serverNames[j],
|
|
&target->applicationName);
|
|
&target->applicationName);
|
|
appNameFound = UA_TRUE;
|
|
appNameFound = UA_TRUE;
|
|
@@ -46,7 +46,7 @@ setApplicationDescriptionFromRegisteredServer(const UA_FindServersRequest *reque
|
|
if(!appNameFound && registeredServer->serverNamesSize)
|
|
if(!appNameFound && registeredServer->serverNamesSize)
|
|
retval |= UA_LocalizedText_copy(®isteredServer->serverNames[0],
|
|
retval |= UA_LocalizedText_copy(®isteredServer->serverNames[0],
|
|
&target->applicationName);
|
|
&target->applicationName);
|
|
- } else if (registeredServer->serverNamesSize) {
|
|
|
|
|
|
+ } else if(registeredServer->serverNamesSize) {
|
|
// just take the first name
|
|
// just take the first name
|
|
retval |= UA_LocalizedText_copy(®isteredServer->serverNames[0], &target->applicationName);
|
|
retval |= UA_LocalizedText_copy(®isteredServer->serverNames[0], &target->applicationName);
|
|
}
|
|
}
|
|
@@ -80,7 +80,7 @@ setApplicationDescriptionFromServer(UA_ApplicationDescription *target, const UA_
|
|
}
|
|
}
|
|
// UaExpert does not list DiscoveryServer, thus set it to Server
|
|
// UaExpert does not list DiscoveryServer, thus set it to Server
|
|
// See http://forum.unified-automation.com/topic1987.html
|
|
// See http://forum.unified-automation.com/topic1987.html
|
|
- if (target->applicationType == UA_APPLICATIONTYPE_DISCOVERYSERVER)
|
|
|
|
|
|
+ if(target->applicationType == UA_APPLICATIONTYPE_DISCOVERYSERVER)
|
|
target->applicationType = UA_APPLICATIONTYPE_SERVER;
|
|
target->applicationType = UA_APPLICATIONTYPE_SERVER;
|
|
|
|
|
|
/* add the discoveryUrls from the networklayers */
|
|
/* add the discoveryUrls from the networklayers */
|
|
@@ -94,7 +94,7 @@ setApplicationDescriptionFromServer(UA_ApplicationDescription *target, const UA_
|
|
target->discoveryUrlsSize += server->config.networkLayersSize;
|
|
target->discoveryUrlsSize += server->config.networkLayersSize;
|
|
|
|
|
|
// TODO: Add nl only if discoveryUrl not already present
|
|
// TODO: Add nl only if discoveryUrl not already present
|
|
- for (size_t i = 0; i < server->config.networkLayersSize; i++) {
|
|
|
|
|
|
+ for(size_t i = 0; i < server->config.networkLayersSize; i++) {
|
|
UA_ServerNetworkLayer* nl = &server->config.networkLayers[i];
|
|
UA_ServerNetworkLayer* nl = &server->config.networkLayers[i];
|
|
UA_String_copy(&nl->discoveryUrl, &target->discoveryUrls[existing + i]);
|
|
UA_String_copy(&nl->discoveryUrl, &target->discoveryUrls[existing + i]);
|
|
}
|
|
}
|
|
@@ -117,7 +117,7 @@ void Service_FindServers(UA_Server *server, UA_Session *session,
|
|
|
|
|
|
#ifdef UA_ENABLE_DISCOVERY
|
|
#ifdef UA_ENABLE_DISCOVERY
|
|
// check if client only requested a specific set of servers
|
|
// check if client only requested a specific set of servers
|
|
- if (request->serverUrisSize) {
|
|
|
|
|
|
+ if(request->serverUrisSize) {
|
|
size_t fsfpSize = sizeof(UA_RegisteredServer*) * server->registeredServersSize;
|
|
size_t fsfpSize = sizeof(UA_RegisteredServer*) * server->registeredServersSize;
|
|
foundServerFilteredPointer = (UA_RegisteredServer **)UA_malloc(fsfpSize);
|
|
foundServerFilteredPointer = (UA_RegisteredServer **)UA_malloc(fsfpSize);
|
|
if(!foundServerFilteredPointer) {
|
|
if(!foundServerFilteredPointer) {
|
|
@@ -135,13 +135,13 @@ void Service_FindServers(UA_Server *server, UA_Session *session,
|
|
if(UA_String_equal(¤t->registeredServer.serverUri, &request->serverUris[i])) {
|
|
if(UA_String_equal(¤t->registeredServer.serverUri, &request->serverUris[i])) {
|
|
// check if entry already in list:
|
|
// check if entry already in list:
|
|
UA_Boolean existing = false;
|
|
UA_Boolean existing = false;
|
|
- for (size_t j=0; j<foundServersSize; j++) {
|
|
|
|
- if (UA_String_equal(&foundServerFilteredPointer[j]->serverUri, &request->serverUris[i])) {
|
|
|
|
|
|
+ for(size_t j=0; j<foundServersSize; j++) {
|
|
|
|
+ if(UA_String_equal(&foundServerFilteredPointer[j]->serverUri, &request->serverUris[i])) {
|
|
existing = true;
|
|
existing = true;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if (!existing)
|
|
|
|
|
|
+ if(!existing)
|
|
foundServerFilteredPointer[foundServersSize++] = ¤t->registeredServer;
|
|
foundServerFilteredPointer[foundServersSize++] = ¤t->registeredServer;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -188,7 +188,7 @@ void Service_FindServers(UA_Server *server, UA_Session *session,
|
|
setApplicationDescriptionFromServer(&foundServers[0], server);
|
|
setApplicationDescriptionFromServer(&foundServers[0], server);
|
|
if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
|
|
if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
|
|
UA_free(foundServers);
|
|
UA_free(foundServers);
|
|
- if (foundServerFilteredPointer)
|
|
|
|
|
|
+ if(foundServerFilteredPointer)
|
|
UA_free(foundServerFilteredPointer);
|
|
UA_free(foundServerFilteredPointer);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -196,20 +196,20 @@ void Service_FindServers(UA_Server *server, UA_Session *session,
|
|
|
|
|
|
#ifdef UA_ENABLE_DISCOVERY
|
|
#ifdef UA_ENABLE_DISCOVERY
|
|
size_t currentIndex = 0;
|
|
size_t currentIndex = 0;
|
|
- if (addSelf)
|
|
|
|
|
|
+ if(addSelf)
|
|
currentIndex++;
|
|
currentIndex++;
|
|
|
|
|
|
// add all the registered servers to the list
|
|
// add all the registered servers to the list
|
|
|
|
|
|
- if (foundServerFilteredPointer) {
|
|
|
|
|
|
+ if(foundServerFilteredPointer) {
|
|
// use filtered list because client only requested specific uris
|
|
// use filtered list because client only requested specific uris
|
|
// -1 because foundServersSize also includes this self server
|
|
// -1 because foundServersSize also includes this self server
|
|
size_t iterCount = addSelf ? foundServersSize - 1 : foundServersSize;
|
|
size_t iterCount = addSelf ? foundServersSize - 1 : foundServersSize;
|
|
- for (size_t i = 0; i < iterCount; i++) {
|
|
|
|
|
|
+ for(size_t i = 0; i < iterCount; i++) {
|
|
response->responseHeader.serviceResult =
|
|
response->responseHeader.serviceResult =
|
|
setApplicationDescriptionFromRegisteredServer(request, &foundServers[currentIndex++],
|
|
setApplicationDescriptionFromRegisteredServer(request, &foundServers[currentIndex++],
|
|
foundServerFilteredPointer[i]);
|
|
foundServerFilteredPointer[i]);
|
|
- if (response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
|
|
|
|
|
|
+ if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
|
|
UA_free(foundServers);
|
|
UA_free(foundServers);
|
|
UA_free(foundServerFilteredPointer);
|
|
UA_free(foundServerFilteredPointer);
|
|
return;
|
|
return;
|
|
@@ -223,7 +223,7 @@ void Service_FindServers(UA_Server *server, UA_Session *session,
|
|
response->responseHeader.serviceResult =
|
|
response->responseHeader.serviceResult =
|
|
setApplicationDescriptionFromRegisteredServer(request, &foundServers[currentIndex++],
|
|
setApplicationDescriptionFromRegisteredServer(request, &foundServers[currentIndex++],
|
|
¤t->registeredServer);
|
|
¤t->registeredServer);
|
|
- if (response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
|
|
|
|
|
|
+ if(response->responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
|
|
UA_free(foundServers);
|
|
UA_free(foundServers);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -232,7 +232,7 @@ void Service_FindServers(UA_Server *server, UA_Session *session,
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
- if (foundServerFilteredPointer)
|
|
|
|
|
|
+ if(foundServerFilteredPointer)
|
|
UA_free(foundServerFilteredPointer);
|
|
UA_free(foundServerFilteredPointer);
|
|
|
|
|
|
response->servers = foundServers;
|
|
response->servers = foundServers;
|
|
@@ -347,7 +347,7 @@ process_RegisterServer(UA_Server *server, UA_Session *session,
|
|
registeredServer_list_entry* current;
|
|
registeredServer_list_entry* current;
|
|
registeredServer_list_entry *registeredServer_entry = NULL;
|
|
registeredServer_list_entry *registeredServer_entry = NULL;
|
|
LIST_FOREACH(current, &server->registeredServers, pointers) {
|
|
LIST_FOREACH(current, &server->registeredServers, pointers) {
|
|
- if (UA_String_equal(¤t->registeredServer.serverUri, &requestServer->serverUri)) {
|
|
|
|
|
|
+ if(UA_String_equal(¤t->registeredServer.serverUri, &requestServer->serverUri)) {
|
|
registeredServer_entry = current;
|
|
registeredServer_entry = current;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -397,7 +397,7 @@ process_RegisterServer(UA_Server *server, UA_Session *session,
|
|
#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
|
|
#ifdef UA_ENABLE_DISCOVERY_SEMAPHORE
|
|
char* filePath = (char*)
|
|
char* filePath = (char*)
|
|
UA_malloc(sizeof(char)*requestServer->semaphoreFilePath.length+1);
|
|
UA_malloc(sizeof(char)*requestServer->semaphoreFilePath.length+1);
|
|
- if (!filePath) {
|
|
|
|
|
|
+ if(!filePath) {
|
|
UA_LOG_ERROR_SESSION(server->config.logger, session,
|
|
UA_LOG_ERROR_SESSION(server->config.logger, session,
|
|
"Cannot allocate memory for semaphore path. Out of memory.");
|
|
"Cannot allocate memory for semaphore path. Out of memory.");
|
|
responseHeader->serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
|
|
responseHeader->serviceResult = UA_STATUSCODE_BADOUTOFMEMORY;
|
|
@@ -460,7 +460,7 @@ process_RegisterServer(UA_Server *server, UA_Session *session,
|
|
}
|
|
}
|
|
|
|
|
|
UA_StatusCode retval = UA_STATUSCODE_GOOD;
|
|
UA_StatusCode retval = UA_STATUSCODE_GOOD;
|
|
- if (!registeredServer_entry) {
|
|
|
|
|
|
+ if(!registeredServer_entry) {
|
|
// server not yet registered, register it by adding it to the list
|
|
// server not yet registered, register it by adding it to the list
|
|
UA_LOG_DEBUG_SESSION(server->config.logger, session, "Registering new server: %.*s",
|
|
UA_LOG_DEBUG_SESSION(server->config.logger, session, "Registering new server: %.*s",
|
|
(int)requestServer->serverUri.length, requestServer->serverUri.data);
|
|
(int)requestServer->serverUri.length, requestServer->serverUri.data);
|
|
@@ -532,7 +532,7 @@ void UA_Discovery_cleanupTimedOut(UA_Server *server, UA_DateTime nowMonotonic) {
|
|
size_t fpSize = sizeof(char)*current->registeredServer.semaphoreFilePath.length+1;
|
|
size_t fpSize = sizeof(char)*current->registeredServer.semaphoreFilePath.length+1;
|
|
// todo: malloc may fail: return a statuscode
|
|
// todo: malloc may fail: return a statuscode
|
|
char* filePath = (char *)UA_malloc(fpSize);
|
|
char* filePath = (char *)UA_malloc(fpSize);
|
|
- if (filePath) {
|
|
|
|
|
|
+ if(filePath) {
|
|
memcpy(filePath, current->registeredServer.semaphoreFilePath.data,
|
|
memcpy(filePath, current->registeredServer.semaphoreFilePath.data,
|
|
current->registeredServer.semaphoreFilePath.length );
|
|
current->registeredServer.semaphoreFilePath.length );
|
|
filePath[current->registeredServer.semaphoreFilePath.length] = '\0';
|
|
filePath[current->registeredServer.semaphoreFilePath.length] = '\0';
|
|
@@ -676,7 +676,7 @@ UA_Server_addPeriodicServerRegisterCallback(UA_Server *server,
|
|
{
|
|
{
|
|
periodicServerRegisterCallback_entry *rs, *rs_tmp;
|
|
periodicServerRegisterCallback_entry *rs, *rs_tmp;
|
|
LIST_FOREACH_SAFE(rs, &server->periodicServerRegisterCallbacks, pointers, rs_tmp) {
|
|
LIST_FOREACH_SAFE(rs, &server->periodicServerRegisterCallbacks, pointers, rs_tmp) {
|
|
- if (strcmp(rs->callback->discovery_server_url, discoveryServerUrl) == 0) {
|
|
|
|
|
|
+ if(strcmp(rs->callback->discovery_server_url, discoveryServerUrl) == 0) {
|
|
UA_LOG_INFO(server->config.logger, UA_LOGCATEGORY_SERVER,
|
|
UA_LOG_INFO(server->config.logger, UA_LOGCATEGORY_SERVER,
|
|
"There is already a register callback for '%s' in place. Removing the older one.", discoveryServerUrl);
|
|
"There is already a register callback for '%s' in place. Removing the older one.", discoveryServerUrl);
|
|
UA_Server_removeRepeatedCallback(server, rs->callback->id);
|
|
UA_Server_removeRepeatedCallback(server, rs->callback->id);
|