diff --git a/libbitdht/src/util/bdrandom.cc b/libbitdht/src/util/bdrandom.cc index b2d7ee2b8..c680ab765 100644 --- a/libbitdht/src/util/bdrandom.cc +++ b/libbitdht/src/util/bdrandom.cc @@ -12,6 +12,9 @@ static bool auto_seed = bdRandom::seed( (time(NULL) + ((uint32_t) pthread_self() #else #ifdef __APPLE__ static bool auto_seed = bdRandom::seed( (time(NULL) + pthread_mach_thread_np(pthread_self())*0x1293fe + (getpid()^0x113ef76b))^0x18e34a12 ) ; + #elif defined(__FreeBSD__) + // since this is completely insecure anyway, just kludge for now + static bool auto_seed = bdRandom::seed(time(NULL)); #else static bool auto_seed = bdRandom::seed( (time(NULL) + pthread_self()*0x1293fe + (getpid()^0x113ef76b))^0x18e34a12 ) ; #endif diff --git a/libbitdht/src/util/bdrandom.h b/libbitdht/src/util/bdrandom.h index a1dc2c1da..95d70bf13 100644 --- a/libbitdht/src/util/bdrandom.h +++ b/libbitdht/src/util/bdrandom.h @@ -32,12 +32,15 @@ // - thread safe // - system independant // - fast -// - cryptographically safe +// - NOT CRYPTOGRAPHICALLY SAFE +// - DO NOT USE FOR ANYTHING REQUIRING STRONG RANDOMNESS // // The implementation is adapted from the Mersenne Twister page of Wikipedia. // // http://en.wikipedia.org/wiki/Mersenne_twister +// FIXME(ben): MT is not cryptographically safe. + #include #include "util/bdthreads.h" @@ -68,4 +71,4 @@ class bdRandom static std::vector MT ; }; -#endif \ No newline at end of file +#endif diff --git a/libretroshare/src/ft/ftfileprovider.cc b/libretroshare/src/ft/ftfileprovider.cc index e8ceb8163..08cc3b4e9 100644 --- a/libretroshare/src/ft/ftfileprovider.cc +++ b/libretroshare/src/ft/ftfileprovider.cc @@ -19,8 +19,6 @@ #include #endif - - static const time_t UPLOAD_CHUNK_MAPS_TIME = 20 ; // time to ask for a new chunkmap from uploaders in seconds. ftFileProvider::ftFileProvider(const std::string& path, uint64_t size, const std::string& hash) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 659dd8c5d..f6a1ca93d 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -316,6 +316,18 @@ mac { #INCLUDEPATH += . $${UPNPC_DIR} $${GPGME_DIR}/src $${GPG_ERROR_DIR}/src } +freebsd-* { + INCLUDEPATH *= /usr/local/include/gpgme + INCLUDEPATH *= /usr/local/include/glib-2.0 + + QMAKE_CXXFLAGS *= -Dfseeko64=fseeko -Dftello64=ftello -Dstat64=stat -Dstatvfs64=statvfs -Dfopen64=fopen + + #libupnp implementation files + HEADERS += upnp/UPnPBase.h + SOURCES += upnp/UPnPBase.cpp + +} + ################################### COMMON stuff ################################## HEADERS += dbase/cachestrapper.h \ diff --git a/libretroshare/src/rsserver/rsloginhandler.cc b/libretroshare/src/rsserver/rsloginhandler.cc index b175cde60..10ef54674 100644 --- a/libretroshare/src/rsserver/rsloginhandler.cc +++ b/libretroshare/src/rsserver/rsloginhandler.cc @@ -5,7 +5,7 @@ #include "rsloginhandler.h" #include "util/rsdir.h" -#ifdef UBUNTU +#if defined(UBUNTU) || defined(__FreeBSD__) #include GnomeKeyringPasswordSchema my_schema = { @@ -119,7 +119,7 @@ bool RsLoginHandler::tryAutoLogin(const std::string& ssl_id,std::string& ssl_pas /******************************** WINDOWS/UNIX SPECIFIC PART ******************/ #ifndef WINDOWS_SYS /* UNIX */ -#ifdef UBUNTU +#if defined(UBUNTU) || defined(__FreeBSD__) gchar *passwd = NULL; @@ -196,7 +196,7 @@ bool RsLoginHandler::tryAutoLogin(const std::string& ssl_id,std::string& ssl_pas /******************** OSX KeyChain stuff *****************************/ #else /* UNIX, but not UBUNTU or APPLE */ - FILE* helpFile = RsDirUtil::rs_fopen(getAutologinFileName.c_str(), "r"); + FILE* helpFile = RsDirUtil::rs_fopen(getAutologinFileName(ssl_id).c_str(), "r"); if(helpFile == NULL){ std::cerr << "\nFailed to open help file\n" << std::endl; @@ -361,7 +361,7 @@ bool RsLoginHandler::enableAutoLogin(const std::string& ssl_id,const std::string /******************************** WINDOWS/UNIX SPECIFIC PART ******************/ #ifndef WINDOWS_SYS /* UNIX */ -#ifdef UBUNTU +#if defined(UBUNTU) || defined(__FreeBSD__) if(GNOME_KEYRING_RESULT_OK == gnome_keyring_store_password_sync(&my_schema, NULL, (gchar*)("RetroShare password for SSL Id "+ssl_id).c_str(),(gchar*)ssl_passwd.c_str(),"RetroShare SSL Id",ssl_id.c_str(),NULL)) { std::cerr << "Stored passwd " << "************************" << " into gnome keyring" << std::endl; diff --git a/libretroshare/src/util/rsrandom.cc b/libretroshare/src/util/rsrandom.cc index 5ff60c9f5..5c8b51782 100644 --- a/libretroshare/src/util/rsrandom.cc +++ b/libretroshare/src/util/rsrandom.cc @@ -12,6 +12,9 @@ static bool auto_seed = RSRandom::seed( (time(NULL) + ((uint32_t) pthread_self() #else #ifdef __APPLE__ static bool auto_seed = RSRandom::seed( (time(NULL) + pthread_mach_thread_np(pthread_self())*0x1293fe + (getpid()^0x113ef76b))^0x18e34a12 ) ; + #elif defined(__FreeBSD__) + // since this is completely insecure anyway, just kludge for now + static bool auto_seed = RSRandom::seed(time(NULL)); #else static bool auto_seed = RSRandom::seed( (time(NULL) + pthread_self()*0x1293fe + (getpid()^0x113ef76b))^0x18e34a12 ) ; #endif diff --git a/libretroshare/src/util/rsrandom.h b/libretroshare/src/util/rsrandom.h index 2c79567c1..aabec8905 100644 --- a/libretroshare/src/util/rsrandom.h +++ b/libretroshare/src/util/rsrandom.h @@ -25,7 +25,8 @@ // - thread safe // - system independant // - fast -// - cryptographically safe +// - NOT CRYPTOGRAPHICALLY SAFE +// - DO NOT USE FOR ANYTHING REQUIRING STRONG RANDOMNESS // // The implementation is adapted from the Mersenne Twister page of Wikipedia. // diff --git a/retroshare-gui/src/RetroShare.pro b/retroshare-gui/src/RetroShare.pro index df2accaef..0daecd26a 100644 --- a/retroshare-gui/src/RetroShare.pro +++ b/retroshare-gui/src/RetroShare.pro @@ -146,6 +146,15 @@ macx { } +freebsd-* { + INCLUDEPATH *= /usr/local/include/gpgme + LIBS *= ../../libretroshare/src/libretroshare.a + LIBS *= -lssl + LIBS *= -lgpgme + LIBS *= -lupnp + LIBS *= -lgnome-keyring +} + ############################## Common stuff ###################################### # On Linux systems that alredy have libssl and libcrypto it is advisable @@ -156,6 +165,10 @@ macx { bitdht { LIBS += ../../libbitdht/src/lib/libbitdht.a PRE_TARGETDEPS *= ../../libbitdht/src/lib/libbitdht.a + + #For FreeBSD to need to use these ones. + #LIBS += ../../libbitdht/src/libbitdht.a + #PRE_TARGETDEPS *= ../../libbitdht/src/libbitdht.a } win32 { diff --git a/retroshare-gui/src/gui/dht/DhtWindow.cpp b/retroshare-gui/src/gui/dht/DhtWindow.cpp index e5ff985e4..42ab919af 100644 --- a/retroshare-gui/src/gui/dht/DhtWindow.cpp +++ b/retroshare-gui/src/gui/dht/DhtWindow.cpp @@ -653,8 +653,6 @@ void DhtWindow::updateRelays() - - /****************************/ @@ -666,6 +664,25 @@ void DhtWindow::updateRelays() #define DTW_COL_SEND 5 #define DTW_COL_RECV 6 +class DhtTreeWidgetItem : public QTreeWidgetItem + { +public: + virtual bool operator<(const QTreeWidgetItem &other) const + { + int column = treeWidget()->sortColumn(); + if (column == DTW_COL_RECV || column == DTW_COL_SEND + || column == DTW_COL_BUCKET) + { + QString t1 = text(column); + QString t2 = other.text(column); + t1 = t1.left(t1.indexOf(' ')); + t2 = t2.left(t2.indexOf(' ')); + return t1.toLong() < t2.toLong(); + } + return text(column) < other.text(column); + } + }; + void DhtWindow::updateDhtPeers() { @@ -698,7 +715,7 @@ void DhtWindow::updateDhtPeers() QTreeWidgetItem *dht_item = NULL; /* insert */ - dht_item = new QTreeWidgetItem(); + dht_item = new DhtTreeWidgetItem(); int dist = it->mBucket; std::ostringstream buckstr;