XX-net/XX-Net · warning

%s %s%s status:%d trace:%s

Error message

%s %s%s status:%d trace:%s

What it means

Logged by seley_front's request() when the relay returned a response whose HTTP status is not 200. It prints method, host, path, the status code, and the task trace so the failure is attributable, then returns (content, status, response) to the caller for handling.

Source

Thrown at code/default/x_tunnel/local/seley_front/front.py:85

    def request(self, method, host, path="/", headers={}, data="", timeout=120):
        headers = dict(headers)
        headers["XX-Account"] = self.account
        headers["X-Host"] = host
        headers["X-Path"] = path

        response = self.http_dispatcher.request(method, host, "/", dict(headers), data, timeout=timeout)
        if not response:
            logger.warn("req %s get response timeout", path)
            return "", 602, {}

        status = response.status
        content = response.task.read_all()
        if status == 200:
            logger.debug("%s %s%s send:%d recv:%d trace:%s", method, host, path, len(data), len(content),
                       response.task.get_trace())
        else:
            logger.warn("%s %s%s status:%d trace:%s", method, host, path, status,
                       response.task.get_trace())
        return content, status, response

    def stop(self):
        logger.info("terminate")
        self.connect_manager.set_ssl_created_cb(None)
        self.http_dispatcher.stop()
        self.connect_manager.stop()

        self.running = False

    def set_proxy(self, args):
        logger.info("set_proxy:%s", args)

        self.config.PROXY_ENABLE = args["enable"]
        self.config.PROXY_TYPE = args["type"]
        self.config.PROXY_HOST = args["host"]
        self.config.PROXY_PORT = args["port"]

View on GitHub (pinned to cfa5bc17b6)

Solutions

  1. Read the status code in the log: 403 → fix account/credentials; 404 → verify X-Host/X-Path headers; 5xx → upstream/relay problem, retry later.
  2. Retry transient 5xx responses with backoff using the returned status.
  3. Check the task trace to see at which hop the non-200 was produced.
  4. Verify XX-Account header matches a valid account if the relay enforces auth.
Defensive patterns

Strategy: fallback

Try / catch

content, status, resp = front.request(method, host, path, timeout=timeout)
if status != 200:
    if 500 <= status < 600:
        content, status, resp = retry_with_backoff(...)  # retryable
    else:
        handle_client_error(status, resp)  # 4xx: fix headers/account

Prevention

When it happens

Trigger: Any SeleyFront.request/.get call where response.status != 200 — e.g. the relay returns 403 (auth/quota), 404 (bad path/host), 5xx (upstream failure), or a block page from an intermediary.

Common situations: Expired or missing account credentials on the relay, requesting hosts not covered by the plan, upstream origin server errors, or ISP/middlebox injection returning error pages.

Related errors


AI-assisted analysis of XX-net/XX-Net@cfa5bc17b6 (2026-08-27). Data as JSON: /api/errors/2a524cce44d9b6e5. Report an issue: GitHub.