diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 3006f6bf9..248ff5563 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -480,6 +480,7 @@ HEADERS += turtle/p3turtle.h \ HEADERS += util/folderiterator.h \ util/rsdebug.h \ + util/rskbdinput.h \ util/rsmemory.h \ util/smallobject.h \ util/rsdir.h \ @@ -626,6 +627,7 @@ SOURCES += turtle/p3turtle.cc \ SOURCES += util/folderiterator.cc \ util/rsdebug.cc \ + util/rskbdinput.cc \ util/rsexpr.cc \ util/smallobject.cc \ util/rsdir.cc \ diff --git a/libretroshare/src/util/rskbdinput.cc b/libretroshare/src/util/rskbdinput.cc new file mode 100644 index 000000000..24593b9ee --- /dev/null +++ b/libretroshare/src/util/rskbdinput.cc @@ -0,0 +1,123 @@ +/******************************************************************************* + * libretroshare/src/retroshare/util/rskbdinput.cc * + * * + * Copyright (C) 2019 Cyril Soler * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef __ANDROID__ + +#ifdef WINDOWS_SYS +#include +#include + +#define PASS_MAX 512 + +std::string rs_getpass(const std::string& prompt,bool no_echo) +{ + static char getpassbuf [PASS_MAX + 1]; + size_t i = 0; + int c; + + if (!prompt.empty()) { + std::cerr << prompt ; + std::cerr.flush(); + } + + for (;;) { + c = _getch (); + if (c == '\r') { + getpassbuf [i] = '\0'; + break; + } + else if (i < PASS_MAX) { + getpassbuf[i++] = c; + } + + if (i >= PASS_MAX) { + getpassbuf [i] = '\0'; + break; + } + } + + if (!prompt.empty()) { + std::cerr << "\r\n" ; + std::cerr.flush(); + } + + return std::string(getpassbuf); +} +#else + +#include +#include +#include +#include +#include + +static int getch() +{ + int ch; + struct termios t_old, t_new; + + tcgetattr(STDIN_FILENO, &t_old); + t_new = t_old; + t_new.c_lflag &= ~(ICANON | ECHO); + tcsetattr(STDIN_FILENO, TCSANOW, &t_new); + + ch = getchar(); + + tcsetattr(STDIN_FILENO, TCSANOW, &t_old); + return ch; +} + +std::string rs_getpass(const char *prompt, bool no_echo) +{ + const char BACKSPACE=127; + const char RETURN=10; + + std::string password; + unsigned char ch=0; + + std::cout < * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +namespace RsUtil { + + std::string rs_getpass(const std::string& prompt,bool no_echo=true) ; + +} diff --git a/retroshare-service/src/retroshare-service.cc b/retroshare-service/src/retroshare-service.cc index 6b6d8aac0..9f91c78c7 100644 --- a/retroshare-service/src/retroshare-service.cc +++ b/retroshare-service/src/retroshare-service.cc @@ -18,6 +18,7 @@ #include "util/stacktrace.h" #include "util/argstream.h" +#include "util/rskbdinput.h" #include "retroshare/rsinit.h" #include "jsonapi/jsonapi.h" @@ -26,10 +27,6 @@ CrashStackTrace gCrashStackTrace; #include #include -#ifndef __ANDROID__ -#include -#endif - #ifdef __ANDROID__ # include # include @@ -42,59 +39,6 @@ CrashStackTrace gCrashStackTrace; #include "retroshare/rsinit.h" #include "retroshare/rsiface.h" -#ifndef RS_JSONAPI -# error Inconsistent build configuration retroshare_service needs rs_jsonapi -#endif - -int getch() { - int ch; - struct termios t_old, t_new; - - tcgetattr(STDIN_FILENO, &t_old); - t_new = t_old; - t_new.c_lflag &= ~(ICANON | ECHO); - tcsetattr(STDIN_FILENO, TCSANOW, &t_new); - - ch = getchar(); - - tcsetattr(STDIN_FILENO, TCSANOW, &t_old); - return ch; -} - -std::string readStringFromKeyboard(const char *prompt, bool show_asterisk=true) -{ - const char BACKSPACE=127; - const char RETURN=10; - - std::string password; - unsigned char ch=0; - - std::cout <