diff --git a/src/ControlStream.c b/src/ControlStream.c index 1176033..bee7a72 100644 --- a/src/ControlStream.c +++ b/src/ControlStream.c @@ -1108,6 +1108,26 @@ int sendInputPacketOnControlStream(unsigned char* data, int length) { return 0; } +bool LiGetEstimatedRttInfo(uint32_t* estimatedRtt, uint32_t* estimatedRttVariance) { + bool ret = false; + + PltLockMutex(&enetMutex); + if (peer != NULL && peer->state == ENET_PEER_STATE_CONNECTED) { + if (estimatedRtt != NULL) { + *estimatedRtt = peer->roundTripTime; + } + + if (estimatedRttVariance != NULL) { + *estimatedRttVariance = peer->roundTripTimeVariance; + } + + ret = true; + } + PltUnlockMutex(&enetMutex); + + return ret; +} + // Starts the control stream int startControlStream(void) { int err; diff --git a/src/Limelight.h b/src/Limelight.h index 2b472a9..a94e8a9 100644 --- a/src/Limelight.h +++ b/src/Limelight.h @@ -466,6 +466,12 @@ void LiInterruptConnection(void); // from the integer passed to the ConnListenerStageXXX callbacks const char* LiGetStageName(int stage); +// This function returns an estimate of the current RTT to the host PC obtained via ENet +// protocol statistics. This function will fail if the current GFE version does not use +// ENet for the control stream (very old versions), or if the ENet peer is not connected. +// This function may only be called between LiStartConnection() and LiStopConnection(). +bool LiGetEstimatedRttInfo(uint32_t* estimatedRtt, uint32_t* estimatedRttVariance); + // This function queues a relative mouse move event to be sent to the remote server. int LiSendMouseMoveEvent(short deltaX, short deltaY);