mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-14 18:57:07 -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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
size_t idlen = strlen(id);
|
||||
|
@ -635,6 +642,9 @@ typedef struct android_chiaki_regist_t
|
|||
jobject java_regist_event_failed;
|
||||
jclass java_regist_event_success_class;
|
||||
jmethodID java_regist_event_success_ctor;
|
||||
|
||||
jclass java_regist_host_class;
|
||||
jmethodID java_regist_host_ctor;
|
||||
} AndroidChiakiRegist;
|
||||
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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_failed);
|
||||
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)
|
||||
|
@ -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_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);
|
||||
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"));
|
||||
|
|
|
@ -285,13 +285,13 @@ class DiscoveryService(
|
|||
|
||||
}
|
||||
|
||||
|
||||
@Parcelize
|
||||
data class RegistInfo(
|
||||
val host: String,
|
||||
val broadcast: Boolean,
|
||||
val psnId: String, // TODO: this is outdated now
|
||||
val pin: UInt
|
||||
)
|
||||
val pin: Int
|
||||
): Parcelable
|
||||
|
||||
data class RegistHost(
|
||||
val apSsid: String,
|
||||
|
|
|
@ -24,6 +24,7 @@ import android.view.Window
|
|||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.metallic.chiaki.R
|
||||
import com.metallic.chiaki.common.ext.RevealActivity
|
||||
import com.metallic.chiaki.lib.RegistInfo
|
||||
import kotlinx.android.synthetic.main.activity_regist.*
|
||||
|
||||
class RegistActivity: AppCompatActivity(), RevealActivity
|
||||
|
@ -69,11 +70,10 @@ class RegistActivity: AppCompatActivity(), RevealActivity
|
|||
if(!hostValid || !psnIdValid || !pinValid)
|
||||
return
|
||||
|
||||
val registInfo = RegistInfo(host, broadcast, psnId, pin.toInt())
|
||||
|
||||
Intent(this, RegistExecuteActivity::class.java).also {
|
||||
it.putExtra(RegistExecuteActivity.EXTRA_HOST, host)
|
||||
it.putExtra(RegistExecuteActivity.EXTRA_BROADCAST, broadcast)
|
||||
it.putExtra(RegistExecuteActivity.EXTRA_PSN_ID, psnId)
|
||||
it.putExtra(RegistExecuteActivity.EXTRA_PIN, pin.toUInt().toInt())
|
||||
it.putExtra(RegistExecuteActivity.EXTRA_REGIST_INFO, registInfo)
|
||||
startActivity(it)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,10 +33,7 @@ class RegistExecuteActivity: AppCompatActivity()
|
|||
{
|
||||
companion object
|
||||
{
|
||||
const val EXTRA_HOST = "regist_host"
|
||||
const val EXTRA_BROADCAST = "regist_broadcast"
|
||||
const val EXTRA_PSN_ID = "regist_psn_id"
|
||||
const val EXTRA_PIN = "regist_pin"
|
||||
const val EXTRA_REGIST_INFO = "regist_info"
|
||||
}
|
||||
|
||||
private lateinit var viewModel: RegistExecuteViewModel
|
||||
|
@ -83,13 +80,12 @@ class RegistExecuteActivity: AppCompatActivity()
|
|||
}
|
||||
}
|
||||
|
||||
val registInfo = RegistInfo(
|
||||
intent.getStringExtra(EXTRA_HOST) ?: return,
|
||||
intent.getBooleanExtra(EXTRA_BROADCAST, false),
|
||||
intent.getStringExtra(EXTRA_PSN_ID) ?: return,
|
||||
intent.getIntExtra(EXTRA_PIN, 0).toUInt()
|
||||
)
|
||||
|
||||
val registInfo = intent.getParcelableExtra<RegistInfo>(EXTRA_REGIST_INFO)
|
||||
if(registInfo == null)
|
||||
{
|
||||
finish()
|
||||
return
|
||||
}
|
||||
viewModel.start(registInfo)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue