From bc33026b2c81221270d0c8dec128d788568ffe9b Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Tue, 10 Jun 2025 16:39:49 +0200 Subject: [PATCH] start sea server even remotely over ssh this works on neutron instruments (account equal host) and on linse-c --- main.cpp | 12 +----------- seaset.cpp | 29 +++++++++++++++++++++-------- sicsconn.cpp | 13 +++++++++---- sicsconn.h | 5 +++-- utils.cpp | 11 +++++++++++ utils.h | 2 ++ 6 files changed, 47 insertions(+), 25 deletions(-) diff --git a/main.cpp b/main.cpp index 8a52b6d..75e6ac8 100644 --- a/main.cpp +++ b/main.cpp @@ -15,6 +15,7 @@ #include #include "instr_hosts.h" +#include "utils.h" QPoint firstPos; @@ -27,17 +28,6 @@ const char *instr; //char prefinstr[64]=""; char frominstr[128]; -char *strtoupper(const char *str) { - static char buf[128]; - int i; - for (i = 0; i < 127; i++) { - if (str[i] == 0) break; - buf[i] = toupper(str[i]); - } - buf[i] = 0; - return buf; -} - const char *fullinstr(const char *host, const char *instr) { static char buf[128]; if (strncasecmp(host, instr, strlen(instr)) == 0) { diff --git a/seaset.cpp b/seaset.cpp index e1c6231..3c36b41 100644 --- a/seaset.cpp +++ b/seaset.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "instr_hosts.h" #include "utils.h" @@ -646,13 +647,13 @@ SeaSet::SeaSet(QSplitter *parent, long range, const char *name) } void SeaSet::setHost(const QString &hostport) { - /* - static char seaStart[64]; + static char cmd[128], psw[32]; + static char *user; char host[128], instr[32]; char *hp = (char *)hostport.latin1(); char *p; int port; - */ + this->hostport = hostport; sc->setHost(hostport.latin1(), "sea"); @@ -660,18 +661,30 @@ void SeaSet::setHost(const QString &hostport) { gc->setHost(hostport.latin1(), "graph"); ec->setHost(hostport.latin1(), "graph"); - /* p = strchr(hp, ':'); if (p == NULL) { InstrHost("sea", hp, instr, sizeof instr, host, sizeof host, &port); if (strcmp(host, instr) == 0) { - snprintf(seaStart, sizeof seaStart, "ssh %s@%s sea start", instr, host); + snprintf(psw, sizeof psw, "SSHPASS=%sLNS", strtoupper(instr)); + user = instr; + } else if (strcmp(host, "linse-c") == 0) { + snprintf(psw, sizeof psw, "SSHPASS=1%dlns1", 7); + user = "l_samenv"; } else { - snprintf(seaStart, sizeof seaStart, "ssh l_samenv@%s sea start %s", host, instr); + return; + } + putenv(psw); + snprintf(cmd, sizeof cmd, "sshpass -e ssh -Y %s@%s sea start %s", + user, host, instr); + sc->startServer = cmd; + for (int i=0; i<30; i++) { + sc->handleBuffer(1); + if (sc->connect_state == SicsConnection::connect_waitlogin) { + break; + } + usleep(250000); } - sc->startServer = seaStart; } - */ } void SeaSet::setLive(bool on) { diff --git a/sicsconn.cpp b/sicsconn.cpp index 43b5f0c..6f73b74 100644 --- a/sicsconn.cpp +++ b/sicsconn.cpp @@ -173,6 +173,7 @@ SicsConnection::SicsConnection(QObject *parent) : QObject(parent) { bufline = ""; bufstate = buf_got_line; connect_state = connect_start; + tries_wait_start = 0; command2send = ""; tmo = 0; if (!sigpipe_ignored) { @@ -246,8 +247,9 @@ int SicsConnection::handleBuffer(int tmo) { iret = SicsConnectSuccess(fd); if (iret <= 0) { if (startServer) { - iret = system(startServer); - if (iret) { + int isys = system(startServer); + tries_wait_start = 3; + if (isys) { printf("can not connect to sea and failed to start the sea server\n"); printf("\n"); pos = strcspn(hostport, ":"); @@ -255,10 +257,13 @@ int SicsConnection::handleBuffer(int tmo) { printf("\n"); exit(1); } - } else { - iret = 1; } startServer = NULL; + if (iret == 0) return iret; /* connection pending */ + if (tries_wait_start > 0) { + tries_wait_start--; + connect_state = connect_start; + } return iret; } connect_state = connect_login; diff --git a/sicsconn.h b/sicsconn.h index e7fca9d..5f3af00 100644 --- a/sicsconn.h +++ b/sicsconn.h @@ -41,7 +41,8 @@ public: char *debug; ConnState state; char *startServer = NULL; - + enum {connect_done, connect_start, connect_wait, connect_login, connect_waitlogin, connect_error} connect_state; + signals: void handle(const char *line, bool *done = NULL); void reconnected(void); @@ -60,7 +61,7 @@ private: char *server; int tmo; enum {buf_got_line, buf_got_finished, buf_sent_line, buf_got_start, buf_sent_transact} bufstate; - enum {connect_done, connect_start, connect_wait, connect_login, connect_waitlogin, connect_error} connect_state; + int tries_wait_start; QString command2send; QString bufline; QString rdbuffer; diff --git a/utils.cpp b/utils.cpp index a329255..206dd88 100644 --- a/utils.cpp +++ b/utils.cpp @@ -460,3 +460,14 @@ void MyTextEdit::appendText(QString text) { } } } + +char *strtoupper(const char *str) { + static char buf[128]; + int i; + for (i = 0; i < 127; i++) { + if (str[i] == 0) break; + buf[i] = toupper(str[i]); + } + buf[i] = 0; + return buf; +} diff --git a/utils.h b/utils.h index c6444db..ca325ca 100644 --- a/utils.h +++ b/utils.h @@ -56,4 +56,6 @@ private: }; +char *strtoupper(const char *str); + #endif