You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
6.7 KiB
240 lines
6.7 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.Drawing; |
|
using System.IO.Ports; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading; |
|
using System.Windows.Forms; |
|
using iMonitorApp.Properties; |
|
using Microsoft.Win32; |
|
|
|
namespace iMonitorApp |
|
{ |
|
// Token: 0x02000014 RID: 20 |
|
public partial class SMSForm : Form |
|
{ |
|
// Token: 0x0600007D RID: 125 RVA: 0x00005C41 File Offset: 0x00003E41 |
|
public SMSForm() |
|
{ |
|
this.InitializeComponent(); |
|
this.Init(); |
|
} |
|
|
|
// Token: 0x0600007E RID: 126 RVA: 0x00005C78 File Offset: 0x00003E78 |
|
private void Init() |
|
{ |
|
Dictionary<string, string> dictionary = this.BuildPortNameHash(SerialPort.GetPortNames()); |
|
using (Dictionary<string, string>.Enumerator enumerator = dictionary.GetEnumerator()) |
|
{ |
|
if (enumerator.MoveNext()) |
|
{ |
|
KeyValuePair<string, string> keyValuePair = enumerator.Current; |
|
bool flag = keyValuePair.Value.Contains("HUAWEI Mobile Connect - 3G Modem"); |
|
if (!flag) |
|
{ |
|
return; |
|
} |
|
Console.WriteLine(keyValuePair.Value + " found connected on Port " + keyValuePair.Key); |
|
this.portnumber = keyValuePair.Key; |
|
} |
|
} |
|
this.po = new SerialPort(); |
|
this.po.PortName = this.portnumber; |
|
this.po.BaudRate = int.Parse("9600"); |
|
this.po.DataBits = Convert.ToInt32("8"); |
|
this.po.Parity = Parity.None; |
|
this.po.StopBits = StopBits.One; |
|
this.po.ReadTimeout = int.Parse("300"); |
|
this.po.WriteTimeout = int.Parse("300"); |
|
this.po.Encoding = Encoding.GetEncoding("iso-8859-1"); |
|
this.sem = new Semaphore(1, 1); |
|
this.mutex = false; |
|
Thread thread = new Thread(new ThreadStart(this.LaunchListener)); |
|
thread.Start(); |
|
} |
|
|
|
// Token: 0x0600007F RID: 127 RVA: 0x00005DEC File Offset: 0x00003FEC |
|
private void LaunchListener() |
|
{ |
|
AsynchronousSocketListenerSMS asynchronousSocketListenerSMS = new AsynchronousSocketListenerSMS(Config.GetIP4Address(), Settings.Default.SMSPort); |
|
AsynchronousSocketListenerSMS.Received += this.AsynchronousSocketListener_Received; |
|
AsynchronousSocketListenerSMS.StartListening(); |
|
} |
|
|
|
// Token: 0x06000080 RID: 128 RVA: 0x00005E28 File Offset: 0x00004028 |
|
private void AsynchronousSocketListener_Received(object sender, EventArgs e) |
|
{ |
|
this.Log("Receiving Instruction"); |
|
Stack<SMSInput> obj = this.stack; |
|
lock (obj) |
|
{ |
|
List<string> list = sender.ToString().Split(new char[] |
|
{ |
|
',' |
|
}).ToList<string>(); |
|
this.stack.Push(new SMSInput |
|
{ |
|
PhoneNumber = list[0], |
|
Message = list[1] |
|
}); |
|
} |
|
this.Log("Instruction Received"); |
|
this.MakeCall(); |
|
} |
|
|
|
// Token: 0x06000081 RID: 129 RVA: 0x00005ED8 File Offset: 0x000040D8 |
|
private void po_DataReceived(object sender, SerialDataReceivedEventArgs e) |
|
{ |
|
bool flag = e.EventType == SerialData.Chars; |
|
if (flag) |
|
{ |
|
bool isOpen = ((SerialPort)sender).IsOpen; |
|
if (isOpen) |
|
{ |
|
this.Log(((SerialPort)sender).ReadExisting()); |
|
} |
|
} |
|
} |
|
|
|
// Token: 0x06000082 RID: 130 RVA: 0x00005F18 File Offset: 0x00004118 |
|
private void MakeCall() |
|
{ |
|
SMSInput smsinput = default(SMSInput); |
|
Stack<SMSInput> obj = this.stack; |
|
lock (obj) |
|
{ |
|
bool flag2 = this.stack.Count == 0; |
|
if (flag2) |
|
{ |
|
return; |
|
} |
|
smsinput = this.stack.Pop(); |
|
} |
|
bool flag3 = smsinput.PhoneNumber == ""; |
|
if (!flag3) |
|
{ |
|
bool flag4 = smsinput.Message == ""; |
|
if (!flag4) |
|
{ |
|
this.mutex = true; |
|
this.Log("Sending SMS"); |
|
this.SendSingleSMS(smsinput.PhoneNumber, smsinput.Message); |
|
this.mutex = false; |
|
} |
|
} |
|
} |
|
|
|
// Token: 0x06000083 RID: 131 RVA: 0x00005FE0 File Offset: 0x000041E0 |
|
public void SendSingleSMS(string number, string message) |
|
{ |
|
this.po.Open(); |
|
this.po.DtrEnable = true; |
|
this.po.RtsEnable = true; |
|
this.po.DataReceived += this.po_DataReceived; |
|
this.po.WriteLine("AT+CMGF=1;\r"); |
|
this.po.WriteLine("AT+CMGS=\"" + number + "\"\r"); |
|
this.po.WriteLine(message + char.ConvertFromUtf32(26)); |
|
this.po.Close(); |
|
this.Log("SMS Sent"); |
|
} |
|
|
|
// Token: 0x06000084 RID: 132 RVA: 0x0000608A File Offset: 0x0000428A |
|
private void HangUp() |
|
{ |
|
this.po.Close(); |
|
} |
|
|
|
// Token: 0x06000085 RID: 133 RVA: 0x0000609C File Offset: 0x0000429C |
|
public void Log(string text) |
|
{ |
|
bool invokeRequired = this.console.InvokeRequired; |
|
if (invokeRequired) |
|
{ |
|
this.console.Invoke(new Action(delegate() |
|
{ |
|
this.console.Text = text + "\r\n" + this.console.Text; |
|
})); |
|
} |
|
else |
|
{ |
|
this.console.Text = text + "\r\n" + this.console.Text; |
|
} |
|
} |
|
|
|
// Token: 0x06000086 RID: 134 RVA: 0x00006110 File Offset: 0x00004310 |
|
private Dictionary<string, string> BuildPortNameHash(string[] portsToMap) |
|
{ |
|
Dictionary<string, string> dictionary = new Dictionary<string, string>(); |
|
this.MineRegistryForPortName("SYSTEM\\CurrentControlSet\\Enum", dictionary, portsToMap); |
|
return dictionary; |
|
} |
|
|
|
// Token: 0x06000087 RID: 135 RVA: 0x00006138 File Offset: 0x00004338 |
|
private void MineRegistryForPortName(string startKeyPath, Dictionary<string, string> targetMap, string[] portsToMap) |
|
{ |
|
bool flag = targetMap.Count >= portsToMap.Length; |
|
if (!flag) |
|
{ |
|
using (RegistryKey localMachine = Registry.LocalMachine) |
|
{ |
|
try |
|
{ |
|
using (RegistryKey registryKey = localMachine.OpenSubKey(startKeyPath)) |
|
{ |
|
string[] subKeyNames = registryKey.GetSubKeyNames(); |
|
bool flag2 = subKeyNames.Contains("Device Parameters") && startKeyPath != "SYSTEM\\CurrentControlSet\\Enum"; |
|
if (flag2) |
|
{ |
|
object value = Registry.GetValue("HKEY_LOCAL_MACHINE\\" + startKeyPath + "\\Device Parameters", "PortName", null); |
|
bool flag3 = value == null || !portsToMap.Contains(value.ToString()); |
|
if (!flag3) |
|
{ |
|
object value2 = Registry.GetValue("HKEY_LOCAL_MACHINE\\" + startKeyPath, "FriendlyName", null); |
|
string text = "N/A"; |
|
bool flag4 = value2 != null; |
|
if (flag4) |
|
{ |
|
text = value2.ToString(); |
|
} |
|
bool flag5 = !text.Contains(value.ToString()); |
|
if (flag5) |
|
{ |
|
text = string.Format("{0} ({1})", text, value); |
|
} |
|
targetMap[value.ToString()] = text; |
|
} |
|
} |
|
else |
|
{ |
|
foreach (string str in subKeyNames) |
|
{ |
|
this.MineRegistryForPortName(startKeyPath + "\\" + str, targetMap, portsToMap); |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception) |
|
{ |
|
} |
|
} |
|
} |
|
} |
|
|
|
// Token: 0x04000053 RID: 83 |
|
private string portnumber = ""; |
|
|
|
// Token: 0x04000054 RID: 84 |
|
private SerialPort po; |
|
|
|
// Token: 0x04000055 RID: 85 |
|
private Semaphore sem; |
|
|
|
// Token: 0x04000056 RID: 86 |
|
private Stack<SMSInput> stack = new Stack<SMSInput>(); |
|
|
|
// Token: 0x04000057 RID: 87 |
|
private bool mutex; |
|
} |
|
}
|
|
|