mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Merge branch 'master' into extra_locators_merge
This commit is contained in:
commit
1dd707710b
34
.travis.yml
34
.travis.yml
@ -13,28 +13,16 @@ matrix:
|
|||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get update; fi
|
- if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get update; fi
|
||||||
- if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get install -y build-essential checkinstall cmake libavutil-dev libavcodec-dev libavformat-dev libbz2-dev libcurl4-openssl-dev libcv-dev libopencv-highgui-dev libhighgui-dev libgnome-keyring-dev libgstreamer-plugins-base0.10-dev libgstreamer0.10-dev libjasper-dev libjpeg-dev libmicrohttpd-dev libopencv-dev libprotobuf-dev libqt4-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libssl-dev libswscale-dev libtbb-dev libtiff4-dev libupnp-dev libv4l-dev libxine-dev libxslt1-dev libxss-dev pkg-config protobuf-compiler python-dev qtmobility-dev gdb ; fi
|
- if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get install -y build-essential libssl-dev libsqlcipher-dev libbz2-dev libmicrohttpd-dev libsqlite3-dev libupnp-dev pkg-config qt5-default libxss-dev qtmultimedia5-dev libqt5x11extras5-dev libqt5designer5 qttools5-dev; fi
|
||||||
|
|
||||||
|
|
||||||
# - if [ $TRAVIS_OS_NAME == osx ]; then xcode-select --install ; fi
|
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then brew update ; fi
|
- if [ $TRAVIS_OS_NAME == osx ]; then brew update ; fi
|
||||||
# - if [ $TRAVIS_OS_NAME == osx ]; then brew install qt55 openssl miniupnpc libmicrohttpd speex homebrew/science/opencv ffmpeg sqlcipher ; fi
|
- if [ $TRAVIS_OS_NAME == osx ]; then brew install qt55 openssl miniupnpc libmicrohttpd sqlcipher; fi
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then brew install qt55 openssl miniupnpc libmicrohttpd speex speexdsp ffmpeg sqlcipher ; fi
|
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then brew link --force qt55 ; fi
|
- if [ $TRAVIS_OS_NAME == osx ]; then brew link --force qt55 ; fi
|
||||||
#Fix for opencv and numpy already installed by system
|
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then rm '/usr/local/bin/f2py'; fi
|
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then rm -r '/usr/local/lib/python2.7/site-packages/numpy'; fi
|
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then brew install opencv; fi
|
|
||||||
|
|
||||||
# FIX: Now openssl is not linked in /usr/local/include and lib
|
- wget https://github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then ln -s /usr/local/opt/openssl/include/* /usr/local/include/; fi
|
- tar -xf v1.1.0.tar.gz
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then ln -s /usr/local/opt/openssl/lib/*.a /usr/local/lib/; fi
|
- if [ $TRAVIS_OS_NAME == osx ]; then cp -r rapidjson-1.1.0/include/rapidjson/ /usr/local/include/rapidjson ; fi
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then ln -s /usr/local/opt/openssl/lib/*.dylib /usr/local/lib/; fi
|
- if [ $TRAVIS_OS_NAME == linux ]; then sudo cp -r rapidjson-1.1.0/include/rapidjson/ /usr/include/rapidjson ; fi
|
||||||
|
|
||||||
# - if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get update && sudo apt-get install -y llvm-3.4 llvm-3.4-dev; fi
|
|
||||||
# - rvm use $RVM --install --binary --fuzzy
|
|
||||||
# - gem update --system
|
|
||||||
# - gem --version
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
@ -48,16 +36,16 @@ addons:
|
|||||||
name: "RetroShare/RetroShare"
|
name: "RetroShare/RetroShare"
|
||||||
description: "RetroShare Build submitted via Travis CI"
|
description: "RetroShare Build submitted via Travis CI"
|
||||||
build_command_prepend: "qmake CONFIG+=no_sqlcipher; make clean"
|
build_command_prepend: "qmake CONFIG+=no_sqlcipher; make clean"
|
||||||
build_command: "make -j 4"
|
build_command: "make -j4"
|
||||||
branch_pattern: coverity_scan
|
branch_pattern: coverity_scan
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- if [ $TRAVIS_OS_NAME == linux ]; then qmake QMAKE_CC=$CC QMAKE_CXX=$CXX CONFIG+=no_sqlcipher CONFIG+=tests ; fi
|
- if [ $TRAVIS_OS_NAME == linux ]; then qmake QMAKE_CC=$CC QMAKE_CXX=$CXX; fi
|
||||||
- if [ $TRAVIS_OS_NAME == osx ]; then qmake QMAKE_CC=$CC QMAKE_CXX=$CXX CONFIG+=no_sqlcipher CONFIG+=tests CONFIG+=rs_macos10.12 ; fi
|
- if [ $TRAVIS_OS_NAME == osx ]; then qmake QMAKE_CC=$CC QMAKE_CXX=$CXX CONFIG+=rs_macos10.12 INCLUDEPATH+=/usr/local/opt/openssl/include/ QMAKE_LIBDIR+=/usr/local/opt/openssl/lib/; fi
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- if [ $TRAVIS_OS_NAME == linux ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make && tests/unittests/unittests >/dev/null 2>&1 ; fi
|
- if [ $TRAVIS_OS_NAME == linux ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make -j2; fi
|
||||||
- if [ $TRAVIS_OS_NAME == osx ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make -j 4 ; fi
|
- if [ $TRAVIS_OS_NAME == osx ] && [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make -j2; fi
|
||||||
|
|
||||||
|
|
||||||
#after_success:
|
#after_success:
|
||||||
|
@ -31,7 +31,7 @@ export ANDROID_NDK_PATH="/opt/android-ndk/"
|
|||||||
|
|
||||||
## The path where your fresh compiled toolchain will be installed, make sure
|
## The path where your fresh compiled toolchain will be installed, make sure
|
||||||
## the parent exists
|
## the parent exists
|
||||||
export NDK_TOOLCHAIN_PATH="${HOME}/Builds/android-toolchains/retroshare-android/"
|
export NATIVE_LIBS_TOOLCHAIN_PATH="${HOME}/Builds/android-toolchains/retroshare-android/"
|
||||||
|
|
||||||
## The CPU architecture of the Android device you want to target
|
## The CPU architecture of the Android device you want to target
|
||||||
export ANDROID_NDK_ARCH="arm"
|
export ANDROID_NDK_ARCH="arm"
|
||||||
@ -66,7 +66,7 @@ _Qt Creator left pane -> Projects -> Build and Run -> Android SOMESTUFF kit ->
|
|||||||
Build Environement -> Add
|
Build Environement -> Add
|
||||||
|
|
||||||
Variable: +NATIVE_LIBS_TOOLCHAIN_PATH+
|
Variable: +NATIVE_LIBS_TOOLCHAIN_PATH+
|
||||||
Value: +Same value as NDK_TOOLCHAIN_PATH in Preparing The Environement step+
|
Value: +Same value as NATIVE_LIBS_TOOLCHAIN_PATH in Preparing The Environement step+
|
||||||
|
|
||||||
Some of RetroShare modules like +retroshare-gui+ and +WebUI+ are not available
|
Some of RetroShare modules like +retroshare-gui+ and +WebUI+ are not available
|
||||||
on Android so to be able to compile RetroShare without errors you will have to
|
on Android so to be able to compile RetroShare without errors you will have to
|
||||||
@ -91,6 +91,8 @@ pointing to your SDK installation path, like
|
|||||||
|
|
||||||
== Quircks
|
== Quircks
|
||||||
|
|
||||||
|
=== Protected Apps
|
||||||
|
|
||||||
On some Android devices like +Huawei ALE-L21+ background applications are
|
On some Android devices like +Huawei ALE-L21+ background applications are
|
||||||
killed when screen is turned off unless they are in the _protected app_ list.
|
killed when screen is turned off unless they are in the _protected app_ list.
|
||||||
At moment seems apps developers don't have a way to have the application
|
At moment seems apps developers don't have a way to have the application
|
||||||
@ -106,6 +108,74 @@ To enable enable _protection_: +Android menu -> Settings -> Privacy & security
|
|||||||
Other devices may offer similar _features_ please report them.
|
Other devices may offer similar _features_ please report them.
|
||||||
|
|
||||||
|
|
||||||
|
=== APK signature mismatch
|
||||||
|
|
||||||
|
If you try to install a RetroShare APK that comes from a different source
|
||||||
|
(eg: if you try to upgrade from F-Droid when you originally installed an APK
|
||||||
|
build by yourself) Android will prevent that from happening. In that case the
|
||||||
|
only solution is to uninstall the app and then install the new APK but if you do
|
||||||
|
it also the application data and your precious cryptographic keys, friend list
|
||||||
|
etc. will be lost forever.
|
||||||
|
To avoid that you can attempt to manually backup and then restore from the
|
||||||
|
command-line (+adb backup+ seems not working either) to change the app source
|
||||||
|
without erasing the appliation data.
|
||||||
|
|
||||||
|
CAUTION: Following steps require root access on your Android device
|
||||||
|
|
||||||
|
.Backup RetroShare Android application data
|
||||||
|
[source,bash]
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
export ORIG_DIR="/data/data/org.retroshare.android.qml_app"
|
||||||
|
export BACKUP_DIR="org.retroshare.android.qml_app.backup"
|
||||||
|
|
||||||
|
adb root
|
||||||
|
|
||||||
|
adb shell am force-stop org.retroshare.android.qml_app
|
||||||
|
sleep 1s
|
||||||
|
|
||||||
|
mkdir ${BACKUP_DIR}
|
||||||
|
|
||||||
|
# Avoid adb pull failing
|
||||||
|
adb shell rm ${ORIG_DIR}/files/.retroshare/libresapi.sock
|
||||||
|
adb pull ${ORIG_DIR}/files/ ${BACKUP_DIR}/files/
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
After this you should be able to uninstall the old APK with your preferred
|
||||||
|
method, as example from the command-line.
|
||||||
|
|
||||||
|
.Uninstall RetroShare Android from the command-line
|
||||||
|
[source,bash]
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
adb uninstall org.retroshare.android.qml_app
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Now you can install a different signature APK and then restore the application
|
||||||
|
data with the following commands.
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
export ORIG_DIR="/data/data/org.retroshare.android.qml_app"
|
||||||
|
export BACKUP_DIR="org.retroshare.android.qml_app.backup"
|
||||||
|
|
||||||
|
adb root
|
||||||
|
|
||||||
|
## Launch the app to make sure the parent directory exists and has proper owner
|
||||||
|
adb shell monkey -p org.retroshare.android.qml_app -c android.intent.category.LAUNCHER 1
|
||||||
|
sleep 1s
|
||||||
|
|
||||||
|
adb shell am force-stop org.retroshare.android.qml_app
|
||||||
|
sleep 1s
|
||||||
|
|
||||||
|
|
||||||
|
APP_OWNER="$(adb shell busybox ls -lnd ${ORIG_DIR} | awk '{print $3":"$4}')"
|
||||||
|
adb shell rm -rf ${ORIG_DIR}/files
|
||||||
|
adb push ${BACKUP_DIR}/files/ ${ORIG_DIR}/files/
|
||||||
|
adb shell busybox chown -R ${APP_OWNER} ${ORIG_DIR}/files/
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Opening RetroShare android app now should show your old profile.
|
||||||
|
|
||||||
|
|
||||||
== Debugging with GDB
|
== Debugging with GDB
|
||||||
|
|
||||||
QtCreator actually support debugging only for the foreground activity, so to
|
QtCreator actually support debugging only for the foreground activity, so to
|
||||||
|
@ -32,19 +32,19 @@ Compilation on Linux
|
|||||||
libqt4-dev libssl-dev libxss-dev libgnome-keyring-dev libbz2-dev \
|
libqt4-dev libssl-dev libxss-dev libgnome-keyring-dev libbz2-dev \
|
||||||
libqt4-opengl-dev libqtmultimediakit1 qtmobility-dev libsqlcipher-dev \
|
libqt4-opengl-dev libqtmultimediakit1 qtmobility-dev libsqlcipher-dev \
|
||||||
libspeex-dev libspeexdsp-dev libxslt1-dev libcurl4-openssl-dev \
|
libspeex-dev libspeexdsp-dev libxslt1-dev libcurl4-openssl-dev \
|
||||||
libopencv-dev tcl8.5 libmicrohttpd-dev
|
libopencv-dev tcl8.5 libmicrohttpd-dev rapidjson-dev
|
||||||
```
|
```
|
||||||
* openSUSE
|
* openSUSE
|
||||||
```bash
|
```bash
|
||||||
sudo zypper install gcc-c++ libqt4-devel libgnome-keyring-devel \
|
sudo zypper install gcc-c++ libqt4-devel libgnome-keyring-devel \
|
||||||
glib2-devel speex-devel libssh-devel protobuf-devel libcurl-devel \
|
glib2-devel speex-devel libssh-devel protobuf-devel libcurl-devel \
|
||||||
libxml2-devel libxslt-devel sqlcipher-devel libmicrohttpd-devel \
|
libxml2-devel libxslt-devel sqlcipher-devel libmicrohttpd-devel \
|
||||||
opencv-devel speexdsp-devel libupnp-devel libavcodec-devel
|
opencv-devel speexdsp-devel libupnp-devel libavcodec-devel rapidjson
|
||||||
```
|
```
|
||||||
* Arch Linux
|
* Arch Linux
|
||||||
```bash
|
```bash
|
||||||
pacman -S base-devel libgnome-keyring libmicrohttpd libupnp libxslt \
|
pacman -S base-devel libgnome-keyring libmicrohttpd libupnp libxslt \
|
||||||
libxss opencv qt4 speex speexdsp sqlcipher
|
libxss opencv qt4 speex speexdsp sqlcipher rapidjson
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Checkout the source code
|
2. Checkout the source code
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
!include("retroshare.pri"): error("Could not include file retroshare.pri")
|
!include("retroshare.pri"): error("Could not include file retroshare.pri")
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
#CONFIG += tests
|
|
||||||
|
|
||||||
SUBDIRS += openpgpsdk
|
SUBDIRS += openpgpsdk
|
||||||
openpgpsdk.file = openpgpsdk/src/openpgpsdk.pro
|
openpgpsdk.file = openpgpsdk/src/openpgpsdk.pro
|
||||||
|
@ -1,21 +1,78 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
## Define default value for variable, take two arguments, $1 variable name,
|
||||||
|
## $2 default variable value, if the variable is not already define define it
|
||||||
|
## with default value.
|
||||||
|
function define_default_value()
|
||||||
|
{
|
||||||
|
VAR_NAME="${1}"
|
||||||
|
DEFAULT_VALUE="${2}"
|
||||||
|
|
||||||
|
[ -z "${!VAR_NAME}" ] && export ${VAR_NAME}="${DEFAULT_VALUE}"
|
||||||
|
}
|
||||||
|
|
||||||
## You are supposed to provide the following variables according to your system setup
|
## You are supposed to provide the following variables according to your system setup
|
||||||
[ -z ${ANDROID_NDK_PATH+x} ] && export ANDROID_NDK_PATH="/opt/android-ndk/"
|
define_default_value ANDROID_NDK_PATH "/opt/android-ndk/"
|
||||||
[ -z ${ANDROID_NDK_ARCH+x} ] && export ANDROID_NDK_ARCH="arm"
|
define_default_value ANDROID_NDK_ARCH "arm"
|
||||||
[ -z ${ANDROID_NDK_ABI_VER+x} ] && export ANDROID_NDK_ABI_VER="4.9"
|
define_default_value ANDROID_NDK_ABI_VER "4.9"
|
||||||
[ -z ${ANDROID_PLATFORM_VER+x} ] && export ANDROID_PLATFORM_VER="18"
|
define_default_value ANDROID_PLATFORM_VER "18"
|
||||||
[ -z ${NDK_TOOLCHAIN_PATH+x} ] && export NDK_TOOLCHAIN_PATH="${HOME}/Builds/android-toolchains/retroshare-android-${ANDROID_PLATFORM_VER}-${ANDROID_NDK_ARCH}-abi${ANDROID_NDK_ABI_VER}/"
|
define_default_value NATIVE_LIBS_TOOLCHAIN_PATH "${HOME}/Builds/android-toolchains/retroshare-android-${ANDROID_PLATFORM_VER}-${ANDROID_NDK_ARCH}-abi${ANDROID_NDK_ABI_VER}/"
|
||||||
[ -z ${HOST_NUM_CPU+x} ] && export HOST_NUM_CPU=$(grep "^processor" /proc/cpuinfo | wc -l)
|
define_default_value HOST_NUM_CPU $(nproc)
|
||||||
[ -z ${BZIP2_SOURCE_VERSION+x} ] && export BZIP2_SOURCE_VERSION="1.0.6"
|
|
||||||
[ -z ${OPENSSL_SOURCE_VERSION+x} ] && export OPENSSL_SOURCE_VERSION="1.0.2n"
|
define_default_value BZIP2_SOURCE_VERSION "1.0.6"
|
||||||
[ -z ${SQLITE_SOURCE_YEAR+x} ] && export SQLITE_SOURCE_YEAR="2018"
|
define_default_value BZIP2_SOURCE_SHA256 a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
|
||||||
[ -z ${SQLITE_SOURCE_VERSION+x} ] && export SQLITE_SOURCE_VERSION="3220000"
|
|
||||||
[ -z ${SQLCIPHER_SOURCE_VERSION+x} ] && export SQLCIPHER_SOURCE_VERSION="3.4.2"
|
define_default_value OPENSSL_SOURCE_VERSION "1.0.2n"
|
||||||
[ -z ${LIBUPNP_SOURCE_VERSION+x} ] && export LIBUPNP_SOURCE_VERSION="1.6.24"
|
define_default_value OPENSSL_SOURCE_SHA256 370babb75f278c39e0c50e8c4e7493bc0f18db6867478341a832a982fd15a8fe
|
||||||
|
|
||||||
|
define_default_value SQLITE_SOURCE_YEAR "2018"
|
||||||
|
define_default_value SQLITE_SOURCE_VERSION "3220000"
|
||||||
|
define_default_value SQLITE_SOURCE_SHA256 2824ab1238b706bc66127320afbdffb096361130e23291f26928a027b885c612
|
||||||
|
|
||||||
|
define_default_value SQLCIPHER_SOURCE_VERSION "3.4.2"
|
||||||
|
define_default_value SQLCIPHER_SOURCE_SHA256 69897a5167f34e8a84c7069f1b283aba88cdfa8ec183165c4a5da2c816cfaadb
|
||||||
|
|
||||||
|
define_default_value LIBUPNP_SOURCE_VERSION "1.6.24"
|
||||||
|
define_default_value LIBUPNP_SOURCE_SHA256 7d83d79af3bb4062e5c3a58bf2e90d2da5b8b99e2b2d57c23b5b6f766288cf96
|
||||||
|
|
||||||
|
define_default_value INSTALL_QT_ANDROID "false"
|
||||||
|
define_default_value QT_VERSION "5.9.4"
|
||||||
|
define_default_value QT_ANDROID_INSTALLER_SHA256 a214084e2295c9a9f8727e8a0131c37255bf724bfc69e80f7012ba3abeb1f763
|
||||||
|
|
||||||
|
|
||||||
|
## $1 filename, $2 sha256 hash
|
||||||
|
function check_sha256()
|
||||||
|
{
|
||||||
|
echo ${2} "${1}" | sha256sum -c &> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
## $1 filename, $2 sha256 hash, $3 url
|
||||||
|
function verified_download()
|
||||||
|
{
|
||||||
|
FILENAME="$1"
|
||||||
|
SHA256="$2"
|
||||||
|
URL="$3"
|
||||||
|
|
||||||
|
check_sha256 "${FILENAME}" "${SHA256}" ||
|
||||||
|
{
|
||||||
|
rm -rf "${FILENAME}"
|
||||||
|
|
||||||
|
wget -O "${FILENAME}" "$URL" ||
|
||||||
|
{
|
||||||
|
echo "Failed downloading ${FILENAME} from $URL"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
check_sha256 "${FILENAME}" "${SHA256}" ||
|
||||||
|
{
|
||||||
|
echo "SHA256 mismatch for ${FILENAME} from ${URL} expected sha256 ${SHA256} got $(sha256sum ${FILENAME} | awk '{print $1}')"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## You should not edit the following variables
|
|
||||||
if [ "${ANDROID_NDK_ARCH}" == "x86" ]; then
|
if [ "${ANDROID_NDK_ARCH}" == "x86" ]; then
|
||||||
cArch="i686"
|
cArch="i686"
|
||||||
eABI=""
|
eABI=""
|
||||||
@ -23,21 +80,104 @@ else
|
|||||||
cArch="${ANDROID_NDK_ARCH}"
|
cArch="${ANDROID_NDK_ARCH}"
|
||||||
eABI="eabi"
|
eABI="eabi"
|
||||||
fi
|
fi
|
||||||
export SYSROOT="${NDK_TOOLCHAIN_PATH}/sysroot"
|
export SYSROOT="${NATIVE_LIBS_TOOLCHAIN_PATH}/sysroot"
|
||||||
export PREFIX="${SYSROOT}"
|
export PREFIX="${SYSROOT}"
|
||||||
export CC="${NDK_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-gcc"
|
export CC="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-gcc"
|
||||||
export CXX="${NDK_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-g++"
|
export CXX="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-g++"
|
||||||
export AR="${NDK_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-ar"
|
export AR="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-ar"
|
||||||
export RANLIB="${NDK_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-ranlib"
|
export RANLIB="${NATIVE_LIBS_TOOLCHAIN_PATH}/bin/${cArch}-linux-android${eABI}-ranlib"
|
||||||
export ANDROID_DEV="${ANDROID_NDK_PATH}/platforms/android-${ANDROID_PLATFORM_VER}/arch-${ANDROID_NDK_ARCH}/usr"
|
export ANDROID_DEV="${ANDROID_NDK_PATH}/platforms/android-${ANDROID_PLATFORM_VER}/arch-${ANDROID_NDK_ARCH}/usr"
|
||||||
|
|
||||||
|
|
||||||
## More information available at https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html
|
## More information available at https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html
|
||||||
build_toolchain()
|
build_toolchain()
|
||||||
{
|
{
|
||||||
rm -rf ${NDK_TOOLCHAIN_PATH}
|
rm -rf ${NATIVE_LIBS_TOOLCHAIN_PATH}
|
||||||
[ "${ANDROID_NDK_ARCH}" == "x86" ] && toolchainName="${ANDROID_NDK_ARCH}-${ANDROID_NDK_ABI_VER}" || toolchainName="${ANDROID_NDK_ARCH}-linux-androideabi-${ANDROID_NDK_ABI_VER}"
|
[ "${ANDROID_NDK_ARCH}" == "x86" ] && toolchainName="${ANDROID_NDK_ARCH}-${ANDROID_NDK_ABI_VER}" || toolchainName="${ANDROID_NDK_ARCH}-linux-androideabi-${ANDROID_NDK_ABI_VER}"
|
||||||
${ANDROID_NDK_PATH}/build/tools/make-standalone-toolchain.sh --ndk-dir=${ANDROID_NDK_PATH} --arch=${ANDROID_NDK_ARCH} --install-dir=${NDK_TOOLCHAIN_PATH} --platform=android-${ANDROID_PLATFORM_VER} --toolchain=${toolchainName} --verbose
|
${ANDROID_NDK_PATH}/build/tools/make-standalone-toolchain.sh --ndk-dir=${ANDROID_NDK_PATH} --arch=${ANDROID_NDK_ARCH} --install-dir=${NATIVE_LIBS_TOOLCHAIN_PATH} --platform=android-${ANDROID_PLATFORM_VER} --toolchain=${toolchainName} --verbose
|
||||||
|
}
|
||||||
|
|
||||||
|
## More information available at https://gitlab.com/relan/provisioners/merge_requests/1 and http://stackoverflow.com/a/34032216
|
||||||
|
install_qt_android()
|
||||||
|
{
|
||||||
|
QT_VERSION_CODE=$(echo $QT_VERSION | tr -d .)
|
||||||
|
QT_INSTALL_PATH=${NATIVE_LIBS_TOOLCHAIN_PATH}/Qt
|
||||||
|
QT_INSTALLER="qt-unified-linux-x64-3.0.2-online.run"
|
||||||
|
|
||||||
|
verified_download $QT_INSTALLER $QT_ANDROID_INSTALLER_SHA256 \
|
||||||
|
http://master.qt.io/archive/online_installers/3.0/${QT_INSTALLER}
|
||||||
|
|
||||||
|
chmod a+x ${QT_INSTALLER}
|
||||||
|
|
||||||
|
QT_INSTALLER_SCRIPT="qt_installer_script.js"
|
||||||
|
cat << EOF > "${QT_INSTALLER_SCRIPT}"
|
||||||
|
function Controller() {
|
||||||
|
installer.autoRejectMessageBoxes();
|
||||||
|
installer.installationFinished.connect(function() {
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
});
|
||||||
|
|
||||||
|
var welcomePage = gui.pageWidgetByObjectName("WelcomePage");
|
||||||
|
welcomePage.completeChanged.connect(function() {
|
||||||
|
if (gui.currentPageWidget().objectName == welcomePage.objectName)
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.WelcomePageCallback = function() {
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.CredentialsPageCallback = function() {
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.IntroductionPageCallback = function() {
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.TargetDirectoryPageCallback = function() {
|
||||||
|
gui.currentPageWidget().TargetDirectoryLineEdit.setText("$QT_INSTALL_PATH");
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.ComponentSelectionPageCallback = function() {
|
||||||
|
var widget = gui.currentPageWidget();
|
||||||
|
|
||||||
|
// You can get these component names by running the installer with the
|
||||||
|
// --verbose flag. It will then print out a resource tree.
|
||||||
|
|
||||||
|
widget.deselectComponent("qt.tools.qtcreator");
|
||||||
|
widget.deselectComponent("qt.tools.doc");
|
||||||
|
widget.deselectComponent("qt.tools.examples");
|
||||||
|
|
||||||
|
widget.selectComponent("qt.$QT_VERSION_CODE.android_armv7");
|
||||||
|
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.LicenseAgreementPageCallback = function() {
|
||||||
|
gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.StartMenuDirectoryPageCallback = function() {
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.ReadyForInstallationPageCallback = function() {
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.FinishedPageCallback = function() {
|
||||||
|
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm;
|
||||||
|
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox)
|
||||||
|
checkBoxForm.launchQtCreatorCheckBox.checked = false;
|
||||||
|
gui.clickButton(buttons.FinishButton);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
QT_QPA_PLATFORM=minimal ./${QT_INSTALLER} --script ${QT_INSTALLER_SCRIPT}
|
||||||
}
|
}
|
||||||
|
|
||||||
## More information available at retroshare://file?name=Android%20Native%20Development%20Kit%20Cookbook.pdf&size=29214468&hash=0123361c1b14366ce36118e82b90faf7c7b1b136
|
## More information available at retroshare://file?name=Android%20Native%20Development%20Kit%20Cookbook.pdf&size=29214468&hash=0123361c1b14366ce36118e82b90faf7c7b1b136
|
||||||
@ -45,7 +185,10 @@ build_bzlib()
|
|||||||
{
|
{
|
||||||
B_dir="bzip2-${BZIP2_SOURCE_VERSION}"
|
B_dir="bzip2-${BZIP2_SOURCE_VERSION}"
|
||||||
rm -rf $B_dir
|
rm -rf $B_dir
|
||||||
[ -f $B_dir.tar.gz ] || wget http://www.bzip.org/${BZIP2_SOURCE_VERSION}/bzip2-${BZIP2_SOURCE_VERSION}.tar.gz
|
|
||||||
|
verified_download $B_dir.tar.gz $BZIP2_SOURCE_SHA256 \
|
||||||
|
http://www.bzip.org/${BZIP2_SOURCE_VERSION}/bzip2-${BZIP2_SOURCE_VERSION}.tar.gz
|
||||||
|
|
||||||
tar -xf $B_dir.tar.gz
|
tar -xf $B_dir.tar.gz
|
||||||
cd $B_dir
|
cd $B_dir
|
||||||
sed -i "/^CC=.*/d" Makefile
|
sed -i "/^CC=.*/d" Makefile
|
||||||
@ -66,7 +209,10 @@ build_openssl()
|
|||||||
{
|
{
|
||||||
B_dir="openssl-${OPENSSL_SOURCE_VERSION}"
|
B_dir="openssl-${OPENSSL_SOURCE_VERSION}"
|
||||||
rm -rf $B_dir
|
rm -rf $B_dir
|
||||||
[ -f $B_dir.tar.gz ] || wget https://www.openssl.org/source/$B_dir.tar.gz
|
|
||||||
|
verified_download $B_dir.tar.gz $OPENSSL_SOURCE_SHA256 \
|
||||||
|
https://www.openssl.org/source/$B_dir.tar.gz
|
||||||
|
|
||||||
tar -xf $B_dir.tar.gz
|
tar -xf $B_dir.tar.gz
|
||||||
cd $B_dir
|
cd $B_dir
|
||||||
if [ "${ANDROID_NDK_ARCH}" == "arm" ]; then
|
if [ "${ANDROID_NDK_ARCH}" == "arm" ]; then
|
||||||
@ -92,24 +238,31 @@ build_openssl()
|
|||||||
build_sqlite()
|
build_sqlite()
|
||||||
{
|
{
|
||||||
B_dir="sqlite-autoconf-${SQLITE_SOURCE_VERSION}"
|
B_dir="sqlite-autoconf-${SQLITE_SOURCE_VERSION}"
|
||||||
[ -f $B_dir.tar.gz ] || wget https://www.sqlite.org/${SQLITE_SOURCE_YEAR}/$B_dir.tar.gz
|
|
||||||
|
verified_download $B_dir.tar.gz $SQLITE_SOURCE_SHA256 \
|
||||||
|
https://www.sqlite.org/${SQLITE_SOURCE_YEAR}/$B_dir.tar.gz
|
||||||
|
|
||||||
tar -xf $B_dir.tar.gz
|
tar -xf $B_dir.tar.gz
|
||||||
cd $B_dir
|
cd $B_dir
|
||||||
./configure --prefix="${SYSROOT}/usr" --host=${ANDROID_NDK_ARCH}-linux
|
./configure --prefix="${SYSROOT}/usr" --host=${ANDROID_NDK_ARCH}-linux
|
||||||
make -j${HOST_NUM_CPU}
|
make -j${HOST_NUM_CPU}
|
||||||
make install
|
make install
|
||||||
rm -f ${SYSROOT}/usr/lib/libsqlite3.so*
|
rm -f ${SYSROOT}/usr/lib/libsqlite3.so*
|
||||||
${CC} -shared -o libsqlite3.so -fPIC sqlite3.o -ldl
|
# ${CC} -shared -o libsqlite3.so -fPIC sqlite3.o -ldl
|
||||||
cp libsqlite3.so "${SYSROOT}/usr/lib"
|
# cp libsqlite3.so "${SYSROOT}/usr/lib"
|
||||||
cd ..
|
cd ..
|
||||||
}
|
}
|
||||||
|
|
||||||
build_sqlcipher()
|
build_sqlcipher()
|
||||||
{
|
{
|
||||||
B_dir="sqlcipher-${SQLCIPHER_SOURCE_VERSION}"
|
B_dir="sqlcipher-${SQLCIPHER_SOURCE_VERSION}"
|
||||||
T_file="${B_dir}.tar.gz"
|
|
||||||
[ -f $T_file ] || wget -O $T_file https://github.com/sqlcipher/sqlcipher/archive/v${SQLCIPHER_SOURCE_VERSION}.tar.gz
|
|
||||||
rm -rf $B_dir
|
rm -rf $B_dir
|
||||||
|
|
||||||
|
T_file="${B_dir}.tar.gz"
|
||||||
|
|
||||||
|
verified_download $T_file $SQLCIPHER_SOURCE_SHA256 \
|
||||||
|
https://github.com/sqlcipher/sqlcipher/archive/v${SQLCIPHER_SOURCE_VERSION}.tar.gz
|
||||||
|
|
||||||
tar -xf $T_file
|
tar -xf $T_file
|
||||||
cd $B_dir
|
cd $B_dir
|
||||||
./configure --build=$(sh ./config.guess) \
|
./configure --build=$(sh ./config.guess) \
|
||||||
@ -127,7 +280,10 @@ build_libupnp()
|
|||||||
{
|
{
|
||||||
B_dir="libupnp-${LIBUPNP_SOURCE_VERSION}"
|
B_dir="libupnp-${LIBUPNP_SOURCE_VERSION}"
|
||||||
rm -rf $B_dir
|
rm -rf $B_dir
|
||||||
[ -f $B_dir.tar.bz2 ] || wget https://sourceforge.net/projects/pupnp/files/pupnp/libUPnP%20${LIBUPNP_SOURCE_VERSION}/$B_dir.tar.bz2
|
|
||||||
|
verified_download $B_dir.tar.bz2 $LIBUPNP_SOURCE_SHA256 \
|
||||||
|
https://sourceforge.net/projects/pupnp/files/pupnp/libUPnP%20${LIBUPNP_SOURCE_VERSION}/$B_dir.tar.bz2
|
||||||
|
|
||||||
tar -xf $B_dir.tar.bz2
|
tar -xf $B_dir.tar.bz2
|
||||||
cd $B_dir
|
cd $B_dir
|
||||||
## liupnp must be configured as static library because if not the linker will
|
## liupnp must be configured as static library because if not the linker will
|
||||||
@ -157,11 +313,21 @@ build_libmicrohttpd()
|
|||||||
cd ..
|
cd ..
|
||||||
}
|
}
|
||||||
|
|
||||||
|
build_rapidjson()
|
||||||
|
{
|
||||||
|
B_dir="rapidjson-1.1.0"
|
||||||
|
[ -f $B_dir.tar.gz ] || wget -O $B_dir.tar.gz https://github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz
|
||||||
|
tar -xf $B_dir.tar.gz
|
||||||
|
cp -r rapidjson-1.1.0/include/rapidjson/ "${SYSROOT}/usr/include/rapidjson"
|
||||||
|
}
|
||||||
|
|
||||||
build_toolchain
|
build_toolchain
|
||||||
|
[ "${INSTALL_QT_ANDROID}X" == "trueX" ] && install_qt_android
|
||||||
build_bzlib
|
build_bzlib
|
||||||
build_openssl
|
build_openssl
|
||||||
build_sqlite
|
build_sqlite
|
||||||
build_sqlcipher
|
build_sqlcipher
|
||||||
build_libupnp
|
build_libupnp
|
||||||
|
build_rapidjson
|
||||||
|
|
||||||
echo NDK_TOOLCHAIN_PATH=${NDK_TOOLCHAIN_PATH}
|
echo NATIVE_LIBS_TOOLCHAIN_PATH=${NATIVE_LIBS_TOOLCHAIN_PATH}
|
||||||
|
155
appveyor.yml
155
appveyor.yml
@ -12,7 +12,7 @@
|
|||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
|
|
||||||
# version format
|
# version format
|
||||||
version: RetroShare 0.6.0.{build}-{branch}
|
version: RetroShare-git-{branch}-{build}
|
||||||
|
|
||||||
# you can use {branch} name in version format too
|
# you can use {branch} name in version format too
|
||||||
# version: 1.0.{build}-{branch}
|
# version: 1.0.{build}-{branch}
|
||||||
@ -52,7 +52,7 @@ on_finish:
|
|||||||
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
||||||
|
|
||||||
# clone directory
|
# clone directory
|
||||||
clone_folder: c:\projects\RetroShare
|
clone_folder: C:\projects\RetroShare
|
||||||
|
|
||||||
# fetch repository as zip archive
|
# fetch repository as zip archive
|
||||||
#shallow_clone: true # default is "false"
|
#shallow_clone: true # default is "false"
|
||||||
@ -62,19 +62,18 @@ clone_depth: 1 # clone entire repository history if not de
|
|||||||
|
|
||||||
environment:
|
environment:
|
||||||
global:
|
global:
|
||||||
#Qt: https://www.appveyor.com/docs/installed-software#qt
|
## Qt: https://www.appveyor.com/docs/installed-software#qt
|
||||||
QTDIR: C:\Qt\5.4\mingw491_32
|
# QTDIR: C:\Qt\5.10.1\mingw53_32
|
||||||
MSYS2_ARCH: i686
|
MSYS2_ARCH: i686
|
||||||
TARGET: i686_32-pc-msys
|
TARGET: i686_32-pc-msys
|
||||||
|
MINGW_PREFIX: C:\msys64\mingw32
|
||||||
|
RS_DEPLOY: RetroShare_deploy
|
||||||
|
|
||||||
|
|
||||||
# build cache to preserve files/folders between builds
|
# build cache to preserve files/folders between builds
|
||||||
cache:
|
#cache:
|
||||||
- c:\projects\libs
|
# Disabled because it's bigger then supported by appveyor free plan
|
||||||
# - packages -> **\packages.config # preserve "packages" directory in the root of build folder but will reset it if packages.config is modified
|
# - C:\msys64\var\cache\pacman\pkg
|
||||||
# - projectA\libs
|
|
||||||
# - node_modules # local npm modules
|
|
||||||
# - %APPDATA%\npm-cache # npm cache
|
|
||||||
|
|
||||||
# scripts that run after cloning repository
|
# scripts that run after cloning repository
|
||||||
#install:
|
#install:
|
||||||
@ -89,23 +88,12 @@ install:
|
|||||||
# Configuring MSys2
|
# Configuring MSys2
|
||||||
- set PATH=C:\msys64\usr\bin;%PATH%
|
- set PATH=C:\msys64\usr\bin;%PATH%
|
||||||
- set PATH=C:\msys64\mingw32\bin;%PATH%
|
- set PATH=C:\msys64\mingw32\bin;%PATH%
|
||||||
|
- pacman --noconfirm -S mingw-w64-i686-qt5 mingw-w64-i686-miniupnpc mingw-w64-i686-sqlcipher mingw-w64-i686-libmicrohttpd
|
||||||
|
#- pacman --noconfirm -S mingw-w64-i686-qt5-static mingw-w64-i686-miniupnpc mingw-w64-i686-sqlcipher mingw-w64-i686-libmicrohttpd
|
||||||
|
#- set PATH=C:\msys64\mingw32\qt5-static\bin\;%PATH%
|
||||||
|
|
||||||
# Configuring Qt
|
# Configuring Qt
|
||||||
- set PATH=%QTDIR%\bin;C:\Qt\Tools\mingw491_32\bin;%PATH%
|
# - set PATH=%QTDIR%\bin;C:\Qt\Tools\mingw491_32\bin;%PATH%
|
||||||
# Install all default programms
|
|
||||||
#- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -Sy base-devel git mercurial cvs wget p7zip gcc perl ruby python2" #Already installed
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -Sy openssl-devel"
|
|
||||||
# Install toolchain
|
|
||||||
#- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain" #Already installed
|
|
||||||
# Install other binutils
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-curl mingw-w64-x86_64-curl"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-miniupnpc mingw-w64-x86_64-miniupnpc"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-sqlite3 mingw-w64-x86_64-sqlite3"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-speex mingw-w64-x86_64-speex"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-speexdsp mingw-w64-x86_64-speexdsp"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-opencv mingw-w64-x86_64-opencv"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-ffmpeg mingw-w64-x86_64-ffmpeg"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-libmicrohttpd mingw-w64-x86_64-libmicrohttpd"
|
|
||||||
- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-libxslt mingw-w64-x86_64-libxslt"
|
|
||||||
|
|
||||||
# Hack for new MSys2
|
# Hack for new MSys2
|
||||||
- copy C:\msys64\mingw32\i686-w64-mingw32\bin\ar.exe C:\msys64\mingw32\bin\i686-w64-mingw32-ar.exe
|
- copy C:\msys64\mingw32\i686-w64-mingw32\bin\ar.exe C:\msys64\mingw32\bin\i686-w64-mingw32-ar.exe
|
||||||
@ -114,10 +102,6 @@ install:
|
|||||||
- copy C:\msys64\mingw64\x86_64-w64-mingw32\bin\ar.exe C:\msys64\mingw64\bin\x86_64-w64-mingw32-ar.exe
|
- copy C:\msys64\mingw64\x86_64-w64-mingw32\bin\ar.exe C:\msys64\mingw64\bin\x86_64-w64-mingw32-ar.exe
|
||||||
- copy C:\msys64\mingw64\x86_64-w64-mingw32\bin\ranlib.exe C:\msys64\mingw64\bin\x86_64-w64-mingw32-ranlib.exe
|
- copy C:\msys64\mingw64\x86_64-w64-mingw32\bin\ranlib.exe C:\msys64\mingw64\bin\x86_64-w64-mingw32-ranlib.exe
|
||||||
- copy C:\msys64\mingw64\bin\windres.exe C:\msys64\mingw64\bin\x86_64-w64-mingw32-windres.exe
|
- copy C:\msys64\mingw64\bin\windres.exe C:\msys64\mingw64\bin\x86_64-w64-mingw32-windres.exe
|
||||||
# Build missing Libs
|
|
||||||
#- C:\msys64\mingw32.exe -lc "cd /c/projects/RetroShare/msys2_build_libs/ && make"
|
|
||||||
# Clone RetroShare
|
|
||||||
#- git clone -q --branch={branch} https://github.com/RetroShare/RetroShare.git C:\projects\RetroShare
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
@ -142,18 +126,112 @@ configuration: Release
|
|||||||
|
|
||||||
# scripts to run before build
|
# scripts to run before build
|
||||||
before_build:
|
before_build:
|
||||||
|
- cd C:\projects\RetroShare
|
||||||
|
# - find C:\ > filelist.txt
|
||||||
|
|
||||||
# scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services)
|
# scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services)
|
||||||
before_package:
|
before_package:
|
||||||
|
|
||||||
# scripts to run after build
|
|
||||||
after_build:
|
|
||||||
|
|
||||||
# to run your custom scripts instead of automatic MSBuild
|
# to run your custom scripts instead of automatic MSBuild
|
||||||
build_script:
|
build_script:
|
||||||
- cd C:\projects\RetroShare
|
- qmake -Wall -spec win32-g++ "CONFIG=debug"
|
||||||
- qmake CONFIG+=no_sqlcipher
|
- mingw32-make -j3
|
||||||
- make
|
|
||||||
|
# scripts to run after build
|
||||||
|
after_build:
|
||||||
|
- mkdir %RS_DEPLOY%
|
||||||
|
- copy retroshare-nogui\src\retroshare-nogui.exe %RS_DEPLOY%\
|
||||||
|
- copy retroshare-gui\src\retroshare.exe %RS_DEPLOY%\
|
||||||
|
|
||||||
|
## In Debug build winedeplyqt forget the non debug Qt libs
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5Svg.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5Core.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5Multimedia.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5Widgets.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5Xml.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5PrintSupport.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5Gui.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\Qt5Network.dll %RS_DEPLOY%\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\playlistformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\playlistformats\qtmultimedia_m3u.dll %RS_DEPLOY%\playlistformats
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\printsupport\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\printsupport\windowsprintersupport.dll %RS_DEPLOY%\printsupport\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\iconengines\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\iconengines\qsvgicon.dll %RS_DEPLOY%\iconengines\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\bearer\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\bearer\qgenericbearer.dll %RS_DEPLOY%\bearer\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\mediaservice\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\mediaservice\qtmedia_audioengine.dll %RS_DEPLOY%\mediaservice\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\mediaservice\dsengine.dll %RS_DEPLOY%\mediaservice\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\styles\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\styles\qwindowsvistastyle.dll %RS_DEPLOY%\styles\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qwebp.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qicns.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qjpeg.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qtiff.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qtga.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qjp2.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qico.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qwbmp.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qicns.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qgif.dll %RS_DEPLOY%\imageformats\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\imageformats\qsvg.dll %RS_DEPLOY%\imageformats\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\platforms\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\platforms\qwindows.dll %RS_DEPLOY%\platforms\
|
||||||
|
|
||||||
|
- mkdir %RS_DEPLOY%\audio\
|
||||||
|
- copy C:\msys64\mingw32\share\qt5\plugins\audio\qtaudio_windows.dll %RS_DEPLOY%\audio\
|
||||||
|
|
||||||
|
- windeployqt %RS_DEPLOY%\retroshare.exe
|
||||||
|
|
||||||
|
- copy C:\msys64\mingw32\bin\libbz2*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libeay32.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libminiupnpc.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libsqlcipher*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libsqlite3*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\ssleay32.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\zlib*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libgcc_s_dw2*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libstdc*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libwinpthread*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libicu*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libpcre*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libharfbuzz*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libpng*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libfreetype*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libglib*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libgraphite2.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libintl*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libiconv*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libjasper*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libjpeg*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libtiff*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libwebp*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libwebpdemux*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\liblzma*.dll %RS_DEPLOY%\
|
||||||
|
|
||||||
|
## Needed for libresapi http
|
||||||
|
- copy C:\msys64\mingw32\bin\libmicrohttpd*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libgnutls*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libgmp*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libhogweed*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libidn2*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libnettle*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libp11-kit*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libtasn1*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libunistring*.dll %RS_DEPLOY%\
|
||||||
|
- copy C:\msys64\mingw32\bin\libffi*.dll %RS_DEPLOY%\
|
||||||
|
|
||||||
|
- find C:\projects\RetroShare >> filelist.txt
|
||||||
|
|
||||||
# to disable automatic builds
|
# to disable automatic builds
|
||||||
#build: off
|
#build: off
|
||||||
@ -162,7 +240,10 @@ build_script:
|
|||||||
# artifacts configuration #
|
# artifacts configuration #
|
||||||
#---------------------------------#
|
#---------------------------------#
|
||||||
|
|
||||||
#artifacts:
|
artifacts:
|
||||||
|
- path: $(RS_DEPLOY)
|
||||||
|
- path: '**\*.exe'
|
||||||
|
- path: filelist.txt
|
||||||
#
|
#
|
||||||
# # pushing a single file
|
# # pushing a single file
|
||||||
# - path: test.zip
|
# - path: test.zip
|
||||||
|
@ -1,5 +1,141 @@
|
|||||||
retroshare (ZZZZZZ-1.XXXXXX~YYYYYY) YYYYYY; urgency=low
|
retroshare (ZZZZZZ-1.XXXXXX~YYYYYY) YYYYYY; urgency=low
|
||||||
|
|
||||||
|
f663600 csoler Fri, 1 Jun 2018 22:27:59 +0200 fixed makeSourcePackage.sh
|
||||||
|
9b16e33 csoler Fri, 11 May 2018 20:53:29 +0200 removed conflicts to retroshare06 in debian control file
|
||||||
|
57dde55 csoler Sat, 26 May 2018 11:23:33 +0200 Merge pull request #1269 from PhenomRetroShare/Add_NeverAskMeForExternalLinkActivated
|
||||||
|
33fe823 csoler Sat, 26 May 2018 11:22:47 +0200 Merge pull request #1271 from sehraf/pr_compile-fix-unused-services
|
||||||
|
65beb2c csoler Sat, 26 May 2018 11:09:41 +0200 Merge pull request #1275 from sehraf/pr_fix-IDdialog-chat-link
|
||||||
|
d8b3fc0 csoler Sat, 26 May 2018 11:08:46 +0200 Merge pull request #1274 from PhenomRetroShare/Fix_AppVeyorCompil
|
||||||
|
f53e5e8 sehraf Fri, 25 May 2018 23:59:02 +0200 Fix displayed chat link name in id dialog before (decimal): Message in chat room 5327517029776505601 after (proper id): Message in chat room LFD6E08C33A98C658
|
||||||
|
428b331 sehraf Fri, 25 May 2018 23:12:35 +0200 fix for Qt 5.11
|
||||||
|
7c77e93 Phenom Fri, 25 May 2018 17:32:36 +0200 Fix AppVeyor Compilation
|
||||||
|
de65cb6 csoler Tue, 22 May 2018 23:59:26 +0200 Merge pull request #1272 from G10h4ck/net_little_fixes
|
||||||
|
1ad1fdc Gioacc Tue, 22 May 2018 19:17:37 +0200 p3NetMgrIMPL::checkNetAddress() notify if port change
|
||||||
|
0bf02e2 Gioacc Tue, 22 May 2018 19:14:25 +0200 pqissludp::Initiate_Connection() check remote_addr to be IPv4 before use
|
||||||
|
0c19a56 sehraf Mon, 21 May 2018 14:55:10 +0200 compile fix gxsphoto
|
||||||
|
92b21d7 sehraf Mon, 21 May 2018 14:26:46 +0200 compile fix wikipoos
|
||||||
|
8f107cc Phenom Sat, 19 May 2018 16:37:29 +0200 Add Never Ask Me For External Link Activated
|
||||||
|
186617f Gioacc Thu, 17 May 2018 16:43:14 +0200 Fix missing include
|
||||||
|
28981b6 csoler Wed, 16 May 2018 13:37:02 +0200 Merge pull request #1251 from PhenomRetroShare/Fix_Cppcheck(duplInheritedMember)InRsItem
|
||||||
|
d11f88c csoler Wed, 16 May 2018 13:33:25 +0200 Merge pull request #1252 from PhenomRetroShare/Fix_Cppcheck(duplInheritedMember)InbdNode
|
||||||
|
2145911 csoler Wed, 16 May 2018 13:30:56 +0200 Merge pull request #1262 from PhenomRetroShare/Fix_PartialDirCheck
|
||||||
|
e232000 csoler Wed, 16 May 2018 13:28:23 +0200 Merge pull request #1266 from csoler/v0.6-FT
|
||||||
|
3f88e3e csoler Wed, 16 May 2018 13:24:52 +0200 added check to avoid hashing files that are currently being modified
|
||||||
|
8451550 csoler Wed, 16 May 2018 11:40:39 +0200 added missing licence to file_tree.h
|
||||||
|
291c86e csoler Wed, 16 May 2018 11:17:22 +0200 Merge pull request #1265 from csoler/v0.6-GxsFix
|
||||||
|
4661329 csoler Wed, 16 May 2018 11:15:18 +0200 fixed bug causing new forums and identities to not show up immediately
|
||||||
|
9f37b63 G10h4c Wed, 16 May 2018 10:49:28 +0200 Merge pull request #1264 from G10h4ck/channel_json_api_v2
|
||||||
|
181d99e Gioacc Wed, 16 May 2018 10:38:47 +0200 Give proper error message if Qt version is too old
|
||||||
|
f12cd57 Phenom Sat, 12 May 2018 14:31:17 +0200 Fix Partial Dir Check
|
||||||
|
57cff61 csoler Fri, 11 May 2018 20:28:53 +0200 fixed merge
|
||||||
|
ecbd115 csoler Fri, 11 May 2018 20:24:24 +0200 added missing include path for libretroshare/src in libresapi
|
||||||
|
fe5ea9e csoler Fri, 11 May 2018 17:37:15 +0200 additional fixes to debian packaging files
|
||||||
|
2173aab csoler Fri, 11 May 2018 17:02:58 +0200 fixed rules file again
|
||||||
|
84a02cb csoler Fri, 11 May 2018 16:39:49 +0200 added missing targets in rules file
|
||||||
|
4b6304e csoler Fri, 11 May 2018 16:33:19 +0200 few fixes according to lintian complaints
|
||||||
|
c2492fe csoler Thu, 10 May 2018 23:10:16 +0200 fixed a few lintian errors in debian/control
|
||||||
|
9f5409b csoler Thu, 10 May 2018 22:04:11 +0200 fixed email to match mentors login
|
||||||
|
45fdbb4 csoler Thu, 10 May 2018 22:03:39 +0200 fixed email to match mentors login
|
||||||
|
b4ada80 csoler Wed, 9 May 2018 13:54:40 +0200 removed > 3.4.1 in debian/control, because pbuilder would not build
|
||||||
|
e81c82e csoler Wed, 9 May 2018 13:37:25 +0200 added notes file for debian release
|
||||||
|
4d287d6 csoler Wed, 9 May 2018 13:27:16 +0200 fixed weird mistake in grouter which causes an issue only in gcc > 8
|
||||||
|
889c277 csoler Wed, 9 May 2018 10:15:32 +0200 fixed packaging script for debian release
|
||||||
|
f406d9a csoler Wed, 9 May 2018 10:15:02 +0200 updated debian/control to be the control file for stretch. Updated copyright notice
|
||||||
|
186ff0f csoler Wed, 9 May 2018 10:12:34 +0200 created proper debian changelog using dch and updated project url
|
||||||
|
6d67936 csoler Tue, 8 May 2018 15:34:44 +0200 Merge pull request #1253 from PhenomRetroShare/Add_LastPostColInGroupTreeWidget
|
||||||
|
2ebacf3 Phenom Tue, 8 May 2018 12:08:08 +0200 Add Last Post Column in GroupTreeWidget.
|
||||||
|
4d748bd Phenom Mon, 7 May 2018 18:05:07 +0200 Fix CppCheck duplInheritedMember warning in bdNode
|
||||||
|
f39fd06 Phenom Mon, 7 May 2018 17:29:11 +0200 Fix CppCheck duplInheritedMember warning in RsItem
|
||||||
|
1352631 thunde Mon, 7 May 2018 06:42:52 +0200 Updated Windows build environment
|
||||||
|
38ac234 thunde Mon, 7 May 2018 07:30:29 +0200 Fixed Windows compile with pre-compiled libraries Added new variable EXTERNAL_LIB_DIR to specify path of external libraries
|
||||||
|
d9a75a9 thunde Sun, 29 Apr 2018 20:40:05 +0200 Added RapidJSON to Windows build environment
|
||||||
|
5b607ad csoler Sun, 6 May 2018 23:53:45 +0200 Merge pull request #1245 from PhenomRetroShare/AddContextMenuForGxsIdInTextChatBrowser
|
||||||
|
a6821f4 csoler Sun, 6 May 2018 23:02:18 +0200 Merge pull request #1249 from sehraf/pr_libsecret
|
||||||
|
c20436e csoler Sun, 6 May 2018 22:59:20 +0200 Merge pull request #1250 from PhenomRetroShare/Fix_CppCheckerWarningInFtController
|
||||||
|
d8dc2a8 csoler Sun, 6 May 2018 22:57:57 +0200 Merge pull request #1246 from PhenomRetroShare/Add_GxsIdInRestoredChatMsg
|
||||||
|
dca33da Phenom Sun, 6 May 2018 18:53:29 +0200 Fix CppCheck in ftcontroller.cc
|
||||||
|
c89e36a sehraf Fri, 4 May 2018 20:52:31 +0200 add auto selection of libsecret with fallback to libgnome-keyring
|
||||||
|
1129bcb sehraf Fri, 4 May 2018 20:47:41 +0200 Add support for libsecret
|
||||||
|
10badf5 sehraf Fri, 4 May 2018 20:43:40 +0200 fix retroshare-nogui.pro autologin
|
||||||
|
676c070 csoler Thu, 3 May 2018 15:55:21 +0200 extended the rapid_json trick to plugins
|
||||||
|
5f12b60 csoler Thu, 3 May 2018 15:22:39 +0200 added -lgnome-keyring to unix LIBS when rs_autologin is set
|
||||||
|
bfe8e40 csoler Thu, 3 May 2018 15:22:03 +0200 updated ubuntu changelog
|
||||||
|
98f0052 Phenom Thu, 3 May 2018 15:04:22 +0200 Add GxsId in Restored Chat Message.
|
||||||
|
ecba4c2 Phenom Wed, 2 May 2018 20:31:52 +0200 Add Context Menu for GxsId in lobby textBrowser.
|
||||||
|
91ed367 csoler Thu, 3 May 2018 13:45:44 +0200 added packaging for ubuntu bionic
|
||||||
|
56e8134 cyril soler Thu, 3 May 2018 11:32:24 +0200 removed sqlite3 lib from ld when using sqlcipher.
|
||||||
|
1366f61 csoler Wed, 2 May 2018 23:51:46 +0200 Merge pull request #1241 from RetroPooh/chatimgattprev1
|
||||||
|
8e111c2 csoler Wed, 2 May 2018 22:46:27 +0200 added rapidjson-1.1.0 code hard-coded in the source directory to allow everyone to compile without the need to tweak too much. When v1.1.0 is mainstream (espcially on ubuntu) we can revert back to an external dependency
|
||||||
|
48c4b4c G10h4c Sat, 28 Apr 2018 09:34:14 +0200 Merge pull request #1242 from beardog108/master
|
||||||
|
ccede9d G10h4c Sat, 28 Apr 2018 09:33:14 +0200 Merge pull request #1243 from sehraf/pr_fix-make-install
|
||||||
|
10daf3b sehraf Sat, 28 Apr 2018 09:06:10 +0200 Fix 'make install'
|
||||||
|
82a00c2 KevinF Fri, 27 Apr 2018 15:34:43 -0500 added rapidjson to package installation command on Debian/OpenSUSE/Arch
|
||||||
|
be75e89 Gioacc Fri, 27 Apr 2018 20:55:38 +0200 Fix compialtion after merge
|
||||||
|
f3ae61b Gioacc Fri, 27 Apr 2018 18:17:09 +0200 Merge branch 'json_experiments'
|
||||||
|
|
||||||
|
-- Retroshare Dev Team <contact@retroshare.net> Thu, 03 May 2018 12:00:00 +0100
|
||||||
|
|
||||||
|
retroshare (0.6.4-1.20180503.676c0701~xenial) xenial; urgency=low
|
||||||
|
|
||||||
|
2dc69cb RetroP Fri, 27 Apr 2018 16:50:00 +0300 embed preview for images on file attach in chat
|
||||||
|
c199199 Gioacc Sun, 8 Apr 2018 12:37:41 +0200 pqissl silence extra debug message
|
||||||
|
8245d74 csoler Sat, 7 Apr 2018 14:33:58 +0200 Merge pull request #1230 from csoler/master
|
||||||
|
2782494 csoler Sat, 7 Apr 2018 14:29:23 +0200 removed debug info
|
||||||
|
e2b0e27 csoler Sat, 7 Apr 2018 00:56:07 +0200 fixed costly polling in RsGenExchange
|
||||||
|
cc091cc Gioacc Sat, 7 Apr 2018 12:48:01 +0200 Fixed hidden nodes listening failure
|
||||||
|
73c6dee csoler Tue, 27 Mar 2018 20:54:31 +0200 Merge pull request #1191 from G10h4ck/IPv6-v3
|
||||||
|
4be73b7 csoler Sat, 24 Mar 2018 10:18:37 +0100 Merge pull request #1216 from beardog108/security
|
||||||
|
599c3d4 Kevin Fri, 23 Mar 2018 23:00:27 -0500 fixed clickjacking attack with x-frame-options
|
||||||
|
24d1f5d csoler Sat, 17 Mar 2018 18:40:32 +0100 Merge pull request #1190 from PhenomRetroShare/Add_ShowEmptySubMenuRemoteTree
|
||||||
|
09de680 csoler Sat, 17 Mar 2018 18:30:21 +0100 Merge pull request #1210 from PhenomRetroShare/Add_BackgroundInProgressBarText
|
||||||
|
1432104 csoler Sat, 17 Mar 2018 18:25:47 +0100 Merge pull request #1214 from csoler/v0.6-FT
|
||||||
|
e1482dd Phenom Sat, 17 Mar 2018 00:00:05 +0100 Add Rounded and Gradient Background to xprogressbar text.
|
||||||
|
7da73b3 Phenom Mon, 5 Mar 2018 20:31:39 +0100 Add differents views depends ProgressBar width
|
||||||
|
311b190 Phenom Sun, 4 Mar 2018 20:06:33 +0100 Add Background to xprogressbar text for more readability.
|
||||||
|
e1ad21c csoler Thu, 15 Mar 2018 13:11:19 +0100 fixed wrong file count in RsCollectionDialog when downloading files
|
||||||
|
b3653d1 csoler Thu, 15 Mar 2018 11:32:55 +0100 enabled aggressive re-request of pending slices at end of transfer, thus fixing the long delay to finish files with mixed fast/slow sources
|
||||||
|
6e8305a csoler Wed, 14 Mar 2018 20:56:30 +0100 Merge pull request #1211 from PhenomRetroShare/Fix_AvatarStatusOverlay
|
||||||
|
c7549a2 csoler Wed, 14 Mar 2018 20:49:42 +0100 Merge pull request #1208 from PhenomRetroShare/Fix_ChangeChatTextColorWhenChangeStyle
|
||||||
|
11cfa7b csoler Wed, 14 Mar 2018 20:34:52 +0100 Merge pull request #1209 from PhenomRetroShare/Add_DescriptionGxsGroupToolTip
|
||||||
|
3fc6314 csoler Wed, 14 Mar 2018 20:33:34 +0100 Merge pull request #1206 from PhenomRetroShare/Fix_AboutIcon
|
||||||
|
0e6d27a csoler Tue, 13 Mar 2018 20:25:38 +0100 fixed bug in FT causing transfer lines to only update when the mouse moves over the widget
|
||||||
|
91634ba thunde Thu, 8 Mar 2018 17:45:24 +0100 Added build of Retrotor to Windows build environment
|
||||||
|
e9b49e1 Gioacc Mon, 12 Mar 2018 17:06:01 +0100 Update Android quirks documentation
|
||||||
|
ce56a20 Gioacc Mon, 12 Mar 2018 16:22:42 +0100 Added sources verification in android toolchain
|
||||||
|
e7078b5 Gioacc Mon, 12 Mar 2018 14:27:59 +0100 Update Android documentation
|
||||||
|
514b31e Gioacc Sun, 11 Mar 2018 20:46:07 +0100 Add Qt installation in android preparation script
|
||||||
|
6f30aa2 Gioacc Sun, 11 Mar 2018 20:45:40 +0100 Merge branch 'master' of git://github.com/RetroShare/RetroShare
|
||||||
|
13b18e3 csoler Sat, 10 Mar 2018 16:05:52 +0100 added missing decoration icon on transfer sources
|
||||||
|
4dd2776 Gioacc Sat, 10 Mar 2018 13:15:53 +0100 Remove android JNI .class from source
|
||||||
|
2b300eb Gioacc Sat, 10 Mar 2018 00:44:24 +0100 Update version in Android Manifest
|
||||||
|
f5a3b26 Gioacc Fri, 9 Mar 2018 20:26:29 +0100 More omogeneous variable naming in android build tools
|
||||||
|
c92b860 thunde Sun, 4 Mar 2018 20:08:15 +0100 Windows build environment: - Updated external libraries - Added compile of plugins to build.bat - Added copy of Qt style DLL to pack.bat and Windows Installer - Removed "CONFIG=console" for release build
|
||||||
|
8b42873 Phenom Sun, 4 Mar 2018 22:45:11 +0100 Fix Friend Avatar status overlay no depends size scale.
|
||||||
|
6877589 Phenom Sun, 4 Mar 2018 18:19:18 +0100 Add description in GroupTreeWidget tooltip.
|
||||||
|
51cc94b Phenom Sun, 4 Mar 2018 17:31:40 +0100 Fix ChatWidget current text edit color when changing appearance style.
|
||||||
|
4e6f2ae Phenom Sun, 4 Mar 2018 14:31:16 +0100 Fix Icon for About page.
|
||||||
|
a89ab8f Phenom Sat, 24 Feb 2018 14:07:32 +0100 Add ShowEmpty sub menu in Tree Remote SharedFilesDialog.
|
||||||
|
|
||||||
|
-- Retroshare Dev Team <contact@retroshare.net> Thu, 03 May 2018 12:00:00 +0100
|
||||||
|
|
||||||
|
retroshare (0.6.4-1.20180313.0e6d27ad~xenial) xenial; urgency=low
|
||||||
|
|
||||||
|
919417a csoler Sat, 3 Mar 2018 19:04:54 +0100 make sure tor executable from config path can be reached
|
||||||
|
b587ac8 csoler Sat, 3 Mar 2018 16:06:49 +0100 Merge pull request #1192 from PhenomRetroShare/Add_WarningMaxFlatViewFile
|
||||||
|
9bcff07 csoler Sat, 3 Mar 2018 15:58:11 +0100 Merge pull request #1203 from PhenomRetroShare/Fix_SharedFileDialogShowColumn
|
||||||
|
ead2aea csoler Sat, 3 Mar 2018 15:56:51 +0100 Merge pull request #1204 from csoler/v0.6-FT
|
||||||
|
dcb3f79 csoler Sat, 3 Mar 2018 15:55:52 +0100 removed some debug info in RSLink
|
||||||
|
1a1dc64 csoler Sat, 3 Mar 2018 15:49:45 +0100 fixed transfers list bug causing ghost entries to appear
|
||||||
|
58d418d Phenom Sat, 3 Mar 2018 12:08:21 +0100 Fix SharedFilesDialog show old hidden column.
|
||||||
|
ab45a97 Phenom Sat, 3 Mar 2018 12:05:13 +0100 Revert "Fix SharedFilesDialog show old hidden column."
|
||||||
|
57f87a6 csoler Fri, 2 Mar 2018 22:58:50 +0100 Merge pull request #1201 from csoler/v0.6-SecurityFixes
|
||||||
|
9386bb9 csoler Fri, 2 Mar 2018 22:57:14 +0100 tried to fix FT list bug.
|
||||||
|
952ff03 csoler Fri, 2 Mar 2018 21:28:09 +0100 Merge pull request #1200 from csoler/v0.6-SecurityFixes
|
||||||
|
e88eebf csoler Fri, 2 Mar 2018 21:26:38 +0100 attempt to fix wrong number of rows in DL list
|
||||||
|
f2a737e csoler Fri, 2 Mar 2018 18:13:09 +0100 fixed font size compilation error
|
||||||
|
ca402c2 csoler Fri, 2 Mar 2018 18:05:11 +0100 fixed column sizing in FT dialog
|
||||||
|
efa5827 csoler Fri, 2 Mar 2018 18:01:56 +0100 fixed missing peer availability maps in FT dialog
|
||||||
|
e5edea3 csoler Thu, 1 Mar 2018 14:10:30 +0100 removed precise and zesty which are obsolete
|
||||||
3d7be85 csoler Thu, 1 Mar 2018 11:46:47 +0100 Merge pull request #1199 from csoler/v0.6-SecurityFixes
|
3d7be85 csoler Thu, 1 Mar 2018 11:46:47 +0100 Merge pull request #1199 from csoler/v0.6-SecurityFixes
|
||||||
026951f csoler Thu, 1 Mar 2018 11:45:54 +0100 added consistency check in getGroupMeta so that ADMIN/PUBLISH flags always correspond to what the key set reflects
|
026951f csoler Thu, 1 Mar 2018 11:45:54 +0100 added consistency check in getGroupMeta so that ADMIN/PUBLISH flags always correspond to what the key set reflects
|
||||||
028a246 csoler Thu, 1 Mar 2018 09:44:59 +0100 Merge pull request #1197 from csoler/v0.6-SecurityFixes
|
028a246 csoler Thu, 1 Mar 2018 09:44:59 +0100 Merge pull request #1197 from csoler/v0.6-SecurityFixes
|
||||||
|
46
build_scripts/Debian+Ubuntu/control.bionic
Normal file
46
build_scripts/Debian+Ubuntu/control.bionic
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Source: retroshare
|
||||||
|
Section: devel
|
||||||
|
Priority: standard
|
||||||
|
Maintainer: Cyril Soler <csoler@users.sourceforge.net>
|
||||||
|
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.6, libsqlcipher-dev, libmicrohttpd-dev, libavcodec-dev, qtmultimedia5-dev, qttools5-dev, libqt5x11extras5-dev, qt5-default
|
||||||
|
Standards-Version: 3.9.6
|
||||||
|
Homepage: http://retroshare.sourceforge.net
|
||||||
|
|
||||||
|
Package: retroshare-voip-plugin
|
||||||
|
Architecture: any
|
||||||
|
Conflicts: retroshare06-voip-plugin
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare, libspeex1, libspeexdsp1, libqt5multimedia5
|
||||||
|
Description: RetroShare VOIP plugin
|
||||||
|
This package provides a plugin for RetroShare, a secured Friend-to-Friend communication
|
||||||
|
plateform. The plugin adds voice-over-IP functionality to the private chat window. Both
|
||||||
|
friends chatting together need the plugin installed to be able to talk together.
|
||||||
|
|
||||||
|
Package: retroshare-feedreader-plugin
|
||||||
|
Architecture: any
|
||||||
|
Conflicts: retroshare06-feedreader-plugin
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare
|
||||||
|
Description: RetroShare FeedReader plugin
|
||||||
|
This package provides a plugin for RetroShare, a secured Friend-to-Friend communication
|
||||||
|
plateform. The plugin adds a RSS feed reader tab to retroshare.
|
||||||
|
|
||||||
|
Package: retroshare-nogui
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring
|
||||||
|
Conflicts: retroshare,retroshare06-nogui
|
||||||
|
Description: Secure communication with friends
|
||||||
|
This is the command-line client for RetroShare network. This client
|
||||||
|
can be contacted and talked-to using SSL. Clients exist for portable
|
||||||
|
devices running e.g. Android.
|
||||||
|
|
||||||
|
Package: retroshare
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring
|
||||||
|
Conflicts: retroshare-nogui,retroshare06
|
||||||
|
Description: Secure communication with friends
|
||||||
|
RetroShare is a Open Source cross-platform, private and secure decentralised
|
||||||
|
commmunication platform. It lets you to securely chat and share files with your
|
||||||
|
friends and family, using a web-of-trust to authenticate peers and OpenSSL to
|
||||||
|
encrypt all communication. RetroShare provides filesharing, chat, messages,
|
||||||
|
forums and channels.
|
||||||
|
|
||||||
|
|
5
build_scripts/Debian+Ubuntu/debian/changelog
Normal file
5
build_scripts/Debian+Ubuntu/debian/changelog
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
retroshare (0.6.4) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* Initial release for Debian. (Closes: #659069)
|
||||||
|
|
||||||
|
-- Cyril Soler <csoler@users.sourceforge.net> Wed, 09 May 2018 10:11:31 +0200
|
@ -1 +1 @@
|
|||||||
7
|
10
|
||||||
|
@ -2,14 +2,14 @@ Source: retroshare
|
|||||||
Section: devel
|
Section: devel
|
||||||
Priority: standard
|
Priority: standard
|
||||||
Maintainer: Cyril Soler <csoler@users.sourceforge.net>
|
Maintainer: Cyril Soler <csoler@users.sourceforge.net>
|
||||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libqtmultimediakit1, qtmobility-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.5, libsqlcipher-dev, libmicrohttpd-dev, libavcodec-dev
|
Build-Depends: debhelper (>= 9), libglib2.0-dev, libupnp-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.6, libsqlcipher-dev, libmicrohttpd-dev, libavcodec-dev, qtmultimedia5-dev, qttools5-dev, libqt5x11extras5-dev, qtbase5-dev, qt5-qmake, qtbase5-dev-tools
|
||||||
Standards-Version: 3.9.3
|
Standards-Version: 4.1.4
|
||||||
Homepage: http://retroshare.sourceforge.net
|
Homepage: http://retroshare.sourceforge.net
|
||||||
|
|
||||||
Package: retroshare-voip-plugin
|
Package: retroshare-voip-plugin
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Conflicts: retroshare06-voip-plugin
|
Conflicts:
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare, libspeex1, libspeexdsp1, libqtmultimediakit1
|
Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare, libspeex1, libspeexdsp1, libqt5multimedia5
|
||||||
Description: RetroShare VOIP plugin
|
Description: RetroShare VOIP plugin
|
||||||
This package provides a plugin for RetroShare, a secured Friend-to-Friend communication
|
This package provides a plugin for RetroShare, a secured Friend-to-Friend communication
|
||||||
plateform. The plugin adds voice-over-IP functionality to the private chat window. Both
|
plateform. The plugin adds voice-over-IP functionality to the private chat window. Both
|
||||||
@ -17,30 +17,25 @@ Description: RetroShare VOIP plugin
|
|||||||
|
|
||||||
Package: retroshare-feedreader-plugin
|
Package: retroshare-feedreader-plugin
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Conflicts: retroshare06-feedreader-plugin
|
Conflicts:
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare
|
Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare
|
||||||
Description: RetroShare FeedReader plugin
|
Description: RetroShare FeedReader plugin
|
||||||
This package provides a plugin for RetroShare, a secured Friend-to-Friend communication
|
Plugin for Retroshare, adding a RSS feed reader tab to retroshare.
|
||||||
plateform. The plugin adds a RSS feed reader tab to retroshare.
|
|
||||||
|
|
||||||
Package: retroshare-nogui
|
Package: retroshare-nogui
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring
|
Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring
|
||||||
Conflicts: retroshare,retroshare06-nogui
|
Conflicts: retroshare
|
||||||
Description: Secure communication with friends
|
Description: headless version of Retroshare
|
||||||
This is the command-line client for RetroShare network. This client
|
Headless version of the Retroshare platform.
|
||||||
can be contacted and talked-to using SSL. Clients exist for portable
|
|
||||||
devices running e.g. Android.
|
|
||||||
|
|
||||||
Package: retroshare
|
Package: retroshare
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring
|
Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring
|
||||||
Conflicts: retroshare-nogui,retroshare06
|
Conflicts: retroshare-nogui
|
||||||
Description: Secure communication with friends
|
Description: Secure communication with friends
|
||||||
RetroShare is a Open Source cross-platform, private and secure decentralised
|
RetroShare is a Open Source, private and secure decentralised
|
||||||
commmunication platform. It lets you to securely chat and share files with your
|
commmunication platform. It creates mesh of computers linked with TLS connections,
|
||||||
friends and family, using a web-of-trust to authenticate peers and OpenSSL to
|
on top of which it provides file transfer, asynchronous email, forums, channels and chat.
|
||||||
encrypt all communication. RetroShare provides filesharing, chat, messages,
|
|
||||||
forums and channels.
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ configure-stamp:
|
|||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
|
|
||||||
build: build-stamp
|
build: build-arch build-indep
|
||||||
|
|
||||||
build-stamp: configure-stamp
|
build-stamp: configure-stamp
|
||||||
dh_testdir
|
dh_testdir
|
||||||
# Add here commands to compile the package.
|
# Add here commands to compile the package.
|
||||||
@ -20,18 +21,24 @@ build-stamp: configure-stamp
|
|||||||
cd src && $(MAKE)
|
cd src && $(MAKE)
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
|
build-indep: build-stamp
|
||||||
|
|
||||||
|
build-arch: build-stamp
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
dh_testdir
|
dh_testdir
|
||||||
dh_testroot
|
dh_testroot
|
||||||
rm -f configure-stamp build-stamp
|
rm -f configure-stamp build-stamp
|
||||||
# Add here commands to clean up after the build process.
|
# Add here commands to clean up after the build process.
|
||||||
[ ! -f src/Makefile ] || (cd src && $(MAKE) distclean)
|
[ ! -f src/Makefile ] || (cd src && $(MAKE) distclean)
|
||||||
|
dh_prep
|
||||||
dh_clean
|
dh_clean
|
||||||
|
|
||||||
install: build
|
install: build
|
||||||
dh_testdir
|
dh_testdir
|
||||||
dh_testroot
|
dh_testroot
|
||||||
dh_clean -k
|
dh_prep
|
||||||
|
dh_clean
|
||||||
#dh_installdirs
|
#dh_installdirs
|
||||||
cd src && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/tmp install
|
cd src && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/tmp install
|
||||||
|
|
||||||
|
1
build_scripts/Debian+Ubuntu/debian/source/format
Normal file
1
build_scripts/Debian+Ubuntu/debian/source/format
Normal file
@ -0,0 +1 @@
|
|||||||
|
1.0
|
32
build_scripts/Debian+Ubuntu/debian_release_howto.txt
Normal file
32
build_scripts/Debian+Ubuntu/debian_release_howto.txt
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
Creation of a new Debian changelog:
|
||||||
|
|
||||||
|
dch --create --package retroshare --newversion 0.6.4-1
|
||||||
|
|
||||||
|
Note: dch reads email in $DEBMAIL or $USER@$HOSTNAME, so it should be made correct in debian/changlog
|
||||||
|
If the email does not match the email in mentors, the package will be rejected.
|
||||||
|
|
||||||
|
dget command to retrieve source package:
|
||||||
|
|
||||||
|
dget -u https://launchpad.net/~retroshare/+archive/ubuntu/stable/+files/retroshare_0.6.4-1.20180313.0e6d27ad~xenial.dsc
|
||||||
|
|
||||||
|
(-u means don't check PGP signature)
|
||||||
|
|
||||||
|
When ready:
|
||||||
|
* updload the package in a place that can be used to dget the package on mentors.debian.net.
|
||||||
|
|
||||||
|
dput mentors retroshare_0.6.4-1_source.changes
|
||||||
|
|
||||||
|
Checkign with lintian:
|
||||||
|
lintian --pedantic --profile debian retroshare_0.6.4-1_source.changes
|
||||||
|
|
||||||
|
Todo
|
||||||
|
* make a sid binary package.
|
||||||
|
* test in sid using pbuilder chroot system (pbuilder login)
|
||||||
|
* upload to mentors
|
||||||
|
* request for sponsorship
|
||||||
|
|
||||||
|
Getting help:
|
||||||
|
https://webchat.oftc.net/
|
||||||
|
|
||||||
|
Bug creation/report
|
||||||
|
reportbug -B debian
|
@ -3,7 +3,7 @@
|
|||||||
###################### PARAMETERS ####################
|
###################### PARAMETERS ####################
|
||||||
gitpath="https://github.com/RetroShare/RetroShare.git"
|
gitpath="https://github.com/RetroShare/RetroShare.git"
|
||||||
branch="master"
|
branch="master"
|
||||||
#branch="v0.6.3-official_release"
|
#branch="v0.6.4-official_release"
|
||||||
#bubba3="Y" # comment out to compile for bubba3
|
#bubba3="Y" # comment out to compile for bubba3
|
||||||
######################################################
|
######################################################
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ if test "${useretrotor}" = "true"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "${dist}" = "" ; then
|
if test "${dist}" = "" ; then
|
||||||
dist="trusty xenial artful"
|
dist="trusty xenial artful bionic"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo Attempting to get revision number...
|
echo Attempting to get revision number...
|
||||||
@ -131,6 +131,12 @@ cp -r debian ${workdir}/debian
|
|||||||
# VOIP tweak
|
# VOIP tweak
|
||||||
cp ${workdir}/src/retroshare-gui/src/gui/chat/PopupChatDialog.ui ${workdir}/src/plugins/VOIP/gui/PopupChatDialog.ui
|
cp ${workdir}/src/retroshare-gui/src/gui/chat/PopupChatDialog.ui ${workdir}/src/plugins/VOIP/gui/PopupChatDialog.ui
|
||||||
|
|
||||||
|
# remove unised qml code, only needed on Android
|
||||||
|
|
||||||
|
rm -rf ${workdir}/src/retroshare-qml-app/
|
||||||
|
rm -rf ${workdir}/src/build_scripts/
|
||||||
|
rm ${workdir}/debian/*~
|
||||||
|
|
||||||
# Cloning sqlcipher
|
# Cloning sqlcipher
|
||||||
# git clone https://github.com/sqlcipher/sqlcipher.git
|
# git clone https://github.com/sqlcipher/sqlcipher.git
|
||||||
|
|
||||||
@ -147,6 +153,8 @@ echo Cleaning...
|
|||||||
|
|
||||||
echo Calling debuild...
|
echo Calling debuild...
|
||||||
for i in ${dist}; do
|
for i in ${dist}; do
|
||||||
|
|
||||||
|
if ! test "${i}" = "debian"; then
|
||||||
echo copying changelog for ${i}
|
echo copying changelog for ${i}
|
||||||
sed -e s/XXXXXX/"${rev}"/g -e s/YYYYYY/"${i}"/g -e s/ZZZZZZ/"${version_number}"/g ../changelog > debian/changelog
|
sed -e s/XXXXXX/"${rev}"/g -e s/YYYYYY/"${i}"/g -e s/ZZZZZZ/"${version_number}"/g ../changelog > debian/changelog
|
||||||
|
|
||||||
@ -160,8 +168,11 @@ for i in ${dist}; do
|
|||||||
echo Using standard control file control."${i}" for distribution "${i}"
|
echo Using standard control file control."${i}" for distribution "${i}"
|
||||||
cp ../debian/control debian/control
|
cp ../debian/control debian/control
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo creating official debian release. Using built-in changelog and control files
|
||||||
|
fi
|
||||||
|
|
||||||
debuild -S -k${gpgkey}
|
debuild -S -k${gpgkey} --lintian-opts +pedantic -EviIL
|
||||||
done
|
done
|
||||||
cd -
|
cd -
|
||||||
|
|
||||||
|
@ -1,25 +1,24 @@
|
|||||||
ZLIB_VERSION=1.2.3
|
ZLIB_VERSION=1.2.3
|
||||||
BZIP2_VERSION=1.0.6
|
BZIP2_VERSION=1.0.6
|
||||||
MINIUPNPC_VERSION=2.0
|
MINIUPNPC_VERSION=2.0
|
||||||
OPENSSL_VERSION=1.0.2k
|
OPENSSL_VERSION=1.0.2n
|
||||||
SPEEX_VERSION=1.2.0
|
SPEEX_VERSION=1.2.0
|
||||||
SPEEXDSP_VERSION=1.2rc3
|
SPEEXDSP_VERSION=1.2rc3
|
||||||
OPENCV_VERSION=3.2.0
|
OPENCV_VERSION=3.4.1
|
||||||
LIBXML2_VERSION=2.9.4
|
LIBXML2_VERSION=2.9.7
|
||||||
LIBXSLT_VERSION=1.1.28
|
LIBXSLT_VERSION=1.1.32
|
||||||
CURL_VERSION=7.53.1
|
CURL_VERSION=7.58.0
|
||||||
TCL_VERSION=8.6.2
|
TCL_VERSION=8.6.2
|
||||||
SQLCIPHER_VERSION=2.2.1
|
SQLCIPHER_VERSION=2.2.1
|
||||||
LIBMICROHTTPD_VERSION=0.9.52
|
LIBMICROHTTPD_VERSION=0.9.59
|
||||||
FFMPEG_VERSION=3.2.4
|
FFMPEG_VERSION=3.4
|
||||||
|
RAPIDJSON_VERSION=1.1.0
|
||||||
MAKEFILE_PATH=$(dir $(MAKEFILE_LIST))
|
|
||||||
LIBS_PATH?=$(MAKEFILE_PATH)../../../../libs
|
|
||||||
|
|
||||||
DOWNLOAD_PATH?=download
|
DOWNLOAD_PATH?=download
|
||||||
COPY_ANSWER?=
|
BUILD_PATH=build
|
||||||
|
LIBS_PATH?=libs
|
||||||
|
|
||||||
all: dirs zlib bzip2 miniupnpc openssl speex speexdsp opencv libxml2 libxslt curl sqlcipher libmicrohttpd ffmpeg copylibs
|
all: dirs zlib bzip2 miniupnpc openssl speex speexdsp opencv libxml2 libxslt curl sqlcipher libmicrohttpd ffmpeg rapidjson copylibs
|
||||||
|
|
||||||
download: \
|
download: \
|
||||||
$(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz \
|
$(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz \
|
||||||
@ -35,235 +34,246 @@ download: \
|
|||||||
$(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz \
|
$(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz \
|
||||||
$(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz \
|
$(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz \
|
||||||
$(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz \
|
$(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz \
|
||||||
$(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz
|
$(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz \
|
||||||
|
$(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -r -f libs
|
rm -r -f $(BUILD_PATH)
|
||||||
|
rm -r -f $(LIBS_PATH)
|
||||||
|
|
||||||
dirs:
|
dirs:
|
||||||
mkdir -p $(DOWNLOAD_PATH)
|
mkdir -p $(DOWNLOAD_PATH)
|
||||||
mkdir -p libs
|
mkdir -p $(BUILD_PATH)
|
||||||
gcc --version | head --lines 1 | tr ' ' '\n' | tail -1 >libs/gcc-version
|
gcc --version | head --lines 1 | tr ' ' '\n' | tail -1 >$(BUILD_PATH)/gcc-version
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz:
|
||||||
wget --no-check-certificate http://sourceforge.net/projects/libpng/files/zlib/$(ZLIB_VERSION)/zlib-$(ZLIB_VERSION).tar.gz/download -O $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz
|
wget --no-check-certificate http://sourceforge.net/projects/libpng/files/zlib/$(ZLIB_VERSION)/zlib-$(ZLIB_VERSION).tar.gz/download -O $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz
|
||||||
|
|
||||||
zlib: libs/zlib-$(ZLIB_VERSION)
|
zlib: $(BUILD_PATH)/zlib-$(ZLIB_VERSION)
|
||||||
|
|
||||||
libs/zlib-$(ZLIB_VERSION): $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz
|
$(BUILD_PATH)/zlib-$(ZLIB_VERSION): $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/zlib-*
|
rm -r -f $(BUILD_PATH)/zlib-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd zlib-$(ZLIB_VERSION) && ./configure
|
cd zlib-$(ZLIB_VERSION) && ./configure
|
||||||
#cd zlib-$(ZLIB_VERSION) && make install prefix="`pwd`/../libs"
|
#cd zlib-$(ZLIB_VERSION) && make install prefix="`pwd`/../$(BUILD_PATH)"
|
||||||
cd zlib-$(ZLIB_VERSION) && make
|
cd zlib-$(ZLIB_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/zlib-$(ZLIB_VERSION).tmp/include
|
mkdir -p $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include
|
||||||
cp zlib-$(ZLIB_VERSION)/zlib.h libs/zlib-$(ZLIB_VERSION).tmp/include/
|
cp zlib-$(ZLIB_VERSION)/zlib.h $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include/
|
||||||
cp zlib-$(ZLIB_VERSION)/zconf.h libs/zlib-$(ZLIB_VERSION).tmp/include/
|
cp zlib-$(ZLIB_VERSION)/zconf.h $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include/
|
||||||
mkdir -p libs/zlib-$(ZLIB_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/lib
|
||||||
cp zlib-$(ZLIB_VERSION)/libz.a libs/zlib-$(ZLIB_VERSION).tmp/lib/
|
cp zlib-$(ZLIB_VERSION)/libz.a $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/lib/
|
||||||
|
# cleanup
|
||||||
rm -r -f zlib-$(ZLIB_VERSION)
|
rm -r -f zlib-$(ZLIB_VERSION)
|
||||||
mv libs/zlib-$(ZLIB_VERSION).tmp libs/zlib-$(ZLIB_VERSION)
|
mv $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp $(BUILD_PATH)/zlib-$(ZLIB_VERSION)
|
||||||
|
|
||||||
bzip2: libs/bzip2-$(BZIP2_VERSION)
|
bzip2: $(BUILD_PATH)/bzip2-$(BZIP2_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz:
|
||||||
wget http://bzip.org/$(BZIP2_VERSION)/bzip2-$(BZIP2_VERSION).tar.gz -O $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz
|
wget http://bzip.org/$(BZIP2_VERSION)/bzip2-$(BZIP2_VERSION).tar.gz -O $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz
|
||||||
|
|
||||||
libs/bzip2-$(BZIP2_VERSION): $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz
|
$(BUILD_PATH)/bzip2-$(BZIP2_VERSION): $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/bzip2-*
|
rm -r -f $(BUILD_PATH)/bzip2-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
#cd bzip2-$(BZIP2_VERSION) && make install PREFIX="`pwd`/../libs"
|
#cd bzip2-$(BZIP2_VERSION) && make install PREFIX="`pwd`/../$(BUILD_PATH)"
|
||||||
cd bzip2-$(BZIP2_VERSION) && make
|
cd bzip2-$(BZIP2_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/bzip2-$(BZIP2_VERSION).tmp/include
|
mkdir -p $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/include
|
||||||
cp bzip2-$(BZIP2_VERSION)/bzlib.h libs/bzip2-$(BZIP2_VERSION).tmp/include/
|
cp bzip2-$(BZIP2_VERSION)/bzlib.h $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/include/
|
||||||
mkdir -p libs/bzip2-$(BZIP2_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/lib
|
||||||
cp bzip2-$(BZIP2_VERSION)/libbz2.a libs/bzip2-$(BZIP2_VERSION).tmp/lib/
|
cp bzip2-$(BZIP2_VERSION)/libbz2.a $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/lib/
|
||||||
|
# cleanup
|
||||||
rm -r -f bzip2-$(BZIP2_VERSION)
|
rm -r -f bzip2-$(BZIP2_VERSION)
|
||||||
mv libs/bzip2-$(BZIP2_VERSION).tmp libs/bzip2-$(BZIP2_VERSION)
|
mv $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp $(BUILD_PATH)/bzip2-$(BZIP2_VERSION)
|
||||||
|
|
||||||
miniupnpc: libs/miniupnpc-$(MINIUPNPC_VERSION)
|
miniupnpc: $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz:
|
||||||
wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-$(MINIUPNPC_VERSION).tar.gz -O $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz
|
wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-$(MINIUPNPC_VERSION).tar.gz -O $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz
|
||||||
|
|
||||||
libs/miniupnpc-$(MINIUPNPC_VERSION): $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz
|
$(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION): $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/miniupnpc-*
|
rm -r -f $(BUILD_PATH)/miniupnpc-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd miniupnpc-$(MINIUPNPC_VERSION) && export CC=gcc && make -f Makefile.mingw init libminiupnpc.a miniupnpc.dll
|
cd miniupnpc-$(MINIUPNPC_VERSION) && export CC=gcc && make -f Makefile.mingw init libminiupnpc.a miniupnpc.dll
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc
|
mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc
|
||||||
cp miniupnpc-$(MINIUPNPC_VERSION)/*.h libs/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc/
|
cp miniupnpc-$(MINIUPNPC_VERSION)/*.h $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc/
|
||||||
mkdir -p libs/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib
|
||||||
cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.lib libs/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib/
|
cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.lib $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib/
|
||||||
mkdir -p libs/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin
|
mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin
|
||||||
cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.dll libs/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin/
|
cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.dll $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin/
|
||||||
|
# cleanup
|
||||||
rm -r -f miniupnpc-$(MINIUPNPC_VERSION)
|
rm -r -f miniupnpc-$(MINIUPNPC_VERSION)
|
||||||
mv libs/miniupnpc-$(MINIUPNPC_VERSION).tmp libs/miniupnpc-$(MINIUPNPC_VERSION)
|
mv $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION)
|
||||||
|
|
||||||
openssl: libs/openssl-$(OPENSSL_VERSION)
|
openssl: $(BUILD_PATH)/openssl-$(OPENSSL_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz:
|
||||||
wget --no-check-certificate https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz
|
wget --no-check-certificate https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz
|
||||||
|
|
||||||
libs/openssl-$(OPENSSL_VERSION): $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz
|
$(BUILD_PATH)/openssl-$(OPENSSL_VERSION): $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/openssl-*
|
rm -r -f $(BUILD_PATH)/openssl-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
#cd openssl-$(OPENSSL_VERSION) && ./config --prefix="`pwd`/../libs"
|
#cd openssl-$(OPENSSL_VERSION) && ./config --prefix="`pwd`/../$(BUILD_PATH)"
|
||||||
#cd openssl-$(OPENSSL_VERSION) && make install
|
#cd openssl-$(OPENSSL_VERSION) && make install
|
||||||
cd openssl-$(OPENSSL_VERSION) && ./config shared
|
cd openssl-$(OPENSSL_VERSION) && ./config shared
|
||||||
cd openssl-$(OPENSSL_VERSION) && make
|
cd openssl-$(OPENSSL_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/openssl-$(OPENSSL_VERSION).tmp/include/openssl
|
mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/include/openssl
|
||||||
cp openssl-$(OPENSSL_VERSION)/include/openssl/*.h libs/openssl-$(OPENSSL_VERSION).tmp/include/openssl/
|
cp openssl-$(OPENSSL_VERSION)/include/openssl/*.h $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/include/openssl/
|
||||||
mkdir -p libs/openssl-$(OPENSSL_VERSION).tmp/bin
|
mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin
|
||||||
cp openssl-$(OPENSSL_VERSION)/libeay32.dll libs/openssl-$(OPENSSL_VERSION).tmp/bin/
|
cp openssl-$(OPENSSL_VERSION)/libeay32.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/
|
||||||
cp openssl-$(OPENSSL_VERSION)/ssleay32.dll libs/openssl-$(OPENSSL_VERSION).tmp/bin/
|
cp openssl-$(OPENSSL_VERSION)/ssleay32.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/
|
||||||
mkdir -p libs/openssl-$(OPENSSL_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib
|
||||||
cp openssl-$(OPENSSL_VERSION)/libcrypto.dll.a libs/openssl-$(OPENSSL_VERSION).tmp/lib/
|
cp openssl-$(OPENSSL_VERSION)/libcrypto.dll.a $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib/
|
||||||
cp openssl-$(OPENSSL_VERSION)/libssl.dll.a libs/openssl-$(OPENSSL_VERSION).tmp/lib/
|
cp openssl-$(OPENSSL_VERSION)/libssl.dll.a $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib/
|
||||||
|
# cleanup
|
||||||
rm -r -f openssl-$(OPENSSL_VERSION)
|
rm -r -f openssl-$(OPENSSL_VERSION)
|
||||||
mv libs/openssl-$(OPENSSL_VERSION).tmp libs/openssl-$(OPENSSL_VERSION)
|
mv $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp $(BUILD_PATH)/openssl-$(OPENSSL_VERSION)
|
||||||
|
|
||||||
speex: libs/speex-$(SPEEX_VERSION)
|
speex: $(BUILD_PATH)/speex-$(SPEEX_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz:
|
||||||
wget http://downloads.xiph.org/releases/speex/speex-$(SPEEX_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz
|
wget --no-check-certificate http://downloads.xiph.org/releases/speex/speex-$(SPEEX_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz
|
||||||
|
|
||||||
libs/speex-$(SPEEX_VERSION): $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz
|
$(BUILD_PATH)/speex-$(SPEEX_VERSION): $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/speex-*
|
rm -r -f $(BUILD_PATH)/speex-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd speex-$(SPEEX_VERSION) && ./configure
|
cd speex-$(SPEEX_VERSION) && ./configure
|
||||||
#cd speex-$(SPEEX_VERSION) && make install exec_prefix="`pwd`/../libs"
|
#cd speex-$(SPEEX_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)"
|
||||||
cd speex-$(SPEEX_VERSION) && make
|
cd speex-$(SPEEX_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/speex-$(SPEEX_VERSION).tmp/include/speex
|
mkdir -p $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/include/speex
|
||||||
cp speex-$(SPEEX_VERSION)/include/speex/*.h libs/speex-$(SPEEX_VERSION).tmp/include/speex/
|
cp speex-$(SPEEX_VERSION)/include/speex/*.h $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/include/speex/
|
||||||
mkdir -p libs/speex-$(SPEEX_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/lib
|
||||||
cp speex-$(SPEEX_VERSION)/libspeex/.libs/libspeex.a libs/speex-$(SPEEX_VERSION).tmp/lib
|
cp speex-$(SPEEX_VERSION)/libspeex/.libs/libspeex.a $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/lib
|
||||||
|
# cleanup
|
||||||
rm -r -f speex-$(SPEEX_VERSION)
|
rm -r -f speex-$(SPEEX_VERSION)
|
||||||
mv libs/speex-$(SPEEX_VERSION).tmp libs/speex-$(SPEEX_VERSION)
|
mv $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp $(BUILD_PATH)/speex-$(SPEEX_VERSION)
|
||||||
|
|
||||||
speexdsp: libs/speexdsp-$(SPEEXDSP_VERSION)
|
speexdsp: $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz:
|
||||||
wget http://downloads.xiph.org/releases/speex/speexdsp-$(SPEEXDSP_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz
|
wget --no-check-certificate http://downloads.xiph.org/releases/speex/speexdsp-$(SPEEXDSP_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz
|
||||||
|
|
||||||
libs/speexdsp-$(SPEEXDSP_VERSION): $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz
|
$(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION): $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/speexdsp-*
|
rm -r -f $(BUILD_PATH)/speexdsp-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd speexdsp-$(SPEEXDSP_VERSION) && ./configure
|
cd speexdsp-$(SPEEXDSP_VERSION) && ./configure
|
||||||
cd speexdsp-$(SPEEXDSP_VERSION) && make
|
cd speexdsp-$(SPEEXDSP_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex
|
mkdir -p $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex
|
||||||
cp speexdsp-$(SPEEXDSP_VERSION)/include/speex/*.h libs/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex/
|
cp speexdsp-$(SPEEXDSP_VERSION)/include/speex/*.h $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex/
|
||||||
mkdir -p libs/speexdsp-$(SPEEXDSP_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/lib
|
||||||
cp speexdsp-$(SPEEXDSP_VERSION)/libspeexdsp/.libs/libspeexdsp.a libs/speexdsp-$(SPEEXDSP_VERSION).tmp/lib
|
cp speexdsp-$(SPEEXDSP_VERSION)/libspeexdsp/.libs/libspeexdsp.a $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/lib
|
||||||
|
# cleanup
|
||||||
rm -r -f speexdsp-$(SPEEXDSP_VERSION)
|
rm -r -f speexdsp-$(SPEEXDSP_VERSION)
|
||||||
mv libs/speexdsp-$(SPEEXDSP_VERSION).tmp libs/speexdsp-$(SPEEXDSP_VERSION)
|
mv $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION)
|
||||||
|
|
||||||
opencv: libs/opencv-$(OPENCV_VERSION)
|
opencv: $(BUILD_PATH)/opencv-$(OPENCV_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz:
|
||||||
wget --no-check-certificate https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).tar.gz -O $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz
|
wget --no-check-certificate https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).tar.gz -O $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz
|
||||||
|
|
||||||
libs/opencv-$(OPENCV_VERSION): $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz
|
$(BUILD_PATH)/opencv-$(OPENCV_VERSION): $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/opencv-*
|
rm -r -f $(BUILD_PATH)/opencv-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
mkdir -p opencv-$(OPENCV_VERSION)/build
|
mkdir -p opencv-$(OPENCV_VERSION)/build
|
||||||
#cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="`pwd`/../../libs"
|
#cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="`pwd`/../../build"
|
||||||
cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="`pwd`/install"
|
cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DENABLE_CXX11=ON -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -DSTRSAFE_NO_DEPRECATE" -DCMAKE_INSTALL_PREFIX="`pwd`/install"
|
||||||
cd opencv-$(OPENCV_VERSION)/build && make install
|
cd opencv-$(OPENCV_VERSION)/build && make install
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/opencv-$(OPENCV_VERSION).tmp/include
|
mkdir -p $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/include
|
||||||
cp -r opencv-$(OPENCV_VERSION)/build/install/include/* libs/opencv-$(OPENCV_VERSION).tmp/include/
|
cp -r opencv-$(OPENCV_VERSION)/build/install/include/* $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/include/
|
||||||
mkdir -p libs/opencv-$(OPENCV_VERSION).tmp/lib/opencv
|
mkdir -p $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/lib/opencv
|
||||||
cp -r opencv-$(OPENCV_VERSION)/build/install/x86/mingw/staticlib/* libs/opencv-$(OPENCV_VERSION).tmp/lib/opencv/
|
cp -r opencv-$(OPENCV_VERSION)/build/install/x86/mingw/staticlib/* $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/lib/opencv/
|
||||||
|
# cleanup
|
||||||
rm -r -f opencv-$(OPENCV_VERSION)
|
rm -r -f opencv-$(OPENCV_VERSION)
|
||||||
mv libs/opencv-$(OPENCV_VERSION).tmp libs/opencv-$(OPENCV_VERSION)
|
mv $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp $(BUILD_PATH)/opencv-$(OPENCV_VERSION)
|
||||||
|
|
||||||
libxml2: libs/libxml2-$(LIBXML2_VERSION)
|
libxml2: $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz:
|
||||||
wget ftp://xmlsoft.org/libxml2/libxml2-$(LIBXML2_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
wget ftp://xmlsoft.org/libxml2/libxml2-$(LIBXML2_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
||||||
|
|
||||||
libs/libxml2-$(LIBXML2_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
$(BUILD_PATH)/libxml2-$(LIBXML2_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/libxml2-*
|
rm -r -f $(BUILD_PATH)/libxml2-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd libxml2-$(LIBXML2_VERSION) && ./configure --without-iconv -enable-shared=no
|
cd libxml2-$(LIBXML2_VERSION) && ./configure --without-iconv -enable-shared=no
|
||||||
#cd libxml2-$(LIBXML2_VERSION) && make install exec_prefix="`pwd`/../libs"
|
#cd libxml2-$(LIBXML2_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)"
|
||||||
cd libxml2-$(LIBXML2_VERSION) && make
|
cd libxml2-$(LIBXML2_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/libxml2-$(LIBXML2_VERSION).tmp/include/libxml
|
mkdir -p $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/include/libxml
|
||||||
cp libxml2-$(LIBXML2_VERSION)/include/libxml/*.h libs/libxml2-$(LIBXML2_VERSION).tmp/include/libxml/
|
cp libxml2-$(LIBXML2_VERSION)/include/libxml/*.h $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/include/libxml/
|
||||||
mkdir -p libs/libxml2-$(LIBXML2_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/lib
|
||||||
cp libxml2-$(LIBXML2_VERSION)/.libs/libxml2.a libs/libxml2-$(LIBXML2_VERSION).tmp/lib/
|
cp libxml2-$(LIBXML2_VERSION)/.libs/libxml2.a $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/lib/
|
||||||
|
# cleanup
|
||||||
#rm -r -f libxml2-$(LIBXML2_VERSION) # see libxslt
|
#rm -r -f libxml2-$(LIBXML2_VERSION) # see libxslt
|
||||||
mv libs/libxml2-$(LIBXML2_VERSION).tmp libs/libxml2-$(LIBXML2_VERSION)
|
mv $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION)
|
||||||
|
|
||||||
libxslt: libs/libxslt-$(LIBXSLT_VERSION)
|
libxslt: $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz:
|
||||||
wget ftp://xmlsoft.org/libxml2/libxslt-$(LIBXSLT_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz
|
wget ftp://xmlsoft.org/libxml2/libxslt-$(LIBXSLT_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz
|
||||||
|
|
||||||
libs/libxslt-$(LIBXSLT_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz
|
$(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/libxslt-*
|
rm -r -f $(BUILD_PATH)/libxslt-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz
|
||||||
tar xvf $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz
|
||||||
tar xvf $(MAKEFILE_PATH)libxslt-$(LIBXSLT_VERSION)-fix.tar.gz
|
|
||||||
# build
|
# build
|
||||||
cd libxslt-$(LIBXSLT_VERSION) && ./configure --with-libxml-src=../libxml2-$(LIBXML2_VERSION) -enable-shared=no CFLAGS=-DLIBXML_STATIC
|
cd libxslt-$(LIBXSLT_VERSION) && ./configure --with-libxml-src=../libxml2-$(LIBXML2_VERSION) -enable-shared=no CFLAGS=-DLIBXML_STATIC
|
||||||
cd libxslt-$(LIBXSLT_VERSION) && make
|
cd libxslt-$(LIBXSLT_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt
|
mkdir -p $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt
|
||||||
cp libxslt-$(LIBXSLT_VERSION)/libxslt/*.h libs/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt/
|
cp libxslt-$(LIBXSLT_VERSION)/libxslt/*.h $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt/
|
||||||
mkdir -p libs/libxslt-$(LIBXSLT_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib
|
||||||
cp libxslt-$(LIBXSLT_VERSION)/libxslt/.libs/libxslt.a libs/libxslt-$(LIBXSLT_VERSION).tmp/lib/
|
cp libxslt-$(LIBXSLT_VERSION)/libxslt/.libs/libxslt.a $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib/
|
||||||
cp libxslt-$(LIBXSLT_VERSION)/libexslt/.libs/libexslt.a libs/libxslt-$(LIBXSLT_VERSION).tmp/lib/
|
cp libxslt-$(LIBXSLT_VERSION)/libexslt/.libs/libexslt.a $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib/
|
||||||
|
# cleanup
|
||||||
rm -r -f libxml2-$(LIBXML2_VERSION)
|
rm -r -f libxml2-$(LIBXML2_VERSION)
|
||||||
rm -r -f libxslt-$(LIBXSLT_VERSION)
|
rm -r -f libxslt-$(LIBXSLT_VERSION)
|
||||||
mv libs/libxslt-$(LIBXSLT_VERSION).tmp libs/libxslt-$(LIBXSLT_VERSION)
|
mv $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION)
|
||||||
|
|
||||||
curl: libs/curl-$(CURL_VERSION)
|
curl: $(BUILD_PATH)/curl-$(CURL_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz:
|
||||||
wget --no-check-certificate http://curl.haxx.se/$(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz
|
wget --no-check-certificate http://curl.haxx.se/download/curl-$(CURL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz
|
||||||
|
|
||||||
libs/curl-$(CURL_VERSION): $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz
|
$(BUILD_PATH)/curl-$(CURL_VERSION): $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/curl-*
|
rm -r -f $(BUILD_PATH)/curl-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd curl-$(CURL_VERSION) && ./configure --disable-shared --with-ssl="`pwd`/../libs/openssl-$(OPENSSL_VERSION)"
|
cd curl-$(CURL_VERSION) && ./configure --disable-shared --with-ssl="`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)"
|
||||||
#cd curl-$(CURL_VERSION) && make install exec_prefix="`pwd`/../libs"
|
#cd curl-$(CURL_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)"
|
||||||
cd curl-$(CURL_VERSION) && make
|
cd curl-$(CURL_VERSION) && make
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/curl-$(CURL_VERSION).tmp/include/curl
|
mkdir -p $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/include/curl
|
||||||
cp curl-$(CURL_VERSION)/include/curl/*.h libs/curl-$(CURL_VERSION).tmp/include/curl/
|
cp curl-$(CURL_VERSION)/include/curl/*.h $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/include/curl/
|
||||||
mkdir -p libs/curl-$(CURL_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/lib
|
||||||
cp curl-$(CURL_VERSION)/lib/.libs/libcurl.a libs/curl-$(CURL_VERSION).tmp/lib/
|
cp curl-$(CURL_VERSION)/lib/.libs/libcurl.a $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/lib/
|
||||||
|
# cleanup
|
||||||
rm -r -f curl-$(CURL_VERSION)
|
rm -r -f curl-$(CURL_VERSION)
|
||||||
mv libs/curl-$(CURL_VERSION).tmp libs/curl-$(CURL_VERSION)
|
mv $(BUILD_PATH)/curl-$(CURL_VERSION).tmp $(BUILD_PATH)/curl-$(CURL_VERSION)
|
||||||
|
|
||||||
sqlcipher: libs/sqlcipher-$(SQLCIPHER_VERSION)
|
sqlcipher: $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz:
|
$(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz:
|
||||||
wget --no-check-certificate http://downloads.sourceforge.net/project/tcl/Tcl/$(TCL_VERSION)/tcl$(TCL_VERSION)-src.tar.gz -O $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz
|
wget --no-check-certificate http://downloads.sourceforge.net/project/tcl/Tcl/$(TCL_VERSION)/tcl$(TCL_VERSION)-src.tar.gz -O $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz
|
||||||
@ -271,9 +281,9 @@ $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz:
|
|||||||
$(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz:
|
||||||
wget --no-check-certificate https://github.com/sqlcipher/sqlcipher/archive/v$(SQLCIPHER_VERSION).tar.gz -O $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz
|
wget --no-check-certificate https://github.com/sqlcipher/sqlcipher/archive/v$(SQLCIPHER_VERSION).tar.gz -O $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz
|
||||||
|
|
||||||
libs/sqlcipher-$(SQLCIPHER_VERSION): $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz
|
$(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION): $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/sqlcipher-*
|
rm -r -f $(BUILD_PATH)/sqlcipher-*
|
||||||
# tcl
|
# tcl
|
||||||
tar xvf $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz
|
tar xvf $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz
|
||||||
mkdir -p tcl$(TCL_VERSION)/build
|
mkdir -p tcl$(TCL_VERSION)/build
|
||||||
@ -285,59 +295,73 @@ libs/sqlcipher-$(SQLCIPHER_VERSION): $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.
|
|||||||
mkdir -p tcl$(TCL_VERSION)/lib
|
mkdir -p tcl$(TCL_VERSION)/lib
|
||||||
ln -s `pwd`/tcl$(TCL_VERSION)/library `pwd`/tcl$(TCL_VERSION)/lib/tcl8.6
|
ln -s `pwd`/tcl$(TCL_VERSION)/library `pwd`/tcl$(TCL_VERSION)/lib/tcl8.6
|
||||||
# build
|
# build
|
||||||
cd sqlcipher-$(SQLCIPHER_VERSION) && PATH=.:$$PATH:`pwd`/../tcl$(TCL_VERSION)/build && export LIBS="-L`pwd`/../libs/openssl-$(OPENSSL_VERSION)/lib -lgdi32 $$LIBS" && ./configure --disable-shared --enable-static --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -I`pwd`/../libs/openssl-$(OPENSSL_VERSION)/include -I`pwd`/../tcl$(TCL_VERSION)/generic" LDFLAGS="-L`pwd`/../libs/openssl-$(OPENSSL_VERSION)/lib -lcrypto -lgdi32" --with-tcl="`pwd`/../tcl$(TCL_VERSION)/build" && make install prefix="`pwd`/install"
|
cd sqlcipher-$(SQLCIPHER_VERSION) && PATH=.:$$PATH:`pwd`/../tcl$(TCL_VERSION)/build && export LIBS="-L`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/lib -lgdi32 $$LIBS" && ./configure --disable-shared --enable-static --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -I`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/include -I`pwd`/../tcl$(TCL_VERSION)/generic" LDFLAGS="-L`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/lib -lcrypto -lgdi32" --with-tcl="`pwd`/../tcl$(TCL_VERSION)/build" && make install prefix="`pwd`/install"
|
||||||
# copy files
|
# copy files
|
||||||
mkdir -p libs/sqlcipher-$(SQLCIPHER_VERSION).tmp/include
|
mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/include
|
||||||
cp -r sqlcipher-$(SQLCIPHER_VERSION)/install/include/* libs/sqlcipher-$(SQLCIPHER_VERSION).tmp/include/
|
cp -r sqlcipher-$(SQLCIPHER_VERSION)/install/include/* $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/include/
|
||||||
mkdir -p libs/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib
|
mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib
|
||||||
cp sqlcipher-$(SQLCIPHER_VERSION)/install/lib/libsqlcipher.a libs/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib/
|
cp sqlcipher-$(SQLCIPHER_VERSION)/install/lib/libsqlcipher.a $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib/
|
||||||
mkdir -p libs/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin
|
mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin
|
||||||
cp sqlcipher-$(SQLCIPHER_VERSION)/install/bin/sqlcipher.exe libs/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin/
|
cp sqlcipher-$(SQLCIPHER_VERSION)/install/bin/sqlcipher.exe $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin/
|
||||||
|
# cleanup
|
||||||
rm -r -f sqlcipher-$(SQLCIPHER_VERSION)
|
rm -r -f sqlcipher-$(SQLCIPHER_VERSION)
|
||||||
rm -r -f tcl$(TCL_VERSION)
|
rm -r -f tcl$(TCL_VERSION)
|
||||||
mv libs/sqlcipher-$(SQLCIPHER_VERSION).tmp libs/sqlcipher-$(SQLCIPHER_VERSION)
|
mv $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION)
|
||||||
|
|
||||||
libmicrohttpd: libs/libmicrohttpd-$(LIBMICROHTTPD_VERSION)
|
libmicrohttpd: $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz:
|
||||||
wget --no-check-certificate http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz
|
wget --no-check-certificate http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz
|
||||||
|
|
||||||
libs/libmicrohttpd-$(LIBMICROHTTPD_VERSION): $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz
|
$(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION): $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/libmicrohttpd-*
|
rm -r -f $(BUILD_PATH)/libmicrohttpd-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && ./configure --disable-shared --enable-static --prefix="`pwd`/../libs/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp"
|
cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && ./configure --disable-shared --enable-static --prefix="`pwd`/../$(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp"
|
||||||
cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && make install
|
cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && make install
|
||||||
# copy files
|
# cleanup
|
||||||
rm -r -f libmicrohttpd-$(LIBMICROHTTPD_VERSION)
|
rm -r -f libmicrohttpd-$(LIBMICROHTTPD_VERSION)
|
||||||
mv libs/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp libs/libmicrohttpd-$(LIBMICROHTTPD_VERSION)
|
mv $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION)
|
||||||
|
|
||||||
ffmpeg: libs/ffmpeg-$(FFMPEG_VERSION)
|
ffmpeg: $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION)
|
||||||
|
|
||||||
$(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz:
|
$(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz:
|
||||||
wget --no-check-certificate https://ffmpeg.org/releases/ffmpeg-$(FFMPEG_VERSION).tar.gz -O $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz
|
wget --no-check-certificate https://ffmpeg.org/releases/ffmpeg-$(FFMPEG_VERSION).tar.gz -O $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz
|
||||||
|
|
||||||
libs/ffmpeg-$(FFMPEG_VERSION): $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz
|
$(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION): $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz
|
||||||
# prepare
|
# prepare
|
||||||
rm -r -f libs/ffmpeg-*
|
rm -r -f $(BUILD_PATH)/ffmpeg-*
|
||||||
tar xvf $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz
|
tar xvf $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz
|
||||||
# build
|
# build
|
||||||
cd ffmpeg-$(FFMPEG_VERSION) && ./configure --disable-shared --enable-static --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-yasm --disable-everything --enable-encoder=mpeg4 --enable-decoder=mpeg4 --prefix="`pwd`/../libs/ffmpeg-$(FFMPEG_VERSION).tmp"
|
cd ffmpeg-$(FFMPEG_VERSION) && ./configure --disable-shared --enable-static --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-yasm --disable-everything --enable-encoder=mpeg4 --enable-decoder=mpeg4 --prefix="`pwd`/../$(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION).tmp"
|
||||||
cd ffmpeg-$(FFMPEG_VERSION) && make install
|
cd ffmpeg-$(FFMPEG_VERSION) && make install
|
||||||
# copy files
|
# cleanup
|
||||||
rm -r -f ffmpeg-$(FFMPEG_VERSION)
|
rm -r -f ffmpeg-$(FFMPEG_VERSION)
|
||||||
mv libs/ffmpeg-$(FFMPEG_VERSION).tmp libs/ffmpeg-$(FFMPEG_VERSION)
|
mv $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION).tmp $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION)
|
||||||
|
|
||||||
|
rapidjson: $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION)
|
||||||
|
|
||||||
|
$(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz:
|
||||||
|
wget --no-check-certificate https://github.com/Tencent/rapidjson/archive/v$(RAPIDJSON_VERSION).tar.gz -O $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz
|
||||||
|
|
||||||
|
$(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION): $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz
|
||||||
|
# prepare
|
||||||
|
rm -r -f $(BUILD_PATH)/rapidjson-*
|
||||||
|
tar xvf $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz
|
||||||
|
# build
|
||||||
|
#mkdir -p rapidjson-$(RAPIDJSON_VERSION)/build
|
||||||
|
#cd rapidjson-$(RAPIDJSON_VERSION)/build && cmake .. -G"MSYS Makefiles"
|
||||||
|
#cd rapidjson-$(RAPIDJSON_VERSION)/build && make
|
||||||
|
# copy files
|
||||||
|
mkdir -p $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp/include
|
||||||
|
cp -r rapidjson-$(RAPIDJSON_VERSION)/include/* $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp/include/
|
||||||
|
# cleanup
|
||||||
|
rm -r -f rapidjson-$(RAPIDJSON_VERSION)
|
||||||
|
mv $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION)
|
||||||
|
|
||||||
copylibs:
|
copylibs:
|
||||||
if [ "$(COPY_ANSWER)" = "" ] ; then \
|
|
||||||
read -p "Do you want to copy libs to retroshare? (y|n)" answer; \
|
|
||||||
else \
|
|
||||||
answer=$(COPY_ANSWER) ; \
|
|
||||||
fi ; \
|
|
||||||
if [ "$$answer" = "y" ] ; then \
|
|
||||||
rm -r -f $(LIBS_PATH) ; \
|
rm -r -f $(LIBS_PATH) ; \
|
||||||
mkdir -p $(LIBS_PATH) ; \
|
mkdir -p $(LIBS_PATH) ; \
|
||||||
cp ./libs/gcc-version $(LIBS_PATH) ; \
|
cp $(BUILD_PATH)/gcc-version $(LIBS_PATH) ; \
|
||||||
find ./libs -mindepth 1 -maxdepth 1 -type d -not -name "*.tmp" -print -exec cp -r {}/. $(LIBS_PATH) \; ; \
|
find $(BUILD_PATH) -mindepth 1 -maxdepth 1 -type d -not -name "*.tmp" -print -exec cp -r {}/. $(LIBS_PATH) \; ; \
|
||||||
fi
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
:: Usage:
|
:: Usage:
|
||||||
:: call build-libs.bat [auto-copy] [make tasks]
|
:: call build-libs.bat [make tasks]
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
@ -7,7 +7,6 @@ setlocal
|
|||||||
|
|
||||||
:: Parameter
|
:: Parameter
|
||||||
set MakeParam="DOWNLOAD_PATH=../download"
|
set MakeParam="DOWNLOAD_PATH=../download"
|
||||||
if "%~1"=="auto-copy" set MakeParam=%MakeParam% "COPY_ANSWER=y"& shift /1
|
|
||||||
|
|
||||||
set MakeTask=
|
set MakeTask=
|
||||||
:param_loop
|
:param_loop
|
||||||
@ -30,6 +29,9 @@ if not exist "%EnvMSYSSH%" %cecho% error "Please install MSYS first." & exit /B
|
|||||||
call "%~dp0env.bat"
|
call "%~dp0env.bat"
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
|
:: Add tools path to PATH environment
|
||||||
|
set PATH=%EnvToolsPath%;%PATH%
|
||||||
|
|
||||||
call "%ToolsPath%\msys-path.bat" "%~dp0" MSYSCurPath
|
call "%ToolsPath%\msys-path.bat" "%~dp0" MSYSCurPath
|
||||||
call "%ToolsPath%\msys-path.bat" "%BuildLibsPath%" MSYSBuildLibsPath
|
call "%ToolsPath%\msys-path.bat" "%BuildLibsPath%" MSYSBuildLibsPath
|
||||||
|
|
||||||
|
Binary file not shown.
27
build_scripts/Windows/build-retrotor.bat
Normal file
27
build_scripts/Windows/build-retrotor.bat
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
:: Initialize environment
|
||||||
|
call "%~dp0env.bat"
|
||||||
|
if errorlevel 1 goto error_env
|
||||||
|
call "%EnvPath%\env.bat"
|
||||||
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
|
%cecho% info "Build libraries"
|
||||||
|
call "%~dp0build-libs\build-libs.bat"
|
||||||
|
if errorlevel 1 %cecho% error "Failed to build libraries." & exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
|
%cecho% info "Build %SourceName%"
|
||||||
|
call "%~dp0build\build.bat" retrotor
|
||||||
|
if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
|
%cecho% info "Pack %SourceName%"
|
||||||
|
call "%~dp0build\pack.bat" retrotor
|
||||||
|
if errorlevel 1 %cecho% error "Failed to pack %SourceName%." & exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
|
exit /B 0
|
||||||
|
|
||||||
|
:error_env
|
||||||
|
echo Failed to initialize environment.
|
||||||
|
exit /B 1
|
@ -9,15 +9,15 @@ call "%EnvPath%\env.bat"
|
|||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
%cecho% info "Build libraries"
|
%cecho% info "Build libraries"
|
||||||
call "%~dp0build-libs\build-libs.bat" auto-copy
|
call "%~dp0build-libs\build-libs.bat"
|
||||||
if errorlevel 1 %cecho% error "Failed to build libraries." & exit /B %ERRORLEVEL%
|
if errorlevel 1 %cecho% error "Failed to build libraries." & exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
%cecho% info "Build %SourceName%"
|
%cecho% info "Build %SourceName%"
|
||||||
call "%~dp0build\build.bat"
|
call "%~dp0build\build.bat" standard
|
||||||
if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL%
|
if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
%cecho% info "Pack %SourceName%"
|
%cecho% info "Pack %SourceName%"
|
||||||
call "%~dp0build\pack.bat"
|
call "%~dp0build\pack.bat" standard
|
||||||
if errorlevel 1 %cecho% error "Failed to pack %SourceName%." & exit /B %ERRORLEVEL%
|
if errorlevel 1 %cecho% error "Failed to pack %SourceName%." & exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
%cecho% info "Build installer"
|
%cecho% info "Build installer"
|
||||||
|
@ -8,21 +8,18 @@ if errorlevel 1 goto error_env
|
|||||||
call "%EnvPath%\env.bat"
|
call "%EnvPath%\env.bat"
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
:: Get gcc versions
|
:: Initialize environment
|
||||||
call "%ToolsPath%\get-gcc-version.bat" GCCVersion
|
call "%~dp0env.bat" standard
|
||||||
if "%GCCVersion%"=="" echo Cannot get gcc version.& exit /B 1
|
if errorlevel 2 exit /B 2
|
||||||
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
:: Check external libraries
|
:: Check external libraries
|
||||||
if not exist "%RootPath%\libs" echo Please build external libraries first.& exit /B 1
|
if not exist "%BuildLibsPath%\libs" %cecho% error "Please build external libraries first." & exit /B 1
|
||||||
|
|
||||||
:: Check gcc version of external libraries
|
:: Check gcc version of external libraries
|
||||||
if not exist "%RootPath%\libs\gcc-version" echo Cannot get gcc version of external libraries.& exit /B 1
|
if not exist "%BuildLibsPath%\libs\gcc-version" %cecho% error "Cannot get gcc version of external libraries." & exit /B 1
|
||||||
set /P LibsGCCVersion=<"%RootPath%\libs\gcc-version"
|
set /P LibsGCCVersion=<"%BuildLibsPath%\libs\gcc-version"
|
||||||
if "%LibsGCCVersion%" NEQ "%GCCVersion%" echo Please use correct version of external libraries. (gcc %GCCVersion% ^<^> libs %LibsGCCVersion%).& exit /B 1
|
if "%LibsGCCVersion%" NEQ "%GCCVersion%" %cecho% error "Please use correct version of external libraries. (gcc %GCCVersion% ^<^> libs %LibsGCCVersion%)." & exit /B 1
|
||||||
|
|
||||||
:: Initialize environment
|
|
||||||
call "%~dp0env.bat"
|
|
||||||
if errorlevel 1 goto error_env
|
|
||||||
|
|
||||||
:: Build defines for script
|
:: Build defines for script
|
||||||
set NSIS_PARAM=
|
set NSIS_PARAM=
|
||||||
|
@ -8,21 +8,18 @@ if errorlevel 1 goto error_env
|
|||||||
call "%EnvPath%\env.bat"
|
call "%EnvPath%\env.bat"
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
:: Get gcc versions
|
:: Initialize environment
|
||||||
call "%ToolsPath%\get-gcc-version.bat" GCCVersion
|
call "%~dp0env.bat" %*
|
||||||
if "%GCCVersion%"=="" echo Cannot get gcc version.& exit /B 1
|
if errorlevel 2 exit /B 2
|
||||||
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
:: Check external libraries
|
:: Check external libraries
|
||||||
if not exist "%RootPath%\libs" echo Please build external libraries first.& exit /B 1
|
if not exist "%BuildLibsPath%\libs" %cecho% error "Please build external libraries first." & exit /B 1
|
||||||
|
|
||||||
:: Check gcc version of external libraries
|
:: Check gcc version of external libraries
|
||||||
if not exist "%RootPath%\libs\gcc-version" echo Cannot get gcc version of external libraries.& exit /B 1
|
if not exist "%BuildLibsPath%\libs\gcc-version" %cecho% error "Cannot get gcc version of external libraries." & exit /B 1
|
||||||
set /P LibsGCCVersion=<"%RootPath%\libs\gcc-version"
|
set /P LibsGCCVersion=<"%BuildLibsPath%\libs\gcc-version"
|
||||||
if "%LibsGCCVersion%" NEQ "%GCCVersion%" echo Please use correct version of external libraries. (gcc %GCCVersion% ^<^> libs %LibsGCCVersion%).& exit /B 1
|
if "%LibsGCCVersion%" NEQ "%GCCVersion%" %cecho% error "Please use correct version of external libraries. (gcc %GCCVersion% ^<^> libs %LibsGCCVersion%)." & exit /B 1
|
||||||
|
|
||||||
:: Initialize environment
|
|
||||||
call "%~dp0env.bat"
|
|
||||||
if errorlevel 1 goto error_env
|
|
||||||
|
|
||||||
:: Check git executable
|
:: Check git executable
|
||||||
set GitPath=
|
set GitPath=
|
||||||
@ -36,7 +33,7 @@ echo.
|
|||||||
echo === Version
|
echo === Version
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
title Build - %SourceName%-%RsBuildConfig% [Version]
|
title Build - %SourceName%%RsType%-%RsBuildConfig% [Version]
|
||||||
|
|
||||||
pushd "%SourcePath%\retroshare-gui\src\gui\images"
|
pushd "%SourcePath%\retroshare-gui\src\gui\images"
|
||||||
:: Touch resource file
|
:: Touch resource file
|
||||||
@ -50,16 +47,19 @@ echo.
|
|||||||
echo === qmake
|
echo === qmake
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
title Build - %SourceName%-%RsBuildConfig% [qmake]
|
title Build - %SourceName%%RsType%-%RsBuildConfig% [qmake]
|
||||||
|
|
||||||
qmake "%SourcePath%\RetroShare.pro" -r "CONFIG+=%RsBuildConfig% version_detail_bash_script rs_autologin"
|
set RS_QMAKE_CONFIG=%RsBuildConfig% version_detail_bash_script rs_autologin retroshare_plugins
|
||||||
|
if "%RsRetroTor%"=="1" set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% retrotor
|
||||||
|
|
||||||
|
qmake "%SourcePath%\RetroShare.pro" -r -spec win32-g++ "CONFIG+=%RS_QMAKE_CONFIG%" "EXTERNAL_LIB_DIR=%BuildLibsPath%\libs"
|
||||||
if errorlevel 1 goto error
|
if errorlevel 1 goto error
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo === make
|
echo === make
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
title Build - %SourceName%-%RsBuildConfig% [make]
|
title Build - %SourceName%%RsType%-%RsBuildConfig% [make]
|
||||||
|
|
||||||
if exist "%EnvJomExe%" (
|
if exist "%EnvJomExe%" (
|
||||||
"%EnvJomExe%"
|
"%EnvJomExe%"
|
||||||
|
@ -7,7 +7,7 @@ call "%~dp0..\env.bat"
|
|||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
call "%EnvPath%\env.bat"
|
call "%EnvPath%\env.bat"
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
call "%~dp0env.bat"
|
call "%~dp0env.bat" %*
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
if not exist "%RsBuildPath%" exit /B 0
|
if not exist "%RsBuildPath%" exit /B 0
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
|
if "%~1"=="standard" (
|
||||||
|
set RsRetroTor=
|
||||||
|
set RsType=
|
||||||
|
) else (
|
||||||
|
if "%~1"=="retrotor" (
|
||||||
|
set RsRetroTor=1
|
||||||
|
set RsType=-tor
|
||||||
|
) else (
|
||||||
|
echo.
|
||||||
|
echo Usage: standard^|retrotor
|
||||||
|
echo.
|
||||||
|
exit /B 2
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
set BuildPath=%EnvRootPath%\builds
|
set BuildPath=%EnvRootPath%\builds
|
||||||
set DeployPath=%EnvRootPath%\deploy
|
set DeployPath=%EnvRootPath%\deploy
|
||||||
|
|
||||||
@ -7,20 +22,26 @@ if not exist "%DeployPath%" mkdir "%DeployPath%"
|
|||||||
:: Check Qt environment
|
:: Check Qt environment
|
||||||
set QtPath=
|
set QtPath=
|
||||||
call "%ToolsPath%\find-in-path.bat" QtPath qmake.exe
|
call "%ToolsPath%\find-in-path.bat" QtPath qmake.exe
|
||||||
if "%QtPath%"=="" echo Please run command in the Qt Command Prompt.& exit /B 1
|
if "%QtPath%"=="" %cecho% error "Please run command in the Qt Command Prompt." & exit /B 1
|
||||||
|
|
||||||
:: Check MinGW environment
|
:: Check MinGW environment
|
||||||
set MinGWPath=
|
set MinGWPath=
|
||||||
call "%ToolsPath%\find-in-path.bat" MinGWPath gcc.exe
|
call "%ToolsPath%\find-in-path.bat" MinGWPath gcc.exe
|
||||||
if "%MinGWPath%"=="" echo Please run command in the Qt Command Prompt.& exit /B 1
|
if "%MinGWPath%"=="" %cecho% error "Please run command in the Qt Command Prompt." & exit /B 1
|
||||||
|
|
||||||
:: Get Qt version
|
:: Get Qt version
|
||||||
call "%ToolsPath%\get-qt-version.bat" QtVersion
|
call "%ToolsPath%\get-qt-version.bat" QtVersion
|
||||||
if "%QtVersion%"=="" echo Cannot get Qt version.& exit /B 1
|
if "%QtVersion%"=="" %cecho% error "Cannot get Qt version." & exit /B 1
|
||||||
|
|
||||||
|
:: Get gcc versions
|
||||||
|
call "%ToolsPath%\get-gcc-version.bat" GCCVersion
|
||||||
|
if "%GCCVersion%"=="" %cecho% error "Cannot get gcc version." & exit /B 1
|
||||||
|
|
||||||
|
set BuildLibsPath=%EnvRootPath%\build-libs\gcc-%GCCVersion%
|
||||||
|
|
||||||
set RsBuildConfig=release
|
set RsBuildConfig=release
|
||||||
set RsBuildPath=%BuildPath%\Qt-%QtVersion%-%RsBuildConfig%
|
set RsBuildPath=%BuildPath%\Qt-%QtVersion%%RsType%-%RsBuildConfig%
|
||||||
set RsDeployPath=%DeployPath%\Qt-%QtVersion%-%RsBuildConfig%
|
set RsDeployPath=%DeployPath%\Qt-%QtVersion%%RsType%-%RsBuildConfig%
|
||||||
set RsPackPath=%DeployPath%
|
set RsPackPath=%DeployPath%
|
||||||
set RsArchiveAdd=
|
set RsArchiveAdd=
|
||||||
|
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
:: Usage:
|
:: Usage:
|
||||||
:: call git-log.bat [no-ask]
|
:: call git-log.bat standard|retrotor [no-ask]
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
setlocal
|
setlocal
|
||||||
|
|
||||||
set NoAsk=
|
set NoAsk=
|
||||||
if "%~1"=="no-ask" set NoAsk=1
|
if "%~2"=="no-ask" set NoAsk=1
|
||||||
|
|
||||||
:: Initialize environment
|
:: Initialize environment
|
||||||
call "%~dp0..\env.bat"
|
call "%~dp0..\env.bat"
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
call "%EnvPath%\env.bat"
|
call "%EnvPath%\env.bat"
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
call "%~dp0env.bat"
|
call "%~dp0env.bat" %1
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
:: Check git executable
|
:: Check git executable
|
||||||
@ -58,7 +58,7 @@ for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do
|
|||||||
set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2%
|
set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2%
|
||||||
|
|
||||||
:: Get last revision
|
:: Get last revision
|
||||||
set RsLastRefFile=%BuildPath%\Qt-%QtVersion%-%RsBuildConfig%-LastRef.txt
|
set RsLastRefFile=%BuildPath%\Qt-%QtVersion%%RsType%-%RsBuildConfig%-LastRef.txt
|
||||||
set RsLastRef=
|
set RsLastRef=
|
||||||
if exist "%RsLastRefFile%" set /P RsLastRef=<"%RsLastRefFile%"
|
if exist "%RsLastRefFile%" set /P RsLastRef=<"%RsLastRefFile%"
|
||||||
|
|
||||||
@ -86,9 +86,9 @@ if %errorlevel%==2 exit /B 1
|
|||||||
:no_confirm
|
:no_confirm
|
||||||
|
|
||||||
if "%RsBuildConfig%" NEQ "release" (
|
if "%RsBuildConfig%" NEQ "release" (
|
||||||
set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsArchiveAdd%-%RsBuildConfig%.txt
|
set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%%RsArchiveAdd%-%RsBuildConfig%.txt
|
||||||
) else (
|
) else (
|
||||||
set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsArchiveAdd%.txt
|
set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%%RsArchiveAdd%.txt
|
||||||
)
|
)
|
||||||
|
|
||||||
title %SourceName%-%RsBuildConfig% [git log]
|
title %SourceName%-%RsBuildConfig% [git log]
|
||||||
|
@ -10,21 +10,18 @@ if errorlevel 1 goto error_env
|
|||||||
call "%EnvPath%\env.bat"
|
call "%EnvPath%\env.bat"
|
||||||
if errorlevel 1 goto error_env
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
:: Get gcc versions
|
:: Initialize environment
|
||||||
call "%ToolsPath%\get-gcc-version.bat" GCCVersion
|
call "%~dp0env.bat" %*
|
||||||
if "%GCCVersion%"=="" echo Cannot get gcc version.& exit /B 1
|
if errorlevel 2 exit /B 2
|
||||||
|
if errorlevel 1 goto error_env
|
||||||
|
|
||||||
:: Check external libraries
|
:: Check external libraries
|
||||||
if not exist "%RootPath%\libs" echo Please build external libraries first.& exit /B 1
|
if not exist "%BuildLibsPath%\libs" %cecho% error "Please build external libraries first." & exit /B 1
|
||||||
|
|
||||||
:: Check gcc version of external libraries
|
:: Check gcc version of external libraries
|
||||||
if not exist "%RootPath%\libs\gcc-version" echo Cannot get gcc version of external libraries.& exit /B 1
|
if not exist "%BuildLibsPath%\libs\gcc-version" %cecho% error "Cannot get gcc version of external libraries." & exit /B 1
|
||||||
set /P LibsGCCVersion=<"%RootPath%\libs\gcc-version"
|
set /P LibsGCCVersion=<"%BuildLibsPath%\libs\gcc-version"
|
||||||
if "%LibsGCCVersion%" NEQ "%GCCVersion%" echo Please use correct version of external libraries. (gcc %GCCVersion% ^<^> libs %LibsGCCVersion%).& exit /B 1
|
if "%LibsGCCVersion%" NEQ "%GCCVersion%" %cecho% error "Please use correct version of external libraries. (gcc %GCCVersion% ^<^> libs %LibsGCCVersion%)." & exit /B 1
|
||||||
|
|
||||||
:: Initialize environment
|
|
||||||
call "%~dp0env.bat"
|
|
||||||
if errorlevel 1 goto error_env
|
|
||||||
|
|
||||||
:: Remove deploy path
|
:: Remove deploy path
|
||||||
if exist "%RsDeployPath%" rmdir /S /Q "%RsDeployPath%"
|
if exist "%RsDeployPath%" rmdir /S /Q "%RsDeployPath%"
|
||||||
@ -65,6 +62,17 @@ set RsDate=
|
|||||||
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set RsDate=%%I
|
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set RsDate=%%I
|
||||||
set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2%
|
set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2%
|
||||||
|
|
||||||
|
if "%RsRetroTor%"=="1" (
|
||||||
|
:: Check Retrotor
|
||||||
|
if not exist "%EnvDownloadPath%\tor\Tor\tor.exe" (
|
||||||
|
echo Tor binary not found. Please download Tor Expert Bundle from
|
||||||
|
echo https://www.torproject.org/download/download.html.en
|
||||||
|
echo and unpack to
|
||||||
|
echo %EnvDownloadPath%\tor
|
||||||
|
goto error
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
set QtMainVersion=%QtVersion:~0,1%
|
set QtMainVersion=%QtVersion:~0,1%
|
||||||
|
|
||||||
rem Qt 4 = QtSvg4.dll
|
rem Qt 4 = QtSvg4.dll
|
||||||
@ -75,9 +83,9 @@ if "%QtMainVersion%"=="4" set QtMainVersion2=4
|
|||||||
if "%QtMainVersion%"=="5" set QtMainVersion1=5
|
if "%QtMainVersion%"=="5" set QtMainVersion1=5
|
||||||
|
|
||||||
if "%RsBuildConfig%" NEQ "release" (
|
if "%RsBuildConfig%" NEQ "release" (
|
||||||
set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsArchiveAdd%-%RsBuildConfig%.7z
|
set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%%RsArchiveAdd%-%RsBuildConfig%.7z
|
||||||
) else (
|
) else (
|
||||||
set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsArchiveAdd%.7z
|
set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%%RsArchiveAdd%.7z
|
||||||
)
|
)
|
||||||
|
|
||||||
if exist "%Archive%" del /Q "%Archive%"
|
if exist "%Archive%" del /Q "%Archive%"
|
||||||
@ -85,7 +93,7 @@ if exist "%Archive%" del /Q "%Archive%"
|
|||||||
:: Create deploy path
|
:: Create deploy path
|
||||||
mkdir "%RsDeployPath%"
|
mkdir "%RsDeployPath%"
|
||||||
|
|
||||||
title Pack - %SourceName%-%RsBuildConfig% [copy files]
|
title Pack - %SourceName%%RsType%-%RsBuildConfig% [copy files]
|
||||||
|
|
||||||
set ExtensionsFile=%SourcePath%\libretroshare\src\rsserver\rsinit.cc
|
set ExtensionsFile=%SourcePath%\libretroshare\src\rsserver\rsinit.cc
|
||||||
set Extensions=
|
set Extensions=
|
||||||
@ -128,6 +136,12 @@ if "%QtMainVersion%"=="5" (
|
|||||||
copy "%QtPath%\..\plugins\audio\qtaudio_windows.dll" "%RsDeployPath%\audio" %Quite%
|
copy "%QtPath%\..\plugins\audio\qtaudio_windows.dll" "%RsDeployPath%\audio" %Quite%
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if exist "%QtPath%\..\plugins\styles\qwindowsvistastyle.dll" (
|
||||||
|
echo Copy styles
|
||||||
|
mkdir "%RsDeployPath%\styles" %Quite%
|
||||||
|
copy "%QtPath%\..\plugins\styles\qwindowsvistastyle.dll" "%RsDeployPath%\styles" %Quite%
|
||||||
|
)
|
||||||
|
|
||||||
copy "%QtPath%\..\plugins\imageformats\*.dll" "%RsDeployPath%\imageformats" %Quite%
|
copy "%QtPath%\..\plugins\imageformats\*.dll" "%RsDeployPath%\imageformats" %Quite%
|
||||||
del /Q "%RsDeployPath%\imageformats\*d?.dll" %Quite%
|
del /Q "%RsDeployPath%\imageformats\*d?.dll" %Quite%
|
||||||
|
|
||||||
@ -166,8 +180,13 @@ if exist "%SourcePath%\libresapi\src\webui" (
|
|||||||
xcopy /S "%SourcePath%\libresapi\src\webui" "%RsDeployPath%\webui" %Quite%
|
xcopy /S "%SourcePath%\libresapi\src\webui" "%RsDeployPath%\webui" %Quite%
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if "%RsRetroTor%"=="1" (
|
||||||
|
echo copy tor
|
||||||
|
echo n | copy /-y "%EnvDownloadPath%\tor\Tor\*.*" "%RsDeployPath%" %Quite%
|
||||||
|
)
|
||||||
|
|
||||||
rem pack files
|
rem pack files
|
||||||
title Pack - %SourceName%-%RsBuildConfig% [pack files]
|
title Pack - %SourceName%%RsType%-%RsBuildConfig% [pack files]
|
||||||
|
|
||||||
"%EnvSevenZipExe%" a -mx=9 -t7z "%Archive%" "%RsDeployPath%\*"
|
"%EnvSevenZipExe%" a -mx=9 -t7z "%Archive%" "%RsDeployPath%\*"
|
||||||
|
|
||||||
|
@ -52,7 +52,8 @@ mingw-get.exe install msys-autoconf
|
|||||||
mingw-get.exe install msys-automake
|
mingw-get.exe install msys-automake
|
||||||
mingw-get.exe install msys-autogen
|
mingw-get.exe install msys-autogen
|
||||||
mingw-get.exe install msys-mktemp
|
mingw-get.exe install msys-mktemp
|
||||||
mingw-get.exe install msys-wget
|
rem Use own wget binary, because MSYS version of wget is to old
|
||||||
|
rem mingw-get.exe install msys-wget
|
||||||
popd
|
popd
|
||||||
|
|
||||||
%cecho% info "Unpack CMake"
|
%cecho% info "Unpack CMake"
|
||||||
|
@ -4,11 +4,11 @@ if "%EnvRootPath%"=="" exit /B 1
|
|||||||
|
|
||||||
set CEchoUrl=https://github.com/lordmulder/cecho/releases/download/2015-10-10/cecho.2015-10-10.zip
|
set CEchoUrl=https://github.com/lordmulder/cecho/releases/download/2015-10-10/cecho.2015-10-10.zip
|
||||||
set CEchoInstall=cecho.2015-10-10.zip
|
set CEchoInstall=cecho.2015-10-10.zip
|
||||||
set SevenZipUrl=http://7-zip.org/a/7z1602.msi
|
set SevenZipUrl=https://sourceforge.net/projects/sevenzip/files/7-Zip/18.05/7z1805.msi/download
|
||||||
set SevenZipInstall=7z1602.msi
|
set SevenZipInstall=7z1805.msi
|
||||||
::set CurlUrl=https://bintray.com/artifact/download/vszakats/generic/curl-7.50.1-win32-mingw.7z
|
::set CurlUrl=https://bintray.com/artifact/download/vszakats/generic/curl-7.50.1-win32-mingw.7z
|
||||||
::set CurlInstall=curl-7.50.1-win32-mingw.7z
|
::set CurlInstall=curl-7.50.1-win32-mingw.7z
|
||||||
set WgetUrl=https://eternallybored.org/misc/wget/current/wget.exe
|
set WgetUrl=https://eternallybored.org/misc/wget/1.19.4/32/wget.exe
|
||||||
set WgetInstall=wget.exe
|
set WgetInstall=wget.exe
|
||||||
set JomUrl=http://download.qt.io/official_releases/jom/jom.zip
|
set JomUrl=http://download.qt.io/official_releases/jom/jom.zip
|
||||||
set JomInstall=jom.zip
|
set JomInstall=jom.zip
|
||||||
@ -20,13 +20,23 @@ set NSISUrl=http://prdownloads.sourceforge.net/nsis/nsis-3.0-setup.exe?download
|
|||||||
set NSISInstall=nsis-3.0-setup.exe
|
set NSISInstall=nsis-3.0-setup.exe
|
||||||
set NSISInstallPath=%EnvToolsPath%\NSIS
|
set NSISInstallPath=%EnvToolsPath%\NSIS
|
||||||
|
|
||||||
|
if not exist "%EnvToolsPath%\wget.exe" (
|
||||||
|
echo Download Wget installation
|
||||||
|
|
||||||
|
if not exist "%EnvDownloadPath%\%WgetInstall%" call "%ToolsPath%\winhttpjs.bat" %WgetUrl% -saveTo "%EnvDownloadPath%\%WgetInstall%"
|
||||||
|
if not exist "%EnvDownloadPath%\%WgetInstall%" %cecho% error "Cannot download Wget installation" & goto error
|
||||||
|
|
||||||
|
echo Copy Wget
|
||||||
|
copy "%EnvDownloadPath%\wget.exe" "%EnvToolsPath%"
|
||||||
|
)
|
||||||
|
|
||||||
if not exist "%EnvToolsPath%\7z.exe" (
|
if not exist "%EnvToolsPath%\7z.exe" (
|
||||||
call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%"
|
call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%"
|
||||||
mkdir "%EnvTempPath%"
|
mkdir "%EnvTempPath%"
|
||||||
|
|
||||||
echo Download 7z installation
|
echo Download 7z installation
|
||||||
|
|
||||||
if not exist "%EnvDownloadPath%\%SevenZipInstall%" call "%ToolsPath%\winhttpjs.bat" %SevenZipUrl% -saveTo "%EnvDownloadPath%\%SevenZipInstall%"
|
if not exist "%EnvDownloadPath%\%SevenZipInstall%" call "%ToolsPath%\download-file.bat" "%SevenZipUrl%" "%EnvDownloadPath%\%SevenZipInstall%"
|
||||||
if not exist "%EnvDownloadPath%\%SevenZipInstall%" echo Cannot download 7z installation& goto error
|
if not exist "%EnvDownloadPath%\%SevenZipInstall%" echo Cannot download 7z installation& goto error
|
||||||
|
|
||||||
echo Unpack 7z
|
echo Unpack 7z
|
||||||
@ -69,16 +79,6 @@ if not exist "%EnvToolsPath%\cecho.exe" (
|
|||||||
:: call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%"
|
:: call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%"
|
||||||
::)
|
::)
|
||||||
|
|
||||||
if not exist "%EnvToolsPath%\wget.exe" (
|
|
||||||
%cecho% info "Download Wget installation"
|
|
||||||
|
|
||||||
if not exist "%EnvDownloadPath%\%WgetInstall%" call "%ToolsPath%\winhttpjs.bat" %WgetUrl% -saveTo "%EnvDownloadPath%\%WgetInstall%"
|
|
||||||
if not exist "%EnvDownloadPath%\%WgetInstall%" %cecho% error "Cannot download Wget installation" & goto error
|
|
||||||
|
|
||||||
%cecho% info "Copy Wget"
|
|
||||||
copy "%EnvDownloadPath%\wget.exe" "%EnvToolsPath%"
|
|
||||||
)
|
|
||||||
|
|
||||||
if not exist "%EnvToolsPath%\jom.exe" (
|
if not exist "%EnvToolsPath%\jom.exe" (
|
||||||
call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%"
|
call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%"
|
||||||
mkdir "%EnvTempPath%"
|
mkdir "%EnvTempPath%"
|
||||||
@ -118,7 +118,7 @@ if not exist "%EnvToolsPath%\cut.exe" (
|
|||||||
%cecho% info "Download Unix Tools installation"
|
%cecho% info "Download Unix Tools installation"
|
||||||
|
|
||||||
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\winhttpjs.bat" %UnixToolsUrl% -saveTo "%EnvDownloadPath%\%UnixToolsInstall%"
|
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\winhttpjs.bat" %UnixToolsUrl% -saveTo "%EnvDownloadPath%\%UnixToolsInstall%"
|
||||||
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" %cecho% error ""Cannot download Unix Tools installation" & goto error
|
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" %cecho% error "Cannot download Unix Tools installation" & goto error
|
||||||
|
|
||||||
%cecho% info "Unpack Unix Tools"
|
%cecho% info "Unpack Unix Tools"
|
||||||
"%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%UnixToolsInstall%"
|
"%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%UnixToolsInstall%"
|
||||||
@ -134,7 +134,7 @@ if not exist "%EnvToolsPath%\sed.exe" (
|
|||||||
%cecho% info "Download Unix Tools installation"
|
%cecho% info "Download Unix Tools installation"
|
||||||
|
|
||||||
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\winhttpjs.bat" %UnixToolsUrl% -saveTo "%EnvDownloadPath%\%UnixToolsInstall%"
|
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\winhttpjs.bat" %UnixToolsUrl% -saveTo "%EnvDownloadPath%\%UnixToolsInstall%"
|
||||||
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" %cecho% error ""Cannot download Unix Tools installation" & goto error
|
if not exist "%EnvDownloadPath%\%UnixToolsInstall%" %cecho% error "Cannot download Unix Tools installation" & goto error
|
||||||
|
|
||||||
%cecho% info "Unpack Unix Tools"
|
%cecho% info "Unpack Unix Tools"
|
||||||
"%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%UnixToolsInstall%"
|
"%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%UnixToolsInstall%"
|
||||||
|
@ -195,11 +195,15 @@ Section $(Section_Main) Section_Main
|
|||||||
|
|
||||||
; Qt audio
|
; Qt audio
|
||||||
SetOutPath "$INSTDIR\audio"
|
SetOutPath "$INSTDIR\audio"
|
||||||
File /r "${QTDIR}\plugins\audio\qtaudio_windows.dll"
|
File "${QTDIR}\plugins\audio\qtaudio_windows.dll"
|
||||||
|
|
||||||
; Qt platforms
|
; Qt platforms
|
||||||
SetOutPath "$INSTDIR\platforms"
|
SetOutPath "$INSTDIR\platforms"
|
||||||
File /r "${QTDIR}\plugins\platforms\qwindows.dll"
|
File "${QTDIR}\plugins\platforms\qwindows.dll"
|
||||||
|
|
||||||
|
; Qt styles
|
||||||
|
SetOutPath "$INSTDIR\styles"
|
||||||
|
File /NONFATAL "${QTDIR}\plugins\styles\qwindowsvistastyle.dll"
|
||||||
|
|
||||||
; MinGW binaries
|
; MinGW binaries
|
||||||
SetOutPath "$INSTDIR"
|
SetOutPath "$INSTDIR"
|
||||||
|
@ -8,6 +8,6 @@ if "%~2"=="" (
|
|||||||
)
|
)
|
||||||
|
|
||||||
::"%EnvCurlExe%" -L -k "%~1" -o "%~2"
|
::"%EnvCurlExe%" -L -k "%~1" -o "%~2"
|
||||||
"%EnvWgetExe%" --continue "%~1" --output-document="%~2"
|
"%EnvWgetExe%" --no-check-certificate --continue "%~1" --output-document="%~2"
|
||||||
|
|
||||||
exit /B %ERRORLEVEL%
|
exit /B %ERRORLEVEL%
|
||||||
|
@ -72,7 +72,7 @@ bdNodeManager::bdNodeManager(bdNodeId *id, std::string dhtVersion, std::string b
|
|||||||
:bdNode(id, dhtVersion, bootfile, filterfile, fns, this)
|
:bdNode(id, dhtVersion, bootfile, filterfile, fns, this)
|
||||||
{
|
{
|
||||||
mMode = BITDHT_MGR_STATE_OFF;
|
mMode = BITDHT_MGR_STATE_OFF;
|
||||||
mFns = fns;
|
mDhtFns = fns;
|
||||||
mModeTS = 0 ;
|
mModeTS = 0 ;
|
||||||
mStartTS = 0;
|
mStartTS = 0;
|
||||||
mSearchingDone = false;
|
mSearchingDone = false;
|
||||||
@ -87,7 +87,7 @@ bdNodeManager::bdNodeManager(bdNodeId *id, std::string dhtVersion, std::string b
|
|||||||
|
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::bdNodeManager() ID: ";
|
std::cerr << "bdNodeManager::bdNodeManager() ID: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, id);
|
mDhtFns->bdPrintNodeId(std::cerr, id);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ void bdNodeManager::addFindNode(bdNodeId *id, uint32_t qflags)
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::addFindNode() ";
|
std::cerr << "bdNodeManager::addFindNode() ";
|
||||||
mFns->bdPrintNodeId(std::cerr, id);
|
mDhtFns->bdPrintNodeId(std::cerr, id);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
/* check if exists already */
|
/* check if exists already */
|
||||||
@ -257,7 +257,7 @@ void bdNodeManager::removeFindNode(bdNodeId *id)
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::removeFindNode() ";
|
std::cerr << "bdNodeManager::removeFindNode() ";
|
||||||
mFns->bdPrintNodeId(std::cerr, id);
|
mDhtFns->bdPrintNodeId(std::cerr, id);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
std::map<bdNodeId, bdQueryPeer>::iterator it;
|
std::map<bdNodeId, bdQueryPeer>::iterator it;
|
||||||
@ -525,7 +525,7 @@ int bdNodeManager::QueryRandomLocalNet()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* calculate mid point */
|
/* calculate mid point */
|
||||||
mFns->bdRandomMidId(&mOwnId, &(id.id), &targetNodeId);
|
mDhtFns->bdRandomMidId(&mOwnId, &(id.id), &targetNodeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* do standard find_peer message */
|
/* do standard find_peer message */
|
||||||
@ -534,13 +534,13 @@ int bdNodeManager::QueryRandomLocalNet()
|
|||||||
|
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::QueryRandomLocalNet() Querying : ";
|
std::cerr << "bdNodeManager::QueryRandomLocalNet() Querying : ";
|
||||||
mFns->bdPrintId(std::cerr, &id);
|
mDhtFns->bdPrintId(std::cerr, &id);
|
||||||
std::cerr << " searching for : ";
|
std::cerr << " searching for : ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &targetNodeId);
|
mDhtFns->bdPrintNodeId(std::cerr, &targetNodeId);
|
||||||
|
|
||||||
bdMetric dist;
|
bdMetric dist;
|
||||||
mFns->bdDistance(&targetNodeId, &(mOwnId), &dist);
|
mDhtFns->bdDistance(&targetNodeId, &(mOwnId), &dist);
|
||||||
int bucket = mFns->bdBucketDistance(&dist);
|
int bucket = mDhtFns->bdBucketDistance(&dist);
|
||||||
std::cerr << " in Bucket: " << bucket;
|
std::cerr << " in Bucket: " << bucket;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
@ -593,7 +593,7 @@ void bdNodeManager::SearchForLocalNet()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::SearchForLocalNet() Existing Internal Search: ";
|
std::cerr << "bdNodeManager::SearchForLocalNet() Existing Internal Search: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(it->first));
|
mDhtFns->bdPrintNodeId(std::cerr, &(it->first));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -630,7 +630,7 @@ void bdNodeManager::SearchForLocalNet()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::SearchForLocalNet() " << i << " Attempts to find OkNode: ";
|
std::cerr << "bdNodeManager::SearchForLocalNet() " << i << " Attempts to find OkNode: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &targetNodeId);
|
mDhtFns->bdPrintNodeId(std::cerr, &targetNodeId);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -638,7 +638,7 @@ void bdNodeManager::SearchForLocalNet()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::SearchForLocalNet() Failed to Find FilterOk this time: ";
|
std::cerr << "bdNodeManager::SearchForLocalNet() Failed to Find FilterOk this time: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &targetNodeId);
|
mDhtFns->bdPrintNodeId(std::cerr, &targetNodeId);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -649,7 +649,7 @@ void bdNodeManager::SearchForLocalNet()
|
|||||||
|
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::SearchForLocalNet() Adding New Internal Search: ";
|
std::cerr << "bdNodeManager::SearchForLocalNet() Adding New Internal Search: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(targetNodeId));
|
mDhtFns->bdPrintNodeId(std::cerr, &(targetNodeId));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -709,7 +709,7 @@ int bdNodeManager::checkStatus()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::checkStatus() Query in Progress id: ";
|
std::cerr << "bdNodeManager::checkStatus() Query in Progress id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(it->first));
|
mDhtFns->bdPrintNodeId(std::cerr, &(it->first));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -719,7 +719,7 @@ int bdNodeManager::checkStatus()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::checkStatus() Query Failed: id: ";
|
std::cerr << "bdNodeManager::checkStatus() Query Failed: id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(it->first));
|
mDhtFns->bdPrintNodeId(std::cerr, &(it->first));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
// BAD.
|
// BAD.
|
||||||
@ -733,7 +733,7 @@ int bdNodeManager::checkStatus()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::checkStatus() Found Closest: id: ";
|
std::cerr << "bdNodeManager::checkStatus() Found Closest: id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(it->first));
|
mDhtFns->bdPrintNodeId(std::cerr, &(it->first));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -747,7 +747,7 @@ int bdNodeManager::checkStatus()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::checkStatus() the Peer Online but Unreachable: id: ";
|
std::cerr << "bdNodeManager::checkStatus() the Peer Online but Unreachable: id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(it->first));
|
mDhtFns->bdPrintNodeId(std::cerr, &(it->first));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -761,7 +761,7 @@ int bdNodeManager::checkStatus()
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::checkStatus() Found Query: id: ";
|
std::cerr << "bdNodeManager::checkStatus() Found Query: id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(it->first));
|
mDhtFns->bdPrintNodeId(std::cerr, &(it->first));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
//foundId =
|
//foundId =
|
||||||
@ -803,7 +803,7 @@ int bdNodeManager::checkStatus()
|
|||||||
doCallback = false;
|
doCallback = false;
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::checkStatus() Internal: no cb for id: ";
|
std::cerr << "bdNodeManager::checkStatus() Internal: no cb for id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, &(it->first));
|
mDhtFns->bdPrintNodeId(std::cerr, &(it->first));
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -1024,7 +1024,7 @@ int bdNodeManager::getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &fro
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::getDhtPeerAddress() Id: ";
|
std::cerr << "bdNodeManager::getDhtPeerAddress() Id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, id);
|
mDhtFns->bdPrintNodeId(std::cerr, id);
|
||||||
std::cerr << " ... ? TODO" << std::endl;
|
std::cerr << " ... ? TODO" << std::endl;
|
||||||
#else
|
#else
|
||||||
(void) id;
|
(void) id;
|
||||||
@ -1034,7 +1034,7 @@ int bdNodeManager::getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &fro
|
|||||||
pit = mActivePeers.find(*id);
|
pit = mActivePeers.find(*id);
|
||||||
|
|
||||||
std::cerr << "bdNodeManager::getDhtPeerAddress() Id: ";
|
std::cerr << "bdNodeManager::getDhtPeerAddress() Id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, id);
|
mDhtFns->bdPrintNodeId(std::cerr, id);
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
if (pit != mActivePeers.end())
|
if (pit != mActivePeers.end())
|
||||||
@ -1061,7 +1061,7 @@ int bdNodeManager::getDhtValue(const bdNodeId *id, std::string key, std::string
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::getDhtValue() Id: ";
|
std::cerr << "bdNodeManager::getDhtValue() Id: ";
|
||||||
mFns->bdPrintNodeId(std::cerr, id);
|
mDhtFns->bdPrintNodeId(std::cerr, id);
|
||||||
std::cerr << " key: " << key;
|
std::cerr << " key: " << key;
|
||||||
std::cerr << " ... ? TODO" << std::endl;
|
std::cerr << " ... ? TODO" << std::endl;
|
||||||
#else
|
#else
|
||||||
@ -1144,7 +1144,7 @@ void bdNodeManager::doNodeCallback(const bdId *id, uint32_t peerflags)
|
|||||||
{
|
{
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::doNodeCallback() ";
|
std::cerr << "bdNodeManager::doNodeCallback() ";
|
||||||
mFns->bdPrintId(std::cerr, id);
|
mDhtFns->bdPrintId(std::cerr, id);
|
||||||
std::cerr << "peerflags: " << peerflags;
|
std::cerr << "peerflags: " << peerflags;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
@ -1163,7 +1163,7 @@ void bdNodeManager::doPeerCallback(const bdId *id, uint32_t status)
|
|||||||
|
|
||||||
#ifdef DEBUG_MGR
|
#ifdef DEBUG_MGR
|
||||||
std::cerr << "bdNodeManager::doPeerCallback()";
|
std::cerr << "bdNodeManager::doPeerCallback()";
|
||||||
mFns->bdPrintId(std::cerr, id);
|
mDhtFns->bdPrintId(std::cerr, id);
|
||||||
std::cerr << "status: " << status;
|
std::cerr << "status: " << status;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
@ -184,7 +184,7 @@ void SearchForLocalNet();
|
|||||||
time_t mSearchTS;
|
time_t mSearchTS;
|
||||||
bool mSearchingDone;
|
bool mSearchingDone;
|
||||||
|
|
||||||
bdDhtFunctions *mFns;
|
bdDhtFunctions *mDhtFns;
|
||||||
|
|
||||||
uint32_t mNetworkSize;
|
uint32_t mNetworkSize;
|
||||||
uint32_t mBdNetworkSize;
|
uint32_t mBdNetworkSize;
|
||||||
|
@ -518,7 +518,7 @@ void bdNode::checkPotentialPeer(bdId *id, bdId *src)
|
|||||||
#ifndef DISABLE_BAD_PEER_FILTER
|
#ifndef DISABLE_BAD_PEER_FILTER
|
||||||
std::cerr << "bdNode::checkPotentialPeer(";
|
std::cerr << "bdNode::checkPotentialPeer(";
|
||||||
mFns->bdPrintId(std::cerr, id);
|
mFns->bdPrintId(std::cerr, id);
|
||||||
std::cerr << ") MASQARADING AS KNOWN PEER - FLAGGING AS BAD";
|
std::cerr << ") MASQUERADING AS KNOWN PEER - FLAGGING AS BAD";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
// Stores in queue for later callback and desemination around the network.
|
// Stores in queue for later callback and desemination around the network.
|
||||||
@ -603,7 +603,7 @@ void bdNode::addPeer(const bdId *id, uint32_t peerflags)
|
|||||||
std::cerr << "bdNode::addPeer(";
|
std::cerr << "bdNode::addPeer(";
|
||||||
mFns->bdPrintId(std::cerr, id);
|
mFns->bdPrintId(std::cerr, id);
|
||||||
std::cerr << ", " << std::hex << peerflags << std::dec;
|
std::cerr << ", " << std::hex << peerflags << std::dec;
|
||||||
std::cerr << ") MASQARADING AS KNOWN PEER - FLAGGING AS BAD";
|
std::cerr << ") MASQUERADING AS KNOWN PEER - FLAGGING AS BAD";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,23 +6,10 @@ CONFIG -= qt
|
|||||||
TARGET = bitdht
|
TARGET = bitdht
|
||||||
DESTDIR = lib
|
DESTDIR = lib
|
||||||
|
|
||||||
|
!include("use_libbitdht.pri"):error("Including")
|
||||||
|
|
||||||
QMAKE_CXXFLAGS *= -Wall -DBE_DEBUG
|
QMAKE_CXXFLAGS *= -Wall -DBE_DEBUG
|
||||||
|
|
||||||
profiling {
|
|
||||||
QMAKE_CXXFLAGS -= -fomit-frame-pointer
|
|
||||||
QMAKE_CXXFLAGS *= -pg -g -fno-omit-frame-pointer
|
|
||||||
}
|
|
||||||
|
|
||||||
release {
|
|
||||||
# not much here yet.
|
|
||||||
}
|
|
||||||
|
|
||||||
#CONFIG += debug
|
|
||||||
debug {
|
|
||||||
QMAKE_CXXFLAGS -= -O2 -fomit-frame-pointer
|
|
||||||
QMAKE_CXXFLAGS *= -g -fno-omit-frame-pointer
|
|
||||||
}
|
|
||||||
|
|
||||||
# treat warnings as error for better removing
|
# treat warnings as error for better removing
|
||||||
#QMAKE_CFLAGS += -Werror
|
#QMAKE_CFLAGS += -Werror
|
||||||
#QMAKE_CXXFLAGS += -Werror
|
#QMAKE_CXXFLAGS += -Werror
|
||||||
|
5
libbitdht/src/use_libbitdht.pri
Normal file
5
libbitdht/src/use_libbitdht.pri
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
DEPENDPATH *= $$system_path($$clean_path($${PWD}/../../libbitdht/src))
|
||||||
|
INCLUDEPATH *= $$system_path($$clean_path($${PWD}/../../libbitdht/src))
|
||||||
|
LIBS *= -L$$system_path($$clean_path($${OUT_PWD}/../../libbitdht/src/lib/)) -lbitdht
|
||||||
|
|
||||||
|
!equals(TARGET, bitdht):PRE_TARGETDEPS *= $$system_path($$clean_path($${OUT_PWD}/../../libbitdht/src/lib/libbitdht.a))
|
@ -17,7 +17,7 @@
|
|||||||
#include "ChannelsHandler.h"
|
#include "ChannelsHandler.h"
|
||||||
#include "StatsHandler.h"
|
#include "StatsHandler.h"
|
||||||
|
|
||||||
#ifdef LIBRESAPI_QT
|
#ifdef LIBRESAPI_SETTINGS
|
||||||
#include "SettingsHandler.h"
|
#include "SettingsHandler.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -240,9 +240,9 @@ public:
|
|||||||
mTransfersHandler(sts, ifaces.mFiles, ifaces.mPeers, *ifaces.mNotify),
|
mTransfersHandler(sts, ifaces.mFiles, ifaces.mPeers, *ifaces.mNotify),
|
||||||
mChatHandler(sts, ifaces.mNotify, ifaces.mMsgs, ifaces.mPeers, ifaces.mIdentity, &mPeersHandler),
|
mChatHandler(sts, ifaces.mNotify, ifaces.mMsgs, ifaces.mPeers, ifaces.mIdentity, &mPeersHandler),
|
||||||
mApiPluginHandler(sts, ifaces),
|
mApiPluginHandler(sts, ifaces),
|
||||||
mChannelsHandler(ifaces.mGxsChannels),
|
mChannelsHandler(*ifaces.mGxsChannels),
|
||||||
mStatsHandler()
|
mStatsHandler()
|
||||||
#ifdef LIBRESAPI_QT
|
#ifdef LIBRESAPI_SETTINGS
|
||||||
,mSettingsHandler(sts)
|
,mSettingsHandler(sts)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -272,7 +272,7 @@ public:
|
|||||||
&ChannelsHandler::handleRequest);
|
&ChannelsHandler::handleRequest);
|
||||||
router.addResourceHandler("stats", dynamic_cast<ResourceRouter*>(&mStatsHandler),
|
router.addResourceHandler("stats", dynamic_cast<ResourceRouter*>(&mStatsHandler),
|
||||||
&StatsHandler::handleRequest);
|
&StatsHandler::handleRequest);
|
||||||
#ifdef LIBRESAPI_QT
|
#ifdef LIBRESAPI_SETTINGS
|
||||||
router.addResourceHandler("settings", dynamic_cast<ResourceRouter*>(&mSettingsHandler),
|
router.addResourceHandler("settings", dynamic_cast<ResourceRouter*>(&mSettingsHandler),
|
||||||
&SettingsHandler::handleRequest);
|
&SettingsHandler::handleRequest);
|
||||||
#endif
|
#endif
|
||||||
@ -290,7 +290,7 @@ public:
|
|||||||
ChannelsHandler mChannelsHandler;
|
ChannelsHandler mChannelsHandler;
|
||||||
StatsHandler mStatsHandler;
|
StatsHandler mStatsHandler;
|
||||||
|
|
||||||
#ifdef LIBRESAPI_QT
|
#ifdef LIBRESAPI_SETTINGS
|
||||||
SettingsHandler mSettingsHandler;
|
SettingsHandler mSettingsHandler;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -369,6 +369,9 @@ static void secure_queue_response(MHD_Connection *connection, unsigned int statu
|
|||||||
// tell Internet Explorer to not do content sniffing
|
// tell Internet Explorer to not do content sniffing
|
||||||
MHD_add_response_header(response, "X-Content-Type-Options", "nosniff");
|
MHD_add_response_header(response, "X-Content-Type-Options", "nosniff");
|
||||||
|
|
||||||
|
// Prevent clickjacking attacks (also prevented by CSP, but not in all browsers, including FireFox)
|
||||||
|
MHD_add_response_header(response, "X-Frame-Options", "SAMEORIGIN");
|
||||||
|
|
||||||
// Content security policy header, its a new technology and not implemented everywhere
|
// Content security policy header, its a new technology and not implemented everywhere
|
||||||
|
|
||||||
// get own host name as the browser sees it
|
// get own host name as the browser sees it
|
||||||
|
@ -1,8 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* RetroShare JSON API
|
||||||
|
* Copyright (C) 2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "ChannelsHandler.h"
|
#include "ChannelsHandler.h"
|
||||||
|
|
||||||
#include <retroshare/rsgxschannels.h>
|
#include <retroshare/rsgxschannels.h>
|
||||||
#include <util/radix64.h>
|
#include <util/radix64.h>
|
||||||
|
#include <util/rstime.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "Operators.h"
|
#include "Operators.h"
|
||||||
|
|
||||||
namespace resource_api
|
namespace resource_api
|
||||||
@ -26,17 +47,409 @@ StreamBase& operator << (StreamBase& left, RsGxsFile& file)
|
|||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChannelsHandler::ChannelsHandler(RsGxsChannels *channels):
|
ChannelsHandler::ChannelsHandler(RsGxsChannels& channels): mChannels(channels)
|
||||||
mChannels(channels)
|
|
||||||
{
|
{
|
||||||
|
addResourceHandler("list_channels", this,
|
||||||
|
&ChannelsHandler::handleListChannels);
|
||||||
|
addResourceHandler("get_channel_info", this, &ChannelsHandler::handleGetChannelInfo);
|
||||||
|
addResourceHandler("get_channel_content", this, &ChannelsHandler::handleGetChannelContent);
|
||||||
|
addResourceHandler("toggle_subscribe", this, &ChannelsHandler::handleToggleSubscription);
|
||||||
|
addResourceHandler("toggle_auto_download", this, &ChannelsHandler::handleToggleAutoDownload);
|
||||||
|
addResourceHandler("toggle_read", this, &ChannelsHandler::handleTogglePostRead);
|
||||||
|
addResourceHandler("create_channel", this, &ChannelsHandler::handleCreateChannel);
|
||||||
addResourceHandler("create_post", this, &ChannelsHandler::handleCreatePost);
|
addResourceHandler("create_post", this, &ChannelsHandler::handleCreatePost);
|
||||||
}
|
}
|
||||||
|
|
||||||
ResponseTask* ChannelsHandler::handleCreatePost(Request &req, Response &resp)
|
void ChannelsHandler::handleListChannels(Request& /*req*/, Response& resp)
|
||||||
|
{
|
||||||
|
RsTokReqOptions opts;
|
||||||
|
opts.mReqType = GXS_REQUEST_TYPE_GROUP_META;
|
||||||
|
uint32_t token;
|
||||||
|
|
||||||
|
RsTokenService& tChannels = *mChannels.getTokenService();
|
||||||
|
|
||||||
|
tChannels.requestGroupInfo(token, RS_DEPRECATED_TOKREQ_ANSTYPE, opts);
|
||||||
|
|
||||||
|
time_t start = time(NULL);
|
||||||
|
while((tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
&&(tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||||
|
&&((time(NULL) < (start+10)))) rstime::rs_usleep(500*1000);
|
||||||
|
|
||||||
|
std::list<RsGroupMetaData> grps;
|
||||||
|
if( tChannels.requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE
|
||||||
|
&& mChannels.getGroupSummary(token, grps) )
|
||||||
|
{
|
||||||
|
for( RsGroupMetaData& grp : grps )
|
||||||
|
{
|
||||||
|
KeyValueReference<RsGxsGroupId> id("channel_id", grp.mGroupId);
|
||||||
|
KeyValueReference<uint32_t> vis_msg("visible_msg_count", grp.mVisibleMsgCount);
|
||||||
|
bool own = (grp.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN);
|
||||||
|
bool subscribed = IS_GROUP_SUBSCRIBED(grp.mSubscribeFlags);
|
||||||
|
std::string lastPostTsStr = std::to_string(grp.mLastPost);
|
||||||
|
std::string publishTsStr = std::to_string(grp.mPublishTs);
|
||||||
|
resp.mDataStream.getStreamToMember()
|
||||||
|
<< id
|
||||||
|
<< makeKeyValueReference("name", grp.mGroupName)
|
||||||
|
<< makeKeyValueReference("last_post_ts", lastPostTsStr)
|
||||||
|
<< makeKeyValueReference("popularity", grp.mPop)
|
||||||
|
<< makeKeyValueReference("publish_ts", publishTsStr)
|
||||||
|
<< vis_msg
|
||||||
|
<< makeKeyValueReference("group_status", grp.mGroupStatus)
|
||||||
|
<< makeKeyValueReference("author_id", grp.mAuthorId)
|
||||||
|
<< makeKeyValueReference("parent_grp_id", grp.mParentGrpId)
|
||||||
|
<< makeKeyValueReference("own", own)
|
||||||
|
<< makeKeyValueReference("subscribed", subscribed);
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
else resp.setFail("Cant get data from GXS!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelsHandler::handleGetChannelInfo(Request& req, Response& resp)
|
||||||
|
{
|
||||||
|
std::string chanIdStr;
|
||||||
|
req.mStream << makeKeyValueReference("channel_id", chanIdStr);
|
||||||
|
if(chanIdStr.empty())
|
||||||
|
{
|
||||||
|
resp.setFail("channel_id required!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsGxsGroupId chanId(chanIdStr);
|
||||||
|
if(chanId.isNull())
|
||||||
|
{
|
||||||
|
resp.setFail("Invalid channel_id:" + chanIdStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wantThumbnail = true;
|
||||||
|
req.mStream << makeKeyValueReference("want_thumbnail", wantThumbnail);
|
||||||
|
|
||||||
|
std::list<RsGxsGroupId> groupIds; groupIds.push_back(chanId);
|
||||||
|
RsTokReqOptions opts;
|
||||||
|
opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA;
|
||||||
|
uint32_t token;
|
||||||
|
|
||||||
|
RsTokenService& tChannels = *mChannels.getTokenService();
|
||||||
|
tChannels.requestGroupInfo( token, RS_DEPRECATED_TOKREQ_ANSTYPE,
|
||||||
|
opts, groupIds );
|
||||||
|
|
||||||
|
time_t start = time(NULL);
|
||||||
|
while((tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
&&(tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||||
|
&&((time(NULL) < (start+10)))) rstime::rs_usleep(500*1000);
|
||||||
|
|
||||||
|
std::vector<RsGxsChannelGroup> grps;
|
||||||
|
if( tChannels.requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE
|
||||||
|
&& mChannels.getGroupData(token, grps) )
|
||||||
|
{
|
||||||
|
for( RsGxsChannelGroup& grp : grps )
|
||||||
|
{
|
||||||
|
KeyValueReference<RsGxsGroupId> id("channel_id", grp.mMeta.mGroupId);
|
||||||
|
KeyValueReference<uint32_t> vis_msg("visible_msg_count", grp.mMeta.mVisibleMsgCount);
|
||||||
|
bool own = (grp.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN);
|
||||||
|
bool subscribed = IS_GROUP_SUBSCRIBED(grp.mMeta.mSubscribeFlags);
|
||||||
|
std::string lastPostTsStr = std::to_string(grp.mMeta.mLastPost);
|
||||||
|
std::string publishTsStr = std::to_string(grp.mMeta.mPublishTs);
|
||||||
|
StreamBase& rgrp(resp.mDataStream.getStreamToMember());
|
||||||
|
rgrp << id
|
||||||
|
<< makeKeyValueReference("name", grp.mMeta.mGroupName)
|
||||||
|
<< makeKeyValueReference("last_post_ts", lastPostTsStr)
|
||||||
|
<< makeKeyValueReference("popularity", grp.mMeta.mPop)
|
||||||
|
<< makeKeyValueReference("publish_ts", publishTsStr)
|
||||||
|
<< vis_msg
|
||||||
|
<< makeKeyValueReference("group_status", grp.mMeta.mGroupStatus)
|
||||||
|
<< makeKeyValueReference("author_id", grp.mMeta.mAuthorId)
|
||||||
|
<< makeKeyValueReference("parent_grp_id", grp.mMeta.mParentGrpId)
|
||||||
|
<< makeKeyValueReference("description", grp.mDescription)
|
||||||
|
<< makeKeyValueReference("own", own)
|
||||||
|
<< makeKeyValueReference("subscribed", subscribed)
|
||||||
|
<< makeKeyValueReference("auto_download", grp.mAutoDownload);
|
||||||
|
|
||||||
|
if(wantThumbnail)
|
||||||
|
{
|
||||||
|
std::string thumbnail_base64;
|
||||||
|
Radix64::encode(grp.mImage.mData, grp.mImage.mSize, thumbnail_base64);
|
||||||
|
rgrp << makeKeyValueReference("thumbnail_base64_png", thumbnail_base64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
else resp.setFail("Cant get data from GXS!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelsHandler::handleGetChannelContent(Request& req, Response& resp)
|
||||||
|
{
|
||||||
|
std::string chanIdStr;
|
||||||
|
req.mStream << makeKeyValueReference("channel_id", chanIdStr);
|
||||||
|
if(chanIdStr.empty())
|
||||||
|
{
|
||||||
|
resp.setFail("channel_id required!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsGxsGroupId chanId(chanIdStr);
|
||||||
|
if(chanId.isNull())
|
||||||
|
{
|
||||||
|
resp.setFail("Invalid channel_id:" + chanIdStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::list<RsGxsGroupId> groupIds; groupIds.push_back(chanId);
|
||||||
|
uint32_t token;
|
||||||
|
RsTokReqOptions opts;
|
||||||
|
opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA;
|
||||||
|
|
||||||
|
if(! mChannels.getTokenService()->
|
||||||
|
requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds) )
|
||||||
|
{
|
||||||
|
resp.setFail("Unknown GXS error!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t start = time(NULL);
|
||||||
|
while((mChannels.getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
&&(mChannels.getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||||
|
&&((time(NULL) < (start+10)))) rstime::rs_usleep(500*1000);
|
||||||
|
|
||||||
|
std::vector<RsGxsChannelPost> posts;
|
||||||
|
std::vector<RsGxsComment> comments;
|
||||||
|
if( mChannels.getTokenService()->requestStatus(token) ==
|
||||||
|
RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE &&
|
||||||
|
mChannels.getPostData(token, posts, comments) )
|
||||||
|
{
|
||||||
|
for( std::vector<RsGxsChannelPost>::iterator vit = posts.begin();
|
||||||
|
vit != posts.end(); ++vit )
|
||||||
|
{
|
||||||
|
RsGxsChannelPost& post = *vit;
|
||||||
|
RsMsgMetaData& pMeta = post.mMeta;
|
||||||
|
resp.mDataStream.getStreamToMember()
|
||||||
|
<< makeKeyValueReference("channel_id", pMeta.mGroupId)
|
||||||
|
<< makeKeyValueReference("name", pMeta.mMsgName)
|
||||||
|
<< makeKeyValueReference("post_id", pMeta.mMsgId)
|
||||||
|
<< makeKeyValueReference("parent_id", pMeta.mParentId)
|
||||||
|
<< makeKeyValueReference("author_id", pMeta.mAuthorId)
|
||||||
|
<< makeKeyValueReference("orig_msg_id", pMeta.mOrigMsgId)
|
||||||
|
<< makeKeyValueReference("thread_id", pMeta.mThreadId)
|
||||||
|
<< makeKeyValueReference("message", post.mMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
for( std::vector<RsGxsComment>::iterator vit = comments.begin();
|
||||||
|
vit != comments.end(); ++vit )
|
||||||
|
{
|
||||||
|
RsGxsComment& comment = *vit;
|
||||||
|
RsMsgMetaData& cMeta = comment.mMeta;
|
||||||
|
std::string scoreStr = std::to_string(comment.mScore);
|
||||||
|
resp.mDataStream.getStreamToMember()
|
||||||
|
<< makeKeyValueReference("channel_id", cMeta.mGroupId)
|
||||||
|
<< makeKeyValueReference("name", cMeta.mMsgName)
|
||||||
|
<< makeKeyValueReference("comment_id", cMeta.mMsgId)
|
||||||
|
<< makeKeyValueReference("parent_id", cMeta.mParentId)
|
||||||
|
<< makeKeyValueReference("author_id", cMeta.mAuthorId)
|
||||||
|
<< makeKeyValueReference("orig_msg_id", cMeta.mOrigMsgId)
|
||||||
|
<< makeKeyValueReference("thread_id", cMeta.mThreadId)
|
||||||
|
<< makeKeyValueReference("score", scoreStr)
|
||||||
|
<< makeKeyValueReference("message", comment.mComment);
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
else resp.setFail("Cant get data from GXS!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelsHandler::handleToggleSubscription(Request& req, Response& resp)
|
||||||
|
{
|
||||||
|
std::string chanIdStr;
|
||||||
|
bool subscribe = true;
|
||||||
|
|
||||||
|
req.mStream << makeKeyValueReference("channel_id", chanIdStr)
|
||||||
|
<< makeKeyValueReference("subscribe", subscribe);
|
||||||
|
|
||||||
|
if(chanIdStr.empty())
|
||||||
|
{
|
||||||
|
resp.setFail("channel_id required!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsGxsGroupId chanId(chanIdStr);
|
||||||
|
if(chanId.isNull())
|
||||||
|
{
|
||||||
|
resp.setFail("Invalid channel_id:" + chanIdStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t token;
|
||||||
|
if(mChannels.subscribeToGroup(token, chanId, subscribe))
|
||||||
|
{
|
||||||
|
RsTokenService& tChannels = *mChannels.getTokenService();
|
||||||
|
|
||||||
|
time_t start = time(NULL);
|
||||||
|
while((tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
&&(tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||||
|
&&((time(NULL) < (start+10)))) rstime::rs_usleep(500*1000);
|
||||||
|
|
||||||
|
if(tChannels.requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
resp.setOk();
|
||||||
|
else resp.setFail("Unknown GXS error!");
|
||||||
|
}
|
||||||
|
else resp.setFail("Unknown GXS error!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelsHandler::handleCreateChannel(Request& req, Response& resp)
|
||||||
|
{
|
||||||
|
RsGxsChannelGroup chan;
|
||||||
|
RsGroupMetaData& cMeta = chan.mMeta;
|
||||||
|
std::string authorIdStr;
|
||||||
|
std::string thumbnail_base64;
|
||||||
|
|
||||||
|
req.mStream << makeKeyValueReference("author_id", authorIdStr)
|
||||||
|
<< makeKeyValueReference("name", cMeta.mGroupName)
|
||||||
|
<< makeKeyValueReference("description", chan.mDescription)
|
||||||
|
<< makeKeyValueReference("thumbnail_base64_png", thumbnail_base64);
|
||||||
|
|
||||||
|
if(cMeta.mGroupName.empty())
|
||||||
|
{
|
||||||
|
resp.setFail("Channel name required!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(thumbnail_base64.empty()) chan.mImage.clear();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::vector<uint8_t> png_data = Radix64::decode(thumbnail_base64);
|
||||||
|
if(!png_data.empty())
|
||||||
|
{
|
||||||
|
if(png_data.size() < 8)
|
||||||
|
{
|
||||||
|
resp.setFail("Decoded thumbnail_base64_png is smaller than 8 byte. This can't be a valid png file!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uint8_t png_magic_number[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a};
|
||||||
|
if(!std::equal(&png_magic_number[0],&png_magic_number[8],png_data.begin()))
|
||||||
|
{
|
||||||
|
resp.setFail("Decoded thumbnail_base64_png does not seem to be a png file. (Header is missing magic number)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chan.mImage.copy(png_data.data(), png_data.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!authorIdStr.empty()) cMeta.mAuthorId = RsGxsId(authorIdStr);
|
||||||
|
|
||||||
|
// ATM supports creating only public channels
|
||||||
|
cMeta.mGroupFlags = GXS_SERV::FLAG_PRIVACY_PUBLIC;
|
||||||
|
|
||||||
|
// I am not sure about those flags I have reversed them with the debugger
|
||||||
|
// that gives 520 as value of this member when a channel with default
|
||||||
|
// options is created from Qt Gui
|
||||||
|
cMeta.mSignFlags = GXS_SERV::MSG_AUTHEN_CHILD_AUTHOR_SIGN |
|
||||||
|
GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_REQUIRED;
|
||||||
|
|
||||||
|
uint32_t token;
|
||||||
|
if(mChannels.createGroup(token, chan))
|
||||||
|
{
|
||||||
|
RsTokenService& tChannels = *mChannels.getTokenService();
|
||||||
|
|
||||||
|
time_t start = time(NULL);
|
||||||
|
while((tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
&&(tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||||
|
&&((time(NULL) < (start+10)))) rstime::rs_usleep(500*1000);
|
||||||
|
|
||||||
|
if(tChannels.requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
resp.setOk();
|
||||||
|
else resp.setFail("Unknown GXS error!");
|
||||||
|
}
|
||||||
|
else resp.setFail("Unkown GXS error!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelsHandler::handleToggleAutoDownload(Request& req, Response& resp)
|
||||||
|
{
|
||||||
|
|
||||||
|
std::string chanIdStr;
|
||||||
|
bool autoDownload = true;
|
||||||
|
|
||||||
|
req.mStream << makeKeyValueReference("channel_id", chanIdStr)
|
||||||
|
<< makeKeyValueReference("auto_download", autoDownload);
|
||||||
|
|
||||||
|
if(chanIdStr.empty())
|
||||||
|
{
|
||||||
|
resp.setFail("channel_id required!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsGxsGroupId chanId(chanIdStr);
|
||||||
|
if(chanId.isNull())
|
||||||
|
{
|
||||||
|
resp.setFail("Invalid channel_id:" + chanIdStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mChannels.setChannelAutoDownload(chanId, autoDownload))
|
||||||
|
resp.setOk();
|
||||||
|
else resp.setFail();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelsHandler::handleTogglePostRead(Request& req, Response& resp)
|
||||||
|
{
|
||||||
|
std::string chanIdStr;
|
||||||
|
std::string postIdStr;
|
||||||
|
bool read = true;
|
||||||
|
|
||||||
|
req.mStream << makeKeyValueReference("channel_id", chanIdStr)
|
||||||
|
<< makeKeyValueReference("post_id", postIdStr)
|
||||||
|
<< makeKeyValueReference("read", read);
|
||||||
|
|
||||||
|
if(chanIdStr.empty())
|
||||||
|
{
|
||||||
|
resp.setFail("channel_id required!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsGxsGroupId chanId(chanIdStr);
|
||||||
|
if(chanId.isNull())
|
||||||
|
{
|
||||||
|
resp.setFail("Invalid channel_id:" + chanIdStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(postIdStr.empty())
|
||||||
|
{
|
||||||
|
resp.setFail("post_id required!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsGxsMessageId postId(postIdStr);
|
||||||
|
if(postId.isNull())
|
||||||
|
{
|
||||||
|
resp.setFail("Invalid post_id:" + postIdStr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << __PRETTY_FUNCTION__ << " " << chanIdStr << " " << postIdStr
|
||||||
|
<< " " << read << std::endl;
|
||||||
|
|
||||||
|
uint32_t token;
|
||||||
|
mChannels.setMessageReadStatus(token, std::make_pair(chanId,postId), read);
|
||||||
|
|
||||||
|
RsTokenService& tChannels = *mChannels.getTokenService();
|
||||||
|
|
||||||
|
time_t start = time(NULL);
|
||||||
|
while((tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
&&(tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||||
|
&&((time(NULL) < (start+10)))) rstime::rs_usleep(500*1000);
|
||||||
|
|
||||||
|
if(tChannels.requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
resp.setOk();
|
||||||
|
else resp.setFail("Unknown GXS error!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelsHandler::handleCreatePost(Request &req, Response &resp)
|
||||||
{
|
{
|
||||||
RsGxsChannelPost post;
|
RsGxsChannelPost post;
|
||||||
|
|
||||||
req.mStream << makeKeyValueReference("group_id", post.mMeta.mGroupId);
|
req.mStream << makeKeyValueReference("channel_id", post.mMeta.mGroupId);
|
||||||
req.mStream << makeKeyValueReference("subject", post.mMeta.mMsgName);
|
req.mStream << makeKeyValueReference("subject", post.mMeta.mMsgName);
|
||||||
req.mStream << makeKeyValueReference("message", post.mMsg);
|
req.mStream << makeKeyValueReference("message", post.mMsg);
|
||||||
|
|
||||||
@ -54,17 +467,17 @@ ResponseTask* ChannelsHandler::handleCreatePost(Request &req, Response &resp)
|
|||||||
if(post.mMeta.mGroupId.isNull())
|
if(post.mMeta.mGroupId.isNull())
|
||||||
{
|
{
|
||||||
resp.setFail("groupd_id is null");
|
resp.setFail("groupd_id is null");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
if(post.mMeta.mMsgName.empty())
|
if(post.mMeta.mMsgName.empty())
|
||||||
{
|
{
|
||||||
resp.setFail("subject is empty");
|
resp.setFail("subject is empty");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
if(post.mMsg.empty())
|
if(post.mMsg.empty())
|
||||||
{
|
{
|
||||||
resp.setFail("msg text is empty");
|
resp.setFail("msg text is empty");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
// empty file list is ok, but files have to be valid
|
// empty file list is ok, but files have to be valid
|
||||||
for(std::list<RsGxsFile>::iterator lit = post.mFiles.begin(); lit != post.mFiles.end(); ++lit)
|
for(std::list<RsGxsFile>::iterator lit = post.mFiles.begin(); lit != post.mFiles.end(); ++lit)
|
||||||
@ -72,17 +485,17 @@ ResponseTask* ChannelsHandler::handleCreatePost(Request &req, Response &resp)
|
|||||||
if(lit->mHash.isNull())
|
if(lit->mHash.isNull())
|
||||||
{
|
{
|
||||||
resp.setFail("at least one file hash is empty");
|
resp.setFail("at least one file hash is empty");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
if(lit->mName.empty())
|
if(lit->mName.empty())
|
||||||
{
|
{
|
||||||
resp.setFail("at leats one file name is empty");
|
resp.setFail("at leats one file name is empty");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
if(lit->mSize == 0)
|
if(lit->mSize == 0)
|
||||||
{
|
{
|
||||||
resp.setFail("at least one file size is empty");
|
resp.setFail("at least one file size is empty");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,21 +505,32 @@ ResponseTask* ChannelsHandler::handleCreatePost(Request &req, Response &resp)
|
|||||||
if(png_data.size() < 8)
|
if(png_data.size() < 8)
|
||||||
{
|
{
|
||||||
resp.setFail("Decoded thumbnail_base64_png is smaller than 8 byte. This can't be a valid png file!");
|
resp.setFail("Decoded thumbnail_base64_png is smaller than 8 byte. This can't be a valid png file!");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
uint8_t png_magic_number[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a};
|
uint8_t png_magic_number[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a};
|
||||||
if(!std::equal(&png_magic_number[0],&png_magic_number[8],png_data.begin()))
|
if(!std::equal(&png_magic_number[0],&png_magic_number[8],png_data.begin()))
|
||||||
{
|
{
|
||||||
resp.setFail("Decoded thumbnail_base64_png does not seem to be a png file. (Header is missing magic number)");
|
resp.setFail("Decoded thumbnail_base64_png does not seem to be a png file. (Header is missing magic number)");
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
post.mThumbnail.copy(png_data.data(), png_data.size());
|
post.mThumbnail.copy(png_data.data(), png_data.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t token;
|
uint32_t token;
|
||||||
mChannels->createPost(token, post);
|
if(mChannels.createPost(token, post))
|
||||||
// TODO: grp creation acknowledge
|
{
|
||||||
return 0;
|
RsTokenService& tChannels = *mChannels.getTokenService();
|
||||||
|
|
||||||
|
time_t start = time(NULL);
|
||||||
|
while((tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
&&(tChannels.requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||||
|
&&((time(NULL) < (start+10)))) rstime::rs_usleep(500*1000);
|
||||||
|
|
||||||
|
if(tChannels.requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||||
|
resp.setOk();
|
||||||
|
else resp.setFail("Unknown GXS error!");
|
||||||
|
}
|
||||||
|
else resp.setFail("Unknown GXS error!");
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace resource_api
|
} // namespace resource_api
|
||||||
|
@ -1,4 +1,21 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
/*
|
||||||
|
* RetroShare JSON API
|
||||||
|
* Copyright (C) 2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "ResourceRouter.h"
|
#include "ResourceRouter.h"
|
||||||
|
|
||||||
@ -7,15 +24,21 @@ class RsGxsChannels;
|
|||||||
namespace resource_api
|
namespace resource_api
|
||||||
{
|
{
|
||||||
|
|
||||||
class ChannelsHandler : public ResourceRouter
|
struct ChannelsHandler : ResourceRouter
|
||||||
{
|
{
|
||||||
public:
|
ChannelsHandler(RsGxsChannels& channels);
|
||||||
ChannelsHandler(RsGxsChannels* channels);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ResponseTask* handleCreatePost(Request& req, Response& resp);
|
void handleListChannels(Request& req, Response& resp);
|
||||||
|
void handleGetChannelInfo(Request& req, Response& resp);
|
||||||
|
void handleGetChannelContent(Request& req, Response& resp);
|
||||||
|
void handleToggleSubscription(Request& req, Response& resp);
|
||||||
|
void handleCreateChannel(Request& req, Response& resp);
|
||||||
|
void handleToggleAutoDownload(Request& req, Response& resp);
|
||||||
|
void handleTogglePostRead(Request& req, Response& resp);
|
||||||
|
void handleCreatePost(Request& req, Response& resp);
|
||||||
|
|
||||||
RsGxsChannels* mChannels;
|
RsGxsChannels& mChannels;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace resource_api
|
} // namespace resource_api
|
||||||
|
@ -37,6 +37,16 @@ FileSharingHandler::FileSharingHandler(StateTokenServer *sts, RsFiles *files,
|
|||||||
addResourceHandler("get_dir_parent", this, &FileSharingHandler::handleGetDirectoryParent);
|
addResourceHandler("get_dir_parent", this, &FileSharingHandler::handleGetDirectoryParent);
|
||||||
addResourceHandler("get_dir_childs", this, &FileSharingHandler::handleGetDirectoryChilds);
|
addResourceHandler("get_dir_childs", this, &FileSharingHandler::handleGetDirectoryChilds);
|
||||||
|
|
||||||
|
addResourceHandler( "get_download_directory", this,
|
||||||
|
&FileSharingHandler::handleGetDownloadDirectory );
|
||||||
|
addResourceHandler( "set_download_directory", this,
|
||||||
|
&FileSharingHandler::handleSetDownloadDirectory );
|
||||||
|
|
||||||
|
addResourceHandler( "get_partials_directory", this,
|
||||||
|
&FileSharingHandler::handleGetPartialsDirectory );
|
||||||
|
addResourceHandler( "set_partials_directory", this,
|
||||||
|
&FileSharingHandler::handleSetPartialsDirectory );
|
||||||
|
|
||||||
addResourceHandler("is_dl_dir_shared", this, &FileSharingHandler::handleIsDownloadDirShared);
|
addResourceHandler("is_dl_dir_shared", this, &FileSharingHandler::handleIsDownloadDirShared);
|
||||||
addResourceHandler("share_dl_dir", this, &FileSharingHandler::handleShareDownloadDirectory);
|
addResourceHandler("share_dl_dir", this, &FileSharingHandler::handleShareDownloadDirectory);
|
||||||
|
|
||||||
@ -513,4 +523,48 @@ void FileSharingHandler::handleDownload(Request& req, Response& resp)
|
|||||||
resp.setFail("Couldn't download file");
|
resp.setFail("Couldn't download file");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FileSharingHandler::handleGetDownloadDirectory( Request& /*req*/,
|
||||||
|
Response& resp )
|
||||||
|
{
|
||||||
|
std::string dlDir = mRsFiles->getDownloadDirectory();
|
||||||
|
resp.mDataStream << makeKeyValueReference("download_directory", dlDir);
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileSharingHandler::handleSetDownloadDirectory( Request& req,
|
||||||
|
Response& resp )
|
||||||
|
{
|
||||||
|
std::string dlDir;
|
||||||
|
req.mStream << makeKeyValueReference("download_directory", dlDir);
|
||||||
|
|
||||||
|
if(dlDir.empty()) resp.setFail("missing download_directory");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mRsFiles->setDownloadDirectory(dlDir);
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileSharingHandler::handleGetPartialsDirectory( Request& /*req*/,
|
||||||
|
Response& resp )
|
||||||
|
{
|
||||||
|
std::string partialsDir = mRsFiles->getPartialsDirectory();
|
||||||
|
resp.mDataStream << makeKeyValueReference("partials_directory", partialsDir);
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileSharingHandler::handleSetPartialsDirectory( Request& req,
|
||||||
|
Response& resp )
|
||||||
|
{
|
||||||
|
std::string partialsDir;
|
||||||
|
req.mStream << makeKeyValueReference("partials_directory", partialsDir);
|
||||||
|
|
||||||
|
if(partialsDir.empty()) resp.setFail("missing partials_directory");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mRsFiles->setPartialsDirectory(partialsDir);
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace resource_api
|
} // namespace resource_api
|
||||||
|
@ -57,6 +57,12 @@ private:
|
|||||||
|
|
||||||
void handleDownload(Request& req, Response& resp);
|
void handleDownload(Request& req, Response& resp);
|
||||||
|
|
||||||
|
void handleGetDownloadDirectory(Request& req, Response& resp);
|
||||||
|
void handleSetDownloadDirectory(Request& req, Response& resp);
|
||||||
|
|
||||||
|
void handleGetPartialsDirectory(Request& req, Response& resp);
|
||||||
|
void handleSetPartialsDirectory(Request& req, Response& resp);
|
||||||
|
|
||||||
/// Token indicating change in local shared files
|
/// Token indicating change in local shared files
|
||||||
StateToken mLocalDirStateToken;
|
StateToken mLocalDirStateToken;
|
||||||
|
|
||||||
|
@ -15,6 +15,14 @@ TransfersHandler::TransfersHandler(StateTokenServer *sts, RsFiles *files, RsPeer
|
|||||||
addResourceHandler("downloads", this, &TransfersHandler::handleDownloads);
|
addResourceHandler("downloads", this, &TransfersHandler::handleDownloads);
|
||||||
addResourceHandler("uploads", this, &TransfersHandler::handleUploads);
|
addResourceHandler("uploads", this, &TransfersHandler::handleUploads);
|
||||||
addResourceHandler("control_download", this, &TransfersHandler::handleControlDownload);
|
addResourceHandler("control_download", this, &TransfersHandler::handleControlDownload);
|
||||||
|
|
||||||
|
addResourceHandler( "set_file_destination_directory", this,
|
||||||
|
&TransfersHandler::handleSetFileDestinationDirectory );
|
||||||
|
addResourceHandler( "set_file_destination_name", this,
|
||||||
|
&TransfersHandler::handleSetFileDestinationName );
|
||||||
|
addResourceHandler( "set_file_chunk_strategy", this,
|
||||||
|
&TransfersHandler::handleSetFileChunkStrategy );
|
||||||
|
|
||||||
mStateToken = mStateTokenServer->getNewToken();
|
mStateToken = mStateTokenServer->getNewToken();
|
||||||
mStateTokenServer->registerTickClient(this);
|
mStateTokenServer->registerTickClient(this);
|
||||||
mNotify.registerNotifyClient(this);
|
mNotify.registerNotifyClient(this);
|
||||||
@ -288,4 +296,58 @@ void TransfersHandler::handleUploads(Request & /* req */, Response &resp)
|
|||||||
resp.setOk();
|
resp.setOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TransfersHandler::handleSetFileDestinationDirectory( Request& req,
|
||||||
|
Response& resp )
|
||||||
|
{
|
||||||
|
mStateTokenServer->replaceToken(mStateToken);
|
||||||
|
|
||||||
|
std::string hashString;
|
||||||
|
std::string newPath;
|
||||||
|
req.mStream << makeKeyValueReference("path", newPath);
|
||||||
|
req.mStream << makeKeyValueReference("hash", hashString);
|
||||||
|
RsFileHash hash(hashString);
|
||||||
|
|
||||||
|
if (mFiles->setDestinationDirectory(hash, newPath)) resp.setOk();
|
||||||
|
else resp.setFail();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TransfersHandler::handleSetFileDestinationName( Request& req,
|
||||||
|
Response& resp )
|
||||||
|
{
|
||||||
|
mStateTokenServer->replaceToken(mStateToken);
|
||||||
|
|
||||||
|
std::string hashString;
|
||||||
|
std::string newName;
|
||||||
|
req.mStream << makeKeyValueReference("name", newName);
|
||||||
|
req.mStream << makeKeyValueReference("hash", hashString);
|
||||||
|
RsFileHash hash(hashString);
|
||||||
|
|
||||||
|
if (mFiles->setDestinationName(hash, newName)) resp.setOk();
|
||||||
|
else resp.setFail();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TransfersHandler::handleSetFileChunkStrategy(Request& req, Response& resp)
|
||||||
|
{
|
||||||
|
mStateTokenServer->replaceToken(mStateToken);
|
||||||
|
|
||||||
|
std::string hashString;
|
||||||
|
std::string newChunkStrategyStr;
|
||||||
|
req.mStream << makeKeyValueReference("chuck_stategy", newChunkStrategyStr);
|
||||||
|
req.mStream << makeKeyValueReference("hash", hashString);
|
||||||
|
|
||||||
|
RsFileHash hash(hashString);
|
||||||
|
FileChunksInfo::ChunkStrategy newStrategy =
|
||||||
|
FileChunksInfo::CHUNK_STRATEGY_PROGRESSIVE;
|
||||||
|
|
||||||
|
if ( newChunkStrategyStr == "streaming" )
|
||||||
|
newStrategy = FileChunksInfo::CHUNK_STRATEGY_STREAMING;
|
||||||
|
else if ( newChunkStrategyStr == "random" )
|
||||||
|
newStrategy = FileChunksInfo::CHUNK_STRATEGY_RANDOM;
|
||||||
|
else if ( newChunkStrategyStr == "progressive" )
|
||||||
|
newStrategy = FileChunksInfo::CHUNK_STRATEGY_PROGRESSIVE;
|
||||||
|
|
||||||
|
if (mFiles->setChunkStrategy(hash, newStrategy)) resp.setOk();
|
||||||
|
else resp.setFail();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace resource_api
|
} // namespace resource_api
|
||||||
|
@ -30,6 +30,9 @@ private:
|
|||||||
void handleControlDownload(Request& req, Response& resp);
|
void handleControlDownload(Request& req, Response& resp);
|
||||||
void handleDownloads(Request& req, Response& resp);
|
void handleDownloads(Request& req, Response& resp);
|
||||||
void handleUploads(Request& req, Response& resp);
|
void handleUploads(Request& req, Response& resp);
|
||||||
|
void handleSetFileDestinationDirectory(Request& req, Response& resp);
|
||||||
|
void handleSetFileDestinationName(Request& req, Response& resp);
|
||||||
|
void handleSetFileChunkStrategy(Request& req, Response& resp);
|
||||||
|
|
||||||
StateTokenServer* mStateTokenServer;
|
StateTokenServer* mStateTokenServer;
|
||||||
RsFiles* mFiles;
|
RsFiles* mFiles;
|
||||||
|
@ -2,50 +2,26 @@
|
|||||||
|
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
CONFIG += staticlib
|
CONFIG += staticlib
|
||||||
CONFIG += create_prl
|
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
TARGET = resapi
|
TARGET = resapi
|
||||||
TARGET_PRL = libresapi
|
TARGET_PRL = libresapi
|
||||||
DESTDIR = lib
|
DESTDIR = lib
|
||||||
|
|
||||||
DEPENDPATH += ../../libretroshare/src/
|
!include(use_libresapi.pri):error("Including")
|
||||||
|
|
||||||
INCLUDEPATH += ../../libretroshare/src
|
INCLUDEPATH += ../../libretroshare/src
|
||||||
|
|
||||||
|
libresapilocalserver {
|
||||||
|
SOURCES *= api/ApiServerLocal.cpp
|
||||||
|
HEADERS *= api/ApiServerLocal.h
|
||||||
|
}
|
||||||
|
|
||||||
retroshare_android_service {
|
libresapi_settings {
|
||||||
win32 {
|
SOURCES += api/SettingsHandler.cpp
|
||||||
OBJECTS_DIR = temp/obj
|
HEADERS += api/SettingsHandler.h
|
||||||
|
|
||||||
LIBS_DIR = $$PWD/../../libs/lib
|
|
||||||
LIBS += $$OUT_PWD/../../libretroshare/src/lib/libretroshare.a
|
|
||||||
LIBS += $$OUT_PWD/../../openpgpsdk/src/lib/libops.a
|
|
||||||
|
|
||||||
for(lib, LIB_DIR):LIBS += -L"$$lib"
|
|
||||||
for(bin, BIN_DIR):LIBS += -L"$$bin"
|
|
||||||
|
|
||||||
|
|
||||||
LIBS += -lssl -lcrypto -lpthread -lminiupnpc -lz -lws2_32
|
|
||||||
LIBS += -luuid -lole32 -liphlpapi -lcrypt32 -lgdi32
|
|
||||||
LIBS += -lwinmm
|
|
||||||
|
|
||||||
DEFINES *= WINDOWS_SYS WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T
|
|
||||||
|
|
||||||
DEPENDPATH += . $$INC_DIR
|
|
||||||
INCLUDEPATH += . $$INC_DIR
|
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4) {
|
|
||||||
# Qt 5
|
|
||||||
RC_INCLUDEPATH += $$_PRO_FILE_PWD_/../../libretroshare/src
|
|
||||||
} else {
|
|
||||||
# Qt 4
|
|
||||||
QMAKE_RC += --include-dir=$$_PRO_FILE_PWD_/../../libretroshare/src
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
libresapihttpserver {
|
libresapihttpserver {
|
||||||
CONFIG += libmicrohttpd
|
|
||||||
|
|
||||||
unix {
|
unix {
|
||||||
|
|
||||||
webui_files.path = "$${DATA_DIR}/webui"
|
webui_files.path = "$${DATA_DIR}/webui"
|
||||||
@ -121,15 +97,8 @@ libresapihttpserver {
|
|||||||
DEFINES *= WINDOWS_SYS
|
DEFINES *= WINDOWS_SYS
|
||||||
INCLUDEPATH += . $$INC_DIR
|
INCLUDEPATH += . $$INC_DIR
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4) {
|
|
||||||
# Qt 5
|
|
||||||
PRO_PATH=$$shell_path($$_PRO_FILE_PWD_)
|
PRO_PATH=$$shell_path($$_PRO_FILE_PWD_)
|
||||||
MAKE_SRC=$$shell_path($$PRO_PATH/webui-src/make-src)
|
MAKE_SRC=$$shell_path($$PRO_PATH/webui-src/make-src)
|
||||||
} else {
|
|
||||||
# Qt 4
|
|
||||||
PRO_PATH=$$replace(_PRO_FILE_PWD_, /, \\)
|
|
||||||
MAKE_SRC=$$PRO_PATH\\webui-src\\make-src
|
|
||||||
}
|
|
||||||
|
|
||||||
#create_webfiles.commands = $$MAKE_SRC\\build.bat $$PRO_PATH
|
#create_webfiles.commands = $$MAKE_SRC\\build.bat $$PRO_PATH
|
||||||
#QMAKE_EXTRA_TARGETS += create_webfiles
|
#QMAKE_EXTRA_TARGETS += create_webfiles
|
||||||
@ -211,18 +180,3 @@ HEADERS += \
|
|||||||
api/ChannelsHandler.h \
|
api/ChannelsHandler.h \
|
||||||
api/StatsHandler.h \
|
api/StatsHandler.h \
|
||||||
api/FileSharingHandler.h
|
api/FileSharingHandler.h
|
||||||
|
|
||||||
libresapilocalserver {
|
|
||||||
CONFIG *= qt
|
|
||||||
QT *= network
|
|
||||||
SOURCES *= api/ApiServerLocal.cpp
|
|
||||||
HEADERS *= api/ApiServerLocal.h
|
|
||||||
}
|
|
||||||
|
|
||||||
qt_dependencies {
|
|
||||||
CONFIG *= qt
|
|
||||||
QT *= core
|
|
||||||
|
|
||||||
SOURCES += api/SettingsHandler.cpp
|
|
||||||
HEADERS += api/SettingsHandler.h
|
|
||||||
}
|
|
||||||
|
37
libresapi/src/use_libresapi.pri
Normal file
37
libresapi/src/use_libresapi.pri
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
DEPENDPATH *= $$system_path($$clean_path($$PWD/../../libresapi/src))
|
||||||
|
INCLUDEPATH *= $$system_path($$clean_path($${PWD}/../../libresapi/src))
|
||||||
|
LIBS *= -L$$system_path($$clean_path($${OUT_PWD}/../../libresapi/src/lib/)) -lresapi
|
||||||
|
|
||||||
|
!equals(TARGET, resapi):PRE_TARGETDEPS *= $$system_path($$clean_path($${OUT_PWD}/../../libresapi/src/lib/libresapi.a))
|
||||||
|
|
||||||
|
!include("../../libretroshare/src/use_libretroshare.pri"):error("Including")
|
||||||
|
|
||||||
|
sLibs =
|
||||||
|
mLibs =
|
||||||
|
dLibs =
|
||||||
|
|
||||||
|
libresapilocalserver {
|
||||||
|
CONFIG *= qt
|
||||||
|
QT *= network
|
||||||
|
}
|
||||||
|
|
||||||
|
libresapi_settings {
|
||||||
|
CONFIG *= qt
|
||||||
|
QT *= core
|
||||||
|
}
|
||||||
|
|
||||||
|
libresapihttpserver {
|
||||||
|
mLibs *= microhttpd
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
sLibs *= $$mLibs
|
||||||
|
} else {
|
||||||
|
dLibs *= $$mLibs
|
||||||
|
}
|
||||||
|
|
||||||
|
LIBS += $$linkStaticLibs(sLibs)
|
||||||
|
PRE_TARGETDEPS += $$pretargetStaticLibs(sLibs)
|
||||||
|
|
||||||
|
LIBS += $$linkDynamicLibs(dLibs)
|
||||||
|
|
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
typedef RsPeerId ChatLobbyVirtualPeerId ;
|
typedef RsPeerId ChatLobbyVirtualPeerId ;
|
||||||
|
|
||||||
class RsItem ;
|
struct RsItem;
|
||||||
class p3HistoryMgr ;
|
class p3HistoryMgr ;
|
||||||
class p3IdService ;
|
class p3IdService ;
|
||||||
class p3ServiceControl;
|
class p3ServiceControl;
|
||||||
|
@ -205,11 +205,8 @@ void RsPrivateChatMsgConfigItem::get(RsChatMsgItem *ci)
|
|||||||
ci->recvTime = recvTime;
|
ci->recvTime = recvTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Necessary to serialize `store` that is an STL container with RsChatMsgItem
|
|
||||||
* inside which is a subtype of RsItem */
|
|
||||||
RS_REGISTER_ITEM_TYPE(RsChatMsgItem)
|
|
||||||
|
|
||||||
void PrivateOugoingMapItem::serial_process(
|
void PrivateOugoingMapItem::serial_process(
|
||||||
RsGenericSerializer::SerializeJob j,
|
RsGenericSerializer::SerializeJob j,
|
||||||
RsGenericSerializer::SerializeContext& ctx )
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
{ RS_REGISTER_SERIAL_MEMBER(store); }
|
{ RS_SERIAL_PROCESS(store); }
|
||||||
|
@ -623,7 +623,7 @@ bool LocalDirectoryStorage::locked_getFileSharingPermissions(const EntryIndex& i
|
|||||||
|
|
||||||
if(it == mLocalDirs.end())
|
if(it == mLocalDirs.end())
|
||||||
{
|
{
|
||||||
std::cerr << "(EE) very weird bug: base directory \"" << base_dir << "\" not found in shared dir list." << std::endl;
|
std::cerr << "(II) base directory \"" << base_dir << "\" not found in shared dir list." << std::endl;
|
||||||
return false ;
|
return false ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,10 +73,23 @@ void LocalDirectoryUpdater::data_tick()
|
|||||||
{
|
{
|
||||||
if(now > mDelayBetweenDirectoryUpdates + mLastSweepTime)
|
if(now > mDelayBetweenDirectoryUpdates + mLastSweepTime)
|
||||||
{
|
{
|
||||||
if(sweepSharedDirectories())
|
bool some_files_not_ready = false ;
|
||||||
|
|
||||||
|
if(sweepSharedDirectories(some_files_not_ready))
|
||||||
{
|
{
|
||||||
mNeedsFullRecheck = false;
|
if(some_files_not_ready)
|
||||||
|
{
|
||||||
|
mNeedsFullRecheck = true ;
|
||||||
|
mLastSweepTime = now - mDelayBetweenDirectoryUpdates + 60 ; // retry 20 secs from now
|
||||||
|
|
||||||
|
std::cerr << "(II) some files being modified. Will re-scan in 60 secs." << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mNeedsFullRecheck = false ;
|
||||||
mLastSweepTime = now ;
|
mLastSweepTime = now ;
|
||||||
|
}
|
||||||
|
|
||||||
mSharedDirectories->notifyTSChanged();
|
mSharedDirectories->notifyTSChanged();
|
||||||
mForceUpdate = false ;
|
mForceUpdate = false ;
|
||||||
}
|
}
|
||||||
@ -111,7 +124,7 @@ void LocalDirectoryUpdater::forceUpdate()
|
|||||||
mHashCache->togglePauseHashingProcess();
|
mHashCache->togglePauseHashingProcess();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LocalDirectoryUpdater::sweepSharedDirectories()
|
bool LocalDirectoryUpdater::sweepSharedDirectories(bool& some_files_not_ready)
|
||||||
{
|
{
|
||||||
if(mHashSalt.isNull())
|
if(mHashSalt.isNull())
|
||||||
{
|
{
|
||||||
@ -158,7 +171,7 @@ bool LocalDirectoryUpdater::sweepSharedDirectories()
|
|||||||
#endif
|
#endif
|
||||||
existing_dirs.insert(RsDirUtil::removeSymLinks(stored_dir_it.name()));
|
existing_dirs.insert(RsDirUtil::removeSymLinks(stored_dir_it.name()));
|
||||||
|
|
||||||
recursUpdateSharedDir(stored_dir_it.name(), *stored_dir_it,existing_dirs,1) ; // here we need to use the list that was stored, instead of the shared dir list, because the two
|
recursUpdateSharedDir(stored_dir_it.name(), *stored_dir_it,existing_dirs,1,some_files_not_ready) ; // here we need to use the list that was stored, instead of the shared dir list, because the two
|
||||||
// are not necessarily in the same order.
|
// are not necessarily in the same order.
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +181,7 @@ bool LocalDirectoryUpdater::sweepSharedDirectories()
|
|||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalDirectoryUpdater::recursUpdateSharedDir(const std::string& cumulated_path, DirectoryStorage::EntryIndex indx,std::set<std::string>& existing_directories,uint32_t current_depth)
|
void LocalDirectoryUpdater::recursUpdateSharedDir(const std::string& cumulated_path, DirectoryStorage::EntryIndex indx,std::set<std::string>& existing_directories,uint32_t current_depth,bool& some_files_not_ready)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_LOCAL_DIR_UPDATER
|
#ifdef DEBUG_LOCAL_DIR_UPDATER
|
||||||
std::cerr << "[directory storage] parsing directory " << cumulated_path << ", index=" << indx << std::endl;
|
std::cerr << "[directory storage] parsing directory " << cumulated_path << ", index=" << indx << std::endl;
|
||||||
@ -187,6 +200,8 @@ void LocalDirectoryUpdater::recursUpdateSharedDir(const std::string& cumulated_p
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time_t now = time(NULL) ;
|
||||||
|
|
||||||
if(mNeedsFullRecheck || dirIt.dir_modtime() > dir_local_mod_time) // the > is because we may have changed the virtual name, and therefore the TS wont match.
|
if(mNeedsFullRecheck || dirIt.dir_modtime() > dir_local_mod_time) // the > is because we may have changed the virtual name, and therefore the TS wont match.
|
||||||
// we only want to detect when the directory has changed on the disk
|
// we only want to detect when the directory has changed on the disk
|
||||||
{
|
{
|
||||||
@ -200,11 +215,23 @@ void LocalDirectoryUpdater::recursUpdateSharedDir(const std::string& cumulated_p
|
|||||||
{
|
{
|
||||||
switch(dirIt.file_type())
|
switch(dirIt.file_type())
|
||||||
{
|
{
|
||||||
case librs::util::FolderIterator::TYPE_FILE: subfiles[dirIt.file_name()].modtime = dirIt.file_modtime() ;
|
case librs::util::FolderIterator::TYPE_FILE:
|
||||||
|
|
||||||
|
if(dirIt.file_modtime() + MIN_TIME_AFTER_LAST_MODIFICATION < now)
|
||||||
|
{
|
||||||
|
subfiles[dirIt.file_name()].modtime = dirIt.file_modtime() ;
|
||||||
subfiles[dirIt.file_name()].size = dirIt.file_size();
|
subfiles[dirIt.file_name()].size = dirIt.file_size();
|
||||||
#ifdef DEBUG_LOCAL_DIR_UPDATER
|
#ifdef DEBUG_LOCAL_DIR_UPDATER
|
||||||
std::cerr << " adding sub-file \"" << dirIt.file_name() << "\"" << std::endl;
|
std::cerr << " adding sub-file \"" << dirIt.file_name() << "\"" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
some_files_not_ready = true ;
|
||||||
|
|
||||||
|
std::cerr << "(WW) file " << dirIt.file_fullpath() << " is probably being modified. Keeping it for later." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case librs::util::FolderIterator::TYPE_DIR:
|
case librs::util::FolderIterator::TYPE_DIR:
|
||||||
@ -276,7 +303,7 @@ void LocalDirectoryUpdater::recursUpdateSharedDir(const std::string& cumulated_p
|
|||||||
#ifdef DEBUG_LOCAL_DIR_UPDATER
|
#ifdef DEBUG_LOCAL_DIR_UPDATER
|
||||||
std::cerr << " recursing into " << stored_dir_it.name() << std::endl;
|
std::cerr << " recursing into " << stored_dir_it.name() << std::endl;
|
||||||
#endif
|
#endif
|
||||||
recursUpdateSharedDir(cumulated_path + "/" + stored_dir_it.name(), *stored_dir_it,existing_directories,current_depth+1) ;
|
recursUpdateSharedDir(cumulated_path + "/" + stored_dir_it.name(), *stored_dir_it,existing_directories,current_depth+1,some_files_not_ready) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,8 +70,8 @@ protected:
|
|||||||
virtual void hash_callback(uint32_t client_param, const std::string& name, const RsFileHash& hash, uint64_t size);
|
virtual void hash_callback(uint32_t client_param, const std::string& name, const RsFileHash& hash, uint64_t size);
|
||||||
virtual bool hash_confirm(uint32_t client_param) ;
|
virtual bool hash_confirm(uint32_t client_param) ;
|
||||||
|
|
||||||
void recursUpdateSharedDir(const std::string& cumulated_path, DirectoryStorage::EntryIndex indx, std::set<std::string>& existing_directories, uint32_t current_depth);
|
void recursUpdateSharedDir(const std::string& cumulated_path, DirectoryStorage::EntryIndex indx, std::set<std::string>& existing_directories, uint32_t current_depth,bool& files_not_ready);
|
||||||
bool sweepSharedDirectories();
|
bool sweepSharedDirectories(bool &some_files_not_ready);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool filterFile(const std::string& fname) const ; // reponds true if the file passes the ignore lists test.
|
bool filterFile(const std::string& fname) const ; // reponds true if the file passes the ignore lists test.
|
||||||
|
@ -51,6 +51,7 @@ static const std::string LOCAL_SHARED_DIRS_FILE_NAME = "local_dir_hierarchy.bin"
|
|||||||
|
|
||||||
static const uint32_t MIN_INTERVAL_BETWEEN_HASH_CACHE_SAVE = 20 ; // never save hash cache more often than every 20 secs.
|
static const uint32_t MIN_INTERVAL_BETWEEN_HASH_CACHE_SAVE = 20 ; // never save hash cache more often than every 20 secs.
|
||||||
static const uint32_t MIN_INTERVAL_BETWEEN_REMOTE_DIRECTORY_SAVE = 23 ; // never save remote directories more often than this
|
static const uint32_t MIN_INTERVAL_BETWEEN_REMOTE_DIRECTORY_SAVE = 23 ; // never save remote directories more often than this
|
||||||
|
static const uint32_t MIN_TIME_AFTER_LAST_MODIFICATION = 20 ; // never hash a file that is just being modified, otherwise we end up with a corrupted hash
|
||||||
|
|
||||||
static const uint32_t MAX_DIR_SYNC_RESPONSE_DATA_SIZE = 20000 ; // Maximum RsItem data size in bytes for serialised directory transmission
|
static const uint32_t MAX_DIR_SYNC_RESPONSE_DATA_SIZE = 20000 ; // Maximum RsItem data size in bytes for serialised directory transmission
|
||||||
static const uint32_t DEFAULT_HASH_STORAGE_DURATION_DAYS = 30 ; // remember deleted/inaccessible files for 30 days
|
static const uint32_t DEFAULT_HASH_STORAGE_DURATION_DAYS = 30 ; // remember deleted/inaccessible files for 30 days
|
||||||
|
@ -1,3 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* RetroShare C++ File lists IO methods.
|
||||||
|
*
|
||||||
|
* file_sharing/file_tree.h
|
||||||
|
*
|
||||||
|
* Copyright 2017 by csoler
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License Version 2 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This library 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
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
|
* USA.
|
||||||
|
*
|
||||||
|
* Please report all bugs and problems to "retroshare.project@gmail.com".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
#include "retroshare/rsfiles.h"
|
#include "retroshare/rsfiles.h"
|
||||||
|
|
||||||
class FileTreeImpl: public FileTree
|
class FileTreeImpl: public FileTree
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
static const uint32_t SOURCE_CHUNK_MAP_UPDATE_PERIOD = 60 ; //! TTL for chunkmap info
|
static const uint32_t SOURCE_CHUNK_MAP_UPDATE_PERIOD = 60 ; //! TTL for chunkmap info
|
||||||
static const uint32_t INACTIVE_CHUNK_TIME_LAPSE = 3600 ; //! TTL for an inactive chunk
|
static const uint32_t INACTIVE_CHUNK_TIME_LAPSE = 3600 ; //! TTL for an inactive chunk
|
||||||
static const uint32_t FT_CHUNKMAP_MAX_CHUNK_JUMP = 50 ; //! Maximum chunk jump in progressive DL mode
|
static const uint32_t FT_CHUNKMAP_MAX_CHUNK_JUMP = 50 ; //! Maximum chunk jump in progressive DL mode
|
||||||
|
static const uint32_t FT_CHUNKMAP_MAX_SLICE_REASK_DELAY = 10 ; //! Maximum time to re-ask a slice to another peer at end of transfer
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& o,const ftChunk& c)
|
std::ostream& operator<<(std::ostream& o,const ftChunk& c)
|
||||||
{
|
{
|
||||||
@ -120,7 +121,7 @@ void ChunkMap::setAvailabilityMap(const CompressedChunkMap& map)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChunkMap::dataReceived(const ftChunk::ChunkId& cid)
|
void ChunkMap::dataReceived(const ftChunk::OffsetInFile& cid)
|
||||||
{
|
{
|
||||||
// 1 - find which chunk contains the received data.
|
// 1 - find which chunk contains the received data.
|
||||||
//
|
//
|
||||||
@ -139,7 +140,7 @@ void ChunkMap::dataReceived(const ftChunk::ChunkId& cid)
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<ftChunk::ChunkId,uint32_t>::iterator it(itc->second._slices.find(cid)) ;
|
std::map<ftChunk::OffsetInFile,ChunkDownloadInfo::SliceRequestInfo>::iterator it(itc->second._slices.find(cid)) ;
|
||||||
|
|
||||||
if(it == itc->second._slices.end())
|
if(it == itc->second._slices.end())
|
||||||
{
|
{
|
||||||
@ -150,8 +151,8 @@ void ChunkMap::dataReceived(const ftChunk::ChunkId& cid)
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
_total_downloaded += it->second ;
|
_total_downloaded += it->second.size ;
|
||||||
itc->second._remains -= it->second ;
|
itc->second._remains -= it->second.size ;
|
||||||
itc->second._slices.erase(it) ;
|
itc->second._slices.erase(it) ;
|
||||||
itc->second._last_data_received = time(NULL) ; // update time stamp
|
itc->second._last_data_received = time(NULL) ; // update time stamp
|
||||||
|
|
||||||
@ -256,6 +257,38 @@ void ChunkMap::setChunkCheckingResult(uint32_t chunk_number,bool check_succeeded
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ChunkMap::reAskPendingChunk( const RsPeerId& peer_id,
|
||||||
|
uint32_t /*size_hint*/,
|
||||||
|
uint64_t& offset, uint32_t& size)
|
||||||
|
{
|
||||||
|
// make sure that we're at the end of the file. No need to be too greedy in the middle of it.
|
||||||
|
|
||||||
|
for(uint32_t i=0;i<_map.size();++i)
|
||||||
|
if(_map[i] == FileChunksInfo::CHUNK_OUTSTANDING)
|
||||||
|
return false ;
|
||||||
|
|
||||||
|
time_t now = time(NULL);
|
||||||
|
|
||||||
|
for(std::map<uint32_t,ChunkDownloadInfo>::iterator it(_slices_to_download.begin());it!=_slices_to_download.end();++it)
|
||||||
|
for(std::map<ftChunk::OffsetInFile,ChunkDownloadInfo::SliceRequestInfo >::iterator it2(it->second._slices.begin());it2!=it->second._slices.end();++it2)
|
||||||
|
if(it2->second.request_time + FT_CHUNKMAP_MAX_SLICE_REASK_DELAY < now && it2->second.peers.end()==it2->second.peers.find(peer_id))
|
||||||
|
{
|
||||||
|
offset = it2->first;
|
||||||
|
size = it2->second.size ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_FTCHUNK
|
||||||
|
std::cerr << "*** ChunkMap::reAskPendingChunk: re-asking slice (" << offset << ", " << size << ") to peer " << peer_id << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
it2->second.request_time = now ;
|
||||||
|
it2->second.peers.insert(peer_id) ;
|
||||||
|
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
// Warning: a chunk may be empty, but still being downloaded, so asking new slices from it
|
// Warning: a chunk may be empty, but still being downloaded, so asking new slices from it
|
||||||
// will produce slices of size 0. This happens at the end of each chunk.
|
// will produce slices of size 0. This happens at the end of each chunk.
|
||||||
// --> I need to get slices from the next chunk, in such a case.
|
// --> I need to get slices from the next chunk, in such a case.
|
||||||
@ -295,7 +328,7 @@ bool ChunkMap::getDataChunk(const RsPeerId& peer_id,uint32_t size_hint,ftChunk&
|
|||||||
ChunkDownloadInfo& cdi(_slices_to_download[c]) ;
|
ChunkDownloadInfo& cdi(_slices_to_download[c]) ;
|
||||||
falsafe_it = pit ; // let's keep this one just in case.
|
falsafe_it = pit ; // let's keep this one just in case.
|
||||||
|
|
||||||
if(cdi._slices.rbegin() != cdi._slices.rend() && cdi._slices.rbegin()->second*0.7 <= (float)size_hint)
|
if(cdi._slices.rbegin() != cdi._slices.rend() && cdi._slices.rbegin()->second.size*0.7 <= (float)size_hint)
|
||||||
{
|
{
|
||||||
it = pit ;
|
it = pit ;
|
||||||
#ifdef DEBUG_FTCHUNK
|
#ifdef DEBUG_FTCHUNK
|
||||||
@ -348,9 +381,14 @@ bool ChunkMap::getDataChunk(const RsPeerId& peer_id,uint32_t size_hint,ftChunk&
|
|||||||
// Get the first slice of the chunk, that is at most of length size
|
// Get the first slice of the chunk, that is at most of length size
|
||||||
//
|
//
|
||||||
it->second.getSlice(size_hint,chunk) ;
|
it->second.getSlice(size_hint,chunk) ;
|
||||||
_slices_to_download[chunk.offset/_chunk_size]._slices[chunk.id] = chunk.size ;
|
|
||||||
_slices_to_download[chunk.offset/_chunk_size]._last_data_received = time(NULL) ;
|
_slices_to_download[chunk.offset/_chunk_size]._last_data_received = time(NULL) ;
|
||||||
|
|
||||||
|
ChunkDownloadInfo::SliceRequestInfo& r(_slices_to_download[chunk.offset/_chunk_size]._slices[chunk.id]);
|
||||||
|
|
||||||
|
r.size = chunk.size ;
|
||||||
|
r.request_time = time(NULL);
|
||||||
|
r.peers.insert(peer_id);
|
||||||
|
|
||||||
chunk.peer_id = peer_id ;
|
chunk.peer_id = peer_id ;
|
||||||
|
|
||||||
#ifdef DEBUG_FTCHUNK
|
#ifdef DEBUG_FTCHUNK
|
||||||
@ -362,7 +400,7 @@ bool ChunkMap::getDataChunk(const RsPeerId& peer_id,uint32_t size_hint,ftChunk&
|
|||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChunkMap::removeInactiveChunks(std::vector<ftChunk::ChunkId>& to_remove)
|
void ChunkMap::removeInactiveChunks(std::vector<ftChunk::OffsetInFile>& to_remove)
|
||||||
{
|
{
|
||||||
to_remove.clear() ;
|
to_remove.clear() ;
|
||||||
time_t now = time(NULL) ;
|
time_t now = time(NULL) ;
|
||||||
@ -377,7 +415,7 @@ void ChunkMap::removeInactiveChunks(std::vector<ftChunk::ChunkId>& to_remove)
|
|||||||
//
|
//
|
||||||
std::map<ChunkNumber,ChunkDownloadInfo>::iterator tmp(it) ;
|
std::map<ChunkNumber,ChunkDownloadInfo>::iterator tmp(it) ;
|
||||||
|
|
||||||
for(std::map<ftChunk::ChunkId,uint32_t>::const_iterator it2(it->second._slices.begin());it2!=it->second._slices.end();++it2)
|
for(std::map<ftChunk::OffsetInFile,ChunkDownloadInfo::SliceRequestInfo>::const_iterator it2(it->second._slices.begin());it2!=it->second._slices.end();++it2)
|
||||||
to_remove.push_back(it2->first) ;
|
to_remove.push_back(it2->first) ;
|
||||||
|
|
||||||
_map[it->first] = FileChunksInfo::CHUNK_OUTSTANDING ; // reset the chunk
|
_map[it->first] = FileChunksInfo::CHUNK_OUTSTANDING ; // reset the chunk
|
||||||
|
@ -32,7 +32,7 @@ class ftController ;
|
|||||||
class ftChunk
|
class ftChunk
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef uint64_t ChunkId ;
|
typedef uint64_t OffsetInFile ;
|
||||||
|
|
||||||
ftChunk():offset(0), size(0), id(0), ts(0),ref_cnt(NULL) {}
|
ftChunk():offset(0), size(0), id(0), ts(0),ref_cnt(NULL) {}
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ class ftChunk
|
|||||||
|
|
||||||
uint64_t offset; // current offset of the slice
|
uint64_t offset; // current offset of the slice
|
||||||
uint64_t size; // size remaining to download
|
uint64_t size; // size remaining to download
|
||||||
ChunkId id ; // id of the chunk. Equal to the starting offset of the chunk
|
OffsetInFile id ; // id of the chunk. Equal to the starting offset of the chunk
|
||||||
time_t ts; // time of last data received
|
time_t ts; // time of last data received
|
||||||
int *ref_cnt; // shared counter of number of sub-blocks. Used when a slice gets split.
|
int *ref_cnt; // shared counter of number of sub-blocks. Used when a slice gets split.
|
||||||
RsPeerId peer_id ;
|
RsPeerId peer_id ;
|
||||||
@ -70,10 +70,17 @@ class Chunk
|
|||||||
uint64_t _end ; // const
|
uint64_t _end ; // const
|
||||||
};
|
};
|
||||||
|
|
||||||
class ChunkDownloadInfo
|
struct ChunkDownloadInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::map<ftChunk::ChunkId,uint32_t> _slices ;
|
struct SliceRequestInfo
|
||||||
|
{
|
||||||
|
uint32_t size ; // size of the slice
|
||||||
|
time_t request_time ; // last request time
|
||||||
|
std::set<RsPeerId> peers ; // peers the slice was requested to. Normally only one, except at the end of the file.
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<ftChunk::OffsetInFile,SliceRequestInfo> _slices ;
|
||||||
uint32_t _remains ;
|
uint32_t _remains ;
|
||||||
time_t _last_data_received ;
|
time_t _last_data_received ;
|
||||||
};
|
};
|
||||||
@ -120,13 +127,18 @@ class ChunkMap
|
|||||||
|
|
||||||
virtual bool getDataChunk(const RsPeerId& peer_id,uint32_t size_hint,ftChunk& chunk,bool& source_chunk_map_needed) ;
|
virtual bool getDataChunk(const RsPeerId& peer_id,uint32_t size_hint,ftChunk& chunk,bool& source_chunk_map_needed) ;
|
||||||
|
|
||||||
|
/// Returns an already pending slice that was being downloaded but hasn't arrived yet. This is mostly used at the end of the file
|
||||||
|
/// in order to re-ask pendign slices to active peers while slow peers take a lot of time to send their remaining slices.
|
||||||
|
///
|
||||||
|
bool reAskPendingChunk(const RsPeerId& peer_id,uint32_t size_hint,uint64_t& offset,uint32_t& size);
|
||||||
|
|
||||||
/// Notify received a slice of data. This needs to
|
/// Notify received a slice of data. This needs to
|
||||||
/// - carve in the map of chunks what is received, what is not.
|
/// - carve in the map of chunks what is received, what is not.
|
||||||
/// - tell which chunks are finished. For this, each interval must know what chunk number it has been attributed
|
/// - tell which chunks are finished. For this, each interval must know what chunk number it has been attributed
|
||||||
/// when the interval is split in the middle, the number of intervals for the chunk is increased. If the interval is
|
/// when the interval is split in the middle, the number of intervals for the chunk is increased. If the interval is
|
||||||
/// completely covered by the data, the interval number is decreased.
|
/// completely covered by the data, the interval number is decreased.
|
||||||
|
|
||||||
virtual void dataReceived(const ftChunk::ChunkId& c_id) ;
|
virtual void dataReceived(const ftChunk::OffsetInFile& c_id) ;
|
||||||
|
|
||||||
/// Decides how chunks are selected.
|
/// Decides how chunks are selected.
|
||||||
/// STREAMING: the 1st chunk is always returned
|
/// STREAMING: the 1st chunk is always returned
|
||||||
@ -163,7 +175,7 @@ class ChunkMap
|
|||||||
|
|
||||||
/// Remove active chunks that have not received any data for the last 60 seconds, and return
|
/// Remove active chunks that have not received any data for the last 60 seconds, and return
|
||||||
/// the list of slice numbers that should be canceled.
|
/// the list of slice numbers that should be canceled.
|
||||||
void removeInactiveChunks(std::vector<ftChunk::ChunkId>& to_remove) ;
|
void removeInactiveChunks(std::vector<ftChunk::OffsetInFile>& to_remove) ;
|
||||||
|
|
||||||
/// Updates the peer's availablility map
|
/// Updates the peer's availablility map
|
||||||
//
|
//
|
||||||
@ -214,7 +226,7 @@ class ChunkMap
|
|||||||
uint32_t _chunk_size ; //! Size of chunks. Common to all chunks.
|
uint32_t _chunk_size ; //! Size of chunks. Common to all chunks.
|
||||||
FileChunksInfo::ChunkStrategy _strategy ; //! how do we allocate new chunks
|
FileChunksInfo::ChunkStrategy _strategy ; //! how do we allocate new chunks
|
||||||
std::map<RsPeerId,Chunk> _active_chunks_feed ; //! vector of chunks being downloaded. Exactly 1 chunk per peer.
|
std::map<RsPeerId,Chunk> _active_chunks_feed ; //! vector of chunks being downloaded. Exactly 1 chunk per peer.
|
||||||
std::map<ChunkNumber,ChunkDownloadInfo> _slices_to_download ; //! list of (slice id,slice size)
|
std::map<ChunkNumber,ChunkDownloadInfo> _slices_to_download ; //! list of (slice offset,slice size) currently being downloaded
|
||||||
std::vector<FileChunksInfo::ChunkState> _map ; //! vector of chunk state over the whole file
|
std::vector<FileChunksInfo::ChunkState> _map ; //! vector of chunk state over the whole file
|
||||||
std::map<RsPeerId,SourceChunksInfo> _peers_chunks_availability ; //! what does each source peer have
|
std::map<RsPeerId,SourceChunksInfo> _peers_chunks_availability ; //! what does each source peer have
|
||||||
uint64_t _total_downloaded ; //! completion for the file
|
uint64_t _total_downloaded ; //! completion for the file
|
||||||
|
@ -88,16 +88,13 @@ ftFileControl::ftFileControl()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ftFileControl::ftFileControl(std::string fname,
|
ftFileControl::ftFileControl(const std::string& fname, const std::string& tmppath, const std::string& dest
|
||||||
std::string tmppath, std::string dest,
|
, uint64_t size, const RsFileHash &hash, TransferRequestFlags flags
|
||||||
uint64_t size, const RsFileHash &hash, TransferRequestFlags flags,
|
, ftFileCreator *fc, ftTransferModule *tm)
|
||||||
ftFileCreator *fc, ftTransferModule *tm)
|
: mName(fname), mCurrentPath(tmppath), mDestination(dest)
|
||||||
:mName(fname), mCurrentPath(tmppath), mDestination(dest),
|
, mTransfer(tm), mCreator(fc), mState(DOWNLOADING), mHash(hash)
|
||||||
mTransfer(tm), mCreator(fc), mState(DOWNLOADING), mHash(hash),
|
, mSize(size), mFlags(flags), mCreateTime(0), mQueuePriority(0), mQueuePosition(0)
|
||||||
mSize(size), mFlags(flags), mCreateTime(0), mQueuePriority(0), mQueuePosition(0)
|
{}
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ftController::ftController(ftDataMultiplex *dm, p3ServiceControl *sc, uint32_t ftServiceId)
|
ftController::ftController(ftDataMultiplex *dm, p3ServiceControl *sc, uint32_t ftServiceId)
|
||||||
: p3Config(),
|
: p3Config(),
|
||||||
@ -1479,7 +1476,7 @@ bool ftController::setPartialsDirectory(std::string path)
|
|||||||
|
|
||||||
path = RsDirUtil::convertPathToUnix(path);
|
path = RsDirUtil::convertPathToUnix(path);
|
||||||
|
|
||||||
if (!path.find(mDownloadPath)) {
|
if (path.find(mDownloadPath) != std::string::npos) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1488,7 +1485,7 @@ bool ftController::setPartialsDirectory(std::string path)
|
|||||||
std::list<SharedDirInfo> dirs;
|
std::list<SharedDirInfo> dirs;
|
||||||
rsFiles->getSharedDirectories(dirs);
|
rsFiles->getSharedDirectories(dirs);
|
||||||
for (it = dirs.begin(); it != dirs.end(); ++it) {
|
for (it = dirs.begin(); it != dirs.end(); ++it) {
|
||||||
if (!path.find((*it).filename)) {
|
if (path.find((*it).filename) != std::string::npos) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,9 +73,9 @@ class ftFileControl
|
|||||||
};
|
};
|
||||||
|
|
||||||
ftFileControl();
|
ftFileControl();
|
||||||
ftFileControl(std::string fname, std::string tmppath, std::string dest,
|
ftFileControl( const std::string& fname, const std::string& tmppath, const std::string& dest
|
||||||
uint64_t size, const RsFileHash& hash, TransferRequestFlags flags,
|
, uint64_t size, const RsFileHash& hash, TransferRequestFlags flags
|
||||||
ftFileCreator *fc, ftTransferModule *tm);
|
, ftFileCreator *fc, ftTransferModule *tm);
|
||||||
|
|
||||||
std::string mName;
|
std::string mName;
|
||||||
std::string mCurrentPath; /* current full path (including name) */
|
std::string mCurrentPath; /* current full path (including name) */
|
||||||
|
@ -240,7 +240,7 @@ void ftFileCreator::removeInactiveChunks()
|
|||||||
#ifdef FILE_DEBUG
|
#ifdef FILE_DEBUG
|
||||||
std::cerr << "ftFileCreator::removeInactiveChunks(): looking for old chunks." << std::endl ;
|
std::cerr << "ftFileCreator::removeInactiveChunks(): looking for old chunks." << std::endl ;
|
||||||
#endif
|
#endif
|
||||||
std::vector<ftChunk::ChunkId> to_remove ;
|
std::vector<ftChunk::OffsetInFile> to_remove ;
|
||||||
|
|
||||||
chunkMap.removeInactiveChunks(to_remove) ;
|
chunkMap.removeInactiveChunks(to_remove) ;
|
||||||
|
|
||||||
@ -421,7 +421,9 @@ int ftFileCreator::locked_notifyReceived(uint64_t offset, uint32_t chunk_size)
|
|||||||
|
|
||||||
if(!found)
|
if(!found)
|
||||||
{
|
{
|
||||||
|
#ifdef FILE_DEBUG
|
||||||
std::cerr << "ftFileCreator::locked_notifyReceived(): failed to find an active slice for " << offset << "+" << chunk_size << ", hash = " << hash << ": dropping data." << std::endl;
|
std::cerr << "ftFileCreator::locked_notifyReceived(): failed to find an active slice for " << offset << "+" << chunk_size << ", hash = " << hash << ": dropping data." << std::endl;
|
||||||
|
#endif
|
||||||
return 0; /* ignoring */
|
return 0; /* ignoring */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -531,7 +533,14 @@ bool ftFileCreator::getMissingChunk(const RsPeerId& peer_id,uint32_t size_hint,u
|
|||||||
ftChunk chunk ;
|
ftChunk chunk ;
|
||||||
|
|
||||||
if(!chunkMap.getDataChunk(peer_id,size_hint,chunk,source_chunk_map_needed))
|
if(!chunkMap.getDataChunk(peer_id,size_hint,chunk,source_chunk_map_needed))
|
||||||
|
{
|
||||||
|
// No chunks are available. We brutally re-ask an ongoing chunk to another peer.
|
||||||
|
|
||||||
|
if(chunkMap.reAskPendingChunk(peer_id,size_hint,offset,size))
|
||||||
|
return true ;
|
||||||
|
|
||||||
return false ;
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef FILE_DEBUG
|
#ifdef FILE_DEBUG
|
||||||
std::cerr << "ffc::getMissingChunk() Retrieved new chunk: " << chunk << std::endl ;
|
std::cerr << "ffc::getMissingChunk() Retrieved new chunk: " << chunk << std::endl ;
|
||||||
|
@ -23,35 +23,40 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <time.h>
|
|
||||||
#include "util/rsdebug.h"
|
|
||||||
#include "util/rsdir.h"
|
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include "crypto/chacha20.h"
|
#include "crypto/chacha20.h"
|
||||||
#include "retroshare/rstypes.h"
|
|
||||||
#include "retroshare/rspeers.h"
|
|
||||||
//const int ftserverzone = 29539;
|
//const int ftserverzone = 29539;
|
||||||
|
|
||||||
#include "file_sharing/p3filelists.h"
|
#include "file_sharing/p3filelists.h"
|
||||||
#include "ft/ftturtlefiletransferitem.h"
|
|
||||||
#include "ft/ftserver.h"
|
|
||||||
#include "ft/ftextralist.h"
|
|
||||||
#include "ft/ftfilesearch.h"
|
|
||||||
#include "ft/ftcontroller.h"
|
#include "ft/ftcontroller.h"
|
||||||
#include "ft/ftfileprovider.h"
|
|
||||||
#include "ft/ftdatamultiplex.h"
|
#include "ft/ftdatamultiplex.h"
|
||||||
//#include "ft/ftdwlqueue.h"
|
//#include "ft/ftdwlqueue.h"
|
||||||
#include "turtle/p3turtle.h"
|
#include "ft/ftextralist.h"
|
||||||
#include "pqi/p3notify.h"
|
#include "ft/ftfileprovider.h"
|
||||||
#include "rsserver/p3face.h"
|
#include "ft/ftfilesearch.h"
|
||||||
|
#include "ft/ftserver.h"
|
||||||
|
#include "ft/ftturtlefiletransferitem.h"
|
||||||
|
|
||||||
#include "pqi/pqi.h"
|
|
||||||
#include "pqi/p3linkmgr.h"
|
#include "pqi/p3linkmgr.h"
|
||||||
|
#include "pqi/p3notify.h"
|
||||||
|
#include "pqi/pqi.h"
|
||||||
|
|
||||||
|
#include "retroshare/rstypes.h"
|
||||||
|
#include "retroshare/rspeers.h"
|
||||||
|
|
||||||
#include "rsitems/rsfiletransferitems.h"
|
#include "rsitems/rsfiletransferitems.h"
|
||||||
#include "rsitems/rsserviceids.h"
|
#include "rsitems/rsserviceids.h"
|
||||||
|
|
||||||
|
#include "rsserver/p3face.h"
|
||||||
|
#include "rsserver/rsaccounts.h"
|
||||||
|
#include "turtle/p3turtle.h"
|
||||||
|
|
||||||
|
#include "util/rsdebug.h"
|
||||||
|
#include "util/rsdir.h"
|
||||||
|
#include "util/rsprint.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* #define SERVER_DEBUG 1
|
* #define SERVER_DEBUG 1
|
||||||
* #define SERVER_DEBUG_CACHE 1
|
* #define SERVER_DEBUG_CACHE 1
|
||||||
@ -145,9 +150,19 @@ void ftServer::SetupFtServer()
|
|||||||
/* make Controller */
|
/* make Controller */
|
||||||
mFtController = new ftController(mFtDataplex, mServiceCtrl, getServiceInfo().mServiceType);
|
mFtController = new ftController(mFtDataplex, mServiceCtrl, getServiceInfo().mServiceType);
|
||||||
mFtController -> setFtSearchNExtra(mFtSearch, mFtExtra);
|
mFtController -> setFtSearchNExtra(mFtSearch, mFtExtra);
|
||||||
std::string tmppath = ".";
|
|
||||||
mFtController->setPartialsDirectory(tmppath);
|
std::string emergencySaveDir = rsAccounts->PathAccountDirectory();
|
||||||
mFtController->setDownloadDirectory(tmppath);
|
std::string emergencyPartialsDir = rsAccounts->PathAccountDirectory();
|
||||||
|
if (emergencySaveDir != "")
|
||||||
|
{
|
||||||
|
emergencySaveDir += "/";
|
||||||
|
emergencyPartialsDir += "/";
|
||||||
|
}
|
||||||
|
emergencySaveDir += "Downloads";
|
||||||
|
emergencyPartialsDir += "Partials";
|
||||||
|
|
||||||
|
mFtController->setDownloadDirectory(emergencySaveDir);
|
||||||
|
mFtController->setPartialsDirectory(emergencyPartialsDir);
|
||||||
|
|
||||||
/* complete search setup */
|
/* complete search setup */
|
||||||
mFtSearch->addSearchMode(mFtExtra, RS_FILE_HINTS_EXTRA);
|
mFtSearch->addSearchMode(mFtExtra, RS_FILE_HINTS_EXTRA);
|
||||||
@ -412,9 +427,9 @@ void ftServer::requestDirUpdate(void *ref)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Directory Handling */
|
/* Directory Handling */
|
||||||
void ftServer::setDownloadDirectory(std::string path)
|
bool ftServer::setDownloadDirectory(std::string path)
|
||||||
{
|
{
|
||||||
mFtController->setDownloadDirectory(path);
|
return mFtController->setDownloadDirectory(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ftServer::getDownloadDirectory()
|
std::string ftServer::getDownloadDirectory()
|
||||||
@ -422,9 +437,9 @@ std::string ftServer::getDownloadDirectory()
|
|||||||
return mFtController->getDownloadDirectory();
|
return mFtController->getDownloadDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ftServer::setPartialsDirectory(std::string path)
|
bool ftServer::setPartialsDirectory(std::string path)
|
||||||
{
|
{
|
||||||
mFtController->setPartialsDirectory(path);
|
return mFtController->setPartialsDirectory(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ftServer::getPartialsDirectory()
|
std::string ftServer::getPartialsDirectory()
|
||||||
|
@ -202,8 +202,8 @@ public:
|
|||||||
* Directory Handling
|
* Directory Handling
|
||||||
***/
|
***/
|
||||||
virtual void requestDirUpdate(void *ref) ; // triggers the update of the given reference. Used when browsing.
|
virtual void requestDirUpdate(void *ref) ; // triggers the update of the given reference. Used when browsing.
|
||||||
virtual void setDownloadDirectory(std::string path);
|
virtual bool setDownloadDirectory(std::string path);
|
||||||
virtual void setPartialsDirectory(std::string path);
|
virtual bool setPartialsDirectory(std::string path);
|
||||||
virtual std::string getDownloadDirectory();
|
virtual std::string getDownloadDirectory();
|
||||||
virtual std::string getPartialsDirectory();
|
virtual std::string getPartialsDirectory();
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <grouter/grouteritems.h>
|
#include <grouter/grouteritems.h>
|
||||||
|
|
||||||
class RsItem ;
|
struct RsItem;
|
||||||
|
|
||||||
static const uint32_t GROUTER_CLIENT_SERVICE_DATA_STATUS_UNKNOWN = 0x0000 ; // unused.
|
static const uint32_t GROUTER_CLIENT_SERVICE_DATA_STATUS_UNKNOWN = 0x0000 ; // unused.
|
||||||
static const uint32_t GROUTER_CLIENT_SERVICE_DATA_STATUS_RECEIVED = 0x0001 ; // sent when data has been received and a receipt is available.
|
static const uint32_t GROUTER_CLIENT_SERVICE_DATA_STATUS_RECEIVED = 0x0001 ; // sent when data has been received and a receipt is available.
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#include "retroshare/rsgrouter.h"
|
#include "retroshare/rsgrouter.h"
|
||||||
#include "groutertypes.h"
|
#include "groutertypes.h"
|
||||||
|
|
||||||
class RsItem ;
|
struct RsItem;
|
||||||
|
|
||||||
// The routing matrix records the event clues received from each friend
|
// The routing matrix records the event clues received from each friend
|
||||||
//
|
//
|
||||||
|
@ -540,7 +540,7 @@ if(itm == NULL)
|
|||||||
|
|
||||||
void GRouterTunnelInfo::removeVirtualPeer(const TurtleVirtualPeerId& vpid)
|
void GRouterTunnelInfo::removeVirtualPeer(const TurtleVirtualPeerId& vpid)
|
||||||
{
|
{
|
||||||
std::set<TurtleVirtualPeerId,RsGRouterTransactionChunkItem*>::iterator it = virtual_peers.find(vpid) ;
|
std::set<TurtleVirtualPeerId>::iterator it = virtual_peers.find(vpid) ;
|
||||||
|
|
||||||
if(it == virtual_peers.end())
|
if(it == virtual_peers.end())
|
||||||
{
|
{
|
||||||
|
@ -952,6 +952,8 @@ void RsDataService::locked_updateGrpMetaCache(const RsGxsGrpMetaData& meta)
|
|||||||
|
|
||||||
if(it != mGrpMetaDataCache.end())
|
if(it != mGrpMetaDataCache.end())
|
||||||
*(it->second) = meta ;
|
*(it->second) = meta ;
|
||||||
|
else
|
||||||
|
mGrpMetaDataCache[meta.mGroupId] = new RsGxsGrpMetaData(meta) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsDataService::locked_clearGrpMetaCache(const RsGxsGroupId& gid)
|
void RsDataService::locked_clearGrpMetaCache(const RsGxsGroupId& gid)
|
||||||
@ -1215,7 +1217,7 @@ int RsDataService::retrieveNxsMsgs(const GxsMsgReq &reqIds, GxsMsgResult &msg, b
|
|||||||
const RsGxsGroupId& grpId = mit->first;
|
const RsGxsGroupId& grpId = mit->first;
|
||||||
|
|
||||||
// if vector empty then request all messages
|
// if vector empty then request all messages
|
||||||
const std::vector<RsGxsMessageId>& msgIdV = mit->second;
|
const std::set<RsGxsMessageId>& msgIdV = mit->second;
|
||||||
std::vector<RsNxsMsg*> msgSet;
|
std::vector<RsNxsMsg*> msgSet;
|
||||||
|
|
||||||
if(msgIdV.empty()){
|
if(msgIdV.empty()){
|
||||||
@ -1233,7 +1235,7 @@ int RsDataService::retrieveNxsMsgs(const GxsMsgReq &reqIds, GxsMsgResult &msg, b
|
|||||||
}else{
|
}else{
|
||||||
|
|
||||||
// request each grp
|
// request each grp
|
||||||
std::vector<RsGxsMessageId>::const_iterator sit = msgIdV.begin();
|
std::set<RsGxsMessageId>::const_iterator sit = msgIdV.begin();
|
||||||
|
|
||||||
for(; sit!=msgIdV.end();++sit){
|
for(; sit!=msgIdV.end();++sit){
|
||||||
const RsGxsMessageId& msgId = *sit;
|
const RsGxsMessageId& msgId = *sit;
|
||||||
@ -1303,7 +1305,7 @@ int RsDataService::retrieveGxsMsgMetaData(const GxsMsgReq& reqIds, GxsMsgMetaRes
|
|||||||
const RsGxsGroupId& grpId = mit->first;
|
const RsGxsGroupId& grpId = mit->first;
|
||||||
|
|
||||||
// if vector empty then request all messages
|
// if vector empty then request all messages
|
||||||
const std::vector<RsGxsMessageId>& msgIdV = mit->second;
|
const std::set<RsGxsMessageId>& msgIdV = mit->second;
|
||||||
std::vector<RsGxsMsgMetaData*> metaSet;
|
std::vector<RsGxsMsgMetaData*> metaSet;
|
||||||
|
|
||||||
if(msgIdV.empty()){
|
if(msgIdV.empty()){
|
||||||
@ -1319,7 +1321,7 @@ int RsDataService::retrieveGxsMsgMetaData(const GxsMsgReq& reqIds, GxsMsgMetaRes
|
|||||||
}else{
|
}else{
|
||||||
|
|
||||||
// request each grp
|
// request each grp
|
||||||
std::vector<RsGxsMessageId>::const_iterator sit = msgIdV.begin();
|
std::set<RsGxsMessageId>::const_iterator sit = msgIdV.begin();
|
||||||
|
|
||||||
for(; sit!=msgIdV.end(); ++sit){
|
for(; sit!=msgIdV.end(); ++sit){
|
||||||
const RsGxsMessageId& msgId = *sit;
|
const RsGxsMessageId& msgId = *sit;
|
||||||
@ -1559,7 +1561,7 @@ int RsDataService::removeMsgs(const GxsMsgReq& msgIds)
|
|||||||
|
|
||||||
for(; mit != msgIds.end(); ++mit)
|
for(; mit != msgIds.end(); ++mit)
|
||||||
{
|
{
|
||||||
const std::vector<RsGxsMessageId>& msgIdV = mit->second;
|
const std::set<RsGxsMessageId>& msgIdV = mit->second;
|
||||||
const RsGxsGroupId& grpId = mit->first;
|
const RsGxsGroupId& grpId = mit->first;
|
||||||
|
|
||||||
// delete messages
|
// delete messages
|
||||||
@ -1620,7 +1622,7 @@ int RsDataService::retrieveGroupIds(std::vector<RsGxsGroupId> &grpIds)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RsDataService::retrieveMsgIds(const RsGxsGroupId& grpId, RsGxsMessageId::std_vector& msgIds)
|
int RsDataService::retrieveMsgIds(const RsGxsGroupId& grpId, RsGxsMessageId::std_set& msgIds)
|
||||||
{
|
{
|
||||||
#ifdef RS_DATA_SERVICE_DEBUG_TIME
|
#ifdef RS_DATA_SERVICE_DEBUG_TIME
|
||||||
rstime::RsScopeTimer timer("");
|
rstime::RsScopeTimer timer("");
|
||||||
@ -1641,7 +1643,7 @@ int RsDataService::retrieveMsgIds(const RsGxsGroupId& grpId, RsGxsMessageId::std
|
|||||||
if(c->columnCount() != 1)
|
if(c->columnCount() != 1)
|
||||||
std::cerr << "(EE) ********* not retrieving all columns!!" << std::endl;
|
std::cerr << "(EE) ********* not retrieving all columns!!" << std::endl;
|
||||||
|
|
||||||
msgIds.push_back(RsGxsMessageId(msgId));
|
msgIds.insert(RsGxsMessageId(msgId));
|
||||||
valid = c->moveToNext();
|
valid = c->moveToNext();
|
||||||
|
|
||||||
#ifdef RS_DATA_SERVICE_DEBUG_TIME
|
#ifdef RS_DATA_SERVICE_DEBUG_TIME
|
||||||
@ -1672,8 +1674,8 @@ bool RsDataService::locked_removeMessageEntries(const GxsMsgReq& msgIds)
|
|||||||
for(; mit != msgIds.end(); ++mit)
|
for(; mit != msgIds.end(); ++mit)
|
||||||
{
|
{
|
||||||
const RsGxsGroupId& grpId = mit->first;
|
const RsGxsGroupId& grpId = mit->first;
|
||||||
const std::vector<RsGxsMessageId>& msgsV = mit->second;
|
const std::set<RsGxsMessageId>& msgsV = mit->second;
|
||||||
std::vector<RsGxsMessageId>::const_iterator vit = msgsV.begin();
|
std::set<RsGxsMessageId>::const_iterator vit = msgsV.begin();
|
||||||
|
|
||||||
for(; vit != msgsV.end(); ++vit)
|
for(; vit != msgsV.end(); ++vit)
|
||||||
{
|
{
|
||||||
|
@ -110,7 +110,7 @@ public:
|
|||||||
* @param msgId msgsids retrieved
|
* @param msgId msgsids retrieved
|
||||||
* @return error code
|
* @return error code
|
||||||
*/
|
*/
|
||||||
int retrieveMsgIds(const RsGxsGroupId& grpId, RsGxsMessageId::std_vector& msgId);
|
int retrieveMsgIds(const RsGxsGroupId& grpId, RsGxsMessageId::std_set& msgId);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @return the cache size set for this RsGeneralDataService in bytes
|
* @return the cache size set for this RsGeneralDataService in bytes
|
||||||
|
@ -208,7 +208,7 @@ public:
|
|||||||
* @param msgId msgsids retrieved
|
* @param msgId msgsids retrieved
|
||||||
* @return error code
|
* @return error code
|
||||||
*/
|
*/
|
||||||
virtual int retrieveMsgIds(const RsGxsGroupId& grpId, RsGxsMessageId::std_vector& msgId) = 0;
|
virtual int retrieveMsgIds(const RsGxsGroupId& grpId, RsGxsMessageId::std_set& msgId) = 0;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @return the cache size set for this RsGeneralDataService in bytes
|
* @return the cache size set for this RsGeneralDataService in bytes
|
||||||
|
@ -217,7 +217,7 @@ void RsGenExchange::tick()
|
|||||||
RS_STACK_MUTEX(mGenMtx) ;
|
RS_STACK_MUTEX(mGenMtx) ;
|
||||||
|
|
||||||
std::list<RsGxsGroupId> grpIds;
|
std::list<RsGxsGroupId> grpIds;
|
||||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > msgIds;
|
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > msgIds;
|
||||||
mIntegrityCheck->getDeletedIds(grpIds, msgIds);
|
mIntegrityCheck->getDeletedIds(grpIds, msgIds);
|
||||||
|
|
||||||
if (!grpIds.empty())
|
if (!grpIds.empty())
|
||||||
@ -1078,23 +1078,19 @@ bool RsGenExchange::checkAuthenFlag(const PrivacyBitPos& pos, const uint8_t& fla
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void addMessageChanged(std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > &msgs, const std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > &msgChanged)
|
static void addMessageChanged(std::map<RsGxsGroupId, std::set<RsGxsMessageId> > &msgs, const std::map<RsGxsGroupId, std::set<RsGxsMessageId> > &msgChanged)
|
||||||
{
|
{
|
||||||
if (msgs.empty()) {
|
if (msgs.empty()) {
|
||||||
msgs = msgChanged;
|
msgs = msgChanged;
|
||||||
} else {
|
} else {
|
||||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> >::const_iterator mapIt;
|
for (auto mapIt = msgChanged.begin(); mapIt != msgChanged.end(); ++mapIt)
|
||||||
for (mapIt = msgChanged.begin(); mapIt != msgChanged.end(); ++mapIt) {
|
{
|
||||||
const RsGxsGroupId &grpId = mapIt->first;
|
const RsGxsGroupId &grpId = mapIt->first;
|
||||||
const std::vector<RsGxsMessageId> &srcMsgIds = mapIt->second;
|
const std::set<RsGxsMessageId> &srcMsgIds = mapIt->second;
|
||||||
std::vector<RsGxsMessageId> &destMsgIds = msgs[grpId];
|
std::set<RsGxsMessageId> &destMsgIds = msgs[grpId];
|
||||||
|
|
||||||
std::vector<RsGxsMessageId>::const_iterator msgIt;
|
for (auto msgIt = srcMsgIds.begin(); msgIt != srcMsgIds.end(); ++msgIt)
|
||||||
for (msgIt = srcMsgIds.begin(); msgIt != srcMsgIds.end(); ++msgIt) {
|
destMsgIds.insert(*msgIt) ;
|
||||||
if (std::find(destMsgIds.begin(), destMsgIds.end(), *msgIt) == destMsgIds.end()) {
|
|
||||||
destMsgIds.push_back(*msgIt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1789,8 +1785,8 @@ void RsGenExchange::deleteMsgs(uint32_t& token, const GxsMsgReq& msgs)
|
|||||||
|
|
||||||
if(mNetService != NULL)
|
if(mNetService != NULL)
|
||||||
for(GxsMsgReq::const_iterator it(msgs.begin());it!=msgs.end();++it)
|
for(GxsMsgReq::const_iterator it(msgs.begin());it!=msgs.end();++it)
|
||||||
for(uint32_t i=0;i<it->second.size();++i)
|
for(auto it2(it->second.begin());it2!=it->second.end();++it2)
|
||||||
mNetService->rejectMessage(it->second[i]) ;
|
mNetService->rejectMessage(*it2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGenExchange::publishMsg(uint32_t& token, RsGxsMsgItem *msgItem)
|
void RsGenExchange::publishMsg(uint32_t& token, RsGxsMsgItem *msgItem)
|
||||||
@ -1961,8 +1957,8 @@ void RsGenExchange::processMsgMetaChanges()
|
|||||||
if(m.val.getAsInt32(RsGeneralDataService::MSG_META_STATUS+GXS_MASK, mask))
|
if(m.val.getAsInt32(RsGeneralDataService::MSG_META_STATUS+GXS_MASK, mask))
|
||||||
{
|
{
|
||||||
GxsMsgReq req;
|
GxsMsgReq req;
|
||||||
std::vector<RsGxsMessageId> msgIdV;
|
std::set<RsGxsMessageId> msgIdV;
|
||||||
msgIdV.push_back(m.msgId.second);
|
msgIdV.insert(m.msgId.second);
|
||||||
req.insert(std::make_pair(m.msgId.first, msgIdV));
|
req.insert(std::make_pair(m.msgId.first, msgIdV));
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
mDataStore->retrieveGxsMsgMetaData(req, result);
|
mDataStore->retrieveGxsMsgMetaData(req, result);
|
||||||
@ -1994,7 +1990,7 @@ void RsGenExchange::processMsgMetaChanges()
|
|||||||
mDataAccess->updatePublicRequestStatus(token, RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE);
|
mDataAccess->updatePublicRequestStatus(token, RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE);
|
||||||
if (changed)
|
if (changed)
|
||||||
{
|
{
|
||||||
msgIds[m.msgId.first].push_back(m.msgId.second);
|
msgIds[m.msgId.first].insert(m.msgId.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -2010,7 +2006,7 @@ void RsGenExchange::processMsgMetaChanges()
|
|||||||
|
|
||||||
if (!msgIds.empty()) {
|
if (!msgIds.empty()) {
|
||||||
RS_STACK_MUTEX(mGenMtx);
|
RS_STACK_MUTEX(mGenMtx);
|
||||||
RsGxsMsgChange* c = new RsGxsMsgChange(RsGxsNotify::TYPE_PROCESSED, true);
|
RsGxsMsgChange* c = new RsGxsMsgChange(RsGxsNotify::TYPE_PROCESSED, false);
|
||||||
c->msgChangeMap = msgIds;
|
c->msgChangeMap = msgIds;
|
||||||
mNotifications.push_back(c);
|
mNotifications.push_back(c);
|
||||||
}
|
}
|
||||||
@ -2145,7 +2141,7 @@ void RsGenExchange::publishMsgs()
|
|||||||
mMsgsToPublish.insert(std::make_pair(sign_it->first, item.mItem));
|
mMsgsToPublish.insert(std::make_pair(sign_it->first, item.mItem));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > msgChangeMap;
|
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > msgChangeMap;
|
||||||
std::map<uint32_t, RsGxsMsgItem*>::iterator mit = mMsgsToPublish.begin();
|
std::map<uint32_t, RsGxsMsgItem*>::iterator mit = mMsgsToPublish.begin();
|
||||||
|
|
||||||
for(; mit != mMsgsToPublish.end(); ++mit)
|
for(; mit != mMsgsToPublish.end(); ++mit)
|
||||||
@ -2273,7 +2269,7 @@ void RsGenExchange::publishMsgs()
|
|||||||
mDataAccess->addMsgData(msg);
|
mDataAccess->addMsgData(msg);
|
||||||
delete msg ;
|
delete msg ;
|
||||||
|
|
||||||
msgChangeMap[grpId].push_back(msgId);
|
msgChangeMap[grpId].insert(msgId);
|
||||||
|
|
||||||
delete[] metaDataBuff;
|
delete[] metaDataBuff;
|
||||||
|
|
||||||
@ -2860,8 +2856,10 @@ void RsGenExchange::processRecvdMessages()
|
|||||||
|
|
||||||
time_t now = time(NULL);
|
time_t now = time(NULL);
|
||||||
|
|
||||||
|
if(mMsgPendingValidate.empty())
|
||||||
|
return ;
|
||||||
#ifdef GEN_EXCH_DEBUG
|
#ifdef GEN_EXCH_DEBUG
|
||||||
if(!mMsgPendingValidate.empty())
|
else
|
||||||
std::cerr << "processing received messages" << std::endl;
|
std::cerr << "processing received messages" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
// 1 - First, make sure items metadata is deserialised, clean old failed items, and collect the groups Ids we have to check
|
// 1 - First, make sure items metadata is deserialised, clean old failed items, and collect the groups Ids we have to check
|
||||||
@ -2904,8 +2902,10 @@ void RsGenExchange::processRecvdMessages()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2 - Retrieve the metadata for the associated groups.
|
// 2 - Retrieve the metadata for the associated groups. The test is here to avoid the default behavior to
|
||||||
|
// retrieve all groups when the list is empty
|
||||||
|
|
||||||
|
if(!grpMetas.empty())
|
||||||
mDataStore->retrieveGxsGrpMetaData(grpMetas);
|
mDataStore->retrieveGxsGrpMetaData(grpMetas);
|
||||||
|
|
||||||
GxsMsgReq msgIds;
|
GxsMsgReq msgIds;
|
||||||
@ -2934,7 +2934,7 @@ void RsGenExchange::processRecvdMessages()
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
#ifdef GEN_EXCH_DEBUG
|
#ifdef GEN_EXCH_DEBUG
|
||||||
std::cerr << " deserialised info: grp id=" << meta->mGroupId << ", msg id=" << meta->mMsgId ;
|
std::cerr << " deserialised info: grp id=" << msg->grpId << ", msg id=" << msg->msgId ;
|
||||||
#endif
|
#endif
|
||||||
std::map<RsGxsGroupId, RsGxsGrpMetaData*>::iterator mit = grpMetas.find(msg->grpId);
|
std::map<RsGxsGroupId, RsGxsGrpMetaData*>::iterator mit = grpMetas.find(msg->grpId);
|
||||||
|
|
||||||
@ -2968,17 +2968,17 @@ void RsGenExchange::processRecvdMessages()
|
|||||||
msg->metaData->mMsgStatus = GXS_SERV::GXS_MSG_STATUS_UNPROCESSED | GXS_SERV::GXS_MSG_STATUS_GUI_NEW | GXS_SERV::GXS_MSG_STATUS_GUI_UNREAD;
|
msg->metaData->mMsgStatus = GXS_SERV::GXS_MSG_STATUS_UNPROCESSED | GXS_SERV::GXS_MSG_STATUS_GUI_NEW | GXS_SERV::GXS_MSG_STATUS_GUI_UNREAD;
|
||||||
msgs_to_store.push_back(msg);
|
msgs_to_store.push_back(msg);
|
||||||
|
|
||||||
std::vector<RsGxsMessageId> &msgv = msgIds[msg->grpId];
|
msgIds[msg->grpId].insert(msg->msgId);
|
||||||
|
// std::vector<RsGxsMessageId> &msgv = msgIds[msg->grpId];
|
||||||
if (std::find(msgv.begin(), msgv.end(), msg->msgId) == msgv.end())
|
// if (std::find(msgv.begin(), msgv.end(), msg->msgId) == msgv.end())
|
||||||
msgv.push_back(msg->msgId);
|
// msgv.push_back(msg->msgId);
|
||||||
|
|
||||||
computeHash(msg->msg, msg->metaData->mHash);
|
computeHash(msg->msg, msg->metaData->mHash);
|
||||||
msg->metaData->recvTS = time(NULL);
|
msg->metaData->recvTS = time(NULL);
|
||||||
|
|
||||||
#ifdef GEN_EXCH_DEBUG
|
#ifdef GEN_EXCH_DEBUG
|
||||||
std::cerr << " new status flags: " << meta->mMsgStatus << std::endl;
|
std::cerr << " new status flags: " << msg->metaData->mMsgStatus << std::endl;
|
||||||
std::cerr << " computed hash: " << meta->mHash << std::endl;
|
std::cerr << " computed hash: " << msg->metaData->mHash << std::endl;
|
||||||
std::cerr << "Message received. Identity=" << msg->metaData->mAuthorId << ", from peer " << msg->PeerId() << std::endl;
|
std::cerr << "Message received. Identity=" << msg->metaData->mAuthorId << ", from peer " << msg->PeerId() << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -3062,9 +3062,6 @@ void RsGenExchange::processRecvdGroups()
|
|||||||
GxsPendingItem<RsNxsGrp*, RsGxsGroupId>& gpsi = vit->second;
|
GxsPendingItem<RsNxsGrp*, RsGxsGroupId>& gpsi = vit->second;
|
||||||
RsNxsGrp* grp = gpsi.mItem;
|
RsNxsGrp* grp = gpsi.mItem;
|
||||||
|
|
||||||
#ifdef GEN_EXCH_DEBUG
|
|
||||||
std::cerr << " processing validation for group " << meta->mGroupId << ", original attempt time: " << time(NULL) - gpsi.mFirstTryTS << " seconds ago" << std::endl;
|
|
||||||
#endif
|
|
||||||
if(grp->metaData == NULL)
|
if(grp->metaData == NULL)
|
||||||
{
|
{
|
||||||
RsGxsGrpMetaData* meta = new RsGxsGrpMetaData();
|
RsGxsGrpMetaData* meta = new RsGxsGrpMetaData();
|
||||||
@ -3074,6 +3071,9 @@ void RsGenExchange::processRecvdGroups()
|
|||||||
else
|
else
|
||||||
delete meta ;
|
delete meta ;
|
||||||
}
|
}
|
||||||
|
#ifdef GEN_EXCH_DEBUG
|
||||||
|
std::cerr << " processing validation for group " << grp->metaData->mGroupId << ", original attempt time: " << time(NULL) - gpsi.mFirstTryTS << " seconds ago" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// early deletion of group from the pending list if it's malformed, not accepted, or has been tried unsuccessfully for too long
|
// early deletion of group from the pending list if it's malformed, not accepted, or has been tried unsuccessfully for too long
|
||||||
|
|
||||||
@ -3102,7 +3102,7 @@ void RsGenExchange::processRecvdGroups()
|
|||||||
if(!grp->metaData->mAuthorId.isNull())
|
if(!grp->metaData->mAuthorId.isNull())
|
||||||
{
|
{
|
||||||
#ifdef GEN_EXCH_DEBUG
|
#ifdef GEN_EXCH_DEBUG
|
||||||
std::cerr << "Group routage info: Identity=" << meta->mAuthorId << " from " << grp->PeerId() << std::endl;
|
std::cerr << "Group routage info: Identity=" << grp->metaData->mAuthorId << " from " << grp->PeerId() << std::endl;
|
||||||
#endif
|
#endif
|
||||||
mRoutingClues[grp->metaData->mAuthorId].insert(grp->PeerId()) ;
|
mRoutingClues[grp->metaData->mAuthorId].insert(grp->PeerId()) ;
|
||||||
}
|
}
|
||||||
@ -3326,7 +3326,7 @@ void RsGenExchange::removeDeleteExistingMessages( std::list<RsNxsMsg*>& msgs, Gx
|
|||||||
|
|
||||||
//RsGxsGroupId::std_list grpIds(mGrpIdsUnique.begin(), mGrpIdsUnique.end());
|
//RsGxsGroupId::std_list grpIds(mGrpIdsUnique.begin(), mGrpIdsUnique.end());
|
||||||
//RsGxsGroupId::std_list::const_iterator it = grpIds.begin();
|
//RsGxsGroupId::std_list::const_iterator it = grpIds.begin();
|
||||||
typedef std::map<RsGxsGroupId, RsGxsMessageId::std_vector> MsgIdReq;
|
typedef std::map<RsGxsGroupId, RsGxsMessageId::std_set> MsgIdReq;
|
||||||
MsgIdReq msgIdReq;
|
MsgIdReq msgIdReq;
|
||||||
|
|
||||||
// now get a list of all msgs ids for each group
|
// now get a list of all msgs ids for each group
|
||||||
@ -3346,20 +3346,21 @@ void RsGenExchange::removeDeleteExistingMessages( std::list<RsNxsMsg*>& msgs, Gx
|
|||||||
// now for each msg to be stored that exist in the retrieved msg/grp "index" delete and erase from map
|
// now for each msg to be stored that exist in the retrieved msg/grp "index" delete and erase from map
|
||||||
for(std::list<RsNxsMsg*>::iterator cit2 = msgs.begin(); cit2 != msgs.end();)
|
for(std::list<RsNxsMsg*>::iterator cit2 = msgs.begin(); cit2 != msgs.end();)
|
||||||
{
|
{
|
||||||
const RsGxsMessageId::std_vector& msgIds = msgIdReq[(*cit2)->metaData->mGroupId];
|
const RsGxsMessageId::std_set& msgIds = msgIdReq[(*cit2)->metaData->mGroupId];
|
||||||
|
|
||||||
#ifdef GEN_EXCH_DEBUG
|
#ifdef GEN_EXCH_DEBUG
|
||||||
std::cerr << " grpid=" << cit2->second->mGroupId << ", msgid=" << cit2->second->mMsgId ;
|
std::cerr << " grpid=" << (*cit2)->grpId << ", msgid=" << (*cit2)->msgId ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Avoid storing messages that are already in the database, as well as messages that are too old (or generally do not pass the database storage test)
|
// Avoid storing messages that are already in the database, as well as messages that are too old (or generally do not pass the database storage test)
|
||||||
//
|
//
|
||||||
if(std::find(msgIds.begin(), msgIds.end(), (*cit2)->metaData->mMsgId) != msgIds.end() || !messagePublicationTest( *(*cit2)->metaData))
|
if(msgIds.find((*cit2)->metaData->mMsgId) != msgIds.end() || !messagePublicationTest( *(*cit2)->metaData))
|
||||||
{
|
{
|
||||||
// msg exist in retrieved index. We should use a std::set here instead of a vector.
|
// msg exist in retrieved index. We should use a std::set here instead of a vector.
|
||||||
|
|
||||||
RsGxsMessageId::std_vector& notifyIds = msgIdsNotify[ (*cit2)->metaData->mGroupId];
|
RsGxsMessageId::std_set& notifyIds = msgIdsNotify[ (*cit2)->metaData->mGroupId];
|
||||||
RsGxsMessageId::std_vector::iterator it2 = std::find(notifyIds.begin(), notifyIds.end(), (*cit2)->metaData->mMsgId);
|
RsGxsMessageId::std_set::iterator it2 = notifyIds.find((*cit2)->metaData->mMsgId);
|
||||||
|
|
||||||
if(it2 != notifyIds.end())
|
if(it2 != notifyIds.end())
|
||||||
{
|
{
|
||||||
notifyIds.erase(it2);
|
notifyIds.erase(it2);
|
||||||
@ -3369,7 +3370,7 @@ void RsGenExchange::removeDeleteExistingMessages( std::list<RsNxsMsg*>& msgs, Gx
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef GEN_EXCH_DEBUG
|
#ifdef GEN_EXCH_DEBUG
|
||||||
std::cerr << " discarding " << cit2->second->mMsgId << std::endl;
|
std::cerr << " discarding " << (*cit2)->msgId << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
delete *cit2;
|
delete *cit2;
|
||||||
|
@ -225,7 +225,7 @@ bool RsGxsDataAccess::requestMsgInfo(uint32_t &token, uint32_t ansType,
|
|||||||
MsgMetaReq* mmr = new MsgMetaReq();
|
MsgMetaReq* mmr = new MsgMetaReq();
|
||||||
|
|
||||||
for(; lit != grpIds.end(); ++lit)
|
for(; lit != grpIds.end(); ++lit)
|
||||||
mmr->mMsgIds[*lit] = std::vector<RsGxsMessageId>();
|
mmr->mMsgIds[*lit] = std::set<RsGxsMessageId>();
|
||||||
|
|
||||||
req = mmr;
|
req = mmr;
|
||||||
}else if(reqType & GXS_REQUEST_TYPE_MSG_DATA)
|
}else if(reqType & GXS_REQUEST_TYPE_MSG_DATA)
|
||||||
@ -233,7 +233,7 @@ bool RsGxsDataAccess::requestMsgInfo(uint32_t &token, uint32_t ansType,
|
|||||||
MsgDataReq* mdr = new MsgDataReq();
|
MsgDataReq* mdr = new MsgDataReq();
|
||||||
|
|
||||||
for(; lit != grpIds.end(); ++lit)
|
for(; lit != grpIds.end(); ++lit)
|
||||||
mdr->mMsgIds[*lit] = std::vector<RsGxsMessageId>();
|
mdr->mMsgIds[*lit] = std::set<RsGxsMessageId>();
|
||||||
|
|
||||||
req = mdr;
|
req = mdr;
|
||||||
}else if(reqType & GXS_REQUEST_TYPE_MSG_IDS)
|
}else if(reqType & GXS_REQUEST_TYPE_MSG_IDS)
|
||||||
@ -241,7 +241,7 @@ bool RsGxsDataAccess::requestMsgInfo(uint32_t &token, uint32_t ansType,
|
|||||||
MsgIdReq* mir = new MsgIdReq();
|
MsgIdReq* mir = new MsgIdReq();
|
||||||
|
|
||||||
for(; lit != grpIds.end(); ++lit)
|
for(; lit != grpIds.end(); ++lit)
|
||||||
mir->mMsgIds[*lit] = std::vector<RsGxsMessageId>();
|
mir->mMsgIds[*lit] = std::set<RsGxsMessageId>();
|
||||||
|
|
||||||
req = mir;
|
req = mir;
|
||||||
}
|
}
|
||||||
@ -1191,7 +1191,7 @@ bool RsGxsDataAccess::getMsgList(const GxsMsgReq& msgIds, const RsTokReqOptions&
|
|||||||
// Add the discovered Latest Msgs.
|
// Add the discovered Latest Msgs.
|
||||||
for(oit = origMsgTs.begin(); oit != origMsgTs.end(); ++oit)
|
for(oit = origMsgTs.begin(); oit != origMsgTs.end(); ++oit)
|
||||||
{
|
{
|
||||||
msgIdsOut[grpId].push_back(oit->second.first);
|
msgIdsOut[grpId].insert(oit->second.first);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1228,7 +1228,7 @@ bool RsGxsDataAccess::getMsgList(const GxsMsgReq& msgIds, const RsTokReqOptions&
|
|||||||
|
|
||||||
if (add)
|
if (add)
|
||||||
{
|
{
|
||||||
msgIdsOut[grpId].push_back(msgMeta->mMsgId);
|
msgIdsOut[grpId].insert(msgMeta->mMsgId);
|
||||||
metaFilter[grpId].insert(std::make_pair(msgMeta->mMsgId, msgMeta));
|
metaFilter[grpId].insert(std::make_pair(msgMeta->mMsgId, msgMeta));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1373,7 +1373,7 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req)
|
|||||||
// get meta data for all in group
|
// get meta data for all in group
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
GxsMsgReq msgIds;
|
GxsMsgReq msgIds;
|
||||||
msgIds.insert(std::make_pair(grpMsgIdPair.first, std::vector<RsGxsMessageId>()));
|
msgIds.insert(std::make_pair(grpMsgIdPair.first, std::set<RsGxsMessageId>()));
|
||||||
mDataStore->retrieveGxsMsgMetaData(msgIds, result);
|
mDataStore->retrieveGxsMsgMetaData(msgIds, result);
|
||||||
std::vector<RsGxsMsgMetaData*>& metaV = result[grpMsgIdPair.first];
|
std::vector<RsGxsMsgMetaData*>& metaV = result[grpMsgIdPair.first];
|
||||||
std::vector<RsGxsMsgMetaData*>::iterator vit_meta;
|
std::vector<RsGxsMsgMetaData*>::iterator vit_meta;
|
||||||
@ -1382,7 +1382,7 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req)
|
|||||||
const RsGxsMessageId& msgId = grpMsgIdPair.second;
|
const RsGxsMessageId& msgId = grpMsgIdPair.second;
|
||||||
const RsGxsGroupId& grpId = grpMsgIdPair.first;
|
const RsGxsGroupId& grpId = grpMsgIdPair.first;
|
||||||
|
|
||||||
std::vector<RsGxsMessageId> outMsgIds;
|
std::set<RsGxsMessageId> outMsgIds;
|
||||||
|
|
||||||
RsGxsMsgMetaData* origMeta = NULL;
|
RsGxsMsgMetaData* origMeta = NULL;
|
||||||
for(vit_meta = metaV.begin(); vit_meta != metaV.end(); ++vit_meta)
|
for(vit_meta = metaV.begin(); vit_meta != metaV.end(); ++vit_meta)
|
||||||
@ -1477,7 +1477,7 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req)
|
|||||||
// Add the discovered Latest Msgs.
|
// Add the discovered Latest Msgs.
|
||||||
for(oit = origMsgTs.begin(); oit != origMsgTs.end(); ++oit)
|
for(oit = origMsgTs.begin(); oit != origMsgTs.end(); ++oit)
|
||||||
{
|
{
|
||||||
outMsgIds.push_back(oit->second.first);
|
outMsgIds.insert(oit->second.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1502,7 +1502,7 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
outMsgIds.push_back(latestMsgId);
|
outMsgIds.insert(latestMsgId);
|
||||||
metaMap.insert(std::make_pair(latestMsgId, latestMeta));
|
metaMap.insert(std::make_pair(latestMsgId, latestMeta));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1514,7 +1514,7 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req)
|
|||||||
|
|
||||||
if (meta->mOrigMsgId == origMsgId)
|
if (meta->mOrigMsgId == origMsgId)
|
||||||
{
|
{
|
||||||
outMsgIds.push_back(meta->mMsgId);
|
outMsgIds.insert(meta->mMsgId);
|
||||||
metaMap.insert(std::make_pair(meta->mMsgId, meta));
|
metaMap.insert(std::make_pair(meta->mMsgId, meta));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1556,7 +1556,7 @@ bool RsGxsDataAccess::getGroupStatistic(GroupStatisticRequest *req)
|
|||||||
{
|
{
|
||||||
// filter based on options
|
// filter based on options
|
||||||
GxsMsgIdResult metaReq;
|
GxsMsgIdResult metaReq;
|
||||||
metaReq[req->mGrpId] = std::vector<RsGxsMessageId>();
|
metaReq[req->mGrpId] = std::set<RsGxsMessageId>();
|
||||||
GxsMsgMetaResult metaResult;
|
GxsMsgMetaResult metaResult;
|
||||||
mDataStore->retrieveGxsMsgMetaData(metaReq, metaResult);
|
mDataStore->retrieveGxsMsgMetaData(metaReq, metaResult);
|
||||||
|
|
||||||
@ -1672,7 +1672,7 @@ bool RsGxsDataAccess::getMsgList(MsgIdReq* req)
|
|||||||
for(; vit != vit_end; ++vit)
|
for(; vit != vit_end; ++vit)
|
||||||
{
|
{
|
||||||
RsGxsMsgMetaData* meta = *vit;
|
RsGxsMsgMetaData* meta = *vit;
|
||||||
req->mMsgIdResult[grpId].push_back(meta->mMsgId);
|
req->mMsgIdResult[grpId].insert(meta->mMsgId);
|
||||||
delete meta; // discard meta data mem
|
delete meta; // discard meta data mem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1718,8 +1718,8 @@ void RsGxsDataAccess::filterMsgList(GxsMsgIdResult& msgIds, const RsTokReqOption
|
|||||||
if(cit == msgMetas.end())
|
if(cit == msgMetas.end())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
std::vector<RsGxsMessageId>& msgs = mit->second;
|
std::set<RsGxsMessageId>& msgs = mit->second;
|
||||||
std::vector<RsGxsMessageId>::iterator vit = msgs.begin();
|
std::set<RsGxsMessageId>::iterator vit = msgs.begin();
|
||||||
const std::map<RsGxsMessageId, RsGxsMsgMetaData*>& meta = cit->second;
|
const std::map<RsGxsMessageId, RsGxsMsgMetaData*>& meta = cit->second;
|
||||||
std::map<RsGxsMessageId, RsGxsMsgMetaData*>::const_iterator cit2;
|
std::map<RsGxsMessageId, RsGxsMsgMetaData*>::const_iterator cit2;
|
||||||
|
|
||||||
|
@ -784,7 +784,7 @@ void RsGxsNetService::handleRecvSyncGrpStatistics(RsNxsSyncGrpStatsItem *grs)
|
|||||||
// now count available messages
|
// now count available messages
|
||||||
|
|
||||||
GxsMsgReq reqIds;
|
GxsMsgReq reqIds;
|
||||||
reqIds[grs->grpId] = std::vector<RsGxsMessageId>();
|
reqIds[grs->grpId] = std::set<RsGxsMessageId>();
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
|
|
||||||
#ifdef NXS_NET_DEBUG_6
|
#ifdef NXS_NET_DEBUG_6
|
||||||
@ -2757,7 +2757,7 @@ void RsGxsNetService::locked_genReqMsgTransaction(NxsTransaction* tr)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
GxsMsgReq reqIds;
|
GxsMsgReq reqIds;
|
||||||
reqIds[grpId] = std::vector<RsGxsMessageId>();
|
reqIds[grpId] = std::set<RsGxsMessageId>();
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
mDataStore->retrieveGxsMsgMetaData(reqIds, result);
|
mDataStore->retrieveGxsMsgMetaData(reqIds, result);
|
||||||
std::vector<RsGxsMsgMetaData*> &msgMetaV = result[grpId];
|
std::vector<RsGxsMsgMetaData*> &msgMetaV = result[grpId];
|
||||||
@ -3296,7 +3296,7 @@ void RsGxsNetService::locked_genSendMsgsTransaction(NxsTransaction* tr)
|
|||||||
RsNxsSyncMsgItem* item = dynamic_cast<RsNxsSyncMsgItem*>(*lit);
|
RsNxsSyncMsgItem* item = dynamic_cast<RsNxsSyncMsgItem*>(*lit);
|
||||||
if (item)
|
if (item)
|
||||||
{
|
{
|
||||||
msgIds[item->grpId].push_back(item->msgId);
|
msgIds[item->grpId].insert(item->msgId);
|
||||||
|
|
||||||
if(grpId.isNull())
|
if(grpId.isNull())
|
||||||
grpId = item->grpId;
|
grpId = item->grpId;
|
||||||
@ -4127,7 +4127,7 @@ void RsGxsNetService::handleRecvSyncMessage(RsNxsSyncMsgReqItem *item,bool item_
|
|||||||
}
|
}
|
||||||
|
|
||||||
GxsMsgReq req;
|
GxsMsgReq req;
|
||||||
req[item->grpId] = std::vector<RsGxsMessageId>();
|
req[item->grpId] = std::set<RsGxsMessageId>();
|
||||||
|
|
||||||
GxsMsgMetaResult metaResult;
|
GxsMsgMetaResult metaResult;
|
||||||
mDataStore->retrieveGxsMsgMetaData(req, metaResult);
|
mDataStore->retrieveGxsMsgMetaData(req, metaResult);
|
||||||
|
@ -67,7 +67,7 @@ bool RsGxsMessageCleanUp::clean()
|
|||||||
GxsMsgReq req;
|
GxsMsgReq req;
|
||||||
GxsMsgMetaResult result;
|
GxsMsgMetaResult result;
|
||||||
|
|
||||||
req[grpId] = std::vector<RsGxsMessageId>();
|
req[grpId] = std::set<RsGxsMessageId>();
|
||||||
mDs->retrieveGxsMsgMetaData(req, result);
|
mDs->retrieveGxsMsgMetaData(req, result);
|
||||||
|
|
||||||
GxsMsgMetaResult::iterator mit = result.begin();
|
GxsMsgMetaResult::iterator mit = result.begin();
|
||||||
@ -117,7 +117,7 @@ bool RsGxsMessageCleanUp::clean()
|
|||||||
|
|
||||||
if( remove )
|
if( remove )
|
||||||
{
|
{
|
||||||
req[grpId].push_back(meta->mMsgId);
|
req[grpId].insert(meta->mMsgId);
|
||||||
|
|
||||||
#ifdef DEBUG_GXSUTIL
|
#ifdef DEBUG_GXSUTIL
|
||||||
std::cerr << " Scheduling for removal." << std::endl;
|
std::cerr << " Scheduling for removal." << std::endl;
|
||||||
@ -241,9 +241,9 @@ bool RsGxsIntegrityCheck::check()
|
|||||||
for (msgIdsIt = msgIds.begin(); msgIdsIt != msgIds.end(); ++msgIdsIt)
|
for (msgIdsIt = msgIds.begin(); msgIdsIt != msgIds.end(); ++msgIdsIt)
|
||||||
{
|
{
|
||||||
const RsGxsGroupId& grpId = msgIdsIt->first;
|
const RsGxsGroupId& grpId = msgIdsIt->first;
|
||||||
std::vector<RsGxsMessageId> &msgIdV = msgIdsIt->second;
|
std::set<RsGxsMessageId> &msgIdV = msgIdsIt->second;
|
||||||
|
|
||||||
std::vector<RsGxsMessageId>::iterator msgIdIt;
|
std::set<RsGxsMessageId>::iterator msgIdIt;
|
||||||
for (msgIdIt = msgIdV.begin(); msgIdIt != msgIdV.end(); ++msgIdIt)
|
for (msgIdIt = msgIdV.begin(); msgIdIt != msgIdV.end(); ++msgIdIt)
|
||||||
{
|
{
|
||||||
const RsGxsMessageId& msgId = *msgIdIt;
|
const RsGxsMessageId& msgId = *msgIdIt;
|
||||||
@ -261,7 +261,7 @@ bool RsGxsIntegrityCheck::check()
|
|||||||
|
|
||||||
if (nxsMsgIt == nxsMsgV.end())
|
if (nxsMsgIt == nxsMsgV.end())
|
||||||
{
|
{
|
||||||
msgsToDel[grpId].push_back(msgId);
|
msgsToDel[grpId].insert(msgId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -284,7 +284,7 @@ bool RsGxsIntegrityCheck::check()
|
|||||||
if(msg->metaData == NULL || currHash != msg->metaData->mHash)
|
if(msg->metaData == NULL || currHash != msg->metaData->mHash)
|
||||||
{
|
{
|
||||||
std::cerr << "(EE) deleting message data with wrong hash or null meta data. meta=" << (void*)msg->metaData << std::endl;
|
std::cerr << "(EE) deleting message data with wrong hash or null meta data. meta=" << (void*)msg->metaData << std::endl;
|
||||||
msgsToDel[msg->grpId].push_back(msg->msgId);
|
msgsToDel[msg->grpId].insert(msg->msgId);
|
||||||
}
|
}
|
||||||
else if(!msg->metaData->mAuthorId.isNull() && subscribed_groups.find(msg->metaData->mGroupId)!=subscribed_groups.end())
|
else if(!msg->metaData->mAuthorId.isNull() && subscribed_groups.find(msg->metaData->mGroupId)!=subscribed_groups.end())
|
||||||
{
|
{
|
||||||
@ -377,7 +377,7 @@ bool RsGxsIntegrityCheck::isDone()
|
|||||||
return mDone;
|
return mDone;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsGxsIntegrityCheck::getDeletedIds(std::list<RsGxsGroupId>& grpIds, std::map<RsGxsGroupId, std::vector<RsGxsMessageId> >& msgIds)
|
void RsGxsIntegrityCheck::getDeletedIds(std::list<RsGxsGroupId>& grpIds, std::map<RsGxsGroupId, std::set<RsGxsMessageId> >& msgIds)
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mIntegrityMutex);
|
RsStackMutex stack(mIntegrityMutex);
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ public:
|
|||||||
|
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
void getDeletedIds(std::list<RsGxsGroupId>& grpIds, std::map<RsGxsGroupId, std::vector<RsGxsMessageId> >& msgIds);
|
void getDeletedIds(std::list<RsGxsGroupId>& grpIds, std::map<RsGxsGroupId, std::set<RsGxsMessageId> > &msgIds);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -217,7 +217,7 @@ private:
|
|||||||
bool mDone;
|
bool mDone;
|
||||||
RsMutex mIntegrityMutex;
|
RsMutex mIntegrityMutex;
|
||||||
std::list<RsGxsGroupId> mDeletedGrps;
|
std::list<RsGxsGroupId> mDeletedGrps;
|
||||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > mDeletedMsgs;
|
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > mDeletedMsgs;
|
||||||
|
|
||||||
RsGixs *mGixs ;
|
RsGixs *mGixs ;
|
||||||
};
|
};
|
||||||
|
@ -455,7 +455,7 @@ void p3GxsTrans::GxsTransIntegrityCleanupThread::run()
|
|||||||
|
|
||||||
if(stored_msgs.end() != it2)
|
if(stored_msgs.end() != it2)
|
||||||
{
|
{
|
||||||
msgsToDel[it2->second.first].push_back(it2->second.second);
|
msgsToDel[it2->second.first].insert(it2->second.second);
|
||||||
|
|
||||||
#ifdef DEBUG_GXSTRANS
|
#ifdef DEBUG_GXSTRANS
|
||||||
std::cerr << " scheduling msg " << std::hex << it2->second.first << "," << it2->second.second << " for deletion." << std::endl;
|
std::cerr << " scheduling msg " << std::hex << it2->second.first << "," << it2->second.second << " for deletion." << std::endl;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* GXS Mailing Service
|
* GXS Mailing Service
|
||||||
* Copyright (C) 2016-2017 Gioacchino Mazzurco <gio@eigenlab.org>
|
* Copyright (C) 2016-2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as
|
* it under the terms of the GNU Affero General Public License as
|
||||||
@ -38,30 +38,28 @@ OutgoingRecord::OutgoingRecord( RsGxsId rec, GxsTransSubServices cs,
|
|||||||
memcpy(&mailData[0], data, size);
|
memcpy(&mailData[0], data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OutgoingRecord_deprecated::serial_process(
|
||||||
RS_REGISTER_ITEM_TYPE(RsGxsTransMailItem) // for mailItem
|
RsGenericSerializer::SerializeJob j,
|
||||||
RS_REGISTER_ITEM_TYPE(RsNxsTransPresignedReceipt) // for presignedReceipt
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
|
|
||||||
void OutgoingRecord_deprecated::serial_process(RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeContext& ctx)
|
|
||||||
{
|
{
|
||||||
RS_REGISTER_SERIAL_MEMBER_TYPED(status, uint8_t);
|
RS_SERIAL_PROCESS(status);
|
||||||
RS_REGISTER_SERIAL_MEMBER(recipient);
|
RS_SERIAL_PROCESS(recipient);
|
||||||
RS_REGISTER_SERIAL_MEMBER(mailItem);
|
RS_SERIAL_PROCESS(mailItem);
|
||||||
RS_REGISTER_SERIAL_MEMBER(mailData);
|
RS_SERIAL_PROCESS(mailData);
|
||||||
RS_REGISTER_SERIAL_MEMBER_TYPED(clientService, uint16_t);
|
RS_SERIAL_PROCESS(clientService);
|
||||||
RS_REGISTER_SERIAL_MEMBER(presignedReceipt);
|
RS_SERIAL_PROCESS(presignedReceipt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutgoingRecord::serial_process(RsGenericSerializer::SerializeJob j,
|
void OutgoingRecord::serial_process(RsGenericSerializer::SerializeJob j,
|
||||||
RsGenericSerializer::SerializeContext& ctx)
|
RsGenericSerializer::SerializeContext& ctx)
|
||||||
{
|
{
|
||||||
RS_REGISTER_SERIAL_MEMBER_TYPED(status, uint8_t);
|
RS_SERIAL_PROCESS(status);
|
||||||
RS_REGISTER_SERIAL_MEMBER(recipient);
|
RS_SERIAL_PROCESS(recipient);
|
||||||
RS_REGISTER_SERIAL_MEMBER(author);
|
RS_SERIAL_PROCESS(author);
|
||||||
RS_REGISTER_SERIAL_MEMBER(group_id);
|
RS_SERIAL_PROCESS(group_id);
|
||||||
RS_REGISTER_SERIAL_MEMBER(sent_ts);
|
RS_SERIAL_PROCESS(sent_ts);
|
||||||
RS_REGISTER_SERIAL_MEMBER(mailItem);
|
RS_SERIAL_PROCESS(mailItem);
|
||||||
RS_REGISTER_SERIAL_MEMBER(mailData);
|
RS_SERIAL_PROCESS(mailData);
|
||||||
RS_REGISTER_SERIAL_MEMBER_TYPED(clientService, uint16_t);
|
RS_SERIAL_PROCESS(clientService);
|
||||||
RS_REGISTER_SERIAL_MEMBER(presignedReceipt);
|
RS_SERIAL_PROCESS(presignedReceipt);
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ public:
|
|||||||
|
|
||||||
void serial_process( RsGenericSerializer::SerializeJob j,
|
void serial_process( RsGenericSerializer::SerializeJob j,
|
||||||
RsGenericSerializer::SerializeContext& ctx )
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
{ RS_REGISTER_SERIAL_MEMBER_TYPED(mailId, uint64_t); }
|
{ RS_SERIAL_PROCESS(mailId); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class RsGxsTransPresignedReceipt : public RsGxsTransBaseMsgItem
|
class RsGxsTransPresignedReceipt : public RsGxsTransBaseMsgItem
|
||||||
@ -140,9 +140,9 @@ public:
|
|||||||
RsGenericSerializer::SerializeContext& ctx )
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
{
|
{
|
||||||
RsGxsTransBaseMsgItem::serial_process(j, ctx);
|
RsGxsTransBaseMsgItem::serial_process(j, ctx);
|
||||||
RS_REGISTER_SERIAL_MEMBER_TYPED(cryptoType, uint8_t);
|
RS_SERIAL_PROCESS(cryptoType);
|
||||||
RS_REGISTER_SERIAL_MEMBER(recipientHint);
|
RS_SERIAL_PROCESS(recipientHint);
|
||||||
RS_REGISTER_SERIAL_MEMBER(payload);
|
RS_SERIAL_PROCESS(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear()
|
void clear()
|
||||||
|
@ -102,6 +102,9 @@ template<> void RsTypeSerializer::print_data(const std::string& name,BIGNUM
|
|||||||
std::cerr << "[BIGNUM] : " << name << std::endl;
|
std::cerr << "[BIGNUM] : " << name << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RS_TYPE_SERIALIZER_TO_JSON_NOT_IMPLEMENTED_DEF(BIGNUM*)
|
||||||
|
RS_TYPE_SERIALIZER_FROM_JSON_NOT_IMPLEMENTED_DEF(BIGNUM*)
|
||||||
|
|
||||||
void RsGxsTunnelStatusItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
void RsGxsTunnelStatusItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
||||||
{
|
{
|
||||||
RsTypeSerializer::serial_process<uint32_t>(j,ctx,status,"status") ;
|
RsTypeSerializer::serial_process<uint32_t>(j,ctx,status,"status") ;
|
||||||
|
@ -2,30 +2,17 @@
|
|||||||
|
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
CONFIG += staticlib
|
CONFIG += staticlib
|
||||||
CONFIG += create_prl
|
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
TARGET = retroshare
|
TARGET = retroshare
|
||||||
TARGET_PRL = libretroshare
|
TARGET_PRL = libretroshare
|
||||||
DESTDIR = lib
|
DESTDIR = lib
|
||||||
|
|
||||||
#CONFIG += dsdv
|
!include("use_libretroshare.pri"):error("Including")
|
||||||
|
|
||||||
retrotor {
|
|
||||||
DEFINES *= RETROTOR
|
|
||||||
CONFIG -= bitdht
|
|
||||||
} else {
|
|
||||||
CONFIG += bitdht
|
|
||||||
}
|
|
||||||
|
|
||||||
# the dht stunner is used to obtain RS external ip addr. when it is natted
|
# the dht stunner is used to obtain RS external ip addr. when it is natted
|
||||||
# this system is unreliable and rs supports a newer and better one (asking connected peers)
|
# this system is unreliable and rs supports a newer and better one (asking connected peers)
|
||||||
# CONFIG += useDhtStunner
|
# CONFIG += useDhtStunner
|
||||||
|
|
||||||
profiling {
|
|
||||||
QMAKE_CXXFLAGS -= -fomit-frame-pointer
|
|
||||||
QMAKE_CXXFLAGS *= -pg -g -fno-omit-frame-pointer
|
|
||||||
}
|
|
||||||
|
|
||||||
# treat warnings as error for better removing
|
# treat warnings as error for better removing
|
||||||
#QMAKE_CFLAGS += -Werror
|
#QMAKE_CFLAGS += -Werror
|
||||||
#QMAKE_CXXFLAGS += -Werror
|
#QMAKE_CXXFLAGS += -Werror
|
||||||
@ -203,21 +190,11 @@ linux-* {
|
|||||||
|
|
||||||
PKGCONFIG *= libssl libupnp
|
PKGCONFIG *= libssl libupnp
|
||||||
PKGCONFIG *= libcrypto zlib
|
PKGCONFIG *= libcrypto zlib
|
||||||
LIBS *= -lpthread -ldl
|
no_sqlcipher:PKGCONFIG *= sqlite3
|
||||||
}
|
LIBS *= -ldl
|
||||||
|
|
||||||
linux-* {
|
|
||||||
DEFINES *= PLUGIN_DIR=\"\\\"$${PLUGIN_DIR}\\\"\"
|
DEFINES *= PLUGIN_DIR=\"\\\"$${PLUGIN_DIR}\\\"\"
|
||||||
DEFINES *= DATA_DIR=\"\\\"$${DATA_DIR}\\\"\"
|
DEFINES *= DATA_DIR=\"\\\"$${DATA_DIR}\\\"\"
|
||||||
|
|
||||||
## where to put the librarys interface
|
|
||||||
#include_rsiface.path = "$${INC_DIR}"
|
|
||||||
#include_rsiface.files = $$PUBLIC_HEADERS
|
|
||||||
#INSTALLS += include_rsiface
|
|
||||||
|
|
||||||
## where to put the shared library itself
|
|
||||||
#target.path = "$$LIB_DIR"
|
|
||||||
#INSTALLS *= target
|
|
||||||
}
|
}
|
||||||
|
|
||||||
linux-g++ {
|
linux-g++ {
|
||||||
@ -234,7 +211,7 @@ version_detail_bash_script {
|
|||||||
PRE_TARGETDEPS = write_version_detail
|
PRE_TARGETDEPS = write_version_detail
|
||||||
write_version_detail.commands = $$PWD/version_detail.sh
|
write_version_detail.commands = $$PWD/version_detail.sh
|
||||||
}
|
}
|
||||||
win32 {
|
win32-* {
|
||||||
QMAKE_EXTRA_TARGETS += write_version_detail
|
QMAKE_EXTRA_TARGETS += write_version_detail
|
||||||
PRE_TARGETDEPS = write_version_detail
|
PRE_TARGETDEPS = write_version_detail
|
||||||
write_version_detail.commands = $$PWD/version_detail.bat
|
write_version_detail.commands = $$PWD/version_detail.bat
|
||||||
@ -263,13 +240,11 @@ win32-x-g++ {
|
|||||||
}
|
}
|
||||||
################################# Windows ##########################################
|
################################# Windows ##########################################
|
||||||
|
|
||||||
win32 {
|
win32-g++ {
|
||||||
QMAKE_CC = $${QMAKE_CXX}
|
QMAKE_CC = $${QMAKE_CXX}
|
||||||
OBJECTS_DIR = temp/obj
|
OBJECTS_DIR = temp/obj
|
||||||
MOC_DIR = temp/moc
|
MOC_DIR = temp/moc
|
||||||
DEFINES *= WINDOWS_SYS WIN32 STATICLIB MINGW WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T
|
DEFINES *= STATICLIB
|
||||||
# This defines the platform to be WinXP or later and is needed for getaddrinfo (_WIN32_WINNT_WINXP)
|
|
||||||
DEFINES *= WINVER=0x0501
|
|
||||||
|
|
||||||
# Switch on extra warnings
|
# Switch on extra warnings
|
||||||
QMAKE_CFLAGS += -Wextra
|
QMAKE_CFLAGS += -Wextra
|
||||||
@ -287,17 +262,8 @@ win32 {
|
|||||||
|
|
||||||
DEFINES += USE_CMD_ARGS
|
DEFINES += USE_CMD_ARGS
|
||||||
|
|
||||||
CONFIG += upnp_miniupnpc
|
wLibs = ws2_32 gdi32 uuid iphlpapi crypt32 ole32 winmm
|
||||||
|
LIBS += $$linkDynamicLibs(wLibs)
|
||||||
no_sqlcipher {
|
|
||||||
PKGCONFIG *= sqlite3
|
|
||||||
LIBS += -lsqlite3
|
|
||||||
} else {
|
|
||||||
LIBS += -lsqlcipher
|
|
||||||
}
|
|
||||||
|
|
||||||
DEPENDPATH += . $$INC_DIR
|
|
||||||
INCLUDEPATH += . $$INC_DIR
|
|
||||||
}
|
}
|
||||||
|
|
||||||
################################# MacOSX ##########################################
|
################################# MacOSX ##########################################
|
||||||
@ -306,22 +272,10 @@ mac {
|
|||||||
QMAKE_CC = $${QMAKE_CXX}
|
QMAKE_CC = $${QMAKE_CXX}
|
||||||
OBJECTS_DIR = temp/obj
|
OBJECTS_DIR = temp/obj
|
||||||
MOC_DIR = temp/moc
|
MOC_DIR = temp/moc
|
||||||
#DEFINES = WINDOWS_SYS WIN32 STATICLIB MINGW
|
|
||||||
#DEFINES *= MINIUPNPC_VERSION=13
|
|
||||||
|
|
||||||
CONFIG += upnp_miniupnpc
|
|
||||||
CONFIG += c++11
|
|
||||||
|
|
||||||
# zeroconf disabled at the end of libretroshare.pro (but need the code)
|
|
||||||
#CONFIG += zeroconf
|
|
||||||
#CONFIG += zcnatassist
|
|
||||||
|
|
||||||
# Beautiful Hack to fix 64bit file access.
|
# Beautiful Hack to fix 64bit file access.
|
||||||
QMAKE_CXXFLAGS *= -Dfseeko64=fseeko -Dftello64=ftello -Dfopen64=fopen -Dvstatfs64=vstatfs
|
QMAKE_CXXFLAGS *= -Dfseeko64=fseeko -Dftello64=ftello -Dfopen64=fopen -Dvstatfs64=vstatfs
|
||||||
|
|
||||||
#GPG_ERROR_DIR = ../../../../libgpg-error-1.7
|
|
||||||
#GPGME_DIR = ../../../../gpgme-1.1.8
|
|
||||||
|
|
||||||
for(lib, LIB_DIR):LIBS += -L"$$lib"
|
for(lib, LIB_DIR):LIBS += -L"$$lib"
|
||||||
for(bin, BIN_DIR):LIBS += -L"$$bin"
|
for(bin, BIN_DIR):LIBS += -L"$$bin"
|
||||||
|
|
||||||
@ -656,6 +610,7 @@ SOURCES += serialiser/rsbaseserial.cc \
|
|||||||
rsitems/rsgxsupdateitems.cc \
|
rsitems/rsgxsupdateitems.cc \
|
||||||
rsitems/rsserviceinfoitems.cc \
|
rsitems/rsserviceinfoitems.cc \
|
||||||
|
|
||||||
|
|
||||||
SOURCES += services/autoproxy/rsautoproxymonitor.cc \
|
SOURCES += services/autoproxy/rsautoproxymonitor.cc \
|
||||||
services/autoproxy/p3i2pbob.cc \
|
services/autoproxy/p3i2pbob.cc \
|
||||||
services/p3msgservice.cc \
|
services/p3msgservice.cc \
|
||||||
@ -699,13 +654,16 @@ SOURCES += util/folderiterator.cc \
|
|||||||
util/rstime.cc \
|
util/rstime.cc \
|
||||||
util/rsurl.cc
|
util/rsurl.cc
|
||||||
|
|
||||||
|
## Added for retrocompatibility remove ASAP
|
||||||
upnp_miniupnpc {
|
isEmpty(RS_UPNP_LIB) {
|
||||||
HEADERS += upnp/upnputil.h upnp/upnphandler_miniupnp.h
|
upnp_miniupnpc:RS_UPNP_LIB=miniupnpc
|
||||||
SOURCES += upnp/upnputil.c upnp/upnphandler_miniupnp.cc
|
upnp_libupnp:RS_UPNP_LIB="upnp ixml threadutil"
|
||||||
}
|
}
|
||||||
|
|
||||||
upnp_libupnp {
|
equals(RS_UPNP_LIB, miniupnpc) {
|
||||||
|
HEADERS += upnp/upnputil.h upnp/upnphandler_miniupnp.h
|
||||||
|
SOURCES += upnp/upnputil.c upnp/upnphandler_miniupnp.cc
|
||||||
|
} else {
|
||||||
HEADERS += upnp/UPnPBase.h upnp/upnphandler_linux.h
|
HEADERS += upnp/UPnPBase.h upnp/upnphandler_linux.h
|
||||||
SOURCES += upnp/UPnPBase.cpp upnp/upnphandler_linux.cc
|
SOURCES += upnp/UPnPBase.cpp upnp/upnphandler_linux.cc
|
||||||
DEFINES *= RS_USE_LIBUPNP
|
DEFINES *= RS_USE_LIBUPNP
|
||||||
@ -795,7 +753,8 @@ SOURCES += gxstunnel/p3gxstunnel.cc \
|
|||||||
gxstunnel/rsgxstunnelitems.cc
|
gxstunnel/rsgxstunnelitems.cc
|
||||||
|
|
||||||
# new serialization code
|
# new serialization code
|
||||||
HEADERS += serialiser/rsserializer.h \
|
HEADERS += serialiser/rsserializable.h \
|
||||||
|
serialiser/rsserializer.h \
|
||||||
serialiser/rstypeserializer.h
|
serialiser/rstypeserializer.h
|
||||||
|
|
||||||
SOURCES += serialiser/rsserializer.cc \
|
SOURCES += serialiser/rsserializer.cc \
|
||||||
@ -936,19 +895,13 @@ android-* {
|
|||||||
DEFINES *= "fopen64=fopen"
|
DEFINES *= "fopen64=fopen"
|
||||||
DEFINES *= "fseeko64=fseeko"
|
DEFINES *= "fseeko64=fseeko"
|
||||||
DEFINES *= "ftello64=ftello"
|
DEFINES *= "ftello64=ftello"
|
||||||
LIBS *= -lbz2 -lupnp -lixml -lthreadutil -lsqlite3
|
|
||||||
|
|
||||||
## Static library are verysensible to order in command line, has to be in the
|
## Static library are very susceptible to order in command line
|
||||||
## end of file for this reason
|
sLibs = bz2 $$RS_UPNP_LIB $$RS_SQL_LIB ssl crypto
|
||||||
|
|
||||||
LIBS += -L$$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/ -lsqlcipher
|
LIBS += $$linkStaticLibs(sLibs)
|
||||||
PRE_TARGETDEPS += $$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/libsqlcipher.a
|
PRE_TARGETDEPS += $$pretargetStaticLibs(sLibs)
|
||||||
|
|
||||||
LIBS += -L$$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/ -lssl
|
|
||||||
PRE_TARGETDEPS += $$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/libssl.a
|
|
||||||
|
|
||||||
LIBS += -L$$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/ -lcrypto
|
|
||||||
PRE_TARGETDEPS += $$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/libcrypto.a
|
|
||||||
|
|
||||||
HEADERS += util/androiddebug.h
|
HEADERS += util/androiddebug.h
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ p3HistoryMgr::~p3HistoryMgr()
|
|||||||
|
|
||||||
/***** p3HistoryMgr *****/
|
/***** p3HistoryMgr *****/
|
||||||
|
|
||||||
//void p3HistoryMgr::addMessage(bool incoming, const RsPeerId &chatPeerId, const RsPeerId &peerId, const RsChatMsgItem *chatItem)
|
//void p3HistoryMgr::addMessage(bool incoming, const RsPeerId &chatPeerId, const RsPeerId &msgPeerId, const RsChatMsgItem *chatItem)
|
||||||
void p3HistoryMgr::addMessage(const ChatMessage& cm)
|
void p3HistoryMgr::addMessage(const ChatMessage& cm)
|
||||||
{
|
{
|
||||||
uint32_t addMsgId = 0;
|
uint32_t addMsgId = 0;
|
||||||
@ -84,7 +84,7 @@ void p3HistoryMgr::addMessage(const ChatMessage& cm)
|
|||||||
RsStackMutex stack(mHistoryMtx); /********** STACK LOCKED MTX ******/
|
RsStackMutex stack(mHistoryMtx); /********** STACK LOCKED MTX ******/
|
||||||
|
|
||||||
|
|
||||||
RsPeerId peerId; // id of sending peer
|
RsPeerId msgPeerId; // id of sending peer
|
||||||
RsPeerId chatPeerId; // id of chat endpoint
|
RsPeerId chatPeerId; // id of chat endpoint
|
||||||
std::string peerName; //name of sending peer
|
std::string peerName; //name of sending peer
|
||||||
|
|
||||||
@ -94,8 +94,8 @@ void p3HistoryMgr::addMessage(const ChatMessage& cm)
|
|||||||
enabled = true;
|
enabled = true;
|
||||||
}
|
}
|
||||||
if (cm.chat_id.isPeerId() && mPrivateEnable == true) {
|
if (cm.chat_id.isPeerId() && mPrivateEnable == true) {
|
||||||
peerId = cm.incoming ? cm.chat_id.toPeerId() : rsPeers->getOwnId();
|
msgPeerId = cm.incoming ? cm.chat_id.toPeerId() : rsPeers->getOwnId();
|
||||||
peerName = rsPeers->getPeerName(peerId);
|
peerName = rsPeers->getPeerName(msgPeerId);
|
||||||
enabled = true;
|
enabled = true;
|
||||||
}
|
}
|
||||||
if (cm.chat_id.isLobbyId() && mLobbyEnable == true) {
|
if (cm.chat_id.isLobbyId() && mLobbyEnable == true) {
|
||||||
@ -120,7 +120,7 @@ void p3HistoryMgr::addMessage(const ChatMessage& cm)
|
|||||||
RsHistoryMsgItem* item = new RsHistoryMsgItem;
|
RsHistoryMsgItem* item = new RsHistoryMsgItem;
|
||||||
item->chatPeerId = chatPeerId;
|
item->chatPeerId = chatPeerId;
|
||||||
item->incoming = cm.incoming;
|
item->incoming = cm.incoming;
|
||||||
item->peerId = peerId;
|
item->msgPeerId = msgPeerId;
|
||||||
item->peerName = peerName;
|
item->peerName = peerName;
|
||||||
item->sendTime = cm.sendTime;
|
item->sendTime = cm.sendTime;
|
||||||
item->recvTime = cm.recvTime;
|
item->recvTime = cm.recvTime;
|
||||||
@ -424,7 +424,7 @@ static void convertMsg(const RsHistoryMsgItem* item, HistoryMsg &msg)
|
|||||||
msg.msgId = item->msgId;
|
msg.msgId = item->msgId;
|
||||||
msg.chatPeerId = item->chatPeerId;
|
msg.chatPeerId = item->chatPeerId;
|
||||||
msg.incoming = item->incoming;
|
msg.incoming = item->incoming;
|
||||||
msg.peerId = item->peerId;
|
msg.peerId = item->msgPeerId;
|
||||||
msg.peerName = item->peerName;
|
msg.peerName = item->peerName;
|
||||||
msg.sendTime = item->sendTime;
|
msg.sendTime = item->sendTime;
|
||||||
msg.recvTime = item->recvTime;
|
msg.recvTime = item->recvTime;
|
||||||
|
@ -57,6 +57,7 @@ static struct RsLog::logInfo p3connectzoneInfo = {RsLog::Default, "p3connect"};
|
|||||||
|
|
||||||
/****
|
/****
|
||||||
* #define LINKMGR_DEBUG 1
|
* #define LINKMGR_DEBUG 1
|
||||||
|
* #define LINKMGR_DEBUG_LOG 1
|
||||||
* #define LINKMGR_DEBUG_CONNFAIL 1
|
* #define LINKMGR_DEBUG_CONNFAIL 1
|
||||||
* #define LINKMGR_DEBUG_ACTIONS 1
|
* #define LINKMGR_DEBUG_ACTIONS 1
|
||||||
* #define LINKMGR_DEBUG_LINKTYPE 1
|
* #define LINKMGR_DEBUG_LINKTYPE 1
|
||||||
@ -621,7 +622,9 @@ bool p3LinkMgrIMPL::connectAttempt(const RsPeerId &id, struct sockaddr_storage &
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LINKMGR_DEBUG_LOG
|
||||||
rslog(RSL_WARNING, p3connectzone, "p3LinkMgrIMPL::connectAttempt() called id: " + id.toStdString());
|
rslog(RSL_WARNING, p3connectzone, "p3LinkMgrIMPL::connectAttempt() called id: " + id.toStdString());
|
||||||
|
#endif
|
||||||
|
|
||||||
it->second.lastattempt = time(NULL);
|
it->second.lastattempt = time(NULL);
|
||||||
it->second.inConnAttempt = true;
|
it->second.inConnAttempt = true;
|
||||||
@ -824,7 +827,9 @@ bool p3LinkMgrIMPL::connectResult(const RsPeerId &id, bool success, bool isIncom
|
|||||||
out += " FAILED ATTEMPT (Not Connected)";
|
out += " FAILED ATTEMPT (Not Connected)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef LINKMGR_DEBUG_LOG
|
||||||
rslog(RSL_WARNING, p3connectzone, out);
|
rslog(RSL_WARNING, p3connectzone, out);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2060,8 +2065,9 @@ bool p3LinkMgrIMPL::locked_ConnectAttempt_Complete(peerConnectState *peer)
|
|||||||
|
|
||||||
int p3LinkMgrIMPL::addFriend(const RsPeerId &id, bool isVisible)
|
int p3LinkMgrIMPL::addFriend(const RsPeerId &id, bool isVisible)
|
||||||
{
|
{
|
||||||
|
#ifdef LINKMGR_DEBUG_LOG
|
||||||
rslog(RSL_WARNING, p3connectzone, "p3LinkMgr::addFriend() id: " + id.toStdString());
|
rslog(RSL_WARNING, p3connectzone, "p3LinkMgr::addFriend() id: " + id.toStdString());
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mLinkMtx); /****** STACK LOCK MUTEX *******/
|
RsStackMutex stack(mLinkMtx); /****** STACK LOCK MUTEX *******/
|
||||||
|
|
||||||
|
@ -987,8 +987,8 @@ bool p3NetMgrIMPL::checkNetAddress()
|
|||||||
bool addrChanged = false;
|
bool addrChanged = false;
|
||||||
bool validAddr = false;
|
bool validAddr = false;
|
||||||
|
|
||||||
struct sockaddr_storage prefAddr;
|
sockaddr_storage prefAddr;
|
||||||
struct sockaddr_storage oldAddr;
|
sockaddr_storage oldAddr;
|
||||||
|
|
||||||
if (mNetMode & RS_NET_MODE_TRY_LOOPBACK)
|
if (mNetMode & RS_NET_MODE_TRY_LOOPBACK)
|
||||||
{
|
{
|
||||||
@ -1012,7 +1012,7 @@ bool p3NetMgrIMPL::checkNetAddress()
|
|||||||
std::vector<sockaddr_storage> addrs;
|
std::vector<sockaddr_storage> addrs;
|
||||||
if (getLocalAddresses(addrs))
|
if (getLocalAddresses(addrs))
|
||||||
{
|
{
|
||||||
for (auto it = addrs.begin(); it!=addrs.end(); ++it)
|
for (auto it = addrs.begin(); it != addrs.end(); ++it)
|
||||||
{
|
{
|
||||||
sockaddr_storage& addr(*it);
|
sockaddr_storage& addr(*it);
|
||||||
if( sockaddr_storage_isValidNet(addr) &&
|
if( sockaddr_storage_isValidNet(addr) &&
|
||||||
@ -1061,7 +1061,7 @@ bool p3NetMgrIMPL::checkNetAddress()
|
|||||||
{
|
{
|
||||||
RS_STACK_MUTEX(mNetMtx);
|
RS_STACK_MUTEX(mNetMtx);
|
||||||
|
|
||||||
oldAddr = mLocalAddr;
|
sockaddr_storage_copy(mLocalAddr, oldAddr);
|
||||||
addrChanged = !sockaddr_storage_sameip(prefAddr, mLocalAddr);
|
addrChanged = !sockaddr_storage_sameip(prefAddr, mLocalAddr);
|
||||||
|
|
||||||
#ifdef NETMGR_DEBUG_TICK
|
#ifdef NETMGR_DEBUG_TICK
|
||||||
@ -1087,7 +1087,7 @@ bool p3NetMgrIMPL::checkNetAddress()
|
|||||||
|
|
||||||
// update address.
|
// update address.
|
||||||
sockaddr_storage_copyip(mLocalAddr, prefAddr);
|
sockaddr_storage_copyip(mLocalAddr, prefAddr);
|
||||||
mNetFlags.mLocalAddr = mLocalAddr;
|
sockaddr_storage_copy(mLocalAddr, mNetFlags.mLocalAddr);
|
||||||
|
|
||||||
if(sockaddr_storage_isLoopbackNet(mLocalAddr))
|
if(sockaddr_storage_isLoopbackNet(mLocalAddr))
|
||||||
{
|
{
|
||||||
@ -1129,9 +1129,13 @@ bool p3NetMgrIMPL::checkNetAddress()
|
|||||||
* are the same (modify server)... this mismatch can
|
* are the same (modify server)... this mismatch can
|
||||||
* occur when the local port is changed....
|
* occur when the local port is changed....
|
||||||
*/
|
*/
|
||||||
if (sockaddr_storage_sameip(mLocalAddr, mExtAddr))
|
if (sockaddr_storage_sameip(mLocalAddr, mExtAddr) && sockaddr_storage_port(mLocalAddr) != sockaddr_storage_port(mExtAddr))
|
||||||
{
|
{
|
||||||
|
#ifdef NETMGR_DEBUG_RESET
|
||||||
|
std::cerr << "p3NetMgrIMPL::checkNetAddress() local and external ports are not the same. Setting external port to " << sockaddr_storage_port(mLocalAddr) << std::endl;
|
||||||
|
#endif
|
||||||
sockaddr_storage_setport(mExtAddr, sockaddr_storage_port(mLocalAddr));
|
sockaddr_storage_setport(mExtAddr, sockaddr_storage_port(mLocalAddr));
|
||||||
|
addrChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure that address family is set, otherwise windows Barfs.
|
// ensure that address family is set, otherwise windows Barfs.
|
||||||
|
@ -74,6 +74,7 @@ static struct RsLog::logInfo p3peermgrzoneInfo = {RsLog::Default, "p3peermgr"};
|
|||||||
|
|
||||||
/****
|
/****
|
||||||
* #define PEER_DEBUG 1
|
* #define PEER_DEBUG 1
|
||||||
|
* #define PEER_DEBUG_LOG 1
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#define MAX_AVAIL_PERIOD 230 //times a peer stay in available state when not connected
|
#define MAX_AVAIL_PERIOD 230 //times a peer stay in available state when not connected
|
||||||
@ -909,8 +910,9 @@ bool p3PeerMgrIMPL::addFriend(const RsPeerId& input_id, const RsPgpId& input_gpg
|
|||||||
RsPeerId id = input_id ;
|
RsPeerId id = input_id ;
|
||||||
RsPgpId gpg_id = input_gpg_id ;
|
RsPgpId gpg_id = input_gpg_id ;
|
||||||
|
|
||||||
|
#ifdef PEER_DEBUG_LOG
|
||||||
rslog(RSL_WARNING, p3peermgrzone, "p3PeerMgr::addFriend() id: " + id.toStdString());
|
rslog(RSL_WARNING, p3peermgrzone, "p3PeerMgr::addFriend() id: " + id.toStdString());
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
|
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
|
||||||
|
|
||||||
@ -1237,11 +1239,11 @@ bool p3PeerMgrIMPL::UpdateOwnAddress( const sockaddr_storage& pLocalAddr,
|
|||||||
sockaddr_storage_copy(pExtAddr, extAddr);
|
sockaddr_storage_copy(pExtAddr, extAddr);
|
||||||
sockaddr_storage_ipv6_to_ipv4(extAddr);
|
sockaddr_storage_ipv6_to_ipv4(extAddr);
|
||||||
|
|
||||||
#ifdef PEER_DEBUG
|
//#ifdef PEER_DEBUG
|
||||||
std::cerr << "p3PeerMgrIMPL::UpdateOwnAddress("
|
std::cerr << "p3PeerMgrIMPL::UpdateOwnAddress("
|
||||||
<< sockaddr_storage_tostring(localAddr) << ", "
|
<< sockaddr_storage_tostring(localAddr) << ", "
|
||||||
<< sockaddr_storage_tostring(extAddr) << ")" << std::endl;
|
<< sockaddr_storage_tostring(extAddr) << ")" << std::endl;
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
if( rsBanList &&
|
if( rsBanList &&
|
||||||
!rsBanList->isAddressAccepted(localAddr,
|
!rsBanList->isAddressAccepted(localAddr,
|
||||||
@ -1472,21 +1474,25 @@ bool p3PeerMgrIMPL::setLocalAddress( const RsPeerId &id,
|
|||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool p3PeerMgrIMPL::setExtAddress(const RsPeerId &id, const struct sockaddr_storage &addr)
|
bool p3PeerMgrIMPL::setExtAddress( const RsPeerId &id,
|
||||||
|
const sockaddr_storage &addr )
|
||||||
{
|
{
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
uint32_t check_res = 0 ;
|
uint32_t check_res = 0;
|
||||||
|
|
||||||
if(rsBanList!=NULL && !rsBanList->isAddressAccepted(addr,RSBANLIST_CHECKING_FLAGS_BLACKLIST,&check_res))
|
if( rsBanList!=NULL && !rsBanList->isAddressAccepted(
|
||||||
|
addr, RSBANLIST_CHECKING_FLAGS_BLACKLIST, &check_res) )
|
||||||
{
|
{
|
||||||
std::cerr << "(SS) trying to set external contact address for peer " << id << " to a banned address " << sockaddr_storage_iptostring(addr )<< std::endl;
|
std::cerr << "(SS) trying to set external contact address for peer "
|
||||||
return false ;
|
<< id << " to a banned address "
|
||||||
|
<< sockaddr_storage_iptostring(addr) << std::endl;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id == AuthSSL::getAuthSSL()->OwnId())
|
if (id == AuthSSL::getAuthSSL()->OwnId())
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
|
RS_STACK_MUTEX(mPeerMtx);
|
||||||
if (!sockaddr_storage_same(mOwnState.serveraddr, addr))
|
if (!sockaddr_storage_same(mOwnState.serveraddr, addr))
|
||||||
{
|
{
|
||||||
mOwnState.serveraddr = addr;
|
mOwnState.serveraddr = addr;
|
||||||
@ -1499,7 +1505,7 @@ bool p3PeerMgrIMPL::setExtAddress(const RsPeerId &id, const struct sockaddr_s
|
|||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/
|
RS_STACK_MUTEX(mPeerMtx);
|
||||||
/* check if it is a friend */
|
/* check if it is a friend */
|
||||||
std::map<RsPeerId, peerState>::iterator it;
|
std::map<RsPeerId, peerState>::iterator it;
|
||||||
if (mFriendList.end() == (it = mFriendList.find(id)))
|
if (mFriendList.end() == (it = mFriendList.find(id)))
|
||||||
@ -1507,7 +1513,9 @@ bool p3PeerMgrIMPL::setExtAddress(const RsPeerId &id, const struct sockaddr_s
|
|||||||
if (mOthersList.end() == (it = mOthersList.find(id)))
|
if (mOthersList.end() == (it = mOthersList.find(id)))
|
||||||
{
|
{
|
||||||
#ifdef PEER_DEBUG
|
#ifdef PEER_DEBUG
|
||||||
std::cerr << "p3PeerMgrIMPL::setLocalAddress() cannot add addres info : peer id not found in friend list id: " << id << std::endl;
|
std::cerr << "p3PeerMgrIMPL::setLocalAddress() cannot add addres "
|
||||||
|
<< "info : peer id not found in friend list id: " << id
|
||||||
|
<< std::endl;
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2058,7 +2066,7 @@ bool p3PeerMgrIMPL::saveList(bool &cleanup, std::list<RsItem *>& saveData)
|
|||||||
RsPeerNetItem *item = new RsPeerNetItem();
|
RsPeerNetItem *item = new RsPeerNetItem();
|
||||||
item->clear();
|
item->clear();
|
||||||
|
|
||||||
item->peerId = getOwnId();
|
item->nodePeerId = getOwnId();
|
||||||
item->pgpId = mOwnState.gpg_id;
|
item->pgpId = mOwnState.gpg_id;
|
||||||
item->location = mOwnState.location;
|
item->location = mOwnState.location;
|
||||||
|
|
||||||
@ -2109,7 +2117,7 @@ bool p3PeerMgrIMPL::saveList(bool &cleanup, std::list<RsItem *>& saveData)
|
|||||||
item = new RsPeerNetItem();
|
item = new RsPeerNetItem();
|
||||||
item->clear();
|
item->clear();
|
||||||
|
|
||||||
item->peerId = it->first;
|
item->nodePeerId = it->first;
|
||||||
item->pgpId = (it->second).gpg_id;
|
item->pgpId = (it->second).gpg_id;
|
||||||
item->location = (it->second).location;
|
item->location = (it->second).location;
|
||||||
item->netMode = (it->second).netMode;
|
item->netMode = (it->second).netMode;
|
||||||
@ -2309,7 +2317,7 @@ bool p3PeerMgrIMPL::loadList(std::list<RsItem *>& load)
|
|||||||
RsPeerNetItem *pitem = dynamic_cast<RsPeerNetItem *>(*it);
|
RsPeerNetItem *pitem = dynamic_cast<RsPeerNetItem *>(*it);
|
||||||
if (pitem)
|
if (pitem)
|
||||||
{
|
{
|
||||||
RsPeerId peer_id = pitem->peerId ;
|
RsPeerId peer_id = pitem->nodePeerId ;
|
||||||
RsPgpId peer_pgp_id = pitem->pgpId ;
|
RsPgpId peer_pgp_id = pitem->pgpId ;
|
||||||
|
|
||||||
if (peer_id == ownId)
|
if (peer_id == ownId)
|
||||||
@ -2336,7 +2344,7 @@ bool p3PeerMgrIMPL::loadList(std::list<RsItem *>& load)
|
|||||||
/* ************* */
|
/* ************* */
|
||||||
// permission flags is used as a mask for the existing perms, so we set it to 0xffff
|
// permission flags is used as a mask for the existing perms, so we set it to 0xffff
|
||||||
addFriend(peer_id, peer_pgp_id, pitem->netMode, pitem->vs_disc, pitem->vs_dht, pitem->lastContact, RS_NODE_PERM_ALL);
|
addFriend(peer_id, peer_pgp_id, pitem->netMode, pitem->vs_disc, pitem->vs_dht, pitem->lastContact, RS_NODE_PERM_ALL);
|
||||||
setLocation(pitem->peerId, pitem->location);
|
setLocation(pitem->nodePeerId, pitem->location);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pitem->netMode == RS_NET_MODE_HIDDEN)
|
if (pitem->netMode == RS_NET_MODE_HIDDEN)
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
class PQInterface;
|
class PQInterface;
|
||||||
class RSTrafficClue;
|
class RSTrafficClue;
|
||||||
class RsBwRates;
|
class RsBwRates;
|
||||||
class RsItem;
|
struct RsItem;
|
||||||
class RsRawItem;
|
class RsRawItem;
|
||||||
|
|
||||||
class SearchModule
|
class SearchModule
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#include <stddef.h> // for NULL
|
#include <stddef.h> // for NULL
|
||||||
|
|
||||||
class RsItem;
|
struct RsItem;
|
||||||
|
|
||||||
/***
|
/***
|
||||||
#define LOOPBACK_DEBUG 1
|
#define LOOPBACK_DEBUG 1
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#include "pqi/pqi_base.h" // for NetInterface (ptr only), PQInterface
|
#include "pqi/pqi_base.h" // for NetInterface (ptr only), PQInterface
|
||||||
#include "retroshare/rstypes.h" // for RsPeerId
|
#include "retroshare/rstypes.h" // for RsPeerId
|
||||||
|
|
||||||
class RsItem;
|
struct RsItem;
|
||||||
|
|
||||||
class pqiloopback: public PQInterface
|
class pqiloopback: public PQInterface
|
||||||
{
|
{
|
||||||
|
@ -45,6 +45,7 @@ static std::list<RsPeerId> waitingIds;
|
|||||||
|
|
||||||
/****
|
/****
|
||||||
*#define PGRP_DEBUG 1
|
*#define PGRP_DEBUG 1
|
||||||
|
*#define PGRP_DEBUG_LOG 1
|
||||||
****/
|
****/
|
||||||
|
|
||||||
#define DEFAULT_DOWNLOAD_KB_RATE (200.0)
|
#define DEFAULT_DOWNLOAD_KB_RATE (200.0)
|
||||||
@ -420,7 +421,9 @@ int pqipersongrp::addPeer(const RsPeerId& id)
|
|||||||
sm -> pqi = pqip;
|
sm -> pqi = pqip;
|
||||||
|
|
||||||
// reset it to start it working.
|
// reset it to start it working.
|
||||||
|
#ifdef PGRP_DEBUG_LOG
|
||||||
pqioutput(PQL_WARNING, pqipersongrpzone, "pqipersongrp::addPeer() => reset() called to initialise new person");
|
pqioutput(PQL_WARNING, pqipersongrpzone, "pqipersongrp::addPeer() => reset() called to initialise new person");
|
||||||
|
#endif
|
||||||
pqip -> reset();
|
pqip -> reset();
|
||||||
pqip -> listen();
|
pqip -> listen();
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ const int PQISSL_UDP_FLAG = 0x02;
|
|||||||
|
|
||||||
//#define PQISSL_DEBUG 1
|
//#define PQISSL_DEBUG 1
|
||||||
//#define PQISSL_LOG_DEBUG 1
|
//#define PQISSL_LOG_DEBUG 1
|
||||||
|
//#define PQISSL_LOG_DEBUG2 1
|
||||||
|
|
||||||
static const int PQISSL_MAX_READ_ZERO_COUNT = 20;
|
static const int PQISSL_MAX_READ_ZERO_COUNT = 20;
|
||||||
static const time_t PQISSL_MAX_READ_ZERO_TIME = 15; // 15 seconds of no data => reset. (atm HeartBeat pkt sent 5 secs)
|
static const time_t PQISSL_MAX_READ_ZERO_TIME = 15; // 15 seconds of no data => reset. (atm HeartBeat pkt sent 5 secs)
|
||||||
@ -238,7 +238,9 @@ int pqissl::reset_locked()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PQISSL_LOG_DEBUG2
|
||||||
rslog(RSL_ALERT, pqisslzone, outLog);
|
rslog(RSL_ALERT, pqisslzone, outLog);
|
||||||
|
#endif
|
||||||
|
|
||||||
// notify people of problem!
|
// notify people of problem!
|
||||||
// but only if we really shut something down.
|
// but only if we really shut something down.
|
||||||
@ -585,12 +587,12 @@ int pqissl::Delay_Connection()
|
|||||||
int pqissl::Initiate_Connection()
|
int pqissl::Initiate_Connection()
|
||||||
{
|
{
|
||||||
#ifdef PQISSL_DEBUG
|
#ifdef PQISSL_DEBUG
|
||||||
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
std::cerr << __PRETTY_FUNCTION__ << " "
|
||||||
|
<< sockaddr_storage_tostring(remote_addr) << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int err;
|
int err;
|
||||||
sockaddr_storage addr = remote_addr;
|
sockaddr_storage addr; sockaddr_storage_copy(remote_addr, addr);
|
||||||
|
|
||||||
|
|
||||||
if(waiting != WAITING_DELAY)
|
if(waiting != WAITING_DELAY)
|
||||||
{
|
{
|
||||||
@ -638,13 +640,6 @@ int pqissl::Initiate_Connection()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
std::string out;
|
|
||||||
rs_sprintf(out, "pqissl::Initiate_Connection() Connecting To: %s via: ", PeerId().toStdString().c_str());
|
|
||||||
out += sockaddr_storage_tostring(addr);
|
|
||||||
rslog(RSL_WARNING, pqisslzone, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sockaddr_storage_isnull(addr))
|
if (sockaddr_storage_isnull(addr))
|
||||||
{
|
{
|
||||||
rslog(RSL_WARNING, pqisslzone, "pqissl::Initiate_Connection() Invalid (0.0.0.0) Remote Address, Aborting Connect.");
|
rslog(RSL_WARNING, pqisslzone, "pqissl::Initiate_Connection() Invalid (0.0.0.0) Remote Address, Aborting Connect.");
|
||||||
@ -721,6 +716,12 @@ int pqissl::Initiate_Connection()
|
|||||||
//std::cerr << "Setting Connect Timeout " << mConnectTimeout << " Seconds into Future " << std::endl;
|
//std::cerr << "Setting Connect Timeout " << mConnectTimeout << " Seconds into Future " << std::endl;
|
||||||
|
|
||||||
sockaddr_storage_ipv4_to_ipv6(addr);
|
sockaddr_storage_ipv4_to_ipv6(addr);
|
||||||
|
#ifdef PQISSL_DEBUG
|
||||||
|
std::cerr << __PRETTY_FUNCTION__ << " Connecting To: "
|
||||||
|
<< PeerId().toStdString() <<" via: "
|
||||||
|
<< sockaddr_storage_tostring(addr) << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (0 != (err = unix_connect(osock, addr)))
|
if (0 != (err = unix_connect(osock, addr)))
|
||||||
{
|
{
|
||||||
switch (errno)
|
switch (errno)
|
||||||
@ -730,11 +731,13 @@ int pqissl::Initiate_Connection()
|
|||||||
sockfd = osock;
|
sockfd = osock;
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
|
#ifdef PQISSL_DEBUG
|
||||||
std::cerr << __PRETTY_FUNCTION__ << " Failure connect "
|
std::cerr << __PRETTY_FUNCTION__ << " Failure connect "
|
||||||
<< sockaddr_storage_tostring(addr)
|
<< sockaddr_storage_tostring(addr)
|
||||||
<< " returns: "
|
<< " returns: "
|
||||||
<< err << " -> errno: " << errno << " "
|
<< err << " -> errno: " << errno << " "
|
||||||
<< socket_errorType(errno) << std::endl;
|
<< socket_errorType(errno) << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
net_internal_close(osock);
|
net_internal_close(osock);
|
||||||
osock = -1;
|
osock = -1;
|
||||||
@ -777,10 +780,14 @@ bool pqissl::CheckConnectionTimeout()
|
|||||||
std::string out;
|
std::string out;
|
||||||
rs_sprintf(out, "pqissl::Basic_Connection_Complete() Connection Timed Out. Peer: %s Period: %lu", PeerId().toStdString().c_str(), mConnectTimeout);
|
rs_sprintf(out, "pqissl::Basic_Connection_Complete() Connection Timed Out. Peer: %s Period: %lu", PeerId().toStdString().c_str(), mConnectTimeout);
|
||||||
|
|
||||||
|
#ifdef PQISSL_LOG_DEBUG2
|
||||||
rslog(RSL_WARNING, pqisslzone, out);
|
rslog(RSL_WARNING, pqisslzone, out);
|
||||||
|
#endif
|
||||||
/* as sockfd is valid, this should close it all up */
|
/* as sockfd is valid, this should close it all up */
|
||||||
|
|
||||||
|
#ifdef PQISSL_LOG_DEBUG2
|
||||||
rslog(RSL_ALERT, pqisslzone, "pqissl::Basic_Connection_Complete() -> calling reset()");
|
rslog(RSL_ALERT, pqisslzone, "pqissl::Basic_Connection_Complete() -> calling reset()");
|
||||||
|
#endif
|
||||||
reset_locked();
|
reset_locked();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -919,7 +926,9 @@ int pqissl::Basic_Connection_Complete()
|
|||||||
{
|
{
|
||||||
std::string out;
|
std::string out;
|
||||||
rs_sprintf(out, "pqissl::Basic_Connection_Complete() TCP Connection Complete: cert: %s on osock: ", PeerId().toStdString().c_str(), sockfd);
|
rs_sprintf(out, "pqissl::Basic_Connection_Complete() TCP Connection Complete: cert: %s on osock: ", PeerId().toStdString().c_str(), sockfd);
|
||||||
|
#ifdef PQISSL_LOG_DEBUG2
|
||||||
rslog(RSL_WARNING, pqisslzone, out);
|
rslog(RSL_WARNING, pqisslzone, out);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -60,8 +60,10 @@ static struct RsLog::logInfo pqissllistenzoneInfo = {RsLog::Default, "p3peermgr"
|
|||||||
|
|
||||||
|
|
||||||
pqissllistenbase::pqissllistenbase(const sockaddr_storage &addr, p3PeerMgr *pm)
|
pqissllistenbase::pqissllistenbase(const sockaddr_storage &addr, p3PeerMgr *pm)
|
||||||
: laddr(addr), mPeerMgr(pm), active(false)
|
: mPeerMgr(pm), active(false)
|
||||||
{
|
{
|
||||||
|
sockaddr_storage_copy(addr, laddr);
|
||||||
|
|
||||||
if (!(AuthSSL::getAuthSSL()-> active()))
|
if (!(AuthSSL::getAuthSSL()-> active()))
|
||||||
{
|
{
|
||||||
pqioutput(PQL_ALERT, pqissllistenzone,
|
pqioutput(PQL_ALERT, pqissllistenzone,
|
||||||
@ -117,8 +119,10 @@ int pqissllistenbase::setuplisten()
|
|||||||
reinterpret_cast<uint8_t*>(&no), sizeof(no));
|
reinterpret_cast<uint8_t*>(&no), sizeof(no));
|
||||||
if (err) std::cerr << __PRETTY_FUNCTION__
|
if (err) std::cerr << __PRETTY_FUNCTION__
|
||||||
<< ": Error setting IPv6 socket dual stack" << std::endl;
|
<< ": Error setting IPv6 socket dual stack" << std::endl;
|
||||||
|
#ifdef DEBUG_LISTENNER
|
||||||
else std::cerr << __PRETTY_FUNCTION__
|
else std::cerr << __PRETTY_FUNCTION__
|
||||||
<< ": Success setting IPv6 socket dual stack" << std::endl;
|
<< ": Success setting IPv6 socket dual stack" << std::endl;
|
||||||
|
#endif
|
||||||
#endif // IPV6_V6ONLY
|
#endif // IPV6_V6ONLY
|
||||||
|
|
||||||
/********************************** WINDOWS/UNIX SPECIFIC PART ******************/
|
/********************************** WINDOWS/UNIX SPECIFIC PART ******************/
|
||||||
@ -208,26 +212,20 @@ int pqissllistenbase::setuplisten()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OPEN_UNIVERSAL_PORT
|
struct sockaddr_storage tmpaddr;
|
||||||
struct sockaddr_storage tmpaddr = laddr;
|
sockaddr_storage_copy(laddr, tmpaddr);
|
||||||
if (!mPeerMgr->isHidden())
|
sockaddr_storage_ipv4_to_ipv6(tmpaddr);
|
||||||
{
|
if (!mPeerMgr->isHidden()) sockaddr_storage_zeroip(tmpaddr);
|
||||||
tmpaddr.ss_family = PF_INET6;
|
|
||||||
sockaddr_storage_zeroip(tmpaddr);
|
|
||||||
}
|
|
||||||
if (0 != (err = rs_bind(lsock, tmpaddr)))
|
if (0 != (err = rs_bind(lsock, tmpaddr)))
|
||||||
#else
|
|
||||||
if (0 != (err = universal_bind(lsock, laddr)))
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
std::string out = "pqissllistenbase::setuplisten() Cannot Bind to Local Address!\n";
|
std::string out = "pqissllistenbase::setuplisten() Cannot Bind to Local Address!\n";
|
||||||
showSocketError(out);
|
showSocketError(out);
|
||||||
pqioutput(PQL_ALERT, pqissllistenzone, out);
|
pqioutput(PQL_ALERT, pqissllistenzone, out);
|
||||||
std::cerr << out << std::endl;
|
std::cerr << out << std::endl
|
||||||
std::cerr << "laddr: " << sockaddr_storage_tostring(laddr) << std::endl;
|
<< "tmpaddr: " << sockaddr_storage_tostring(tmpaddr)
|
||||||
#ifdef OPEN_UNIVERSAL_PORT
|
<< std::endl;
|
||||||
if (!mPeerMgr->isHidden()) std::cerr << "Zeroed tmpaddr: " << sockaddr_storage_tostring(tmpaddr) << std::endl;
|
print_stacktrace();
|
||||||
#endif
|
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ static struct RsLog::logInfo pqisslproxyzoneInfo = {RsLog::Default, "pqisslproxy
|
|||||||
#define pqisslproxyzone &pqisslproxyzoneInfo
|
#define pqisslproxyzone &pqisslproxyzoneInfo
|
||||||
|
|
||||||
// #define PROXY_DEBUG 1
|
// #define PROXY_DEBUG 1
|
||||||
|
// #define PROXY_DEBUG_LOG 1
|
||||||
|
|
||||||
#define PROXY_STATE_FAILED 0
|
#define PROXY_STATE_FAILED 0
|
||||||
#define PROXY_STATE_INIT 1
|
#define PROXY_STATE_INIT 1
|
||||||
@ -593,8 +594,9 @@ bool pqisslproxy::connect_parameter(uint32_t type, const std::string &value)
|
|||||||
{
|
{
|
||||||
std::string out;
|
std::string out;
|
||||||
rs_sprintf(out, "pqisslproxy::connect_parameter() Peer: %s DOMAIN_ADDRESS: %s", PeerId().toStdString().c_str(), value.c_str());
|
rs_sprintf(out, "pqisslproxy::connect_parameter() Peer: %s DOMAIN_ADDRESS: %s", PeerId().toStdString().c_str(), value.c_str());
|
||||||
|
#ifdef PROXY_DEBUG_LOG
|
||||||
rslog(RSL_WARNING, pqisslproxyzone, out);
|
rslog(RSL_WARNING, pqisslproxyzone, out);
|
||||||
|
#endif
|
||||||
mDomainAddress = value;
|
mDomainAddress = value;
|
||||||
#ifdef PROXY_DEBUG
|
#ifdef PROXY_DEBUG
|
||||||
std::cerr << out << std::endl;
|
std::cerr << out << std::endl;
|
||||||
@ -615,8 +617,9 @@ bool pqisslproxy::connect_parameter(uint32_t type, uint32_t value)
|
|||||||
{
|
{
|
||||||
std::string out;
|
std::string out;
|
||||||
rs_sprintf(out, "pqisslproxy::connect_parameter() Peer: %s REMOTE_PORT: %lu", PeerId().toStdString().c_str(), value);
|
rs_sprintf(out, "pqisslproxy::connect_parameter() Peer: %s REMOTE_PORT: %lu", PeerId().toStdString().c_str(), value);
|
||||||
|
#ifdef PROXY_DEBUG_LOG
|
||||||
rslog(RSL_WARNING, pqisslproxyzone, out);
|
rslog(RSL_WARNING, pqisslproxyzone, out);
|
||||||
|
#endif
|
||||||
mRemotePort = value;
|
mRemotePort = value;
|
||||||
#ifdef PROXY_DEBUG
|
#ifdef PROXY_DEBUG
|
||||||
std::cerr << out << std::endl;
|
std::cerr << out << std::endl;
|
||||||
|
@ -227,6 +227,15 @@ int pqissludp::Initiate_Connection()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!sockaddr_storage_ipv6_to_ipv4(remote_addr))
|
||||||
|
{
|
||||||
|
std::cerr << __PRETTY_FUNCTION__ << "Error: remote_addr is not "
|
||||||
|
<< "valid IPv4!" << std::endl;
|
||||||
|
sockaddr_storage_dump(remote_addr);
|
||||||
|
print_stacktrace();
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
mTimeoutTS = time(NULL) + mConnectTimeout;
|
mTimeoutTS = time(NULL) + mConnectTimeout;
|
||||||
//std::cerr << "Setting Connect Timeout " << mConnectTimeout << " Seconds into Future " << std::endl;
|
//std::cerr << "Setting Connect Timeout " << mConnectTimeout << " Seconds into Future " << std::endl;
|
||||||
//std::cerr << " Connect Period is:" << mConnectPeriod << std::endl;
|
//std::cerr << " Connect Period is:" << mConnectPeriod << std::endl;
|
||||||
@ -254,32 +263,22 @@ int pqissludp::Initiate_Connection()
|
|||||||
struct sockaddr_in proxyaddr;
|
struct sockaddr_in proxyaddr;
|
||||||
struct sockaddr_in remoteaddr;
|
struct sockaddr_in remoteaddr;
|
||||||
|
|
||||||
bool nonIpV4 = false;
|
|
||||||
if(!sockaddr_storage_ipv6_to_ipv4(remote_addr))
|
|
||||||
{
|
|
||||||
nonIpV4 = true;
|
|
||||||
std::cerr << __PRETTY_FUNCTION__ << "Error: remote_addr is not "
|
|
||||||
<< "valid IPv4!" << std::endl;
|
|
||||||
sockaddr_storage_dump(remote_addr);
|
|
||||||
}
|
|
||||||
if(!sockaddr_storage_ipv6_to_ipv4(mConnectSrcAddr))
|
if(!sockaddr_storage_ipv6_to_ipv4(mConnectSrcAddr))
|
||||||
{
|
{
|
||||||
nonIpV4 = true;
|
|
||||||
std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectSrcAddr is "
|
std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectSrcAddr is "
|
||||||
<< "not valid IPv4!" << std::endl;
|
<< "not valid IPv4!" << std::endl;
|
||||||
sockaddr_storage_dump(mConnectSrcAddr);
|
sockaddr_storage_dump(mConnectSrcAddr);
|
||||||
|
print_stacktrace();
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
if(!sockaddr_storage_ipv6_to_ipv4(mConnectProxyAddr))
|
if(!sockaddr_storage_ipv6_to_ipv4(mConnectProxyAddr))
|
||||||
{
|
{
|
||||||
nonIpV4 = true;
|
|
||||||
std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectProxyAddr "
|
std::cerr << __PRETTY_FUNCTION__ << "Error: mConnectProxyAddr "
|
||||||
<< "is not valid IPv4!" << std::endl;
|
<< "is not valid IPv4!" << std::endl;
|
||||||
sockaddr_storage_dump(mConnectProxyAddr);
|
sockaddr_storage_dump(mConnectProxyAddr);
|
||||||
}
|
|
||||||
if(!nonIpV4)
|
|
||||||
{
|
|
||||||
print_stacktrace();
|
print_stacktrace();
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sockaddr_in *rap = (struct sockaddr_in *) &remote_addr;
|
struct sockaddr_in *rap = (struct sockaddr_in *) &remote_addr;
|
||||||
@ -302,7 +301,6 @@ int pqissludp::Initiate_Connection()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*** It seems that the UDP Layer sees x 1.2 the traffic of the SSL layer.
|
/*** It seems that the UDP Layer sees x 1.2 the traffic of the SSL layer.
|
||||||
* We need to compensate somewhere... we drop the maximum traffic to 75% of limit
|
* We need to compensate somewhere... we drop the maximum traffic to 75% of limit
|
||||||
* to allow for extra lost packets etc.
|
* to allow for extra lost packets etc.
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include "retroshare/rstypes.h" // for RsPeerId
|
#include "retroshare/rstypes.h" // for RsPeerId
|
||||||
#include "util/rsthreads.h" // for RsMutex
|
#include "util/rsthreads.h" // for RsMutex
|
||||||
|
|
||||||
class RsItem;
|
struct RsItem;
|
||||||
class RsSerialiser;
|
class RsSerialiser;
|
||||||
|
|
||||||
struct PartialPacketRecord
|
struct PartialPacketRecord
|
||||||
|
@ -182,7 +182,7 @@ private:
|
|||||||
class StringExpression: public Expression
|
class StringExpression: public Expression
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
StringExpression(enum StringOperator op, std::list<std::string> &t, bool ic): Op(op),terms(t), IgnoreCase(ic){}
|
StringExpression(enum StringOperator op, const std::list<std::string> &t, bool ic): Op(op),terms(t), IgnoreCase(ic){}
|
||||||
|
|
||||||
virtual void linearize(LinearizedExpression& e) const ;
|
virtual void linearize(LinearizedExpression& e) const ;
|
||||||
virtual std::string toStdString(const std::string& varstr) const;
|
virtual std::string toStdString(const std::string& varstr) const;
|
||||||
@ -275,7 +275,7 @@ Some implementations of StringExpressions.
|
|||||||
class NameExpression: public StringExpression
|
class NameExpression: public StringExpression
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NameExpression(enum StringOperator op, std::list<std::string> &t, bool ic):
|
NameExpression(enum StringOperator op, const std::list<std::string> &t, bool ic):
|
||||||
StringExpression(op,t,ic) {}
|
StringExpression(op,t,ic) {}
|
||||||
bool eval(const ExpFileEntry& file);
|
bool eval(const ExpFileEntry& file);
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ public:
|
|||||||
|
|
||||||
class PathExpression: public StringExpression {
|
class PathExpression: public StringExpression {
|
||||||
public:
|
public:
|
||||||
PathExpression(enum StringOperator op, std::list<std::string> &t, bool ic):
|
PathExpression(enum StringOperator op, const std::list<std::string> &t, bool ic):
|
||||||
StringExpression(op,t,ic) {}
|
StringExpression(op,t,ic) {}
|
||||||
bool eval(const ExpFileEntry& file);
|
bool eval(const ExpFileEntry& file);
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ public:
|
|||||||
|
|
||||||
class ExtExpression: public StringExpression {
|
class ExtExpression: public StringExpression {
|
||||||
public:
|
public:
|
||||||
ExtExpression(enum StringOperator op, std::list<std::string> &t, bool ic):
|
ExtExpression(enum StringOperator op, const std::list<std::string> &t, bool ic):
|
||||||
StringExpression(op,t,ic) {}
|
StringExpression(op,t,ic) {}
|
||||||
bool eval(const ExpFileEntry& file);
|
bool eval(const ExpFileEntry& file);
|
||||||
|
|
||||||
@ -320,7 +320,7 @@ public:
|
|||||||
|
|
||||||
class HashExpression: public StringExpression {
|
class HashExpression: public StringExpression {
|
||||||
public:
|
public:
|
||||||
HashExpression(enum StringOperator op, std::list<std::string> &t):
|
HashExpression(enum StringOperator op, const std::list<std::string> &t):
|
||||||
StringExpression(op,t, true) {}
|
StringExpression(op,t, true) {}
|
||||||
bool eval(const ExpFileEntry& file);
|
bool eval(const ExpFileEntry& file);
|
||||||
|
|
||||||
|
@ -168,10 +168,9 @@ public:
|
|||||||
|
|
||||||
class RsFiles
|
class RsFiles
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
RsFiles() {}
|
||||||
RsFiles() { return; }
|
virtual ~RsFiles() {}
|
||||||
virtual ~RsFiles() { return; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides file data for the gui: media streaming or rpc clients.
|
* Provides file data for the gui: media streaming or rpc clients.
|
||||||
@ -278,8 +277,8 @@ class RsFiles
|
|||||||
***/
|
***/
|
||||||
virtual void requestDirUpdate(void *ref) =0 ; // triggers the update of the given reference. Used when browsing.
|
virtual void requestDirUpdate(void *ref) =0 ; // triggers the update of the given reference. Used when browsing.
|
||||||
|
|
||||||
virtual void setDownloadDirectory(std::string path) = 0;
|
virtual bool setDownloadDirectory(std::string path) = 0;
|
||||||
virtual void setPartialsDirectory(std::string path) = 0;
|
virtual bool setPartialsDirectory(std::string path) = 0;
|
||||||
virtual std::string getDownloadDirectory() = 0;
|
virtual std::string getDownloadDirectory() = 0;
|
||||||
virtual std::string getPartialsDirectory() = 0;
|
virtual std::string getPartialsDirectory() = 0;
|
||||||
|
|
||||||
|
@ -124,24 +124,27 @@ class RsGxsComment
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class RsGxsCommentService
|
struct RsGxsCommentService
|
||||||
{
|
{
|
||||||
public:
|
RsGxsCommentService() {}
|
||||||
|
virtual ~RsGxsCommentService() {}
|
||||||
|
|
||||||
RsGxsCommentService() { return; }
|
/** Get previously requested comment data with token */
|
||||||
virtual ~RsGxsCommentService() { return; }
|
virtual bool getCommentData( uint32_t token,
|
||||||
|
std::vector<RsGxsComment> &comments ) = 0;
|
||||||
|
virtual bool getRelatedComments( uint32_t token,
|
||||||
|
std::vector<RsGxsComment> &comments ) = 0;
|
||||||
|
|
||||||
virtual bool getCommentData(const uint32_t &token, std::vector<RsGxsComment> &comments) = 0;
|
virtual bool createComment(uint32_t &token, RsGxsComment &comment) = 0;
|
||||||
virtual bool getRelatedComments(const uint32_t &token, std::vector<RsGxsComment> &comments) = 0;
|
virtual bool createVote(uint32_t &token, RsGxsVote &vote) = 0;
|
||||||
|
|
||||||
//virtual bool getDetailedCommentData(const uint32_t &token, std::vector<RsGxsComment> &comments);
|
virtual bool acknowledgeComment(
|
||||||
|
uint32_t token,
|
||||||
virtual bool createComment(uint32_t &token, RsGxsComment &comment) = 0;
|
std::pair<RsGxsGroupId, RsGxsMessageId>& msgId ) = 0;
|
||||||
virtual bool createVote(uint32_t &token, RsGxsVote &vote) = 0;
|
|
||||||
|
|
||||||
virtual bool acknowledgeComment(const uint32_t& token, std::pair<RsGxsGroupId, RsGxsMessageId>& msgId) = 0;
|
|
||||||
virtual bool acknowledgeVote(const uint32_t& token, std::pair<RsGxsGroupId, RsGxsMessageId>& msgId) = 0;
|
|
||||||
|
|
||||||
|
virtual bool acknowledgeVote(
|
||||||
|
uint32_t token,
|
||||||
|
std::pair<RsGxsGroupId, RsGxsMessageId>& msgId ) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,8 +40,8 @@ class RsGxsChanges
|
|||||||
public:
|
public:
|
||||||
RsGxsChanges(): mService(0){}
|
RsGxsChanges(): mService(0){}
|
||||||
RsTokenService *mService;
|
RsTokenService *mService;
|
||||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > mMsgs;
|
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > mMsgs;
|
||||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > mMsgsMeta;
|
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > mMsgsMeta;
|
||||||
std::list<RsGxsGroupId> mGrps;
|
std::list<RsGxsGroupId> mGrps;
|
||||||
std::list<RsGxsGroupId> mGrpsMeta;
|
std::list<RsGxsGroupId> mGrpsMeta;
|
||||||
};
|
};
|
||||||
|
@ -1,3 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* rsgxsifacetypes.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 crispy
|
||||||
|
* Copyright (C) 2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* rsgxsifacetypes.h
|
* rsgxsifacetypes.h
|
||||||
*
|
*
|
||||||
@ -13,18 +33,20 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include <retroshare/rstypes.h>
|
#include "retroshare/rstypes.h"
|
||||||
#include <retroshare/rsids.h>
|
#include "retroshare/rsids.h"
|
||||||
|
#include "serialiser/rsserializable.h"
|
||||||
|
#include "serialiser/rstypeserializer.h"
|
||||||
|
|
||||||
typedef GXSGroupId RsGxsGroupId;
|
typedef GXSGroupId RsGxsGroupId;
|
||||||
typedef Sha1CheckSum RsGxsMessageId;
|
typedef Sha1CheckSum RsGxsMessageId;
|
||||||
typedef GXSId RsGxsId;
|
typedef GXSId RsGxsId;
|
||||||
typedef GXSCircleId RsGxsCircleId;
|
typedef GXSCircleId RsGxsCircleId;
|
||||||
|
|
||||||
typedef std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > GxsMsgIdResult;
|
typedef std::map<RsGxsGroupId, std::set<RsGxsMessageId> > GxsMsgIdResult;
|
||||||
typedef std::pair<RsGxsGroupId, RsGxsMessageId> RsGxsGrpMsgIdPair;
|
typedef std::pair<RsGxsGroupId, RsGxsMessageId> RsGxsGrpMsgIdPair;
|
||||||
typedef std::map<RsGxsGrpMsgIdPair, std::vector<RsGxsMessageId> > MsgRelatedIdResult;
|
typedef std::map<RsGxsGrpMsgIdPair, std::set<RsGxsMessageId> > MsgRelatedIdResult;
|
||||||
typedef std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > GxsMsgReq;
|
typedef std::map<RsGxsGroupId, std::set<RsGxsMessageId> > GxsMsgReq;
|
||||||
|
|
||||||
struct RsMsgMetaData;
|
struct RsMsgMetaData;
|
||||||
|
|
||||||
@ -34,7 +56,7 @@ typedef std::map<RsGxsGroupId, std::vector<RsMsgMetaData> > MsgMetaResult;
|
|||||||
class RsGxsGrpMetaData;
|
class RsGxsGrpMetaData;
|
||||||
class RsGxsMsgMetaData;
|
class RsGxsMsgMetaData;
|
||||||
|
|
||||||
struct RsGroupMetaData
|
struct RsGroupMetaData : RsSerializable
|
||||||
{
|
{
|
||||||
// (csoler) The correct default value to be used in mCircleType is GXS_CIRCLE_TYPE_PUBLIC, which is defined in rsgxscircles.h,
|
// (csoler) The correct default value to be used in mCircleType is GXS_CIRCLE_TYPE_PUBLIC, which is defined in rsgxscircles.h,
|
||||||
// but because of a loop in the includes, I cannot include it here. So I replaced with its current value 0x0001.
|
// but because of a loop in the includes, I cannot include it here. So I replaced with its current value 0x0001.
|
||||||
@ -73,6 +95,30 @@ struct RsGroupMetaData
|
|||||||
std::string mServiceString; // Service Specific Free-Form extra storage.
|
std::string mServiceString; // Service Specific Free-Form extra storage.
|
||||||
RsPeerId mOriginator;
|
RsPeerId mOriginator;
|
||||||
RsGxsCircleId mInternalCircle;
|
RsGxsCircleId mInternalCircle;
|
||||||
|
|
||||||
|
/// @see RsSerializable
|
||||||
|
void serial_process( RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
|
{
|
||||||
|
RS_SERIAL_PROCESS(mGroupId);
|
||||||
|
RS_SERIAL_PROCESS(mGroupName);
|
||||||
|
RS_SERIAL_PROCESS(mGroupFlags);
|
||||||
|
RS_SERIAL_PROCESS(mSignFlags);
|
||||||
|
RS_SERIAL_PROCESS(mPublishTs);
|
||||||
|
RS_SERIAL_PROCESS(mAuthorId);
|
||||||
|
RS_SERIAL_PROCESS(mCircleId);
|
||||||
|
RS_SERIAL_PROCESS(mCircleType);
|
||||||
|
RS_SERIAL_PROCESS(mAuthenFlags);
|
||||||
|
RS_SERIAL_PROCESS(mParentGrpId);
|
||||||
|
RS_SERIAL_PROCESS(mSubscribeFlags);
|
||||||
|
RS_SERIAL_PROCESS(mPop);
|
||||||
|
RS_SERIAL_PROCESS(mVisibleMsgCount);
|
||||||
|
RS_SERIAL_PROCESS(mLastPost);
|
||||||
|
RS_SERIAL_PROCESS(mGroupStatus);
|
||||||
|
RS_SERIAL_PROCESS(mServiceString);
|
||||||
|
RS_SERIAL_PROCESS(mOriginator);
|
||||||
|
RS_SERIAL_PROCESS(mInternalCircle);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ class RsGxsMsgChange : public RsGxsNotify
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsMsgChange(NotifyType type, bool metaChange) : NOTIFY_TYPE(type), mMetaChange(metaChange) {}
|
RsGxsMsgChange(NotifyType type, bool metaChange) : NOTIFY_TYPE(type), mMetaChange(metaChange) {}
|
||||||
std::map<RsGxsGroupId, std::vector<RsGxsMessageId> > msgChangeMap;
|
std::map<RsGxsGroupId, std::set<RsGxsMessageId> > msgChangeMap;
|
||||||
NotifyType getType(){ return NOTIFY_TYPE;}
|
NotifyType getType(){ return NOTIFY_TYPE;}
|
||||||
bool metaChange() { return mMetaChange; }
|
bool metaChange() { return mMetaChange; }
|
||||||
private:
|
private:
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
*
|
*
|
||||||
* RetroShare C++ Interface.
|
* RetroShare C++ Interface.
|
||||||
*
|
*
|
||||||
* Copyright 2012-2012 by Robert Fernie.
|
* Copyright (C) 2012 Robert Fernie.
|
||||||
|
* Copyright (C) 2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library 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
|
||||||
@ -36,9 +37,12 @@
|
|||||||
#include "retroshare/rsids.h"
|
#include "retroshare/rsids.h"
|
||||||
#include "serialiser/rstlvimage.h"
|
#include "serialiser/rstlvimage.h"
|
||||||
#include "retroshare/rsgxscommon.h"
|
#include "retroshare/rsgxscommon.h"
|
||||||
|
#include "serialiser/rsserializable.h"
|
||||||
|
#include "serialiser/rstypeserializer.h"
|
||||||
|
#include "util/rsdeprecate.h"
|
||||||
|
|
||||||
/* The Main Interface Class - for information about your Peers */
|
/* The Main Interface Class - for information about your Peers */
|
||||||
class RsIdentity;
|
struct RsIdentity;
|
||||||
extern RsIdentity *rsIdentity;
|
extern RsIdentity *rsIdentity;
|
||||||
|
|
||||||
|
|
||||||
@ -63,6 +67,7 @@ extern RsIdentity *rsIdentity;
|
|||||||
#define RSID_RELATION_OTHER 0x0008
|
#define RSID_RELATION_OTHER 0x0008
|
||||||
#define RSID_RELATION_UNKNOWN 0x0010
|
#define RSID_RELATION_UNKNOWN 0x0010
|
||||||
|
|
||||||
|
/// @deprecated remove toghether with RsGxsIdGroup::mRecognTags
|
||||||
#define RSRECOGN_MAX_TAGINFO 5
|
#define RSRECOGN_MAX_TAGINFO 5
|
||||||
|
|
||||||
// Unicode symbols. NOT utf-8 bytes, because of multi byte characters
|
// Unicode symbols. NOT utf-8 bytes, because of multi byte characters
|
||||||
@ -77,27 +82,36 @@ static const uint32_t RS_IDENTITY_FLAGS_PGP_KNOWN = 0x0004;
|
|||||||
static const uint32_t RS_IDENTITY_FLAGS_IS_OWN_ID = 0x0008;
|
static const uint32_t RS_IDENTITY_FLAGS_IS_OWN_ID = 0x0008;
|
||||||
static const uint32_t RS_IDENTITY_FLAGS_IS_DEPRECATED= 0x0010; // used to denote keys with deprecated fingerprint format.
|
static const uint32_t RS_IDENTITY_FLAGS_IS_DEPRECATED= 0x0010; // used to denote keys with deprecated fingerprint format.
|
||||||
|
|
||||||
class GxsReputation
|
struct GxsReputation : RsSerializable
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
GxsReputation();
|
GxsReputation();
|
||||||
|
|
||||||
bool updateIdScore(bool pgpLinked, bool pgpKnown);
|
bool updateIdScore(bool pgpLinked, bool pgpKnown);
|
||||||
bool update(); // checks ranges and calculates overall score.
|
bool update(); /// checks ranges and calculates overall score.
|
||||||
int mOverallScore;
|
|
||||||
int mIdScore; // PGP, Known, etc.
|
int32_t mOverallScore;
|
||||||
int mOwnOpinion;
|
int32_t mIdScore; /// PGP, Known, etc.
|
||||||
int mPeerOpinion;
|
int32_t mOwnOpinion;
|
||||||
|
int32_t mPeerOpinion;
|
||||||
|
|
||||||
|
/// @see RsSerializable
|
||||||
|
void serial_process( RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
|
{
|
||||||
|
RS_SERIAL_PROCESS(mOverallScore);
|
||||||
|
RS_SERIAL_PROCESS(mIdScore);
|
||||||
|
RS_SERIAL_PROCESS(mOwnOpinion);
|
||||||
|
RS_SERIAL_PROCESS(mPeerOpinion);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct RsGxsIdGroup
|
struct RsGxsIdGroup : RsSerializable
|
||||||
{
|
{
|
||||||
RsGxsIdGroup() :
|
RsGxsIdGroup() :
|
||||||
mLastUsageTS(0), mPgpKnown(false), mIsAContact(false) {}
|
mLastUsageTS(0), mPgpKnown(false), mIsAContact(false) {}
|
||||||
~RsGxsIdGroup() {}
|
~RsGxsIdGroup() {}
|
||||||
|
|
||||||
|
|
||||||
RsGroupMetaData mMeta;
|
RsGroupMetaData mMeta;
|
||||||
|
|
||||||
// In GroupMetaData.
|
// In GroupMetaData.
|
||||||
@ -120,7 +134,7 @@ struct RsGxsIdGroup
|
|||||||
std::string mPgpIdSign;
|
std::string mPgpIdSign;
|
||||||
|
|
||||||
// Recognition Strings. MAX# defined above.
|
// Recognition Strings. MAX# defined above.
|
||||||
std::list<std::string> mRecognTags;
|
RS_DEPRECATED std::list<std::string> mRecognTags;
|
||||||
|
|
||||||
// Avatar
|
// Avatar
|
||||||
RsGxsImage mImage ;
|
RsGxsImage mImage ;
|
||||||
@ -131,8 +145,11 @@ struct RsGxsIdGroup
|
|||||||
bool mIsAContact; // change that into flags one day
|
bool mIsAContact; // change that into flags one day
|
||||||
RsPgpId mPgpId;
|
RsPgpId mPgpId;
|
||||||
GxsReputation mReputation;
|
GxsReputation mReputation;
|
||||||
};
|
|
||||||
|
|
||||||
|
/// @see RsSerializable
|
||||||
|
void serial_process( RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx );
|
||||||
|
};
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &out, const RsGxsIdGroup &group);
|
std::ostream &operator<<(std::ostream &out, const RsGxsIdGroup &group);
|
||||||
|
|
||||||
@ -149,12 +166,11 @@ class RsRecognTag
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class RsRecognTagDetails
|
struct RsRecognTagDetails
|
||||||
{
|
{
|
||||||
public:
|
RsRecognTagDetails() :
|
||||||
RsRecognTagDetails()
|
valid_from(0), valid_to(0), tag_class(0), tag_type(0), is_valid(false),
|
||||||
:valid_from(0), valid_to(0), tag_class(0), tag_type(0),
|
is_pending(false) {}
|
||||||
is_valid(false), is_pending(false) { return; }
|
|
||||||
|
|
||||||
time_t valid_from;
|
time_t valid_from;
|
||||||
time_t valid_to;
|
time_t valid_to;
|
||||||
@ -167,105 +183,166 @@ class RsRecognTagDetails
|
|||||||
bool is_pending;
|
bool is_pending;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RsIdOpinion
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsGxsId id;
|
|
||||||
int rating;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
struct RsIdentityParameters
|
||||||
class RsIdentityParameters
|
|
||||||
{
|
{
|
||||||
public:
|
RsIdentityParameters() :
|
||||||
RsIdentityParameters(): isPgpLinked(false) { return; }
|
isPgpLinked(false) {}
|
||||||
|
|
||||||
bool isPgpLinked;
|
bool isPgpLinked;
|
||||||
std::string nickname;
|
std::string nickname;
|
||||||
RsGxsImage mImage ;
|
RsGxsImage mImage;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RsIdentityUsage
|
struct RsIdentityUsage : RsSerializable
|
||||||
{
|
{
|
||||||
public:
|
enum UsageCode : uint8_t
|
||||||
enum UsageCode { UNKNOWN_USAGE = 0x00,
|
{
|
||||||
GROUP_ADMIN_SIGNATURE_CREATION = 0x01, // These 2 are normally not normal GXS identities, but nothing prevents it to happen either.
|
UNKNOWN_USAGE = 0x00,
|
||||||
|
|
||||||
|
/** These 2 are normally not normal GXS identities, but nothing prevents
|
||||||
|
* it to happen either. */
|
||||||
|
GROUP_ADMIN_SIGNATURE_CREATION = 0x01,
|
||||||
GROUP_ADMIN_SIGNATURE_VALIDATION = 0x02,
|
GROUP_ADMIN_SIGNATURE_VALIDATION = 0x02,
|
||||||
GROUP_AUTHOR_SIGNATURE_CREATION = 0x03, // not typically used, since most services do not require group author signatures
|
|
||||||
|
/** Not typically used, since most services do not require group author
|
||||||
|
* signatures */
|
||||||
|
GROUP_AUTHOR_SIGNATURE_CREATION = 0x03,
|
||||||
GROUP_AUTHOR_SIGNATURE_VALIDATION = 0x04,
|
GROUP_AUTHOR_SIGNATURE_VALIDATION = 0x04,
|
||||||
MESSAGE_AUTHOR_SIGNATURE_CREATION = 0x05, // most common use case. Messages are signed by authors in e.g. forums.
|
|
||||||
|
/// most common use case. Messages are signed by authors in e.g. forums.
|
||||||
|
MESSAGE_AUTHOR_SIGNATURE_CREATION = 0x05,
|
||||||
MESSAGE_AUTHOR_SIGNATURE_VALIDATION = 0x06,
|
MESSAGE_AUTHOR_SIGNATURE_VALIDATION = 0x06,
|
||||||
GROUP_AUTHOR_KEEP_ALIVE = 0x07, // Identities are stamped regularly by crawlign the set of messages for all groups. That helps keepign the useful identities in hand.
|
|
||||||
MESSAGE_AUTHOR_KEEP_ALIVE = 0x08, // Identities are stamped regularly by crawlign the set of messages for all groups. That helps keepign the useful identities in hand.
|
/** Identities are stamped regularly by crawlign the set of messages for
|
||||||
CHAT_LOBBY_MSG_VALIDATION = 0x09, // Chat lobby msgs are signed, so each time one comes, or a chat lobby event comes, a signature verificaiton happens.
|
* all groups. That helps keepign the useful identities in hand. */
|
||||||
GLOBAL_ROUTER_SIGNATURE_CHECK = 0x0a, // Global router message validation
|
GROUP_AUTHOR_KEEP_ALIVE = 0x07,
|
||||||
GLOBAL_ROUTER_SIGNATURE_CREATION = 0x0b, // Global router message signature
|
MESSAGE_AUTHOR_KEEP_ALIVE = 0x08,
|
||||||
GXS_TUNNEL_DH_SIGNATURE_CHECK = 0x0c, //
|
|
||||||
GXS_TUNNEL_DH_SIGNATURE_CREATION = 0x0d, //
|
/** Chat lobby msgs are signed, so each time one comes, or a chat lobby
|
||||||
IDENTITY_DATA_UPDATE = 0x0e, // Group update on that identity data. Can be avatar, name, etc.
|
* event comes, a signature verificaiton happens. */
|
||||||
IDENTITY_GENERIC_SIGNATURE_CHECK = 0x0f, // Any signature verified for that identity
|
CHAT_LOBBY_MSG_VALIDATION = 0x09,
|
||||||
IDENTITY_GENERIC_SIGNATURE_CREATION = 0x10, // Any signature made by that identity
|
|
||||||
|
/// Global router message validation
|
||||||
|
GLOBAL_ROUTER_SIGNATURE_CHECK = 0x0a,
|
||||||
|
|
||||||
|
/// Global router message signature
|
||||||
|
GLOBAL_ROUTER_SIGNATURE_CREATION = 0x0b,
|
||||||
|
|
||||||
|
GXS_TUNNEL_DH_SIGNATURE_CHECK = 0x0c,
|
||||||
|
GXS_TUNNEL_DH_SIGNATURE_CREATION = 0x0d,
|
||||||
|
|
||||||
|
/// Group update on that identity data. Can be avatar, name, etc.
|
||||||
|
IDENTITY_DATA_UPDATE = 0x0e,
|
||||||
|
|
||||||
|
/// Any signature verified for that identity
|
||||||
|
IDENTITY_GENERIC_SIGNATURE_CHECK = 0x0f,
|
||||||
|
|
||||||
|
/// Any signature made by that identity
|
||||||
|
IDENTITY_GENERIC_SIGNATURE_CREATION = 0x10,
|
||||||
|
|
||||||
IDENTITY_GENERIC_ENCRYPTION = 0x11,
|
IDENTITY_GENERIC_ENCRYPTION = 0x11,
|
||||||
IDENTITY_GENERIC_DECRYPTION = 0x12,
|
IDENTITY_GENERIC_DECRYPTION = 0x12,
|
||||||
CIRCLE_MEMBERSHIP_CHECK = 0x13
|
CIRCLE_MEMBERSHIP_CHECK = 0x13
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
explicit RsIdentityUsage(uint16_t service,const RsIdentityUsage::UsageCode& code,const RsGxsGroupId& gid=RsGxsGroupId(),const RsGxsMessageId& mid=RsGxsMessageId(),uint64_t additional_id=0,const std::string& comment = std::string());
|
RsIdentityUsage( uint16_t service, const RsIdentityUsage::UsageCode& code,
|
||||||
|
const RsGxsGroupId& gid = RsGxsGroupId(),
|
||||||
|
const RsGxsMessageId& mid = RsGxsMessageId(),
|
||||||
|
uint64_t additional_id=0,
|
||||||
|
const std::string& comment = std::string() );
|
||||||
|
|
||||||
uint16_t mServiceId; // Id of the service using that identity, as understood by rsServiceControl
|
/// Id of the service using that identity, as understood by rsServiceControl
|
||||||
UsageCode mUsageCode; // Specific code to use. Will allow forming the correct translated message in the GUI if necessary.
|
uint16_t mServiceId;
|
||||||
RsGxsGroupId mGrpId; // Group ID using the identity
|
|
||||||
|
|
||||||
RsGxsMessageId mMsgId; // Message ID using the identity
|
/** Specific code to use. Will allow forming the correct translated message
|
||||||
uint64_t mAdditionalId; // Some additional ID. Can be used for e.g. chat lobbies.
|
* in the GUI if necessary. */
|
||||||
std::string mComment ; // additional comment to be used mainly for debugging, but not GUI display
|
UsageCode mUsageCode;
|
||||||
|
|
||||||
bool operator<(const RsIdentityUsage& u) const
|
/// Group ID using the identity
|
||||||
{
|
RsGxsGroupId mGrpId;
|
||||||
return mHash < u.mHash ;
|
|
||||||
}
|
/// Message ID using the identity
|
||||||
|
RsGxsMessageId mMsgId;
|
||||||
|
|
||||||
|
/// Some additional ID. Can be used for e.g. chat lobbies.
|
||||||
|
uint64_t mAdditionalId;
|
||||||
|
|
||||||
|
/// additional comment to be used mainly for debugging, but not GUI display
|
||||||
|
std::string mComment;
|
||||||
|
|
||||||
|
bool operator<(const RsIdentityUsage& u) const { return mHash < u.mHash; }
|
||||||
RsFileHash mHash ;
|
RsFileHash mHash ;
|
||||||
|
|
||||||
|
/// @see RsSerializable
|
||||||
|
void serial_process( RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
|
{
|
||||||
|
RS_SERIAL_PROCESS(mServiceId);
|
||||||
|
RS_SERIAL_PROCESS(mUsageCode);
|
||||||
|
RS_SERIAL_PROCESS(mGrpId);
|
||||||
|
RS_SERIAL_PROCESS(mMsgId);
|
||||||
|
RS_SERIAL_PROCESS(mAdditionalId);
|
||||||
|
RS_SERIAL_PROCESS(mComment);
|
||||||
|
RS_SERIAL_PROCESS(mHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
friend struct RsTypeSerializer;
|
||||||
|
private:
|
||||||
|
/** Accessible only to friend class RsTypeSerializer needed for
|
||||||
|
* deserialization */
|
||||||
|
RsIdentityUsage();
|
||||||
};
|
};
|
||||||
|
|
||||||
class RsIdentityDetails
|
|
||||||
|
struct RsIdentityDetails : RsSerializable
|
||||||
{
|
{
|
||||||
public:
|
RsIdentityDetails() : mFlags(0), mLastUsageTS(0) {}
|
||||||
RsIdentityDetails()
|
|
||||||
: mFlags(0), mLastUsageTS(0) { return; }
|
|
||||||
|
|
||||||
RsGxsId mId;
|
RsGxsId mId;
|
||||||
|
|
||||||
// identity details.
|
|
||||||
std::string mNickname;
|
std::string mNickname;
|
||||||
|
|
||||||
uint32_t mFlags ;
|
uint32_t mFlags;
|
||||||
|
|
||||||
// PGP Stuff.
|
|
||||||
RsPgpId mPgpId;
|
RsPgpId mPgpId;
|
||||||
|
|
||||||
// Recogn details.
|
/// @deprecated Recogn details.
|
||||||
std::list<RsRecognTag> mRecognTags;
|
RS_DEPRECATED std::list<RsRecognTag> mRecognTags;
|
||||||
|
|
||||||
// Cyril: Reputation details. At some point we might want to merge information
|
/** Cyril: Reputation details. At some point we might want to merge
|
||||||
// between the two into a single global score. Since the old reputation system
|
* information between the two into a single global score. Since the old
|
||||||
// is not finished yet, I leave this in place. We should decide what to do with it.
|
* reputation system is not finished yet, I leave this in place. We should
|
||||||
|
* decide what to do with it.
|
||||||
|
*/
|
||||||
RsReputations::ReputationInfo mReputation;
|
RsReputations::ReputationInfo mReputation;
|
||||||
|
|
||||||
// avatar
|
RsGxsImage mAvatar;
|
||||||
RsGxsImage mAvatar ;
|
|
||||||
|
|
||||||
// last usage
|
time_t mLastUsageTS;
|
||||||
time_t mLastUsageTS ;
|
|
||||||
std::map<RsIdentityUsage,time_t> mUseCases ;
|
std::map<RsIdentityUsage,time_t> mUseCases;
|
||||||
|
|
||||||
|
/// @see RsSerializable
|
||||||
|
virtual void serial_process(RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx)
|
||||||
|
{
|
||||||
|
RS_SERIAL_PROCESS(mId);
|
||||||
|
RS_SERIAL_PROCESS(mNickname);
|
||||||
|
RS_SERIAL_PROCESS(mFlags);
|
||||||
|
RS_SERIAL_PROCESS(mPgpId);
|
||||||
|
//RS_SERIAL_PROCESS(mReputation);
|
||||||
|
//RS_SERIAL_PROCESS(mAvatar);
|
||||||
|
RS_SERIAL_PROCESS(mLastUsageTS);
|
||||||
|
RS_SERIAL_PROCESS(mUseCases);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RsIdentity: public RsGxsIfaceHelper
|
struct RsIdentity : RsGxsIfaceHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
explicit RsIdentity(RsGxsIface *gxs): RsGxsIfaceHelper(gxs) {}
|
explicit RsIdentity(RsGxsIface *gxs): RsGxsIfaceHelper(gxs) {}
|
||||||
virtual ~RsIdentity() {}
|
virtual ~RsIdentity() {}
|
||||||
|
|
||||||
|
@ -61,10 +61,13 @@
|
|||||||
|
|
||||||
/* TODO CLEANUP: RS_TOKREQ_ANSTYPE_* values are meaningless and not used by
|
/* TODO CLEANUP: RS_TOKREQ_ANSTYPE_* values are meaningless and not used by
|
||||||
* RsTokenService or its implementation, and may be arbitrarly defined by each
|
* RsTokenService or its implementation, and may be arbitrarly defined by each
|
||||||
* GXS client as they are of no usage, their use is deprecated */
|
* GXS client as they are of no usage, their use is deprecated, up until the
|
||||||
|
* definitive cleanup is done new code must use RS_DEPRECATED_TOKREQ_ANSTYPE for
|
||||||
|
* easier cleanup. */
|
||||||
#ifndef RS_NO_WARN_DEPRECATED
|
#ifndef RS_NO_WARN_DEPRECATED
|
||||||
# warning RS_TOKREQ_ANSTYPE_* macros are deprecated!
|
# warning RS_TOKREQ_ANSTYPE_* macros are deprecated!
|
||||||
#endif
|
#endif
|
||||||
|
#define RS_DEPRECATED_TOKREQ_ANSTYPE 0x0000
|
||||||
#define RS_TOKREQ_ANSTYPE_LIST 0x0001
|
#define RS_TOKREQ_ANSTYPE_LIST 0x0001
|
||||||
#define RS_TOKREQ_ANSTYPE_SUMMARY 0x0002
|
#define RS_TOKREQ_ANSTYPE_SUMMARY 0x0002
|
||||||
#define RS_TOKREQ_ANSTYPE_DATA 0x0003
|
#define RS_TOKREQ_ANSTYPE_DATA 0x0003
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
|
|
||||||
#include <retroshare/rsids.h>
|
#include <retroshare/rsids.h>
|
||||||
#include <retroshare/rsflags.h>
|
#include <retroshare/rsflags.h>
|
||||||
|
#include <serialiser/rsserializable.h>
|
||||||
|
#include <serialiser/rstypeserializer.h>
|
||||||
|
|
||||||
#define USE_NEW_CHUNK_CHECKING_CODE
|
#define USE_NEW_CHUNK_CHECKING_CODE
|
||||||
|
|
||||||
@ -118,13 +120,21 @@ class Condition
|
|||||||
std::string name;
|
std::string name;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PeerBandwidthLimits
|
struct PeerBandwidthLimits : RsSerializable
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
PeerBandwidthLimits() : max_up_rate_kbs(0), max_dl_rate_kbs(0) {}
|
PeerBandwidthLimits() : max_up_rate_kbs(0), max_dl_rate_kbs(0) {}
|
||||||
|
|
||||||
uint32_t max_up_rate_kbs ;
|
uint32_t max_up_rate_kbs;
|
||||||
uint32_t max_dl_rate_kbs ;
|
uint32_t max_dl_rate_kbs;
|
||||||
|
|
||||||
|
|
||||||
|
/// @see RsSerializable
|
||||||
|
void serial_process(RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx)
|
||||||
|
{
|
||||||
|
RS_SERIAL_PROCESS(max_up_rate_kbs);
|
||||||
|
RS_SERIAL_PROCESS(max_dl_rate_kbs);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//class SearchRequest // unused stuff.
|
//class SearchRequest // unused stuff.
|
||||||
@ -295,7 +305,7 @@ class FileChunksInfo
|
|||||||
std::map<uint32_t, std::vector<SliceInfo> > pending_slices ;
|
std::map<uint32_t, std::vector<SliceInfo> > pending_slices ;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CompressedChunkMap
|
class CompressedChunkMap : public RsSerializable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CompressedChunkMap() {}
|
CompressedChunkMap() {}
|
||||||
@ -346,9 +356,15 @@ class CompressedChunkMap
|
|||||||
inline void reset(uint32_t j) { _map[j >> 5] &= ~(1 << (j & 31)) ; }
|
inline void reset(uint32_t j) { _map[j >> 5] &= ~(1 << (j & 31)) ; }
|
||||||
|
|
||||||
/// compressed map, one bit per chunk
|
/// compressed map, one bit per chunk
|
||||||
std::vector<uint32_t> _map ;
|
std::vector<uint32_t> _map;
|
||||||
|
|
||||||
|
/// @see RsSerializable
|
||||||
|
void serial_process(RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx)
|
||||||
|
{ RS_SERIAL_PROCESS(_map); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<class CRCTYPE> class t_CRCMap
|
template<class CRCTYPE> class t_CRCMap
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -48,8 +48,8 @@ void RsBanListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGeneric
|
|||||||
|
|
||||||
void RsBanListConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
void RsBanListConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
||||||
{
|
{
|
||||||
RsTypeSerializer::serial_process<uint32_t>(j,ctx,type,"type") ;
|
RsTypeSerializer::serial_process<uint32_t>(j,ctx,banListType,"type") ;
|
||||||
RsTypeSerializer::serial_process (j,ctx,peerId,"peerId") ;
|
RsTypeSerializer::serial_process (j,ctx,banListPeerId,"peerId") ;
|
||||||
RsTypeSerializer::serial_process<time_t> (j,ctx,update_time,"update_time") ;
|
RsTypeSerializer::serial_process<time_t> (j,ctx,update_time,"update_time") ;
|
||||||
RsTypeSerializer::serial_process (j,ctx,banned_peers,"banned_peers") ;
|
RsTypeSerializer::serial_process (j,ctx,banned_peers,"banned_peers") ;
|
||||||
}
|
}
|
||||||
|
@ -61,15 +61,17 @@ class RsBanListConfigItem: public RsItem
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsBanListConfigItem()
|
RsBanListConfigItem()
|
||||||
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BANLIST, RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM) {}
|
: RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BANLIST, RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM)
|
||||||
|
, banListType(0), update_time(0)
|
||||||
|
{}
|
||||||
|
|
||||||
virtual ~RsBanListConfigItem(){}
|
virtual ~RsBanListConfigItem(){}
|
||||||
virtual void clear() { banned_peers.TlvClear() ; }
|
virtual void clear() { banned_peers.TlvClear() ; }
|
||||||
|
|
||||||
void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx);
|
void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx);
|
||||||
|
|
||||||
uint32_t type ;
|
uint32_t banListType ;
|
||||||
RsPeerId peerId ;
|
RsPeerId banListPeerId ;
|
||||||
time_t update_time ;
|
time_t update_time ;
|
||||||
RsTlvBanList banned_peers;
|
RsTlvBanList banned_peers;
|
||||||
};
|
};
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "rsitems/rsconfigitems.h"
|
#include "rsitems/rsconfigitems.h"
|
||||||
#include "retroshare/rspeers.h" // Needed for RsGroupInfo.
|
#include "retroshare/rspeers.h" // Needed for RsGroupInfo.
|
||||||
|
|
||||||
|
#include "serialiser/rsserializable.h"
|
||||||
#include "serialiser/rstypeserializer.h"
|
#include "serialiser/rstypeserializer.h"
|
||||||
/***
|
/***
|
||||||
* #define RSSERIAL_DEBUG 1
|
* #define RSSERIAL_DEBUG 1
|
||||||
@ -89,7 +90,7 @@ void RsFileTransfer::serial_process(RsGenericSerializer::SerializeJob j,RsGeneri
|
|||||||
|
|
||||||
RsTypeSerializer::serial_process<uint32_t> (j,ctx,flags,"flags") ;
|
RsTypeSerializer::serial_process<uint32_t> (j,ctx,flags,"flags") ;
|
||||||
RsTypeSerializer::serial_process<uint32_t> (j,ctx,chunk_strategy,"chunk_strategy") ;
|
RsTypeSerializer::serial_process<uint32_t> (j,ctx,chunk_strategy,"chunk_strategy") ;
|
||||||
RsTypeSerializer::serial_process (j,ctx,compressed_chunk_map,"compressed_chunk_map") ;
|
RS_SERIAL_PROCESS(compressed_chunk_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RsFileConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
void RsFileConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
||||||
@ -136,7 +137,7 @@ RsItem *RsPeerConfigSerialiser::create_item(uint8_t item_type,uint8_t item_subty
|
|||||||
|
|
||||||
void RsPeerNetItem::clear()
|
void RsPeerNetItem::clear()
|
||||||
{
|
{
|
||||||
peerId.clear();
|
nodePeerId.clear();
|
||||||
pgpId.clear();
|
pgpId.clear();
|
||||||
location.clear();
|
location.clear();
|
||||||
netMode = 0;
|
netMode = 0;
|
||||||
@ -159,7 +160,7 @@ void RsPeerNetItem::clear()
|
|||||||
}
|
}
|
||||||
void RsPeerNetItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
void RsPeerNetItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx)
|
||||||
{
|
{
|
||||||
RsTypeSerializer::serial_process(j,ctx,peerId,"peerId") ;
|
RsTypeSerializer::serial_process(j,ctx,nodePeerId,"peerId") ;
|
||||||
RsTypeSerializer::serial_process(j,ctx,pgpId,"pgpId") ;
|
RsTypeSerializer::serial_process(j,ctx,pgpId,"pgpId") ;
|
||||||
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_LOCATION,location,"location") ;
|
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_LOCATION,location,"location") ;
|
||||||
|
|
||||||
@ -192,31 +193,6 @@ void RsPeerStunItem::serial_process(RsGenericSerializer::SerializeJob j,RsGeneri
|
|||||||
RsTypeSerializer::serial_process<RsTlvItem>(j,ctx,stunList,"stunList") ;
|
RsTypeSerializer::serial_process<RsTlvItem>(j,ctx,stunList,"stunList") ;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> uint32_t RsTypeSerializer::serial_size(const PeerBandwidthLimits& /*s*/)
|
|
||||||
{
|
|
||||||
return 4+4 ;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const PeerBandwidthLimits& s)
|
|
||||||
{
|
|
||||||
bool ok = true ;
|
|
||||||
ok = ok && setRawUInt32(data,size,&offset,s.max_up_rate_kbs);
|
|
||||||
ok = ok && setRawUInt32(data,size,&offset,s.max_dl_rate_kbs);
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,PeerBandwidthLimits& s)
|
|
||||||
{
|
|
||||||
bool ok = true ;
|
|
||||||
ok = ok && getRawUInt32(data,size,&offset,&s.max_up_rate_kbs);
|
|
||||||
ok = ok && getRawUInt32(data,size,&offset,&s.max_dl_rate_kbs);
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> void RsTypeSerializer::print_data(const std::string& /*n*/, const PeerBandwidthLimits& s)
|
|
||||||
{
|
|
||||||
std::cerr << " [Peer BW limit] " << s.max_up_rate_kbs << " / " << s.max_dl_rate_kbs << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
RsNodeGroupItem::RsNodeGroupItem(const RsGroupInfo& g)
|
RsNodeGroupItem::RsNodeGroupItem(const RsGroupInfo& g)
|
||||||
:RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP)
|
:RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user