Files
armorpaint/base/sources/backends/android_net.c
T

58 lines
2.0 KiB
C
Raw Normal View History

2025-09-12 15:29:02 +02:00
2025-10-15 13:06:40 +02:00
#include "android_native_app_glue.h"
2025-09-12 15:29:02 +02:00
#include <iron_net.h>
2025-10-15 13:06:40 +02:00
#include <iron_system.h>
2025-09-12 15:29:02 +02:00
#include <jni.h>
2025-12-01 12:42:35 +01:00
#include <stdio.h>
2026-04-21 10:52:19 +02:00
#include <string.h>
2024-11-10 22:11:29 +01:00
2025-03-09 17:02:12 +01:00
ANativeActivity *iron_android_get_activity(void);
2025-10-15 13:06:40 +02:00
jclass iron_android_find_class(JNIEnv *env, const char *name);
2024-11-10 22:11:29 +01:00
2026-04-21 10:52:19 +02:00
void iron_net_request(const char *url_base, const char *url_path, const char *data, int port, int method, iron_https_callback_t callback, void *callbackdata,
const char *dst_path) {
2025-10-15 13:06:40 +02:00
ANativeActivity *activity = iron_android_get_activity();
JNIEnv *env;
JavaVM *vm = iron_android_get_activity()->vm;
(*vm)->AttachCurrentThread(vm, &env, NULL);
jclass activityClass = iron_android_find_class(env, "arm.AndroidHttpRequest");
2024-11-10 22:11:29 +01:00
2025-10-15 13:06:40 +02:00
jstring jurl_base = (*env)->NewStringUTF(env, url_base);
jstring jurl_path = (*env)->NewStringUTF(env, url_path);
2026-04-21 10:52:19 +02:00
jbyteArray bytes_array = (jbyteArray)((*env)->CallStaticObjectMethod(env, activityClass,
(*env)->GetStaticMethodID(env, activityClass, "androidHttpRequest",
"(Ljava/lang/String;Ljava/lang/String;)[B"),
jurl_base, jurl_path));
2025-08-21 12:58:54 +02:00
2025-10-15 13:06:40 +02:00
if (bytes_array == NULL) {
callback(NULL, callbackdata);
(*vm)->DetachCurrentThread(vm);
return;
}
2025-08-21 12:58:54 +02:00
2025-10-15 13:06:40 +02:00
jsize num_bytes = (*env)->GetArrayLength(env, bytes_array);
jbyte *elements = (*env)->GetByteArrayElements(env, bytes_array, NULL);
if (elements != NULL) {
2025-12-01 12:42:35 +01:00
if (dst_path != NULL) {
FILE *file = fopen(dst_path, "wb");
if (file != NULL) {
fwrite((char *)elements, 1, num_bytes, file);
fclose(file);
}
callback(NULL, callbackdata);
}
else {
callback((char *)elements, callbackdata);
}
2025-10-15 13:06:40 +02:00
// (*env)->ReleaseByteArrayElements(env, bytes_array, elements, JNI_ABORT);
}
2024-11-10 22:11:29 +01:00
2025-10-15 13:06:40 +02:00
(*vm)->DetachCurrentThread(vm);
2024-11-10 22:11:29 +01:00
}
2025-11-19 20:01:58 +01:00
2026-04-21 10:52:19 +02:00
void iron_net_update() {}
2025-11-19 22:50:04 +01:00
volatile uint64_t iron_net_bytes_downloaded = 0;