Description:
The system terminates ungracefully if DCC-R is enabled after decoders have already performed a logon using a different protocol.
Root Cause:
The DCC-R logon procedure instantiates a specific C++ class that differs from the class used by other logon protocols. When DCC-R is enabled post-logon, the system incorrectly assumes that existing decoder objects are instances of the DCC-R-specific class. This type mismatch/invalid cast leads to a fatal crash.
Steps to Reproduce:
- Start the system without DCC-R enabled.
> rtbproxy --dccr 0
- Allow a DCC-R capable decoder to log on via a different protocol.
- Enable DCC-R while the system is running.
> rtbclient --enable dccr
- System crashes/terminates.
Workaround:
- Ensure that DCC-R is enabled at system startup. This forces the system to instantiate DCC-R decoders with the correct class from the beginning.
- Start the proxy with the DCC-R flag enabled (Stable Configuration):
> rtbproxy --dccr 1
Proposed Fix:
Refactor DCC and DCC-R into a single C++ class.
Description:
The system terminates ungracefully if DCC-R is enabled after decoders have already performed a logon using a different protocol.
Root Cause:
The DCC-R logon procedure instantiates a specific C++ class that differs from the class used by other logon protocols. When DCC-R is enabled post-logon, the system incorrectly assumes that existing decoder objects are instances of the DCC-R-specific class. This type mismatch/invalid cast leads to a fatal crash.
Steps to Reproduce:
> rtbproxy --dccr 0> rtbclient --enable dccrWorkaround:
> rtbproxy --dccr 1Proposed Fix:
Refactor DCC and DCC-R into a single C++ class.