Skip to content

Commit 1339f69

Browse files
author
arno
committed
- Copied files from swift-droid-release-1.1. git-svn-id: http://svn.tribler.org/libswift/branches/arno/swift-droid-release-2.0@28815 001aeff7-3401-0410-a489-f7902fc005dd
1 parent 2553115 commit 1339f69

6 files changed

+325
-0
lines changed

Diff for: Android.mk

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
LOCAL_PATH := $(call my-dir)
2+
3+
include $(CLEAR_VARS)
4+
5+
LOCAL_MODULE := libevent2
6+
7+
LOCAL_SRC_FILES := libevent2/lib/libevent.a
8+
LOCAL_EXPORT_C_INCLUDES := libevent2/include
9+
LOCAL_C_INCLUDES := libevent2/include
10+
11+
include $(PREBUILT_STATIC_LIBRARY)
12+
13+
14+
LOCAL_MODULE := swift
15+
LOCAL_SRC_FILES := NativeLib.cpp sha1.cpp compat.cpp sendrecv.cpp send_control.cpp hashtree.cpp bin.cpp binmap.cpp binheap.cpp channel.cpp transfer.cpp httpgw.cpp statsgw.cpp cmdgw.cpp avgspeed.cpp availability.cpp
16+
17+
LOCAL_CFLAGS += -D__NEW__
18+
19+
LOCAL_STATIC_LIBRARIES := libevent2
20+
21+
include $(BUILD_SHARED_LIBRARY)

Diff for: Application.mk

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
APP_STL := stlport_static
2+

Diff for: NativeLib.cpp

