Browse Source

Freedom: Add maxSplit fragment option; Add applyTo noises option

mhsanaei 6 days ago
parent
commit
9b51e9a5c5

+ 9 - 2
web/assets/js/model/outbound.js

@@ -919,12 +919,14 @@ Outbound.FreedomSettings.Fragment = class extends CommonClass {
     constructor(
         packets = '1-3',
         length = '',
-        interval = ''
+        interval = '',
+        maxSplit = ''
     ) {
         super();
         this.packets = packets;
         this.length = length;
         this.interval = interval;
+        this.maxSplit = maxSplit;
     }
 
     static fromJson(json = {}) {
@@ -932,6 +934,7 @@ Outbound.FreedomSettings.Fragment = class extends CommonClass {
             json.packets,
             json.length,
             json.interval,
+            json.maxSplit
         );
     }
 };
@@ -940,12 +943,14 @@ Outbound.FreedomSettings.Noise = class extends CommonClass {
     constructor(
         type = 'rand',
         packet = '10-20',
-        delay = '10-16'
+        delay = '10-16',
+        applyTo = 'ip'
     ) {
         super();
         this.type = type;
         this.packet = packet;
         this.delay = delay;
+        this.applyTo = applyTo;
     }
 
     static fromJson(json = {}) {
@@ -953,6 +958,7 @@ Outbound.FreedomSettings.Noise = class extends CommonClass {
             json.type,
             json.packet,
             json.delay,
+            json.applyTo
         );
     }
 
@@ -961,6 +967,7 @@ Outbound.FreedomSettings.Noise = class extends CommonClass {
             type: this.type,
             packet: this.packet,
             delay: this.delay,
+            applyTo: this.applyTo
         };
     }
 };

+ 8 - 0
web/html/form/outbound.html

@@ -42,6 +42,9 @@
           <a-form-item label='Interval'>
             <a-input v-model.trim="outbound.settings.fragment.interval"></a-input>
           </a-form-item>
+          <a-form-item label='Max Split'>
+            <a-input v-model.trim="outbound.settings.fragment.maxSplit"></a-input>
+          </a-form-item>
         </template>
 
         <!-- Switch for Noises -->
@@ -75,6 +78,11 @@
             <a-form-item label='Delay'>
               <a-input v-model.trim="noise.delay"></a-input>
             </a-form-item>
+            <a-form-item label='Apply To'>
+              <a-select v-model="noise.applyTo" :dropdown-class-name="themeSwitcher.currentTheme">
+                <a-select-option v-for="s in ['ip','ipv4','ipv6']" :value="s">[[ s ]]</a-select-option>
+              </a-select>
+            </a-form-item>
           </a-form>
         </template>
       </template>

+ 7 - 2
web/html/settings.html

@@ -207,7 +207,7 @@
         settings: {
           domainStrategy: "AsIs",
           noises: [
-            { type: "rand", packet: "10-20", delay: "10-16" },
+            { type: "rand", packet: "10-20", delay: "10-16", applyTo: "ip" },
           ],
         },
       },
@@ -397,7 +397,7 @@
         }
       },
       addNoise() {
-        const newNoise = { type: "rand", packet: "10-20", delay: "10-16" };
+        const newNoise = { type: "rand", packet: "10-20", delay: "10-16", applyTo: "ip" };
         this.noisesArray = [...this.noisesArray, newNoise];
       },
       removeNoise(index) {
@@ -420,6 +420,11 @@
         updatedNoises[index] = { ...updatedNoises[index], delay: value };
         this.noisesArray = updatedNoises;
       },
+      updateNoiseApplyTo(index, value) {
+        const updatedNoises = [...this.noisesArray];
+        updatedNoises[index] = { ...updatedNoises[index], applyTo: value };
+        this.noisesArray = updatedNoises;
+      },
     },
     computed: {
       fragment: {

+ 12 - 0
web/html/settings/panel/subscription/json.html

@@ -90,6 +90,18 @@
                                 placeholder="10-20"></a-input>
                         </template>
                     </a-setting-list-item>
+                    <a-setting-list-item paddings="small">
+                        <template #title>ApplyTo</template>
+                        <template #control>
+                            <a-select :value="noise.applyTo" :style="{ width: '100%' }"
+                                :dropdown-class-name="themeSwitcher.currentTheme"
+                                @change="(value) => updateNoiseApplyTo(index, value)">
+                                <a-select-option :value="p" :label="p" v-for="p in ['ip', 'ipv4', 'ipv6']" :key="p">
+                                    <span>[[ p ]]</span>
+                                </a-select-option>
+                            </a-select>
+                        </template>
+                    </a-setting-list-item>
                     <a-space direction="horizontal" :style="{ padding: '10px 20px' }">
                         <a-button v-if="noisesArray.length > 1" type="danger"
                             @click="removeNoise(index)">Remove</a-button>