From 550248bce0ea4445961941119f0d57cbc83c8edb Mon Sep 17 00:00:00 2001 From: Eric House Date: Thu, 29 Dec 2022 22:39:02 -0800 Subject: [PATCH] fix assertions from missing timestamps --- .../src/main/java/org/eehouse/android/xw4/MQTTUtils.java | 4 ++-- .../main/java/org/eehouse/android/xw4/MultiMsgSink.java | 2 +- .../src/main/java/org/eehouse/android/xw4/jni/XwJNI.java | 9 ++++++--- xwords4/android/jni/xwjni.c | 5 +++-- xwords4/common/comms.c | 6 ++++++ xwords4/common/device.c | 5 +++++ 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MQTTUtils.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MQTTUtils.java index 4471b43ef..878dce265 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MQTTUtils.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MQTTUtils.java @@ -543,12 +543,12 @@ public class MQTTUtils extends Thread } public static void sendInvite( Context context, String invitee, - NetLaunchInfo nli ) + int timestamp, NetLaunchInfo nli ) { Log.d( TAG, "sendInvite(invitee: %s, nli: %s)", invitee, nli ); byte[][][] packets = {null}; String[][] topics = {null}; - XwJNI.dvc_makeMQTTInvites( invitee, nli, topics, packets ); + XwJNI.dvc_makeMQTTInvites( invitee, timestamp, nli, topics, packets ); addToSendQueue( context, topics[0], packets[0] ); } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MultiMsgSink.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MultiMsgSink.java index 29230653d..b4f67719f 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MultiMsgSink.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MultiMsgSink.java @@ -161,7 +161,7 @@ public class MultiMsgSink implements TransportProcs { case COMMS_CONN_MQTT: target = addr.mqtt_devID; means = InviteMeans.MQTT; - MQTTUtils.sendInvite( context, addr.mqtt_devID, nli ); + MQTTUtils.sendInvite( context, addr.mqtt_devID, timestamp, nli ); success = true; break; case COMMS_CONN_SMS: diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java index 972d5b409..3535ad510 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java @@ -153,10 +153,12 @@ public class XwJNI { return dvc_getMQTTSubTopics( getJNI().m_ptrGlobals ); } - public static void dvc_makeMQTTInvites( String invitee, NetLaunchInfo nli, - String[][] topics, byte[][][] packets ) + public static void dvc_makeMQTTInvites( String invitee, int timestamp, + NetLaunchInfo nli, String[][] topics, + byte[][][] packets ) { - dvc_makeMQTTInvites( getJNI().m_ptrGlobals, invitee, nli, topics, packets ); + dvc_makeMQTTInvites( getJNI().m_ptrGlobals, invitee, timestamp, + nli, topics, packets ); } public static void dvc_makeMQTTMessages( String addressee, int gameID, @@ -770,6 +772,7 @@ public class XwJNI { private static native String[] dvc_getMQTTSubTopics( long jniState ); private static native void dvc_makeMQTTInvites( long jniState, String invitee, + int timestamp, NetLaunchInfo nli, String[][] topics, byte[][][] packets ); diff --git a/xwords4/android/jni/xwjni.c b/xwords4/android/jni/xwjni.c index db156c675..d9927315a 100644 --- a/xwords4/android/jni/xwjni.c +++ b/xwords4/android/jni/xwjni.c @@ -737,7 +737,8 @@ wrapResults( jobjectArray jTopicsOut, jobjectArray jPacketsOut, MTPData* mtp ) JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dvc_1makeMQTTInvites ( JNIEnv* env, jclass C, jlong jniGlobalPtr, jstring jAddressee, - jobject jnli, jobjectArray jTopicsOut, jobjectArray jPacketsOut ) + jint jTimestamp, jobject jnli, jobjectArray jTopicsOut, + jobjectArray jPacketsOut ) { DVC_HEADER(jniGlobalPtr); @@ -751,7 +752,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dvc_1makeMQTTInvites jstrToDevID( env, jAddressee, &addressee ); dvc_makeMQTTInvites( globalState->dutil, env, msgAndTopicProc, &mtp, - &addressee, &nli, 0 ); + &addressee, &nli, jTimestamp ); wrapResults( jTopicsOut, jPacketsOut, &mtp ); DVC_HEADER_END(); diff --git a/xwords4/common/comms.c b/xwords4/common/comms.c index ef16e7458..9f707521a 100644 --- a/xwords4/common/comms.c +++ b/xwords4/common/comms.c @@ -894,6 +894,10 @@ comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, if ( version >= STREAM_VERS_MSGTIMESTAMP ) { msg->createdStamp = stream_getU32( stream ); } + if ( 0 == msg->createdStamp ) { + msg->createdStamp = dutil_getCurSeconds( comms->dutil, xwe ); + XP_LOGFF( "added missing timestamp" ); + } #ifdef DEBUG msg->sendCount = 0; #endif @@ -2009,6 +2013,7 @@ sendMsg( CommsCtxt* comms, XWEnv xwe, MsgQueueElem* elem, const CommsConnType fi } else if ( isInvite ) { if ( !!comms->procs.sendInvt ) { NetLaunchInfo* nli = (NetLaunchInfo*)elem->msg; + XP_ASSERT( 0 != elem->createdStamp ); nSent = (*comms->procs.sendInvt)( xwe, nli, elem->createdStamp, &addr, comms->procs.closure ); } @@ -2019,6 +2024,7 @@ sendMsg( CommsCtxt* comms, XWEnv xwe, MsgQueueElem* elem, const CommsConnType fi logAddr( comms, xwe, &addr, __func__ ); XP_UCHAR msgNo[16]; formatMsgNo( comms, elem, msgNo, sizeof(msgNo) ); + XP_ASSERT( 0 != elem->createdStamp ); nSent = (*comms->procs.sendMsg)( xwe, elem->msg, elem->len, msgNo, elem->createdStamp, &addr, typ, gameid, diff --git a/xwords4/common/device.c b/xwords4/common/device.c index 394033d84..d8598e902 100644 --- a/xwords4/common/device.c +++ b/xwords4/common/device.c @@ -383,6 +383,11 @@ dvc_makeMQTTNoSuchGames( XW_DUtilCtxt* dutil, XWEnv xwe, XP_UCHAR devTopic[64]; /* used by two below */ formatMQTTDevTopic( addressee, devTopic, VSIZE(devTopic) ); + if ( 0 == timestamp ) { + timestamp = dutil_getCurSeconds( dutil, xwe ); + XP_LOGFF( "replacing timestamp of 0" ); + } + XWStreamCtxt* stream = mkStream( dutil ); addHeaderGameIDAndCmd( dutil, xwe, CMD_DEVGONE, gameID, timestamp, stream );