diff options
author | Josip Medved <jmedved@jmedved.com> | 2015-12-19 21:58:42 -0800 |
---|---|---|
committer | Josip Medved <jmedved@jmedved.com> | 2015-12-19 21:58:42 -0800 |
commit | cc9a18e5dd12f3a2af88b6f3a04cf3aaa17e18a8 (patch) | |
tree | 45ca15dfd2b998d9a1df76513153d6d1f56507ee | |
parent | d38ad3478e69f2e7799d83f4e9571301bc674ce9 (diff) | |
download | WrtSettings-cc9a18e5dd12f3a2af88b6f3a04cf3aaa17e18a8.zip WrtSettings-cc9a18e5dd12f3a2af88b6f3a04cf3aaa17e18a8.tar.gz WrtSettings-cc9a18e5dd12f3a2af88b6f3a04cf3aaa17e18a8.tar.bz2 |
Preserving random number from loaded AsusWRT v2 file
-rw-r--r-- | Source/WrtSettings/Nvram.cs | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/Source/WrtSettings/Nvram.cs b/Source/WrtSettings/Nvram.cs index ca3f93e..a36d472 100644 --- a/Source/WrtSettings/Nvram.cs +++ b/Source/WrtSettings/Nvram.cs @@ -1,4 +1,4 @@ -using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
@@ -156,6 +156,8 @@ namespace WrtSettings { }
}
+ this.Variables.Add(".Random", random.ToString(CultureInfo.InvariantCulture));
+
this.Format = NvramFormat.AsuswrtVersion2;
return true;
}
@@ -302,9 +304,17 @@ namespace WrtSettings { private byte[] GetBytesForAsuswrtVersion2() {
var buffer = new List<Byte>();
- var rand = (byte)Random.Next(0, 256);
+ byte rand;
+ if (this.Variables.ContainsKey(".Random")) {
+ if (!byte.TryParse(this.Variables[".Random"], NumberStyles.Integer, CultureInfo.InvariantCulture, out rand)) {
+ throw new InvalidOperationException("Invalid predefined random number (.Random)!");
+ }
+ } else {
+ rand = (byte)Random.Next(0, 256);
+ }
foreach (var pair in this.Variables) {
+ if (pair.Key.Equals(".Random", StringComparison.Ordinal)) { continue; } //skip random number
buffer.AddRange(Encoding.ASCII.GetBytes(pair.Key + "=" + pair.Value + "\0"));
}
@@ -481,15 +491,18 @@ namespace WrtSettings { var state = DTState.Text;
foreach (var ch in text) {
switch (state) {
- case DTState.Text: {
+ case DTState.Text:
+ {
if (ch == '\\') {
state = DTState.Escape;
} else {
sb.Append(ch);
}
- } break;
+ }
+ break;
- case DTState.Escape: {
+ case DTState.Escape:
+ {
switch (ch) {
case 'n': sb.Append("\n"); state = DTState.Text; break;
case 'r': sb.Append("\r"); state = DTState.Text; break;
@@ -500,9 +513,11 @@ namespace WrtSettings { case 'x': state = DTState.EscapeHex; break;
default: throw new FormatException("Invalid escape sequence.");
}
- } break;
+ }
+ break;
- case DTState.EscapeHex: {
+ case DTState.EscapeHex:
+ {
sbHex.Append(ch);
if (sbHex.Length == 2) {
var hex = sbHex.ToString();
@@ -514,7 +529,8 @@ namespace WrtSettings { sb.Append(Encoding.ASCII.GetString(new byte[] { value }));
state = DTState.Text;
}
- } break;
+ }
+ break;
}
}
|