{"record":{"id":"9c78d1f98ee9da26","repo":"XX-net/XX-Net","slug":"login-session-time-d-fail-res-d-msg-s","errorCode":null,"errorMessage":"login_session time:%d fail, res:%d msg:%s","messagePattern":"login_session time:(.+?) fail, res:(.+?) msg:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"code/default/x_tunnel/local/proxy_session.py","lineNumber":449,"sourceCode":"\n                if len(content) < 6:\n                    g.last_api_error = \"session server protocol fail, login res len:%d\" % len(content)\n                    xlog.error(\"login data len:%d fail\", len(content))\n                    continue\n\n                info = decrypt_data(content)\n                magic, protocol_version, pack_type, res, message_len = struct.unpack(\"<cBBBH\", info[:6])\n                message = info[6:]\n                if isinstance(message, memoryview):\n                    message = message.tobytes()\n\n                if magic != b\"P\" or protocol_version != g.protocol_version or pack_type != 1:\n                    xlog.error(\"login_session time:%d head error:%s\", 1000 * time_cost, utils.str2hex(info[:6]))\n                    return False\n\n                if res != 0:\n                    g.last_api_error = \"session server login fail, code:%d msg:%s\" % (res, message)\n                    xlog.warn(\"login_session time:%d fail, res:%d msg:%s\", 1000 * time_cost, res, message)\n                    return False\n\n                try:\n                    msg_info = json.loads(message)\n                    if msg_info.get(\"full_log\"):\n                        xlog.debug(\"keep full log\")\n                        keep_log(temp=True)\n                except Exception as e:\n                    xlog.warn(\"login_session %s json error:%r\", message, e)\n                    msg_info = {}\n\n                g.http_client.set_session_host(g.server_host)\n                g.last_api_error = \"\"\n                xlog.info(\"login_session %s time:%d msg:%s\", self.session_id, 1000 * time_cost, message)\n                return True\n            except Exception as e:\n                xlog.exception(\"login_session e:%r\", e)\n                time.sleep(1)","sourceCodeStart":431,"sourceCodeEnd":467,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/x_tunnel/local/proxy_session.py#L431-L467","documentation":"Logged when the X-Tunnel session server login fails: the server returned a non-zero result code (res != 0) in the login response. The message includes elapsed time, result code, and server message; g.last_api_error is set to 'session server login fail, code:%d msg:%s'. login_session returns False, causing start() to fail.","triggerScenarios":"Calling proxy_session start()/login_session() when the server rejects the session: wrong/invalid username-password token, expired account, server-side session refusal, or protocol mismatch producing res != 0.","commonSituations":"Expired or changed XX-Net/x-tunnel account credentials, server maintenance, wrong server host in config, or client version too old sending a protocol the server rejects.","solutions":["Check g.last_api_error / log message for the server's res code and msg (e.g. auth failure) and fix credentials in the x-tunnel config","Verify account status (quota/activation) on the provider dashboard","Confirm g.server_host points to a valid session server","Update XX-Net so protocol_version matches the server"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"if not g.http_client or not g.server_host:\n    raise RuntimeError('x-tunnel server host not configured')","typeGuard":null,"tryCatchPattern":"ok = session.login_session()\nif not ok:\n    log.warning('login failed: %s', g.last_api_error)\n    # backoff and retry with fresh credentials","preventionTips":["Keep credentials and server host config current","Check g.last_api_error after every failed login call","Wrap start() with retry/backoff for transient server errors"],"tags":["x-tunnel","authentication","session","login"],"backgroundTag":"remote-login-rejected","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}