From f02e44bf919de0acaf25c02272e1c103c787f00d Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 7 Jun 2011 14:14:19 +0000 Subject: [PATCH 1/2] * Drop andorid/ directory; further development will happen in an android-only branch. --- android/AndroidManifest.xml | 29 --- android/README.txt | 58 ----- android/build.properties | 1 - android/build.xml | 210 ------------------ android/default.properties | 11 - android/jni/build.sh | 83 ------- android/res/drawable/ic_launcher_itoopie.png | Bin 2667 -> 0 bytes android/res/layout/main.xml | 18 -- android/res/raw/logger_config | 8 - android/res/raw/router_config | 52 ----- android/res/values/strings.xml | 4 - android/scripts/setversion.sh | 59 ----- .../router/activity/I2PActivityBase.java | 65 ------ .../android/router/activity/MainActivity.java | 16 -- .../net/i2p/android/router/service/Init.java | 134 ----------- .../android/router/service/RouterService.java | 137 ------------ .../i2p/android/router/service/StatusBar.java | 45 ---- android/src/net/i2p/util/LogWriter.java | 174 --------------- android/src/net/i2p/util/SecureDirectory.java | 22 -- android/src/net/i2p/util/SecureFile.java | 22 -- .../net/i2p/util/SecureFileOutputStream.java | 53 ----- 21 files changed, 1201 deletions(-) delete mode 100644 android/AndroidManifest.xml delete mode 100644 android/README.txt delete mode 100644 android/build.properties delete mode 100644 android/build.xml delete mode 100644 android/default.properties delete mode 100755 android/jni/build.sh delete mode 100644 android/res/drawable/ic_launcher_itoopie.png delete mode 100644 android/res/layout/main.xml delete mode 100644 android/res/raw/logger_config delete mode 100644 android/res/raw/router_config delete mode 100644 android/res/values/strings.xml delete mode 100755 android/scripts/setversion.sh delete mode 100644 android/src/net/i2p/android/router/activity/I2PActivityBase.java delete mode 100644 android/src/net/i2p/android/router/activity/MainActivity.java delete mode 100644 android/src/net/i2p/android/router/service/Init.java delete mode 100644 android/src/net/i2p/android/router/service/RouterService.java delete mode 100644 android/src/net/i2p/android/router/service/StatusBar.java delete mode 100644 android/src/net/i2p/util/LogWriter.java delete mode 100644 android/src/net/i2p/util/SecureDirectory.java delete mode 100644 android/src/net/i2p/util/SecureFile.java delete mode 100644 android/src/net/i2p/util/SecureFileOutputStream.java diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml deleted file mode 100644 index b95b5ba16..000000000 --- a/android/AndroidManifest.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/android/README.txt b/android/README.txt deleted file mode 100644 index ff5b1f2d6..000000000 --- a/android/README.txt +++ /dev/null @@ -1,58 +0,0 @@ -These instructions are for a recent Android SDK (1.6 or later).. -Should also still work with a 1.5 SDK. -The build file is not compatible with the 1.1 SDK any more. -These instructions were last updated for SDK Tools Version 11 with -SDK Platform-tools Version 5, June 2011. - -#Download the SDK from http://developer.android.com/sdk/index.html -#Unzip the android SDK in ../../ -#So then the android tools will be in ../../android-sdk-linux_86/tools/ -# -# Run the GUI updater, which you must do to get an SDK Platform: -../../android-sdk-linux_86/tools/android & - -# now go to the available packages tab, check the box and click refresh, -# and download an SDK Platform -# Since I2P is configured to run on 1.1 or higher -# (API 2) download that one. Otherwise you must change the -# target in default.properties from android-2 to andriod-x -# where x is the API version. - -# To run the debugger (ddms) you also need to download the -# "Android SDK Platform-Tools" package from the GUI updater. - -# create a file local.properties with the following line (without the leading # of course): -# sdk.dir=/path/to/your/android-sdk-linux_86 -# The old property was sdk-location=/path/to/your/android-sdk-linux_86 -# but it changed in more recent tools. - -# DO NOT create a new project or anything. It's all set up right here for you. - -# Create the android 1.5 (API 3) virtual device -# (don't make a custom hardware profile) -# A AVD created with the 1.5 SDK will not work with the newer tools -../../android-sdk-linux_86/tools/android create avd --name i2p --target 3 - -#then run the emulator: -../../android-sdk-linux_86/tools/emulator -avd i2p & - -# or to talk to a real phone in debug mode: -adb kill-server -sudo adb start-server -adb devices - -#then wait a couple minutes until the emulator is up -#then install the I2P app -ant install - -#then run the debugger -../../android-sdk-linux_86/tools/ddms & - -#to rebuild and reinstall to emulator or phone: -ant reinstall - -# Now click on the I2P icon on your phone! - -#other helpful commands -../../android-sdk-linux_86/platform-tools/adb shell -../../android-sdk-linux_86/platform-tools/adb pull /some/file/on/emulator some-local-dir/ diff --git a/android/build.properties b/android/build.properties deleted file mode 100644 index 181724115..000000000 --- a/android/build.properties +++ /dev/null @@ -1 +0,0 @@ -application-package=net.i2p.router diff --git a/android/build.xml b/android/build.xml deleted file mode 100644 index 37b241ea8..000000000 --- a/android/build.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ignore warning about SDK version - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packaging resources - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/default.properties b/android/default.properties deleted file mode 100644 index 0b9250e02..000000000 --- a/android/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-8 diff --git a/android/jni/build.sh b/android/jni/build.sh deleted file mode 100755 index af5d17220..000000000 --- a/android/jni/build.sh +++ /dev/null @@ -1,83 +0,0 @@ -# -# build GMP and libjbigi.so using the Android tools directly -# - -# uncomment to skip -# exit 0 - -THISDIR=$(realpath $(dirname $(which $0))) -cd $THISDIR -export NDK=$(realpath ../../../android-ndk-r5b/) - -# -# API level, must match that in ../AndroidManifest.xml -# -LEVEL=3 -ARCH=arm -export SYSROOT=$NDK/platforms/android-$LEVEL/arch-$ARCH/ -export AABI=arm-linux-androideabi-4.4.3 -export SYSTEM=linux-x86 -export BINPREFIX=arm-linux-androideabi- -export CC="$NDK/toolchains/$AABI/prebuilt/$SYSTEM/bin/${BINPREFIX}gcc --sysroot=$SYSROOT" - -#echo "CC is $CC" - -JBIGI=$(realpath ../../core/c/jbigi) -GMPVER=4.3.2 -GMP=$JBIGI/gmp-$GMPVER - -if [ ! -d $GMP ] -then - echo "Source dir for GMP version $GMPVER not found in $GMP" - echo "Install it there or change GMPVER and/or GMP in this script" - exit 1 -fi - -LIBFILE=$PWD/libjbigi.so -if [ -f $LIBFILE ] -then - echo "$LIBFILE exists, nothing to do here" - echo "If you wish to force a recompile, delete it" - exit 0 -fi - -mkdir -p build -cd build - -# we must set both build and host, so that the configure -# script will set cross_compile=yes, so that it -# won't attempt to run the a.out files -if [ ! -f config.status ] -then - echo "Configuring GMP..." - $GMP/configure --with-pic --build=x86-none-linux --host=armv5-eabi-linux || exit 1 -fi - -echo "Building GMP..." -make || exit 1 - -export JAVA_HOME=$(dirname $(dirname $(realpath $(which javac)))) -if [ ! -f "$JAVA_HOME/include/jni.h" ]; then - echo "Cannot find jni.h! Looked in '$JAVA_HOME/include/jni.h'" - echo "Please set JAVA_HOME to a java home that has the JNI" - exit 1 -fi - -COMPILEFLAGS="-fPIC -Wall" -INCLUDES="-I. -I$JBIGI/jbigi/include -I$JAVA_HOME/include -I$JAVA_HOME/include/linux" -LINKFLAGS="-shared -Wl,-soname,libjbigi.so,--fix-cortex-a8" - -echo "Building jbigi lib that is statically linked to GMP" -STATICLIBS=".libs/libgmp.a" - -echo "Compiling C code..." -rm -f jbigi.o $LIBFILE -echo "$CC -c $COMPILEFLAGS $INCLUDES $JBIGI/jbigi/src/jbigi.c" -$CC -c $COMPILEFLAGS $INCLUDES $JBIGI/jbigi/src/jbigi.c || exit 1 -echo "$CC $LINKFLAGS $INCLUDES $INCLUDELIBS -o $LIBFILE jbigi.o $STATICLIBS" -$CC $LINKFLAGS $INCLUDES $INCLUDELIBS -o $LIBFILE jbigi.o $STATICLIBS || exit 1 - -ls -l $LIBFILE || exit 1 - - -echo 'Built successfully' diff --git a/android/res/drawable/ic_launcher_itoopie.png b/android/res/drawable/ic_launcher_itoopie.png deleted file mode 100644 index acb8a2bb8e7ef8e67c808dc766a751990f6ddc1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2667 zcmV-x3Y7JUP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2ipb% z4LS*Zb?J-%014|!L_t(&-tC%uaMaZm$3MSUHv3Aln>QpVK}sMP6p-Q7GExe)L>enP zQSmWA6{-*`J_cvh8SAUkaqLiZ#u-{sDT9xQVyB@b7#>2hJX9bmk|sdR1G3p9yV>3B z?(g@z{e#s>DV4-Lsxv(^zrXG|XV3SZbI&>V+=U-FNkgR90o(yh14aWuAO-LOTYz_g zp6}y^j01K9UPVFIG$N9O2?#)F8c{_-2ReWXV8Zvs11hi)Sfr{rR2BW2Yp9(yi~5`# zx~EN}efMrMJ36o&Iz(IDK4xmy|m@LbPn{VdB(o&9IO6c|1 z8M|>K^CA%}hQa5++<1r$D}Y3xT2-0oa?!DVJ#XdZ5$vn5&xf{Z6^j}g$klaD08{&W zHUA+yiS<{3VIbXh8#kUgLyoSq54d)?0Nez;rfJ9E-P0`B?$?mTKDbSvwY{y9V>J_Gq7x#R1%9J z-G4vjih>IKZaC8ATp(<<60EA?g*9t<$7WNzN=i!BA2@K}&h6W`|9auVg&QpvIrz{+ zyzTL@Zstsmj2}O8zYyYv-rv}<>4#^}=CH@Zy6kLPfC%ubp$4!;mNDkc!Q=6;&gGK5 z_uhN&GZz|HTDtt%)Kt7459_Q}DOgrkw&Fsbva+%jR;v{BcvyGKE$q}ZqQKvWI)r|t zs_0Xv(g@JmX}TYH;DKWRMMXtLnx_4A>C&aMRC~h}VfV=ND zt6qHZ&ntq#uqK31gb<3Z>xo;pZd?BNec#=ii)i_nWm`%B0F1ZdFdtdjRgy6 z2ADDh-wQ8@Ee?kWnx?5rk|Epeb*?R2%vTEv==xf(uA|0#ry;EawVKA*wQDIWDms4- z27^wX#Ia-v_Xxr1co#cl9`Fl+TvJ2tV5YXJDsoj79cUlw5IUmkDEs$wPdu1YN+BLk-|Ga7fotUwMU}1p?nWn|;&JJ@pj7 zkR$|fd^kJ+a1U@c9LBbCCD#uGz$1?^$Ll54Fz5u9_eWM4!0&benrSlA@5jAo57`SA za8lFyo&o_%OPNEHv$t(6K7{9No8deWM|Womq+)d1gon_ zEBy_{O(*4%g+`)R2Gay<6p<5e7B>OrP}PBvzvX9d^j+7C|ZdJf#0f- zP0HnlkN;4eD+SOQ^9wha%gkEJoARCtAVvYk;mNRK7$;W44_4+Up z01C1AFEx9}K#jVPdpa;&gXw{r;<^8F7fN^)DWA;1>g&z$7J(d_jqtpAwA9v;+b=s$YYkgVUw8aj+6#{n$v8-l3!oi6G2W4G9t;4V0SkcBtr+%~ z>Ad3Wg$UxCG@Ow^TR{O`6%}NM!z9kfey%UZcVMa=m{t>{ZcOzkk)!~^0yG1!4b~Yr z2F&R}?A$?cbSt`bE$-TpXaO Z3j>gHU55w)ftnV2YV|wl7NSh}s{dZF&Tu0aOso zl|h6twRre+4`w0j0$w-Z`eyVo+X;?3LoCH@x1E!bL~EOowQZYJ*xW>RuBionjIHfb z3O5tDyu+r(4m`5z=?sUxuHy8WLa(Vi&GYr?kHCS!?u9ymnF4Bp=XZ&1EALvr|Ka?ieyz0O1qS@5Tu>G91}tX44_Y5{4T9TG+ySH z1J1p5^;sibuBMVHSJkIG?Wa5qXYxaaVf#dixW6Q7H$Y^fL^Pyt>O~8>Wvdj(-6Mr_ zLWZ80o$PEl`c+HnX3xjdTl|5M@r|tp_7CM~aeBPmCtUQ_Z?|+BQN!Yl2~;o*2}zeF z(~)TDvO4YUDU)*QT_fBbm9JLbC4`Uw90>_s!Duu|z)4_IUk1Gc0We2a<#Kzny*)WS zxz#WXRYDS}IjPNKt{zjLl$sQ7INC6x`rYc{STtt0*e#t!tBN-L$H8jrawfTxg4OR= z&uTu=JQ)Z9_W^$y%CQQ-N?DOjr`y>!_x8EFF2*praCCFXANt3U9Y+>9UCxWfbaHxf z0KkYE39=%`OvC)5uf`AbLSq+(kfY(K_1l;VW*5{Ufiundt&bN*%urQ}8U|APHQpHj zfEXZ!gW=>$#;K5m-|J8RRsgz@U~}4hvLZWS7zSIw9zbXbTF>!)$H)FRCett_B&29K zYOgz3chLbrx3}9K2}P1((O9A|g*03qc*D?*U?>oBo%ra)%xENf(ew22u8#{8Md`7p z*xTz4)lKs?`%-$ZH+|WZwfD`vzf8$YY3%X$xP%a`^y8UnAOO5Tr4co(YN8sh*jTaf zLWWN(KONt2q~RJznxi$?6?CUxp8ikIHqUk4-fla(rOXLs8>n!aqhQjh3X(=ZPMGlmmD8c;3C(r86hdL&sgv;?h3LK2cH z>B107v?uB?bR)quO*O%i(4Co=`GwVC?GAT`9f9^hdZ0Zp!Zb}K9{V4~Z(%yaL - - - - - diff --git a/android/res/raw/logger_config b/android/res/raw/logger_config deleted file mode 100644 index 86651d880..000000000 --- a/android/res/raw/logger_config +++ /dev/null @@ -1,8 +0,0 @@ -logger.defaultLevel=INFO -logger.record.net.i2p.router.peerManager.ProfileOrganizer=WARN -logger.record.net.i2p.router.transport=WARN -logger.record.net.i2p.router.transport.FIFOBandwidthRefiller=ERROR -logger.record.net.i2p.stat.Rate=ERROR -logger.record.net.i2p.util.LogManager=WARN -logger.record.net.i2p.util.LogWriter=WARN -logger.record.net.i2p.util.NativeBigInteger=DEBUG diff --git a/android/res/raw/router_config b/android/res/raw/router_config deleted file mode 100644 index 5fa8dcc10..000000000 --- a/android/res/raw/router_config +++ /dev/null @@ -1,52 +0,0 @@ -# initial router.config -# temp directory -i2p.dir.temp=/data/data/net.i2p.router/files/tmp -i2p.dir.pid=/data/data/net.i2p.router/files/tmp -# save memory -prng.buffers=2 -router.decayingBloomFilterM=20 -stat.full=false -# -# Don't run NTP client, the phone should have a valid time -# -time.disabled=true -# -# no I2CP -# -i2p.dummyClientFacade=true -i2cp.disableInterface=true -# -##### Tunnels -# -router.inboundPool.backupQuantity=0 -router.inboundPool.length=2 -router.inboundPool.lengthVariance=0 -router.inboundPool.quantity=2 -router.outboundPool.backupQuantity=0 -router.outboundPool.length=2 -router.outboundPool.lengthVariance=0 -router.outboundPool.quantity=2 -router.maxParticipatingTunnels=0 -router.sharePercentage=10 -# -##### Transport -# -i2np.bandwidth.inboundKBytesPerSecond=100 -i2np.bandwidth.outboundKBytesPerSecond=30 -# -# NTCP -# -#i2np.ntcp.enable=false -i2np.ntcp.maxConnections=12 -# -# UDP disabled for now -# -i2np.udp.enable=false -i2np.udp.maxConnections=12 -# -# no COMM at all!!! -#i2p.vmCommSystem=true -# -# not on android -i2np.upnp.enable=false -routerconsole.geoip.enable=false diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml deleted file mode 100644 index d1ab96508..000000000 --- a/android/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - I2P - diff --git a/android/scripts/setversion.sh b/android/scripts/setversion.sh deleted file mode 100755 index bf4e6b9d8..000000000 --- a/android/scripts/setversion.sh +++ /dev/null @@ -1,59 +0,0 @@ -# -# Get the version number and fix up AndroidManifest.xml -# Public domain -# -THISDIR=$(realpath $(dirname $(which $0))) -cd $THISDIR -MANIFEST=../AndroidManifest.xml -TMP=AndroidManifest.xml.tmp - -CORE=`grep 'public final static String VERSION' ../../core/java/src/net/i2p/CoreVersion.java | \ - cut -d '"' -f 2` - -MAJOR=`echo $CORE | cut -d '.' -f 1` -MINOR=`echo $CORE | cut -d '.' -f 2` -RELEASE=`echo $CORE | cut -d '.' -f 3` - -ROUTERBUILD=$((`grep 'public final static long BUILD' ../../router/java/src/net/i2p/router/RouterVersion.java | \ - cut -d '=' -f 2 | \ - cut -d ';' -f 1`)) - -ANDROIDBUILD=`grep 'build.number' build.number | \ - cut -d '=' -f 2` - -SDK=`grep 'android:minSdkVersion' $MANIFEST | \ - cut -d '"' -f 2` - -# don't let build number get too long -VERSIONSTRING="${CORE}-${ROUTERBUILD}_b$(($ANDROIDBUILD % 256))-SDK$SDK" - -# -# Android version code is an integer. -# So we have 31 bits. -# MAJOR 4 bits 0-15 -# MINOR 8 bits 0-255 -# RELEASE 8 bits 0-255 -# ROUTERBUILD 8 bits 0-255 -# ANDROIDBUILD 3 bits 0-7 -# -# Note that ANDROIDBUILD is modded % 8, it will wrap, -# beware of that if you release multiple builds using the -# same ROUTERBUILD, or clear it if you update ROUTERBUILD -# -VERSIONINT=$(( \ - (($MAJOR % 16) << 27) + \ - (($MINOR % 256) << 19) + \ - (($RELEASE % 256) << 11) + \ - (($ROUTERBUILD % 256) << 3) + \ - ($ANDROIDBUILD % 8) \ - )) - -echo "Android version: '$VERSIONSTRING' (${VERSIONINT})" -echo "my.version.name=${VERSIONSTRING}" > version.properties -echo "my.version.code=${VERSIONINT}" >> version.properties - -SUBST='s/android.versionCode="[0-9]"/android.versionCode="'${VERSIONINT}'"/' -sed "$SUBST" < $MANIFEST > $TMP -SUBST='s/android.versionName="[^"]*"/android.versionName="'${VERSIONSTRING}'"/' -sed "$SUBST" < $TMP > $MANIFEST -rm -f $TMP diff --git a/android/src/net/i2p/android/router/activity/I2PActivityBase.java b/android/src/net/i2p/android/router/activity/I2PActivityBase.java deleted file mode 100644 index 180f289ab..000000000 --- a/android/src/net/i2p/android/router/activity/I2PActivityBase.java +++ /dev/null @@ -1,65 +0,0 @@ -package net.i2p.android.router.activity; - -import android.app.Activity; -import android.content.ComponentName; -import android.content.Intent; -import android.os.Bundle; - -public abstract class I2PActivityBase extends Activity { - protected String _myDir; - - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - _myDir = getFilesDir().getAbsolutePath(); - } - - @Override - public void onRestart() - { - System.err.println(this + " onRestart called"); - super.onRestart(); - } - - @Override - public void onStart() - { - System.err.println(this + " onStart called"); - super.onStart(); - Intent intent = new Intent(); - intent.setClassName(this, "net.i2p.android.router.service.RouterService"); - System.err.println(this + " calling startService"); - ComponentName name = startService(intent); - System.err.println(this + " got from startService: " + name); - } - - @Override - public void onResume() - { - System.err.println(this + " onResume called"); - super.onResume(); - } - - @Override - public void onPause() - { - System.err.println(this + " onPause called"); - super.onPause(); - } - - @Override - public void onStop() - { - System.err.println(this + " onStop called"); - super.onStop(); - } - - @Override - public void onDestroy() - { - System.err.println(this + "onDestroy called"); - super.onDestroy(); - } -} diff --git a/android/src/net/i2p/android/router/activity/MainActivity.java b/android/src/net/i2p/android/router/activity/MainActivity.java deleted file mode 100644 index d16d49635..000000000 --- a/android/src/net/i2p/android/router/activity/MainActivity.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.i2p.android.router.activity; - -import android.os.Bundle; - -import net.i2p.android.router.R; - -public class MainActivity extends I2PActivityBase { - - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - setContentView(R.layout.main); - } -} diff --git a/android/src/net/i2p/android/router/service/Init.java b/android/src/net/i2p/android/router/service/Init.java deleted file mode 100644 index 8928385e3..000000000 --- a/android/src/net/i2p/android/router/service/Init.java +++ /dev/null @@ -1,134 +0,0 @@ -package net.i2p.android.router.service; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.os.Build; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.util.List; -import java.util.Properties; - -import net.i2p.android.router.R; -import net.i2p.data.DataHelper; -import net.i2p.router.Router; -import net.i2p.router.RouterContext; -import net.i2p.router.RouterLaunch; -import net.i2p.util.OrderedProperties; -import net.i2p.util.NativeBigInteger; - -class Init { - - private final Context ctx; - private final String myDir; - - public Init(Context c) { - ctx = c; - myDir = c.getFilesDir().getAbsolutePath(); - } - - void debugStuff() { - System.err.println("java.io.tmpdir" + ": " + System.getProperty("java.io.tmpdir")); - System.err.println("java.vendor" + ": " + System.getProperty("java.vendor")); - System.err.println("java.version" + ": " + System.getProperty("java.version")); - System.err.println("os.arch" + ": " + System.getProperty("os.arch")); - System.err.println("os.name" + ": " + System.getProperty("os.name")); - System.err.println("os.version" + ": " + System.getProperty("os.version")); - System.err.println("user.dir" + ": " + System.getProperty("user.dir")); - System.err.println("user.home" + ": " + System.getProperty("user.home")); - System.err.println("user.name" + ": " + System.getProperty("user.name")); - System.err.println("getFilesDir()" + ": " + myDir); - System.err.println("Package" + ": " + ctx.getPackageName()); - System.err.println("Version" + ": " + getOurVersion()); - System.err.println("MODEL" + ": " + Build.MODEL); - System.err.println("DISPLAY" + ": " + Build.DISPLAY); - System.err.println("VERSION" + ": " + Build.VERSION.RELEASE); - System.err.println("SDK" + ": " + Build.VERSION.SDK); - } - - private String getOurVersion() { - PackageManager pm = ctx.getPackageManager(); - String us = ctx.getPackageName(); - try { - PackageInfo pi = pm.getPackageInfo(us, 0); - System.err.println("VersionCode" + ": " + pi.versionCode); - if (pi.versionName != null) - return pi.versionName; - } catch (Exception e) {} - return "??"; - } - - void initialize() { - mergeResourceToFile(R.raw.router_config, "router.config"); - mergeResourceToFile(R.raw.logger_config, "logger.config"); - copyResourceToFile(R.raw.blocklist_txt, "blocklist.txt"); - - // Set up the locations so Router and WorkingDir can find them - System.setProperty("i2p.dir.base", myDir); - System.setProperty("i2p.dir.config", myDir); - System.setProperty("wrapper.logfile", myDir + "/wrapper.log"); - } - - private void copyResourceToFile(int resID, String f) { - InputStream in = null; - FileOutputStream out = null; - - System.err.println("Creating file " + f + " from resource"); - byte buf[] = new byte[4096]; - try { - // Context methods - in = ctx.getResources().openRawResource(resID); - out = ctx.openFileOutput(f, 0); - - int read = 0; - while ( (read = in.read(buf)) != -1) - out.write(buf, 0, read); - - } catch (IOException ioe) { - } catch (Resources.NotFoundException nfe) { - } finally { - if (in != null) try { in.close(); } catch (IOException ioe) {} - if (out != null) try { out.close(); } catch (IOException ioe) {} - } - } - - /** - * Load defaults from resource, - * then add props from file, - * and write back - */ - private void mergeResourceToFile(int resID, String f) { - InputStream in = null; - InputStream fin = null; - - byte buf[] = new byte[4096]; - try { - Properties props = new OrderedProperties(); - in = ctx.getResources().openRawResource(resID); - DataHelper.loadProps(props, in); - - try { - fin = ctx.openFileInput(f); - DataHelper.loadProps(props, fin); - System.err.println("Merging resource into file " + f); - } catch (IOException ioe) { - System.err.println("Creating file " + f + " from resource"); - } finally { - if (fin != null) try { fin.close(); } catch (IOException ioe) {} - } - - DataHelper.storeProps(props, ctx.getFileStreamPath(f)); - } catch (IOException ioe) { - } catch (Resources.NotFoundException nfe) { - } finally { - if (in != null) try { in.close(); } catch (IOException ioe) {} - if (fin != null) try { fin.close(); } catch (IOException ioe) {} - } - } - -} diff --git a/android/src/net/i2p/android/router/service/RouterService.java b/android/src/net/i2p/android/router/service/RouterService.java deleted file mode 100644 index 50d7cf644..000000000 --- a/android/src/net/i2p/android/router/service/RouterService.java +++ /dev/null @@ -1,137 +0,0 @@ -package net.i2p.android.router.service; - -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.IBinder; - -import java.util.List; - -import net.i2p.android.router.R; -import net.i2p.router.Router; -import net.i2p.router.RouterContext; -import net.i2p.router.RouterLaunch; -import net.i2p.util.NativeBigInteger; - -/** - * Runs the router - */ -public class RouterService extends Service { - private RouterContext _context; - private String _myDir; - private int _state; - private Thread _starterThread; - private StatusBar _statusBar; - private final Object _stateLock = new Object(); - - private static final int STATE_INIT = 0; - private static final int STATE_STARTING = 1; - private static final int STATE_RUNNING = 2; - private static final int STATE_STOPPING = 3; - private static final int STATE_STOPPED = 4; - - private static final String MARKER = "************************************** "; - - @Override - public void onCreate() { - System.err.println(this + " onCreate called" + - " Current state is: " + _state); - - _myDir = getFilesDir().getAbsolutePath(); - Init init = new Init(this); - init.debugStuff(); - init.initialize(); - _statusBar = new StatusBar(this); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - System.err.println(this + " onStart called" + - "Current state is: " + _state); - synchronized (_stateLock) { - if (_state != STATE_INIT) - return START_STICKY; - _statusBar.update("I2P is starting up"); - _state = STATE_STARTING; - _starterThread = new Thread(new Starter()); - _starterThread.start(); - } - return START_STICKY; - } - - private class Starter implements Runnable { - public void run() { - System.err.println(MARKER + this + " starter thread"); - NativeBigInteger.main(null); - RouterLaunch.main(null); - synchronized (_stateLock) { - if (_state != STATE_STARTING) - return; - _state = STATE_RUNNING; - List contexts = RouterContext.listContexts(); - if ( (contexts == null) || (contexts.isEmpty()) ) - throw new IllegalStateException("No contexts. This is usually because the router is either starting up or shutting down."); - _statusBar.update("I2P is running"); - _context = (RouterContext)contexts.get(0); - _context.router().setKillVMOnEnd(false); - _context.addShutdownTask(new ShutdownHook()); - _starterThread = null; - } - System.err.println("Router.main finished"); - } - } - - @Override - public IBinder onBind(Intent intent) - { - System.err.println("onBind called" + - "Current state is: " + _state); - return null; - } - - @Override - public void onDestroy() { - System.err.println("onDestroy called" + - "Current state is: " + _state); - synchronized (_stateLock) { - if (_state == STATE_STARTING) - _starterThread.interrupt(); - if (_state == STATE_STARTING || _state == STATE_RUNNING) { - _state = STATE_STOPPING; - // should this be in a thread? - _statusBar.update("I2P is stopping"); - Thread stopperThread = new Thread(new Stopper()); - stopperThread.start(); - } else if (_state != STATE_STOPPING) { - _statusBar.off(this); - } - } - } - - private class Stopper implements Runnable { - public void run() { - System.err.println(MARKER + this + " stopper thread"); - _context.router().shutdown(Router.EXIT_HARD); - _statusBar.off(RouterService.this); - System.err.println("shutdown complete"); - synchronized (_stateLock) { - _state = STATE_STOPPED; - } - } - } - - private class ShutdownHook implements Runnable { - public void run() { - System.err.println(this + " shutdown hook" + - "Current state is: " + _state); - synchronized (_stateLock) { - if (_state == STATE_STARTING || _state == STATE_RUNNING) { - _state = STATE_STOPPED; - _statusBar.off(RouterService.this); - stopSelf(); - } - } - } - } -} diff --git a/android/src/net/i2p/android/router/service/StatusBar.java b/android/src/net/i2p/android/router/service/StatusBar.java deleted file mode 100644 index 08b473fd6..000000000 --- a/android/src/net/i2p/android/router/service/StatusBar.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.i2p.android.router.service; - -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; - -import net.i2p.android.router.R; -import net.i2p.android.router.activity.MainActivity; - -public class StatusBar { - - private final Context ctx; - private final Intent intent; - private final Notification notif; - private final NotificationManager mgr; - - private static final int ID = 1; - - StatusBar(Context cx) { - ctx = cx; - String ns = Context.NOTIFICATION_SERVICE; - mgr = (NotificationManager)ctx.getSystemService(ns); - - int icon = R.drawable.ic_launcher_itoopie; - String text = "Starting I2P"; - long now = System.currentTimeMillis(); - notif = new Notification(icon, text, now); - notif.flags |= Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR; - intent = new Intent(ctx, MainActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - } - - public void update(String details) { - String title = "I2P Status"; - PendingIntent pi = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - notif.setLatestEventInfo(ctx, title, details, pi); - mgr.notify(ID, notif); - } - - public void off(Context ctx) { - mgr.cancel(ID); - } -} diff --git a/android/src/net/i2p/util/LogWriter.java b/android/src/net/i2p/util/LogWriter.java deleted file mode 100644 index 18ba54c8e..000000000 --- a/android/src/net/i2p/util/LogWriter.java +++ /dev/null @@ -1,174 +0,0 @@ -package net.i2p.util; - -/* - * public domain - * - */ - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.List; -import java.util.Queue; - -/** - * bridge to android logging - * - * @author zzz - */ -class LogWriter implements Runnable { - private final static long CONFIG_READ_ITERVAL = 10 * 1000; - private long _lastReadConfig = 0; - private long _numBytesInCurrentFile = 0; - private OutputStream _currentOut; // = System.out - private int _rotationNum = -1; - private String _logFilenamePattern; - private File _currentFile; - private LogManager _manager; - - private boolean _write; - - private LogWriter() { // nop - } - - public LogWriter(LogManager manager) { - _manager = manager; - } - - public void stopWriting() { - _write = false; - } - - public void run() { - _write = true; - try { - while (_write) { - flushRecords(); - rereadConfig(); - } - System.err.println("Done writing"); - } catch (Exception e) { - System.err.println("Error writing the logs: " + e.getMessage()); - e.printStackTrace(); - } - } - - public void flushRecords() { flushRecords(true); } - public void flushRecords(boolean shouldWait) { - try { - // zero copy, drain the manager queue directly - Queue records = _manager.getQueue(); - if (records == null) return; - if (!records.isEmpty()) { - LogRecord rec; - while ((rec = records.poll()) != null) { - writeRecord(rec); - } - try { - if (_currentOut != null) - _currentOut.flush(); - } catch (IOException ioe) { - //if (++_diskFullMessageCount < MAX_DISKFULL_MESSAGES) - System.err.println("Error writing the router log - disk full? " + ioe); - } - } - } catch (Throwable t) { - t.printStackTrace(); - } finally { - if (shouldWait) { - try { - synchronized (this) { - this.wait(10*1000); - } - } catch (InterruptedException ie) { // nop - } - } - } - } - - public String currentFile() { - return _currentFile != null ? _currentFile.getAbsolutePath() : "uninitialized"; - } - - private void rereadConfig() { - long now = Clock.getInstance().now(); - if (now - _lastReadConfig > CONFIG_READ_ITERVAL) { - _manager.rereadConfig(); - _lastReadConfig = now; - } - } - - private void writeRecord(LogRecord rec) { - if (rec.getThrowable() == null) - log(rec.getPriority(), rec.getSource(), rec.getSourceName(), rec.getThreadName(), rec.getMessage()); - else - log(rec.getPriority(), rec.getSource(), rec.getSourceName(), rec.getThreadName(), rec.getMessage(), rec.getThrowable()); - } - - public void log(int priority, Class src, String name, String threadName, String msg) { - if (src != null) { - String tag = src.getName(); - int dot = tag.lastIndexOf("."); - if (dot >= 0) - tag = tag.substring(dot + 1); - android.util.Log.println(toAndroidLevel(priority), - tag, - '[' + threadName + "] " + msg); - } else if (name != null) - android.util.Log.println(toAndroidLevel(priority), - name, - '[' + threadName + "] " + msg); - else - android.util.Log.println(toAndroidLevel(priority), - threadName, msg); - } - - public void log(int priority, Class src, String name, String threadName, String msg, Throwable t) { - if (src != null) { - String tag = src.getName(); - int dot = tag.lastIndexOf("."); - if (dot >= 0) - tag = tag.substring(dot + 1); - android.util.Log.println(toAndroidLevel(priority), - tag, - '[' + threadName + "] " + msg + - ' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t)); - } else if (name != null) - android.util.Log.println(toAndroidLevel(priority), - name, - '[' + threadName + "] " + msg + - ' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t)); - else - android.util.Log.println(toAndroidLevel(priority), - threadName, - msg + ' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t)); - } - - private static int toAndroidLevel(int level) { - switch (level) { - case Log.DEBUG: - return android.util.Log.DEBUG; - case Log.INFO: - return android.util.Log.INFO; - case Log.WARN: - return android.util.Log.WARN; - case Log.ERROR: - case Log.CRIT: - default: - return android.util.Log.ERROR; - } - } - - private static final String replace(String pattern, int num) { - char c[] = pattern.toCharArray(); - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < c.length; i++) { - if ( (c[i] != '#') && (c[i] != '@') ) - buf.append(c[i]); - else - buf.append(num); - } - return buf.toString(); - } -} diff --git a/android/src/net/i2p/util/SecureDirectory.java b/android/src/net/i2p/util/SecureDirectory.java deleted file mode 100644 index 0c34c91c0..000000000 --- a/android/src/net/i2p/util/SecureDirectory.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.i2p.util; - -import java.io.File; - -/** - * setXXX() not available until API level 9 (Platform Version 2.3) - * @since 0.8.7 - */ -public class SecureDirectory extends File { - - public SecureDirectory(String pathname) { - super(pathname); - } - - public SecureDirectory(String parent, String child) { - super(parent, child); - } - - public SecureDirectory(File parent, String child) { - super(parent, child); - } -} diff --git a/android/src/net/i2p/util/SecureFile.java b/android/src/net/i2p/util/SecureFile.java deleted file mode 100644 index e9362ef94..000000000 --- a/android/src/net/i2p/util/SecureFile.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.i2p.util; - -import java.io.File; - -/** - * setXXX() not available until API level 9 (Platform Version 2.3) - * @since 0.8.7 - */ -public class SecureFile extends SecureDirectory { - - public SecureFile(String pathname) { - super(pathname); - } - - public SecureFile(String parent, String child) { - super(parent, child); - } - - public SecureFile(File parent, String child) { - super(parent, child); - } -} diff --git a/android/src/net/i2p/util/SecureFileOutputStream.java b/android/src/net/i2p/util/SecureFileOutputStream.java deleted file mode 100644 index e45798cf9..000000000 --- a/android/src/net/i2p/util/SecureFileOutputStream.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.i2p.util; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; - -import net.i2p.I2PAppContext; - -/** - * setXXX() not available until API level 9 (Platform Version 2.3) - * @since 0.8.7 - */ -public class SecureFileOutputStream extends FileOutputStream { - - /** - * super() - */ - public SecureFileOutputStream(String file) throws FileNotFoundException { - super(file); - } - - /** - * super() - */ - public SecureFileOutputStream(String file, boolean append) throws FileNotFoundException { - super(file, append); - } - - /** - * super() - */ - public SecureFileOutputStream(File file) throws FileNotFoundException { - super(file); - } - - /** - * super() - */ - public SecureFileOutputStream(File file, boolean append) throws FileNotFoundException { - super(file, append); - } - - /** @return false */ - static boolean canSetPerms() { - return false; - } - - /** - * noop - */ - public static void setPerms(File f) { - } -} From 37ce3305e06a2f2c44e27f209762a348f680938c Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 7 Jun 2011 14:17:08 +0000 Subject: [PATCH 2/2] Drop libjbigi-freebsd-viac32.so, dup of libjbigi-freebsd-pentium3.so, case already handled in NBigI. --- installer/lib/jbigi/libjbigi-freebsd-viac32.so | Bin 99244 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 installer/lib/jbigi/libjbigi-freebsd-viac32.so diff --git a/installer/lib/jbigi/libjbigi-freebsd-viac32.so b/installer/lib/jbigi/libjbigi-freebsd-viac32.so deleted file mode 100755 index 751f732192212a6c0294c33d8e8e8cb2b3cd0f59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99244 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%0Dxh^v+ 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 CgJlU6+WGUG@VZNC~hXH>)i*u zufLT@^ZD8%-Y21Y2JH^gN(L!rLI5e0uu_dUT&bLciz8Z=^@^ t1%&dU>nKSUa`KPrc@K_%a5|@V?1TE_kMY+4b#D7)g-~#i-vRP^{|6;^Ca?ei