Set Operating Mode in RsInit::InitRetroShare so noGUI could use it.

This commit is contained in:
Phenom 2016-08-13 14:34:31 +02:00
parent 8563957591
commit f888913800
7 changed files with 85 additions and 27 deletions

View file

@ -289,6 +289,7 @@ public:
/* Operating Mode */ /* Operating Mode */
virtual uint32_t getOperatingMode() = 0; virtual uint32_t getOperatingMode() = 0;
virtual bool setOperatingMode(uint32_t opMode) = 0; virtual bool setOperatingMode(uint32_t opMode) = 0;
virtual bool setOperatingMode(const std::string &opModeStr) = 0;
/* Data Rate Control - to be moved here */ /* Data Rate Control - to be moved here */
virtual int SetMaxDataRates( int downKb, int upKb ) = 0; virtual int SetMaxDataRates( int downKb, int upKb ) = 0;

View file

@ -380,7 +380,7 @@ uint32_t p3ServerConfig::getOperatingMode()
{ {
mode = RS_OPMODE_GAMING; mode = RS_OPMODE_GAMING;
} }
else if (modestr == "MINIMAL_TRANSFER") else if (modestr == "MINIMAL")
{ {
mode = RS_OPMODE_MINIMAL; mode = RS_OPMODE_MINIMAL;
} }
@ -410,7 +410,7 @@ bool p3ServerConfig::setOperatingMode(uint32_t opMode)
break; break;
case RS_OPMODE_MINIMAL: case RS_OPMODE_MINIMAL:
modestr = "MINIMAL_TRANSFER"; modestr = "MINIMAL";
break; break;
} }
mGeneralConfig->setSetting(RS_CONFIG_OPERATING_STRING, modestr); mGeneralConfig->setSetting(RS_CONFIG_OPERATING_STRING, modestr);
@ -423,6 +423,31 @@ bool p3ServerConfig::setOperatingMode(uint32_t opMode)
return switchToOperatingMode(opMode); return switchToOperatingMode(opMode);
} }
bool p3ServerConfig::setOperatingMode(const std::string &opModeStr)
{
uint32_t opMode = RS_OPMODE_FULL;
std::string upper;
stringToUpperCase(opModeStr, upper);
if (upper == "NOTURTLE")
{
opMode = RS_OPMODE_NOTURTLE;
}
else if (upper == "GAMING")
{
opMode = RS_OPMODE_GAMING;
}
else if (upper == "MINIMAL")
{
opMode = RS_OPMODE_MINIMAL;
}
else // "FULL" by default
{
opMode = RS_OPMODE_FULL;
}
return setOperatingMode(opMode);
}
bool p3ServerConfig::switchToOperatingMode(uint32_t opMode) bool p3ServerConfig::switchToOperatingMode(uint32_t opMode)
{ {

View file

@ -91,6 +91,7 @@ virtual bool setConfigurationOption(uint32_t key, const std::string &opt);
/* Operating Mode */ /* Operating Mode */
virtual uint32_t getOperatingMode(); virtual uint32_t getOperatingMode();
virtual bool setOperatingMode(uint32_t opMode); virtual bool setOperatingMode(uint32_t opMode);
virtual bool setOperatingMode(const std::string &opModeStr);
virtual int SetMaxDataRates( int downKb, int upKb ); virtual int SetMaxDataRates( int downKb, int upKb );
virtual int GetMaxDataRates( int &downKb, int &upKb ); virtual int GetMaxDataRates( int &downKb, int &upKb );

View file

@ -138,6 +138,7 @@ class RsInitConfig
std::string load_trustedpeer_file; std::string load_trustedpeer_file;
bool udpListenerOnly; bool udpListenerOnly;
std::string opModeStr;
}; };
static RsInitConfig *rsInitConfig = NULL; static RsInitConfig *rsInitConfig = NULL;
@ -189,6 +190,7 @@ void RsInit::InitRsConfig()
rsInitConfig->passwd = ""; rsInitConfig->passwd = "";
rsInitConfig->debugLevel = PQL_WARNING; rsInitConfig->debugLevel = PQL_WARNING;
rsInitConfig->udpListenerOnly = false; rsInitConfig->udpListenerOnly = false;
rsInitConfig->opModeStr = std::string("FULL");
/* setup the homePath (default save location) */ /* setup the homePath (default save location) */
// rsInitConfig->homePath = getHomePath(); // rsInitConfig->homePath = getHomePath();
@ -363,11 +365,11 @@ int RsInit::InitRetroShare(int _argc, char **_argv, bool /* strictCheck */)
>> parameter('l',"log-file" ,rsInitConfig->logfname ,"logfile" ,"Set Log filename." ,false) >> parameter('l',"log-file" ,rsInitConfig->logfname ,"logfile" ,"Set Log filename." ,false)
>> parameter('d',"debug-level" ,rsInitConfig->debugLevel ,"level" ,"Set debug level." ,false) >> parameter('d',"debug-level" ,rsInitConfig->debugLevel ,"level" ,"Set debug level." ,false)
#ifdef TO_REMOVE #ifdef TO_REMOVE
// This as removed because it is not used anymore. // This was removed because it is not used anymore.
>> parameter('w',"password" ,rsInitConfig->passwd ,"password" ,"Set Login Password." ,false) >> parameter('w',"password" ,rsInitConfig->passwd ,"password" ,"Set Login Password." ,false)
#endif #endif
>> parameter('i',"ip-address" ,rsInitConfig->inet ,"nnn.nnn.nnn.nnn", "Force IP address to use (if cannot be detected)." ,false) >> parameter('i',"ip-address" ,rsInitConfig->inet ,"nnn.nnn.nnn.nnn", "Force IP address to use (if cannot be detected)." ,false)
>> parameter('o',"opmode" ,rsInitConfig->opModeStr ,"opmode" ,"Set Operating mode (Full, NoTurtle, Gaming, Minimal)." ,false)
>> parameter('p',"port" ,rsInitConfig->port ,"port", "Set listenning port to use." ,false) >> parameter('p',"port" ,rsInitConfig->port ,"port", "Set listenning port to use." ,false)
>> parameter('c',"base-dir" ,opt_base_dir ,"directory", "Set base directory." ,false) >> parameter('c',"base-dir" ,opt_base_dir ,"directory", "Set base directory." ,false)
>> parameter('U',"user-id" ,prefUserString ,"ID", "[ocation Id] Sets Account to Use, Useful when Autologin is enabled.",false) >> parameter('U',"user-id" ,prefUserString ,"ID", "[ocation Id] Sets Account to Use, Useful when Autologin is enabled.",false)
@ -1733,6 +1735,10 @@ int RsServer::StartupRetroShare()
mPeerMgr->forceHiddenNode(); mPeerMgr->forceHiddenNode();
} }
if (!rsInitConfig->opModeStr.empty())
{
rsConfig->setOperatingMode(rsInitConfig->opModeStr);
}
mNetMgr -> checkNetAddress(); mNetMgr -> checkNetAddress();
if (rsInitConfig->hiddenNodeSet) { if (rsInitConfig->hiddenNodeSet) {

View file

@ -1,4 +1,4 @@
/* Copyright (C) 2004 Xavier Décoret <Xavier.Decoret@imag.fr> /* Copyright (C) 2004 Xavier Decoret <Xavier.Decoret@imag.fr>
* *
* argstream is free software; you can redistribute it and/or * argstream is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
@ -71,8 +71,8 @@ namespace
private: private:
std::string shortName_; std::string shortName_;
std::string longName_; std::string longName_;
std::string valueName_;
T* value_; T* value_;
std::string valueName_;
T initialValue_; T initialValue_;
std::string description_; std::string description_;
bool mandatory_; bool mandatory_;
@ -282,8 +282,8 @@ namespace
bool mandatory) bool mandatory)
: shortName_(1,s), : shortName_(1,s),
longName_(l), longName_(l),
valueName_(valueName),
value_(&v), value_(&v),
valueName_(valueName),
initialValue_(v), initialValue_(v),
description_(desc), description_(desc),
mandatory_(mandatory) mandatory_(mandatory)
@ -296,8 +296,8 @@ namespace
const char* desc, const char* desc,
bool mandatory) bool mandatory)
: longName_(l), : longName_(l),
valueName_(valueName),
value_(&v), value_(&v),
valueName_(valueName),
initialValue_(v), initialValue_(v),
description_(desc), description_(desc),
mandatory_(mandatory) mandatory_(mandatory)
@ -310,8 +310,8 @@ namespace
const char* desc, const char* desc,
bool mandatory) bool mandatory)
: shortName_(1,s), : shortName_(1,s),
valueName_(valueName),
value_(&v), value_(&v),
valueName_(valueName),
initialValue_(v), initialValue_(v),
description_(desc), description_(desc),
mandatory_(mandatory) mandatory_(mandatory)

View file

@ -189,6 +189,17 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO);
Q_INIT_RESOURCE(images); Q_INIT_RESOURCE(images);
Q_INIT_RESOURCE(icons); Q_INIT_RESOURCE(icons);
// Loop through all command-line args/values to get help wanted before RsInit exit.
for (int i = 0; i < args.size(); ++i) {
QString arg;
/* Get the argument name and set a blank value */
arg = args.at(i);
if ((arg.toLower() == "-h") || (arg.toLower() == "--help")) {
QApplication dummyApp (argc, argv); // needed for QMessageBox
Rshare::showUsageMessageBox();
}
}
// This is needed to allocate rsNotify, so that it can be used to ask for PGP passphrase // This is needed to allocate rsNotify, so that it can be used to ask for PGP passphrase
// //
RsControl::earlyInitNotificationSystem() ; RsControl::earlyInitNotificationSystem() ;

View file

@ -62,17 +62,20 @@
#define ARG_GUISTYLE "style" /**< Argument specfying GUI style. */ #define ARG_GUISTYLE "style" /**< Argument specfying GUI style. */
#define ARG_GUISTYLESHEET "stylesheet" /**< Argument specfying GUI style. */ #define ARG_GUISTYLESHEET "stylesheet" /**< Argument specfying GUI style. */
#define ARG_LANGUAGE "lang" /**< Argument specifying language. */ #define ARG_LANGUAGE "lang" /**< Argument specifying language. */
#define ARG_OPMODE "opmode" /**< OpMode (Full, NoTurtle, Gaming, Minimal */ #define ARG_OPMODE_S "o" /**< OpMode (Full, NoTurtle, Gaming, Minimal) */
#define ARG_OPMODE_L "opmode" /**< OpMode (Full, NoTurtle, Gaming, Minimal) */
#define ARG_RSLINK_S "r" /**< Open RsLink with protocol retroshare:// */ #define ARG_RSLINK_S "r" /**< Open RsLink with protocol retroshare:// */
#define ARG_RSLINK_L "link" /**< Open RsLink with protocol retroshare:// */ #define ARG_RSLINK_L "link" /**< Open RsLink with protocol retroshare:// */
#define ARG_RSFILE_S "f" /**< Open RsFile with or without arg */ #define ARG_RSFILE_S "f" /**< Open RsFile with or without arg. */
#define ARG_RSFILE_L "rsfile" /**< Open RsFile with or without arg */ #define ARG_RSFILE_L "rsfile" /**< Open RsFile with or without arg. */
//Other defined for server in /libretroshare/src/rsserver/rsinit.cc:351 //Other defined for server in /libretroshare/src/rsserver/rsinit.cc:351
// The arguments here can be send to a running instance. // The arguments here can be send to a running instance.
// If the command line contains arguments not listed here, we have to start a new instance. // If the command line contains arguments not listed here, we have to start a new instance.
// For exmample, the user wants to start a second instance using --base-dir arg of libretroshare. // For example, the user wants to start a second instance using --base-dir arg of libretroshare.
static const char* const forwardableArgs[] = { static const char* const forwardableArgs[] = {
ARG_OPMODE_S,
ARG_OPMODE_L,
ARG_RSLINK_S, ARG_RSLINK_S,
ARG_RSLINK_L, ARG_RSLINK_L,
ARG_RSFILE_S, ARG_RSFILE_S,
@ -427,26 +430,30 @@ Rshare::showUsageMessageBox()
tcol(tr("Resets ALL stored RetroShare settings."))); tcol(tr("Resets ALL stored RetroShare settings.")));
out << trow(tcol("-" ARG_DATADIR" &lt;dir&gt;") + out << trow(tcol("-" ARG_DATADIR" &lt;dir&gt;") +
tcol(tr("Sets the directory RetroShare uses for data files."))); tcol(tr("Sets the directory RetroShare uses for data files.")));
out << trow(tcol("-" ARG_LOGFILE" &lt;file&gt;") + out << trow(tcol("-" ARG_LOGFILE" &lt;" + tr("filename") + "&gt;") +
tcol(tr("Sets the name and location of RetroShare's logfile."))); tcol(tr("Sets the name and location of RetroShare's logfile.")));
out << trow(tcol("-" ARG_LOGLEVEL" &lt;level&gt;") + out << trow(tcol("-" ARG_LOGLEVEL" &lt;" + tr("level") + "&gt;") +
tcol(tr("Sets the verbosity of RetroShare's logging.") + tcol(tr("Sets the verbosity of RetroShare's logging.") +
"<br>[" + Log::logLevels().join("|") +"]")); "<br>[" + Log::logLevels().join("|") +"]"));
out << trow(tcol("-" ARG_GUISTYLE" &lt;style&gt;") + out << trow(tcol("-" ARG_GUISTYLE" &lt;" + tr("style") +"&gt;") +
tcol(tr("Sets RetroShare's interface style.") + tcol(tr("Sets RetroShare's interface style.") +
"<br>[" + QStyleFactory::keys().join("|") + "]")); "<br>[" + QStyleFactory::keys().join("|") + "]"));
out << trow(tcol("-" ARG_GUISTYLESHEET" &lt;stylesheet&gt;") + out << trow(tcol("-" ARG_GUISTYLESHEET" &lt;" + tr("stylesheet") + "&gt;") +
tcol(tr("Sets RetroShare's interface stylesheets."))); tcol(tr("Sets RetroShare's interface stylesheets.")));
out << trow(tcol("-" ARG_LANGUAGE" &lt;language&gt;") + out << trow(tcol("-" ARG_LANGUAGE" &lt;" + tr("language") + "&gt;") +
tcol(tr("Sets RetroShare's language.") + tcol(tr("Sets RetroShare's language.") +
"<br>[" + LanguageSupport::languageCodes().join("|") + "]")); "<br>[" + LanguageSupport::languageCodes().join("|") + "]"));
out << trow(tcol("-" ARG_OPMODE" &lt;opmode&gt;") + out << trow(tcol("--" ARG_OPMODE_L" &lt;" + tr("opmode") + "&gt;") +
tcol(tr("Sets RetroShare's opertating mode.") + tcol(tr("Sets RetroShare's operating mode.") +
"<br>[full|noturtle|gaming|minimal]")); "<br>[full|noturtle|gaming|minimal]"));
out << trow(tcol("-" ARG_RSLINK_L" &lt;" + tr("RsLinkURL") + "&gt;") +
tcol(tr("Open RsLink with protocol retroshare://")));
out << trow(tcol("-" ARG_RSFILE_L" &lt;" + tr("filename") + "&gt;") +
tcol(tr("Open RsFile with or without arg.")));
out << "</table>"; out << "</table>";
VMessageBox::information(0, VMessageBox::information(0,
tr("RetroShare Usage Information"), usage, VMessageBox::Ok); tr("RetroShare GUI Usage Information"), usage, VMessageBox::Ok);
} }
/** Returns true if the specified argument expects a value. */ /** Returns true if the specified argument expects a value. */
@ -460,7 +467,8 @@ Rshare::argNeedsValue(QString argName)
argName == ARG_GUISTYLE || argName == ARG_GUISTYLE ||
argName == ARG_GUISTYLESHEET || argName == ARG_GUISTYLESHEET ||
argName == ARG_LANGUAGE || argName == ARG_LANGUAGE ||
argName == ARG_OPMODE || argName == ARG_OPMODE_S ||
argName == ARG_OPMODE_L ||
argName == ARG_RSLINK_S || argName == ARG_RSLINK_S ||
argName == ARG_RSLINK_L || argName == ARG_RSLINK_L ||
argName == ARG_RSFILE_S || argName == ARG_RSFILE_S ||
@ -504,7 +512,7 @@ Rshare::parseArguments(QStringList args, bool firstRun)
/* handle opmode that could be change while running.*/ /* handle opmode that could be change while running.*/
QString omValue = QString(value).prepend(";").append(";").toLower(); QString omValue = QString(value).prepend(";").append(";").toLower();
QString omValues = QString(";full;noturtle;gaming;minimal;"); QString omValues = QString(";full;noturtle;gaming;minimal;");
if ((arg == ARG_OPMODE ) && if ((arg == ARG_OPMODE_S || arg == ARG_OPMODE_L ) &&
omValues.contains(omValue)) { omValues.contains(omValue)) {
_opmode = value; _opmode = value;
} }
@ -552,9 +560,15 @@ Rshare::validateArguments(QString &errmsg)
return false; return false;
} }
/* Check for an opmode that Retroshare recognizes. */ /* Check for an opmode that Retroshare recognizes. */
if (_args.contains(ARG_OPMODE) && if (_args.contains(ARG_OPMODE_S) &&
!QString(";full;noturtle;gaming;minimal;").contains(QString(_args.value(ARG_OPMODE)).prepend(";").append(";").toLower())) { !QString(";full;noturtle;gaming;minimal;").contains(QString(_args.value(ARG_OPMODE_S)).prepend(";").append(";").toLower())) {
errmsg = tr("Invalid language code specified:")+" " + _args.value(ARG_OPMODE); errmsg = tr("Invalid operating mode specified:")+" " + _args.value(ARG_OPMODE_S);
return false;
}
/* Check for an opmode that Retroshare recognizes. */
if (_args.contains(ARG_OPMODE_L) &&
!QString(";full;noturtle;gaming;minimal;").contains(QString(_args.value(ARG_OPMODE_L)).prepend(";").append(";").toLower())) {
errmsg = tr("Invalid operating mode specified:")+" " + _args.value(ARG_OPMODE_L);
return false; return false;
} }
return true; return true;