This article provides a bit of background to the problem and describes in detail a way to solve it.
Background
When TiVo makes a dial-up call, it establishes an internet connection over the phone line, and then uses HTTP messages to pass information to the AltEPG server and to retrieve programme data.
Occasionally an HTTP message may be lost before it gets to the server, or the response may be lost. The TiVo software sets a timeout on each message request. The timeout is typically between 3 and 5 minutes. If TiVo doesn't receive a response within in the time limit, it hangs up the phone line and the call is marked as failed. TiVo will then try again a few hours later.
With the 08450800300 number, almost all calls are currently failing due to timeouts. It is not clear what is causing this.
Way Forward
The problem is due in part to the fact that the TiVo software is not designed to retry in the event of a timeout. However experiments show that if the timeout interval is reduced and the software made to retry immediately on time-out, the second attempt usually succeeds. The solution described here is to modify the TiVo software so that it is able to re-try.
The TiVo programs that send and receive HTTP messages are as follows:
- /tvbin/http_post - sends programme data status messages to the AltEPG server
- /tvbin/tclient_post - sends TiVo configuration data messages to the AltEPG server
- /tvbin/http_get - retrieves programme (slice) data from the AltEPG server
1. /tvbin/http_post
This program uses a fixed 3 minute timeout. However its behaviour is fairly similar to /tvbin/tclient_post, which has a configurable timeout. It will therefore be replaced by a script which calls /tvbin/tclient_post.
We'll call this script /tvbin/http_post.bash. Unfortunately a subtle difference between http_post and tclient_post is that tclient_post expects a response whereas http_post does not. We'll therefore always get a time-out when using tclient_post in this way. We can ignore the timeout but it means we can't tell whether or not tclient_post has succeeded. We'll therefore always run this command twice to be on the safe side.
2. /tvbin/tclient_post
This program uses a timeout that can be set on the command line. With the current TiVo software it's set to 300 seconds. We'll reduce it to 5 seconds but will retry up to 10 times if we get a failure.
3. /tvbin/http_get
This program uses a default timeout of 300 seconds. Its function is similar to the 'wget' program which is provided as part of the AltEPG 1.0d build. wget has an in-built timeout and retry mechanism, so we'll replace http_get with wget. We'll wrap wget in a script (http_get.bash) so that it presents the same interface as http_get.
Testing
A package containing the updates has been prepared, but needs testing. If you are willing to participate in testing this package, please let me know. You'll need a TiVo configured for dialup and with AltEPG 1.0d installed.