diff --git a/core/deps/picotcp/modules/pico_dev_ppp.c b/core/deps/picotcp/modules/pico_dev_ppp.c index edfbdb9b9..753d784d7 100644 --- a/core/deps/picotcp/modules/pico_dev_ppp.c +++ b/core/deps/picotcp/modules/pico_dev_ppp.c @@ -1338,6 +1338,8 @@ static void ppp_ipv4_conf(struct pico_device_ppp *ppp) static void ipcp_send_nack(struct pico_device_ppp *ppp); +int dont_reject_opt_vj_hack = 0; // Hack to not reject the VJ option. Makes Web TV happy. + static void ipcp_process_in(struct pico_device_ppp *ppp, uint8_t *pkt, uint32_t len) { struct pico_ipcp_hdr *ih = (struct pico_ipcp_hdr *)pkt; @@ -1345,7 +1347,7 @@ static void ipcp_process_in(struct pico_device_ppp *ppp, uint8_t *pkt, uint32_t int reject = 0; int nak = 0; while (p < pkt + len) { - if (p[0] == IPCP_OPT_VJ) { + if (p[0] == IPCP_OPT_VJ && dont_reject_opt_vj_hack == 0) { reject++; } diff --git a/core/hw/modem/picoppp.cpp b/core/hw/modem/picoppp.cpp index 1a60d1d29..513b68e2a 100644 --- a/core/hw/modem/picoppp.cpp +++ b/core/hw/modem/picoppp.cpp @@ -228,6 +228,7 @@ static std::map tcp_listening_sockets; static bool pico_stack_inited; static bool pico_thread_running = false; +extern "C" int dont_reject_opt_vj_hack; static void read_native_sockets(); void get_host_by_name(const char *name, pico_ip4 dnsaddr); @@ -736,6 +737,10 @@ static void *pico_thread_func(void *) } } } + // Web TV requires the VJ compression option, which picotcp doesn't support. + // This hack allows WebTV to connect although the correct fix would + // be to implement VJ compression. + dont_reject_opt_vj_hack = gameId == "6107117" ? 1 : 0; // Initialize miniupnpc and map network ports MiniUPnP upnp;