Răsfoiți Sursa

fix(hysteria): clamp udpIdleTimeout to xray-core's accepted 2-600s range (#5117)

The schema and form inputs allowed any value >= 1, but xray-core rejects
UdpIdleTimeout outside 2-600 seconds at startup, so an out-of-range value
silently killed the whole config.
MHSanaei 11 ore în urmă
părinte
comite
10a0c9131c

+ 1 - 1
frontend/src/pages/inbounds/form/protocols/hysteria.tsx

@@ -19,7 +19,7 @@ export default function HysteriaFields({ form }: { form: FormInstance }) {
         label={t('pages.inbounds.form.udpIdleTimeout')}
         name={['streamSettings', 'hysteriaSettings', 'udpIdleTimeout']}
       >
-        <InputNumber min={1} style={{ width: '100%' }} />
+        <InputNumber min={2} max={600} style={{ width: '100%' }} />
       </Form.Item>
 
       <Form.Item label={t('pages.inbounds.form.masquerade')}>

+ 1 - 1
frontend/src/pages/xray/outbounds/transport/hysteria.tsx

@@ -25,7 +25,7 @@ export default function HysteriaForm({ form }: { form: FormInstance }) {
         label={t('pages.inbounds.form.udpIdleTimeout')}
         name={['streamSettings', 'hysteriaSettings', 'udpIdleTimeout']}
       >
-        <InputNumber min={1} style={{ width: '100%' }} />
+        <InputNumber min={2} max={600} style={{ width: '100%' }} />
       </Form.Item>
 
       <Form.Item label={t('pages.inbounds.form.masquerade')}>

+ 2 - 1
frontend/src/schemas/protocols/stream/hysteria.ts

@@ -25,7 +25,8 @@ export type HysteriaMasquerade = z.infer<typeof HysteriaMasqueradeSchema>;
 export const HysteriaStreamSettingsSchema = z.object({
   version: z.literal(2).default(2),
   auth: z.string().default(''),
-  udpIdleTimeout: z.number().int().min(1).default(60),
+  // Xray-core rejects values outside 2-600 seconds at startup.
+  udpIdleTimeout: z.number().int().min(2).max(600).default(60),
   masquerade: HysteriaMasqueradeSchema.optional(),
 });
 export type HysteriaStreamSettings = z.infer<typeof HysteriaStreamSettingsSchema>;