Skip to content

Commit

Permalink
Add logging
Browse files Browse the repository at this point in the history
  • Loading branch information
Dadoum committed Apr 24, 2023
1 parent 45c011f commit 9a7409e
Show file tree
Hide file tree
Showing 12 changed files with 87 additions and 105 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ else()
endif()
endif()

target_link_libraries(provision PUBLIC plist)
target_link_libraries(provision PUBLIC plist slf4d)

set(RETRIEVE_HEADERS_SOURCE_DIR "retrieve_headers/")
file(GLOB_RECURSE RETRIEVE_HEADERS_D_SOURCES "${RETRIEVE_HEADERS_SOURCE_DIR}*.d")
Expand Down
63 changes: 28 additions & 35 deletions anisette_server/app.d
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import std.math;
import std.net.curl;
import std.parallelism;
import std.path;
import std.stdio;
import std.zip;

import slf4d;
import slf4d.default_provider;

import provision;

import constants;
Expand All @@ -34,7 +36,14 @@ __gshared ADI adi;
__gshared Device device;

void main(string[] args) {
writeln(anisetteServerBranding, " v", provisionVersion);
debug {
configureLoggingProvider(new shared DefaultProvider(true, Levels.DEBUG));
} else {
configureLoggingProvider(new shared DefaultProvider(true, Levels.INFO));
}

Logger log = getLogger();
log.infoF!"%s v%s"(anisetteServerBranding, provisionVersion);
auto serverConfig = ServerConfig.defaultValues;
serverConfig.hostname = "0.0.0.0";
serverConfig.port = 6969;
Expand Down Expand Up @@ -70,27 +79,9 @@ void main(string[] args) {

if (!(file.exists(coreADIPath) && file.exists(SSCPath)) && apkDownloadAllowed) {
auto http = HTTP();
http.onProgress = (size_t dlTotal, size_t dlNow, size_t ulTotal, size_t ulNow) {
write("Downloading libraries from Apple servers... ");
if (dlTotal != 0) {
write((dlNow * 100)/dlTotal, "% \r");
} else {
// Convert dlNow (in bytes) to a human readable string
float downloadedSize = dlNow;

enum units = ["B", "kB", "MB", "GB", "TB"];
int i = 0;
while (downloadedSize > 1000 && i < units.length - 1) {
downloadedSize = floor(downloadedSize) / 1000;
++i;
}

write(downloadedSize, units[i], " \r");
}
return 0;
};
log.info("Downloading libraries from Apple servers...");
auto apkData = get!(HTTP, ubyte)(nativesUrl, http);
writeln("Downloading libraries from Apple servers... done! \r");
log.info("Done !");
auto apk = new ZipArchive(apkData);
auto dir = apk.directory();

Expand All @@ -111,7 +102,7 @@ void main(string[] args) {
adi.provisioningPath = configurationPath;

if (!device.initialized) {
stderr.write("Creating machine... ");
log.info("Creating machine... ");

import std.digest;
import std.random;
Expand All @@ -123,27 +114,29 @@ void main(string[] args) {
device.adiIdentifier = (cast(ubyte[]) rndGen.take(2).array()).toHexString().toLower();
device.localUserUUID = (cast(ubyte[]) rndGen.take(8).array()).toHexString().toUpper();

stderr.writeln("done !");
log.info("Machine creation done!");
}

enum dsId = -2;

adi.identifier = device.adiIdentifier;
if (!adi.isMachineProvisioned(dsId)) {
stderr.write("Machine requires provisioning... ");
log.info("Machine requires provisioning... ");

ProvisioningSession provisioningSession = new ProvisioningSession(adi, device);
provisioningSession.provision(dsId);
stderr.writeln("done !");
log.info("Provisioning done!");
}

auto s = new HttpServer((ref ctx) {
Logger log = getLogger();

auto req = ctx.request;
ctx.response.addHeader("Implementation-Version", anisetteServerBranding ~ " " ~ provisionVersion);

writeln("[<<] ", req.method, " ", req.url);
log.infoF!"[<<] %s %s"(req.method, req.url);
if (req.method != "GET") {
writefln("[>>] 405 Method Not Allowed");
log.info("[>>] 405 Method Not Allowed");
ctx.response.setStatus(405).setStatusText("Method Not Allowed");
return;
}
Expand All @@ -152,17 +145,17 @@ void main(string[] args) {
if (allowRemoteProvisioning) {
ProvisioningSession provisioningSession = new ProvisioningSession(adi, device);
provisioningSession.provision(dsId);
writeln("[>>] 200 OK");
log.info("[>>] 200 OK");
ctx.response.setStatus(200);
} else {
writeln("[>>] 403 Forbidden");
log.info("[>>] 403 Forbidden");
ctx.response.setStatus(403).setStatusText("Forbidden");
}
return;
}

if (req.url != "") {
writeln("[>>] 404 Not Found");
log.info("[>>] 404 Not Found");
ctx.response.setStatus(404).setStatusText("Not Found");
return;
}
Expand Down Expand Up @@ -191,16 +184,16 @@ void main(string[] args) {
"X-Mme-Device-Id": device.uniqueDeviceIdentifier,
];
ctx.response.writeBodyString(response.toString(JSONOptions.doNotEscapeSlashes), "application/json");
writefln!"[>>] 200 OK %s"(response);
log.infoF!"[>>] 200 OK %s"(response);
} catch(Throwable t) {
string exception = t.toString();
writeln("Encountered an error: ", exception);
writeln("[>>] 500 Internal Server Error");
log.errorF!"Encountered an error: %s"(exception);
log.info("[>>] 500 Internal Server Error");
ctx.response.writeBodyString(exception);
ctx.response.setStatus(500).setStatusText("Internal Server Error");
}
}, serverConfig);

writeln("Ready! Serving data.");
log.info("Ready! Serving data.");
s.start();
}
5 changes: 4 additions & 1 deletion cmake/dependencies.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
# ==============================================================================
# Fetching external libraries

include(UseDub)

DubProject_Add(slf4d ~2.1.1)

if(build_anisetteserver)
include(UseDub)
DubProject_Add(handy-httpd ~5.2.1)
endif()
2 changes: 2 additions & 0 deletions dub.sdl
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ targetPath "bin"
sourcePaths "lib"
importPaths "lib"

dependency "slf4d" version="~>2.1.1"

configuration "plist-d" {
dependency "plist" version="~master"
}
Expand Down
3 changes: 2 additions & 1 deletion dub.selections.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"dxml": "0.4.3",
"handy-httpd": "5.2.1",
"httparsed": "1.2.1",
"plist": "~master"
"plist": "~master",
"slf4d": "2.1.1"
}
}
22 changes: 10 additions & 12 deletions lib/provision/adi.d
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ import std.format;
import std.json;
import std.net.curl;
import std.path;
import std.stdio;
import std.string;

import slf4d;

version (LibPlist) {
import provision.plist;
} else {
Expand Down Expand Up @@ -46,6 +47,7 @@ public class ADI {
private ADIOTPRequest_t pADIOTPRequest;

private AndroidLibrary storeServicesCore;
private Logger logger;

private string __provisioningPath;
public string provisioningPath() {
Expand Down Expand Up @@ -78,21 +80,17 @@ public class ADI {

public this(string libraryPath, AndroidLibrary storeServicesCore) {
this.storeServicesCore = storeServicesCore;
this.logger = getLogger();

// We are loading the symbols from the ELF library from their name.
// Those has been obfuscated but they keep a consistent obfuscated name, like a hash function would.

debug {
stderr.writeln("Loading Android-specific symbols...");
}
logger.debug_("Loading Android-specific symbols...");

pADILoadLibraryWithPath = cast(ADILoadLibraryWithPath_t) storeServicesCore.load("kq56gsgHG6");
pADISetAndroidID = cast(ADISetAndroidID_t) storeServicesCore.load("Sph98paBcz");
pADISetProvisioningPath = cast(ADISetProvisioningPath_t) storeServicesCore.load("nf92ngaK92");

debug {
stderr.writeln("Loading ADI symbols...");
}
logger.debug_("Loading ADI symbols...");

pADIProvisioningErase = cast(ADIProvisioningErase_t) storeServicesCore.load("p435tmhbla");
pADISynchronize = cast(ADISynchronize_t) storeServicesCore.load("tn46gtiuhw");
Expand All @@ -103,15 +101,15 @@ public class ADI {
pADIDispose = cast(ADIDispose_t) storeServicesCore.load("jk24uiwqrg");
pADIOTPRequest = cast(ADIOTPRequest_t) storeServicesCore.load("qi864985u0");

debug {
stderr.writeln("First calls...");
}

logger.debug_("Loading libraries…");
loadLibrary(libraryPath);

logger.debug_("Initialization…");

// We are setting those to be sure to have the same value in the class (used in getter) and the real one in ADI.
provisioningPath = "/";
identifier = "0000000000000000";
logger.debug_("Initialization complete !");
}

~this() {
Expand Down
7 changes: 3 additions & 4 deletions lib/provision/androidlibrary.d
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ import std.mmfile;
import std.path;
import std.random;
import std.range;
import std.stdio;
import std.string;
import std.traits;

import slf4d;

public class AndroidLibrary {
package MmFile elfFile;
package void[] allocation;
Expand Down Expand Up @@ -79,9 +80,7 @@ public class AndroidLibrary {
throw new LoaderException("Cannot allocate the memory: " ~ to!string(errno));
}
memoryTable[MemoryBlock(cast(size_t) mmapped_alloc, cast(size_t) mmapped_alloc + allocSize)] = this;
debug {
stderr.writefln("Allocating %x - %x for %s", cast(size_t) mmapped_alloc, cast(size_t) mmapped_alloc + allocSize, libraryName);
}
getLogger().traceF!"Allocating %x - %x for %s"(cast(size_t) mmapped_alloc, cast(size_t) mmapped_alloc + allocSize, libraryName);
allocation = mmapped_alloc[0..allocSize];

size_t fileStart;
Expand Down
2 changes: 1 addition & 1 deletion lib/provision/package.d
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module provision;

enum provisionVersion = "2.0.0";
enum provisionVersion = "2.1.0";
public import provision.adi;
4 changes: 2 additions & 2 deletions lib/provision/plist/c.d
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@ version (LibPlistDynamic) {
private __gshared void* libplistHandle;

shared static this() {
import std.stdio;
import slf4d;
static foreach (libplistName; ["libplist.so.3", "libplist-2.0.so.3"]) {
libplistHandle = dlopen(libplistName, RTLD_LAZY);
if (libplistHandle) {
return;
}
}
stderr.writeln("libplist is not available on this machine. ");
getLogger().error("libplist is not available on this machine. ");
abort();
}

Expand Down
19 changes: 6 additions & 13 deletions lib/provision/symbols.d
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ import std.algorithm.mutation;
import std.experimental.allocator;
import std.experimental.allocator.mallocator;
import std.random;
import std.stdio : stderr, writeln;
import std.string;
import std.traits : Parameters, ReturnType;

import slf4d;

__gshared:

private extern (C) int __system_property_get_impl(const char* n, char* value) {
Expand All @@ -42,7 +43,7 @@ private extern (C) noreturn undefinedSymbol() {

private extern (C) AndroidLibrary dlopenWrapper(const char* name) {
debug {
stderr.writeln("Attempting to load ", name.fromStringz());
getLogger().traceF!"Attempting to load %s"(name.fromStringz());
}
try {
auto caller = rootLibrary();
Expand All @@ -56,7 +57,7 @@ private extern (C) AndroidLibrary dlopenWrapper(const char* name) {

private extern (C) void* dlsymWrapper(AndroidLibrary library, const char* symbolName) {
debug {
stderr.writeln("Attempting to load symbol ", symbolName.fromStringz());
getLogger().traceF!"Attempting to load symbol %s"(symbolName.fromStringz());
}
return library.load(cast(string) symbolName.fromStringz());
}
Expand All @@ -68,14 +69,6 @@ private extern (C) void dlcloseWrapper(AndroidLibrary library) {
}
}

private extern (C) void* malloc_GC_replacement(size_t sz) {
return GC.malloc(sz);
}

private extern (C) void free_GC_replacement(void* ptr) {
return GC.free(ptr);
}

// gperf generated code:

private enum totalKeywords = 29;
Expand Down Expand Up @@ -148,15 +141,15 @@ package void* lookupSymbol(string str) {
{"strncpy", &strncpy}, {"pthread_mutex_lock", &emptyStub},
{"ftruncate", &ftruncate}, {"write", &write},
{"pthread_rwlock_unlock", &emptyStub},
{"pthread_rwlock_destroy", &emptyStub}, {""}, {"free", &free_GC_replacement},
{"pthread_rwlock_destroy", &emptyStub}, {""}, {"free", &free},
{"fstat", &fstat}, {"pthread_rwlock_wrlock", &emptyStub},
{"__errno", &errno}, {""}, {"pthread_rwlock_init", &emptyStub},
{"pthread_mutex_unlock", &emptyStub},
{"pthread_rwlock_rdlock", &emptyStub}, {
"gettimeofday",
&gettimeofday
}, {""}, {"read", &read},
{"mkdir", &mkdir}, {"malloc", &malloc_GC_replacement}, {""}, {""}, {""}, {""},
{"mkdir", &mkdir}, {"malloc", &malloc}, {""}, {""}, {""}, {""},
{"__system_property_get", &__system_property_get_impl}, {""}, {""},
{""}, {"arc4random", &arc4random_impl},
];
Expand Down
Loading

0 comments on commit 9a7409e

Please sign in to comment.