+244
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
/*
2+
* swift.cpp
3+
* swift the multiparty transport protocol
4+
*
5+
* Created by Victor Grishchenko on 2/15/10.
6+
* Copyright 2010 Delft University of Technology. All rights reserved.
7+
*
8+
*/
9+
#include <stdio.h>
10+
#include <stdlib.h>
11+
#include "compat.h"
12+
#include "swift.h"
13+
// jni header file
14+
#include "com_tudelft_triblerdroid_first_NativeLib.h"
15+
#include <sstream>
16+
17+
18+
using namespace swift;
19+
20+
// httpgw.cpp functions
21+
bool InstallHTTPGateway (struct event_base *evbase,Address bindaddr, size_t chunk_size, double *maxspeed, char *storagedir);
22+
bool HTTPIsSending();
23+
std::string HTTPGetProgressString(Sha1Hash root_hash);
24+
25+
26+
// Local functions
27+
void ReportCallback(int fd, short event, void *arg);
28+
struct event evreport;
29+
30+
int file = -1;
31+
int attempts = 0;
32+
bool enginestarted = false;
33+
34+
/*
35+
* Class: com_tudelft_swift_NativeLib
36+
* Method: start
37+
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
38+
*
39+
* Arno, 2012-01-30: Modified to use HTTP gateway to get streaming playback.
40+
*/
41+
#define STREAM_MODE 1
42+
43+
44+
JNIEXPORT jstring JNICALL Java_com_tudelft_triblerdroid_first_NativeLib_start (JNIEnv * env, jobject obj, jstring hash, jstring INtracker, jstring destination) {
45+
46+
dprintf("NativeLib::start called\n");
47+
48+
size_t chunk_size = SWIFT_DEFAULT_CHUNK_SIZE;
49+
double maxspeed[2] = {DBL_MAX,DBL_MAX};
50+
51+
// Ric: added 4 android
52+
jboolean blnIsCopy;
53+
54+
// Arno: Needs to be done currently for every new download
55+
const char * tmpCstr = (env)->GetStringUTFChars(INtracker, &blnIsCopy);
56+
Address tracker = Address(tmpCstr);
57+
if (tracker==Address())
58+
return env->NewStringUTF("address must be hostname:port, ip:port or just port");
59+
SetTracker(tracker);
60+
61+
(env)->ReleaseStringUTFChars(INtracker , tmpCstr); // release jstring
62+
63+
if (enginestarted)
64+
return env->NewStringUTF("started");
65+
else
66+
{
67+
// Libevent2 initialization
68+
// TODO: don't when in DOWNLOADMODE
69+
LibraryInit();
70+
Channel::evbase = event_base_new();
71+
72+
std::string s = "/sdcard/swift/debug.txt";
73+
char pidstr[32];
74+
sprintf(pidstr,"%d", getpid() );
75+
s += pidstr;
76+
77+
// Debug file saved on SD
78+
Channel::debug_file = fopen (s.c_str(),"w+");
79+
80+
Address bindaddr;
81+
if (bindaddr!=Address()) { // seeding
82+
if (Listen(bindaddr)<=0)
83+
return env->NewStringUTF("cant listen");
84+
} else if (tracker!=Address()) { // leeching
85+
for (int i=0; i<=10; i++) {
86+
bindaddr = Address((uint32_t)INADDR_ANY,0);
87+
if (Listen(bindaddr)>0)
88+
break;
89+
if (i==10)
90+
return env->NewStringUTF("cant listen");
91+
}
92+
}
93+
94+
if (STREAM_MODE) {
95+
// Playback via HTTP GW
96+
Address httpgwaddr("0.0.0.0:8082");
97+
SOCKET ret = InstallHTTPGateway(Channel::evbase,httpgwaddr,chunk_size,maxspeed,"/sdcard/swift/");
98+
if (ret < 0)
99+
return env->NewStringUTF("cannot start HTTP gateway");
100+
}
101+
102+
// Arno: always, for statsgw, rate control, etc.
103+
//evtimer_assign(&evreport, Channel::evbase, ReportCallback, NULL);
104+
//evtimer_add(&evreport, tint2tv(TINT_SEC));
105+
106+
enginestarted = true;
107+
}
108+
109+
if (!STREAM_MODE)
110+
{
111+
if (file != -1)
112+
swift::Close(file);
113+
114+
tmpCstr = (env)->GetStringUTFChars(hash, &blnIsCopy);
115+
Sha1Hash root_hash = Sha1Hash(true,tmpCstr); // FIXME ambiguity
116+
if (root_hash==Sha1Hash::ZERO)
117+
return env->NewStringUTF("SHA1 hash must be 40 hex symbols");
118+
119+
(env)->ReleaseStringUTFChars(hash , tmpCstr); // release jstring
120+
121+
char * filename = (char *)(env)->GetStringUTFChars(destination , &blnIsCopy);
122+
123+
// Download then play
124+
if (root_hash!=Sha1Hash::ZERO && !filename)
125+
filename = strdup(root_hash.hex().c_str());
126+
127+
if (filename) {
128+
129+
dprintf("Opening %s writing to %s\n", root_hash.hex().c_str(), filename );
130+
file = Open(filename,root_hash);
131+
if (file<=0)
132+
return env->NewStringUTF("cannot open destination file");
133+
printf("Root hash: %s\n", RootMerkleHash(file).hex().c_str());
134+
}
135+
else
136+
dprintf("Not Opening %s, no dest \n", root_hash.hex().c_str() );
137+
}
138+
139+
return env->NewStringUTF("started");
140+
}
141+
142+
143+
/*
144+
* Class: com_tudelft_swift_NativeLib
145+
* Method: progress
146+
* Signature: ()I
147+
*/
148+
JNIEXPORT jint JNICALL Java_com_tudelft_triblerdroid_first_NativeLib_mainloop(JNIEnv * env, jobject obj) {
149+
150+
// Enter libevent mainloop
151+
event_base_dispatch(Channel::evbase);
152+
153+
// Never reached
154+
return 100;
155+
}
156+
157+
158+
/*
159+
* Class: com_tudelft_swift_NativeLib
160+
* Method: stop
161+
* Signature: ()Ljava/lang/Boolean;
162+
*
163+
* Arno, 2012-01-30: Now only called on Application shutdown.
164+
*/
165+
JNIEXPORT jstring JNICALL Java_com_tudelft_triblerdroid_first_NativeLib_stop(JNIEnv * env, jobject obj) {
166+
167+
if (!enginestarted)
168+
return env->NewStringUTF("stopped");
169+
170+
// Tell mainloop to exit, will release call to progress()
171+
event_base_loopexit(Channel::evbase, NULL);
172+
173+
enginestarted = false;
174+
175+
return env->NewStringUTF("stopped");
176+
}
177+
178+
179+
/*
180+
* Class: com_tudelft_swift_NativeLib
181+
* Method: httpprogress
182+
* Signature: ()Ljava/lang/String;
183+
*/
184+
JNIEXPORT jstring JNICALL Java_com_tudelft_triblerdroid_first_NativeLib_httpprogress(JNIEnv * env, jobject obj, jstring hash) {
185+
186+
std::stringstream rets;
187+
jboolean blnIsCopy;
188+
189+
const char * tmpCstr = (env)->GetStringUTFChars(hash, &blnIsCopy);
190+
191+
if (file != -1)
192+
{
193+
rets << swift::SeqComplete(file);
194+
rets << "/";
195+
rets << swift::Size(file);
196+
197+
(env)->ReleaseStringUTFChars(hash , tmpCstr); // release jstring
198+
return env->NewStringUTF( rets.str().c_str() );
199+
}
200+
else
201+
{
202+
Sha1Hash root_hash = Sha1Hash(true,tmpCstr);
203+
std::string ret = HTTPGetProgressString(root_hash);
204+
205+
(env)->ReleaseStringUTFChars(hash , tmpCstr); // release jstring
206+
return env->NewStringUTF(ret.c_str());
207+
}
208+
}
209+
210+
211+
212+
213+
214+
215+
void ReportCallback(int fd, short event, void *arg) {
216+
// Called every second to print/calc some stats
217+
218+
dprintf("report callback\n");
219+
if (true)
220+
{
221+
// ARNOSMPTODO: Restore fail behaviour when used in SwarmPlayer 3000.
222+
if (!HTTPIsSending()) {
223+
// TODO
224+
//event_base_loopexit(Channel::evbase, NULL);
225+
return;
226+
}
227+
}
228+
229+
evtimer_add(&evreport, tint2tv(TINT_SEC));
230+
}
231+
232+
233+
234+
235+
/*
236+
* Class: com_tudelft_swift_NativeLib
237+
* Method: hello
238+
* Signature: ()Ljava/lang/String;
239+
*/
240+
JNIEXPORT jstring JNICALL Java_com_tudelft_triblerdroid_first_NativeLib_hello(JNIEnv * env, jobject obj) {
241+
242+
return env->NewStringUTF("Hallo from Swift.. Library is working :-)");
243+
}
244+

Diff for: arno-build.bat

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
del ..\bin\SwarmDroid*.apk
2+
rmdir ..\obj ..\libs\armeabi /s /q
3+
c:\Users\arno\AppData\Local\Android\android-ndk-r7\ndk-build

Diff for: com_tudelft_triblerdroid_first_NativeLib.h

+53
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: win32-build-jni.bat

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
rmdir ..\obj ..\libs\armeabi /s /q
2+
CALL c:\Progra~1\Android\android-ndk-r8\ndk-build.cmd

0 commit comments

Comments
 (0)