mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 21:43:12 -07:00
Pass RegisteredHost to Java
This commit is contained in:
parent
c1bbf89553
commit
4f2e497855
4 changed files with 52 additions and 19 deletions
|
@ -96,6 +96,13 @@ static jobject jnistr_from_ascii(JNIEnv *env, const char *str)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static jbyteArray jnibytearray_create(JNIEnv *env, const uint8_t *buf, size_t buf_size)
|
||||||
|
{
|
||||||
|
jbyteArray r = E->NewByteArray(env, buf_size);
|
||||||
|
E->SetByteArrayRegion(env, r, 0, buf_size, (const jbyte *)buf);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
static jobject get_kotlin_global_object(JNIEnv *env, const char *id)
|
static jobject get_kotlin_global_object(JNIEnv *env, const char *id)
|
||||||
{
|
{
|
||||||
size_t idlen = strlen(id);
|
size_t idlen = strlen(id);
|
||||||
|
@ -635,6 +642,9 @@ typedef struct android_chiaki_regist_t
|
||||||
jobject java_regist_event_failed;
|
jobject java_regist_event_failed;
|
||||||
jclass java_regist_event_success_class;
|
jclass java_regist_event_success_class;
|
||||||
jmethodID java_regist_event_success_ctor;
|
jmethodID java_regist_event_success_ctor;
|
||||||
|
|
||||||
|
jclass java_regist_host_class;
|
||||||
|
jmethodID java_regist_host_ctor;
|
||||||
} AndroidChiakiRegist;
|
} AndroidChiakiRegist;
|
||||||
|
|
||||||
static void android_chiaki_regist_cb(ChiakiRegistEvent *event, void *user)
|
static void android_chiaki_regist_cb(ChiakiRegistEvent *event, void *user)
|
||||||
|
@ -655,8 +665,21 @@ static void android_chiaki_regist_cb(ChiakiRegistEvent *event, void *user)
|
||||||
java_event = regist->java_regist_event_failed;
|
java_event = regist->java_regist_event_failed;
|
||||||
break;
|
break;
|
||||||
case CHIAKI_REGIST_EVENT_TYPE_FINISHED_SUCCESS:
|
case CHIAKI_REGIST_EVENT_TYPE_FINISHED_SUCCESS:
|
||||||
java_event = E->NewObject(env, regist->java_regist_event_success_class, regist->java_regist_event_success_ctor, NULL /* TODO: RegistHost */);
|
{
|
||||||
|
ChiakiRegisteredHost *host = event->registered_host;
|
||||||
|
jobject java_host = E->NewObject(env, regist->java_regist_host_class, regist->java_regist_host_ctor,
|
||||||
|
jnistr_from_ascii(env, host->ap_ssid),
|
||||||
|
jnistr_from_ascii(env, host->ap_bssid),
|
||||||
|
jnistr_from_ascii(env, host->ap_key),
|
||||||
|
jnistr_from_ascii(env, host->ap_name),
|
||||||
|
jnibytearray_create(env, host->ps4_mac, sizeof(host->ps4_mac)),
|
||||||
|
jnistr_from_ascii(env, host->ps4_nickname),
|
||||||
|
jnibytearray_create(env, (const uint8_t *)host->rp_regist_key, sizeof(host->rp_regist_key)),
|
||||||
|
(jint)host->rp_key_type,
|
||||||
|
jnibytearray_create(env, host->rp_key, sizeof(host->rp_key)));
|
||||||
|
java_event = E->NewObject(env, regist->java_regist_event_success_class, regist->java_regist_event_success_ctor, java_host);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(java_event)
|
if(java_event)
|
||||||
|
@ -672,6 +695,7 @@ static void android_chiaki_regist_fini_partial(JNIEnv *env, AndroidChiakiRegist
|
||||||
E->DeleteGlobalRef(env, regist->java_regist_event_canceled);
|
E->DeleteGlobalRef(env, regist->java_regist_event_canceled);
|
||||||
E->DeleteGlobalRef(env, regist->java_regist_event_failed);
|
E->DeleteGlobalRef(env, regist->java_regist_event_failed);
|
||||||
E->DeleteGlobalRef(env, regist->java_regist_event_success_class);
|
E->DeleteGlobalRef(env, regist->java_regist_event_success_class);
|
||||||
|
E->DeleteGlobalRef(env, regist->java_regist_host_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL JNI_FCN(registStart)(JNIEnv *env, jobject obj, jobject result, jobject regist_info_obj, jobject log_obj, jobject java_regist)
|
JNIEXPORT void JNICALL JNI_FCN(registStart)(JNIEnv *env, jobject obj, jobject result, jobject regist_info_obj, jobject log_obj, jobject java_regist)
|
||||||
|
@ -695,6 +719,19 @@ JNIEXPORT void JNICALL JNI_FCN(registStart)(JNIEnv *env, jobject obj, jobject re
|
||||||
regist->java_regist_event_success_class = E->NewGlobalRef(env, E->FindClass(env, BASE_PACKAGE"/RegistEventSuccess"));
|
regist->java_regist_event_success_class = E->NewGlobalRef(env, E->FindClass(env, BASE_PACKAGE"/RegistEventSuccess"));
|
||||||
regist->java_regist_event_success_ctor = E->GetMethodID(env, regist->java_regist_event_success_class, "<init>", "(L"BASE_PACKAGE"/RegistHost;)V");
|
regist->java_regist_event_success_ctor = E->GetMethodID(env, regist->java_regist_event_success_class, "<init>", "(L"BASE_PACKAGE"/RegistHost;)V");
|
||||||
|
|
||||||
|
regist->java_regist_host_class = E->NewGlobalRef(env, E->FindClass(env, BASE_PACKAGE"/RegistHost"));
|
||||||
|
regist->java_regist_host_ctor = E->GetMethodID(env, regist->java_regist_host_class, "<init>", "("
|
||||||
|
"Ljava/lang/String;" // apSsid: String
|
||||||
|
"Ljava/lang/String;" // apBssid: String
|
||||||
|
"Ljava/lang/String;" // apKey: String
|
||||||
|
"Ljava/lang/String;" // apName: String
|
||||||
|
"[B" // ps4Mac: ByteArray
|
||||||
|
"Ljava/lang/String;" // ps4Nickname: String
|
||||||
|
"[B" // rpRegistKey: ByteArray
|
||||||
|
"I" // rpKeyType: UInt
|
||||||
|
"[B" // rpKey: ByteArray
|
||||||
|
")V");
|
||||||
|
|
||||||
jclass regist_info_class = E->GetObjectClass(env, regist_info_obj);
|
jclass regist_info_class = E->GetObjectClass(env, regist_info_obj);
|
||||||
jstring host_string = E->GetObjectField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "host", "Ljava/lang/String;"));
|
jstring host_string = E->GetObjectField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "host", "Ljava/lang/String;"));
|
||||||
jboolean broadcast = E->GetBooleanField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "broadcast", "Z"));
|
jboolean broadcast = E->GetBooleanField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "broadcast", "Z"));
|
||||||
|
|
|
@ -285,13 +285,13 @@ class DiscoveryService(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
data class RegistInfo(
|
data class RegistInfo(
|
||||||
val host: String,
|
val host: String,
|
||||||
val broadcast: Boolean,
|
val broadcast: Boolean,
|
||||||
val psnId: String, // TODO: this is outdated now
|
val psnId: String, // TODO: this is outdated now
|
||||||
val pin: UInt
|
val pin: Int
|
||||||
)
|
): Parcelable
|
||||||
|
|
||||||
data class RegistHost(
|
data class RegistHost(
|
||||||
val apSsid: String,
|
val apSsid: String,
|
||||||
|
|
|
@ -24,6 +24,7 @@ import android.view.Window
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.metallic.chiaki.R
|
import com.metallic.chiaki.R
|
||||||
import com.metallic.chiaki.common.ext.RevealActivity
|
import com.metallic.chiaki.common.ext.RevealActivity
|
||||||
|
import com.metallic.chiaki.lib.RegistInfo
|
||||||
import kotlinx.android.synthetic.main.activity_regist.*
|
import kotlinx.android.synthetic.main.activity_regist.*
|
||||||
|
|
||||||
class RegistActivity: AppCompatActivity(), RevealActivity
|
class RegistActivity: AppCompatActivity(), RevealActivity
|
||||||
|
@ -69,11 +70,10 @@ class RegistActivity: AppCompatActivity(), RevealActivity
|
||||||
if(!hostValid || !psnIdValid || !pinValid)
|
if(!hostValid || !psnIdValid || !pinValid)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
val registInfo = RegistInfo(host, broadcast, psnId, pin.toInt())
|
||||||
|
|
||||||
Intent(this, RegistExecuteActivity::class.java).also {
|
Intent(this, RegistExecuteActivity::class.java).also {
|
||||||
it.putExtra(RegistExecuteActivity.EXTRA_HOST, host)
|
it.putExtra(RegistExecuteActivity.EXTRA_REGIST_INFO, registInfo)
|
||||||
it.putExtra(RegistExecuteActivity.EXTRA_BROADCAST, broadcast)
|
|
||||||
it.putExtra(RegistExecuteActivity.EXTRA_PSN_ID, psnId)
|
|
||||||
it.putExtra(RegistExecuteActivity.EXTRA_PIN, pin.toUInt().toInt())
|
|
||||||
startActivity(it)
|
startActivity(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,10 +33,7 @@ class RegistExecuteActivity: AppCompatActivity()
|
||||||
{
|
{
|
||||||
companion object
|
companion object
|
||||||
{
|
{
|
||||||
const val EXTRA_HOST = "regist_host"
|
const val EXTRA_REGIST_INFO = "regist_info"
|
||||||
const val EXTRA_BROADCAST = "regist_broadcast"
|
|
||||||
const val EXTRA_PSN_ID = "regist_psn_id"
|
|
||||||
const val EXTRA_PIN = "regist_pin"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var viewModel: RegistExecuteViewModel
|
private lateinit var viewModel: RegistExecuteViewModel
|
||||||
|
@ -83,13 +80,12 @@ class RegistExecuteActivity: AppCompatActivity()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val registInfo = RegistInfo(
|
val registInfo = intent.getParcelableExtra<RegistInfo>(EXTRA_REGIST_INFO)
|
||||||
intent.getStringExtra(EXTRA_HOST) ?: return,
|
if(registInfo == null)
|
||||||
intent.getBooleanExtra(EXTRA_BROADCAST, false),
|
{
|
||||||
intent.getStringExtra(EXTRA_PSN_ID) ?: return,
|
finish()
|
||||||
intent.getIntExtra(EXTRA_PIN, 0).toUInt()
|
return
|
||||||
)
|
}
|
||||||
|
|
||||||
viewModel.start(registInfo)
|
viewModel.start(registInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue