fix assertions from missing timestamps

This commit is contained in:
Eric House 2022-12-29 22:39:02 -08:00
parent bba8e99098
commit 550248bce0
6 changed files with 23 additions and 8 deletions
xwords4
android
app/src/main/java/org/eehouse/android/xw4
jni
common

View file

@ -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] );
}

View file

@ -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:

View file

@ -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 );

View file

@ -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();

View file

@ -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,

View file

@ -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 );