diff --git a/slsDetectorServers/slsDetectorServer/include/common.h b/slsDetectorServers/slsDetectorServer/include/common.h index 4b86f6dc9..aa53ba390 100644 --- a/slsDetectorServers/slsDetectorServer/include/common.h +++ b/slsDetectorServers/slsDetectorServer/include/common.h @@ -66,3 +66,5 @@ int moveBinaryFile(char *mess, char *dest, char *src, char *errorPrefix); int createEmptyFile(char *mess, char *fname, char *errorPrefix); int deleteFile(char *mess, char *fname, char *errorPrefix); + +int deleteOldServers(char *mess, char *newServerName, char *errorPrefix); diff --git a/slsDetectorServers/slsDetectorServer/src/common.c b/slsDetectorServers/slsDetectorServer/src/common.c index df090953a..e60734cb7 100644 --- a/slsDetectorServers/slsDetectorServer/src/common.c +++ b/slsDetectorServers/slsDetectorServer/src/common.c @@ -670,3 +670,15 @@ int deleteFile(char *mess, char *fname, char *errorPrefix) { } return OK; } + +int deleteOldServers(char *mess, char *newServerName, char *errorPrefix) { + LOG(logINFOBLUE, ("newserver name:%s\n", newServerName)); + + // if it exists + if (access(newServerName, F_OK) == 0) { + LOG(logINFO, + ("\tOld server does exist: %s (%s)\n", newServerName, errorPrefix)); + } + exit(-1); + return OK; +} \ No newline at end of file diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index fc32272ea..18caccbec 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -4201,7 +4201,12 @@ int copy_detector_server(int file_des) { int reboot_controller(int file_des) { ret = OK; memset(mess, 0, sizeof(mess)); -#if defined(MYTHEN3D) || defined(GOTTHARD2D) + +#ifdef EIGERD + functionNotImplemented(); +#elif VIRTUAL + ret = GOODBYE; +#elif defined(MYTHEN3D) || defined(GOTTHARD2D) if (getHardwareVersionNumber() == 0) { ret = FAIL; strcpy(mess, "Old board version, reboot by yourself please!\n"); @@ -4209,20 +4214,11 @@ int reboot_controller(int file_des) { Server_SendResult(file_des, INT32, NULL, 0); return GOODBYE; } -#ifdef VIRTUAL - ret = GOODBYE; + ret = REBOOT; #else ret = REBOOT; #endif -#elif EIGERD - functionNotImplemented(); -#else -#ifdef VIRTUAL - ret = GOODBYE; -#else - ret = REBOOT; -#endif -#endif + Server_SendResult(file_des, INT32, NULL, 0); return ret; } @@ -9449,10 +9445,18 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) { if (receiveData(file_des, &forceDeleteNormalFile, sizeof(forceDeleteNormalFile), INT32) < 0) return printSocketReadError(); - LOG(logINFO, - ("\tForce Delete Normal File flag? %s\n", (forceDeleteNormalFile ? "Y" : "N"))); + LOG(logINFO, ("\tForce Delete Normal File flag? %s\n", + (forceDeleteNormalFile ? "Y" : "N"))); #endif + // ensure the name is not the same as the linked name + if (!strcmp(serverName, LINKED_SERVER_NAME)) { + ret = FAIL; + strcpy(mess, "Server name is the same as the symbolic link. Please " + "use a different server name\n"); + LOG(logERROR, (mess)); + } + // in same folder as current process (will also work for virtual then // with write permissions) { @@ -9477,7 +9481,8 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) { checksum, serverName); #else receive_program_via_blackfin(file_des, index, functionType, - filesize, checksum, serverName, forceDeleteNormalFile); + filesize, checksum, serverName, + forceDeleteNormalFile); #endif } @@ -9493,7 +9498,8 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) { void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index, char *functionType, uint64_t filesize, - char *checksum, char *serverName, int forceDeleteNormalFile) { + char *checksum, char *serverName, + int forceDeleteNormalFile) { #if !defined(JUNGFRAUD) && !defined(CHIPTESTBOARDD) && !defined(MOENCHD) && \ !defined(GOTTHARDD) @@ -9595,8 +9601,11 @@ void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index, totalsize, forceDeleteNormalFile); break; case PROGRAM_SERVER: - ret = moveBinaryFile(mess, serverName, TEMP_PROG_FILE_NAME, - "update detector server"); + ret = deleteOldServers(mess, serverName, "update detector server"); + if (ret == OK) { + ret = moveBinaryFile(mess, serverName, TEMP_PROG_FILE_NAME, + "update detector server"); + } if (ret == OK) { ret = setupDetectorServer(mess, serverName); }