diff --git a/Makefile b/Makefile index ebe266b8..abe4238d 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CC = g++ CFLAGS = -g -Wall -std=c++0x OBJECTS = i2p.o base64.o NTCPSession.o RouterInfo.o Transports.o RouterContext.o \ NetDb.o LeaseSet.o Tunnel.o TunnelEndpoint.o TunnelGateway.o TransitTunnel.o \ - I2NPProtocol.o Log.o Garlic.o HTTPServer.o Streaming.o Identity.o SSU.o + I2NPProtocol.o Log.o Garlic.o HTTPServer.o Streaming.o Identity.o SSU.o util.o INCFLAGS = LDFLAGS = -Wl,-rpath,/usr/local/lib -lcryptopp -lboost_system -lboost_filesystem -lpthread LIBS = diff --git a/RouterContext.cpp b/RouterContext.cpp index 75a3eb51..68f6508a 100644 --- a/RouterContext.cpp +++ b/RouterContext.cpp @@ -3,6 +3,7 @@ #include #include "CryptoConst.h" #include "RouterContext.h" +#include "util.h" namespace i2p { diff --git a/i2p.cpp b/i2p.cpp index 51c6d1eb..67408fa6 100644 --- a/i2p.cpp +++ b/i2p.cpp @@ -10,10 +10,11 @@ #include "Tunnel.h" #include "NetDb.h" #include "HTTPServer.h" +#include "util.h" -int main( int, char** ) +int main( int argc, char* argv[] ) { - + i2p::util::ParseArguments(argc,argv); #ifdef _WIN32 setlocale(LC_CTYPE, ""); SetConsoleCP(1251); @@ -21,7 +22,9 @@ int main( int, char** ) setlocale(LC_ALL, "Russian"); #endif - i2p::util::HTTPServer httpServer (7070); + int httpport = i2p::util::GetIntArg("--httpport", 7070); + + i2p::util::HTTPServer httpServer (httpport); httpServer.Start (); i2p::data::netdb.Start (); diff --git a/util.cpp b/util.cpp new file mode 100644 index 00000000..1f000f50 --- /dev/null +++ b/util.cpp @@ -0,0 +1,45 @@ +#include "util.h" + +namespace i2p +{ +namespace util +{ +std::map mapArgs; + +void ParseArguments(int argc, const char* const argv[]) +{ + mapArgs.clear(); + for (int i = 1; i < argc; i++) + { + std::string strKey (argv[i]); + std::string strValue; + size_t has_data = strKey.find('='); + if (has_data != std::string::npos) + { + strValue = strKey.substr(has_data+1); + strKey = strKey.substr(0, has_data); + } + if (strKey[0] != '-') + break; + + mapArgs[strKey] = strValue; + } +} + +int GetIntArg(const std::string& strArg, int nDefault) +{ + if (mapArgs.count(strArg)) + return atoi(mapArgs[strArg].c_str()); + return nDefault; +} + +std::string GetStringArg(const std::string& strArg, std::string nDefault) +{ + if (mapArgs.count(strArg)) + return mapArgs[strArg]; + return nDefault; +} + + +} // Namespace end +} diff --git a/util.h b/util.h new file mode 100644 index 00000000..ef015ded --- /dev/null +++ b/util.h @@ -0,0 +1,19 @@ +#ifndef UTIL_H +#define UTIL_H + +#include +#include + +namespace i2p +{ +namespace util +{ + extern std::map mapArgs; + void ParseArguments(int argc, const char* const argv[]); + int GetIntArg(const std::string& strArg, int nDefault); + +} +} + + +#endif