MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / Do

Function Do

src/openrct2/core/Http.Android.cpp:25–175  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23namespace OpenRCT2::Http
24{
25 Response Do(const Request& req)
26 {
27 std::map<std::string, std::string> headers = req.header;
28 headers["User-Agent"] = kOpenRCT2UserAgent;
29 // Lambda to convert jstring to string
30 auto jstringToString = [](JNIEnv* env, jstring jstr) -> std::string {
31 if (jstr == nullptr)
32 {
33 return {};
34 }
35 const char* cstr = env->GetStringUTFChars(jstr, nullptr);
36 std::string str = cstr;
37 env->ReleaseStringUTFChars(jstr, cstr);
38 return str;
39 };
40
41 JNIEnv* env = (JNIEnv*)SDL_AndroidGetJNIEnv();
42
43 // Create request object
44
45 jclass HttpAndroidClass = Platform::AndroidFindClass(env, "io/openrct2/HttpAndroid");
46 jclass req_class = Platform::AndroidFindClass(env, "io/openrct2/HttpAndroid$Request");
47 // New request object
48 jobject jniRequest = env->NewObject(req_class, env->GetMethodID(req_class, "<init>", "()V"));
49 // Create request's headers map
50 jobject jniHeaders = env->NewObject(
51 env->FindClass("java/util/HashMap"),
52 env->GetMethodID(env->GetObjectClass(env->FindClass("java/util/HashMap")), "<init>", "()V"));
53 // HashMap's put method
54 jmethodID putMethod = env->GetMethodID(
55 env->FindClass("java/util/HashMap"), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
56 for (const auto& header : headers)
57 {
58 jstring jniKey = env->NewStringUTF(header.first.c_str());
59 jstring jniValue = env->NewStringUTF(header.second.c_str());
60 env->CallObjectMethod(jniHeaders, putMethod, jniKey, jniValue);
61 }
62 env->SetObjectField(jniRequest, env->GetFieldID(req_class, "headers", "Ljava/util/Map;"), jniHeaders);
63
64 jstring req_body = req.body.empty() ? nullptr : env->NewStringUTF(req.body.c_str());
65 jstring url = req.url.empty() ? nullptr : env->NewStringUTF(req.url.c_str());
66 env->SetObjectField(jniRequest, env->GetFieldID(req_class, "body", "Ljava/lang/String;"), req_body);
67 env->SetObjectField(jniRequest, env->GetFieldID(req_class, "url", "Ljava/lang/String;"), url);
68 if (req_body != nullptr)
69 {
70 env->ReleaseStringUTFChars(req_body, env->GetStringUTFChars(req_body, nullptr));
71 }
72 if (url != nullptr)
73 {
74 env->ReleaseStringUTFChars(url, env->GetStringUTFChars(url, nullptr));
75 }
76 std::string method = "GET";
77 switch (req.method)
78 {
79 case Method::GET:
80 method = "GET";
81 break;
82 case Method::POST:

Callers

nothing calls this directly

Calls 2

AndroidFindClassFunction · 0.85
emptyMethod · 0.45

Tested by

no test coverage detected