Video of code working (old v1 dialer) is available at YT !
> https://youtu.be/SlryR7ykSqw
[Watch in 720p HD or above to view proper text]
~ Sharing Knowledge ~
~ For Any One Who Wants to Learn ~
I am writing this post to share PPPoE Dialer program which I made using Visual Studio 2012 C#.
This program can create / dial / disconnect a broadband pppoe connection on Windows 7 base Operating System. I have added many functions according to the local requirements. It was all built for my local lab testing purposes therefore there is a lot of room for improvements in it. Just to remind myself, I am not even a programmer, but a simple low level network support personnel. This is my first Try code in C# programming. It took me full two weeks late night working to develop this code.
Google search and Stack-overflow queries made it possible to create such program for a dumb person like Me.
Moment of Truth!
In general ISP/Networks, nowadays everyone is using WiFi routers therefore this dialer won’t be useful in such scenarios. but still its good to have some branding stuff for clients who directly use desktop / laptop computers to dial in to your server for the internet access.
Very Sadly ! Most of the programmers / knowledgeable persons I know in my contacts clearly denied to share any code / working solution with the public & advised me NOT to share such code freely, like the Joker once said in a movie scene.
We shouldn’t have any issue with this approach in practical, because Obviously if some one works hard to design a solution that can be utilized commercially , its his right to ask for money. I expect no one bound to agree with my statement here.
But here I am. sharing my basic knowledge for anyone who wants to learn from it ! ~
If anyone want customized branding with there Logo / Numbers in this dialer, you know my email.
~z@iB
Components Used:
- OS: Windows 7 (64bit)
- Launching Pad: Visual Studio 2012
- Language: C Sharp (C#)
- Support Libraries: Dotras 1.3 (https://dotras.codeplex.com/)
- .Net Framework 4.x Library for Dotras
Requirements at Client PC:
- the code targets .net framework 4.5 library support, & the bundled setup i made, already have .Net Framework 4.5 bundled . So if its not installed at client computer , it will auto deploy it.
DOWNLOAD !!!
Internet Dialer Complete Program ! [pppoe broadband dialer]
Code Working Workflow Example:
- Username / Password Boxes: This must be filled first time, & the code will save it in the registry. Next time the dialer is launched , it will read the credentials to avoid entering the id password again im boxes)
- Auto Redial Check box: If selected, the system will auto redial in case of disconnection.
- Dial Button: which will basically dial the pppoe connection & upon successfull connection, it will minimize the window. It will also check if dialer is already connected.
- Disconnect Button: You know what disconnect means :). It will disconnect the dialer only if the dialer is really connected. Plus it will will not auto redial because the user have manually disconnected the connection.
- Exit: This will close this application.
- Create internet Dialer Button: This will create pppoe dialer connection in Network Connections plus its shortcut on current user desktop, and if connection already exists, then it will inform user accordingly.
- Dialer LAN Status Button: It will check if the dialer is connected or not in the status text box.
- Balloon Texts / Notifications: When application is minimized to System Tray, connect / disconnect events.
- Auto Minimize: on connect / manual disconnect
- Tray Icon Menu Strip Menu Context to Show/Exit app. Example to show function.
- Total Data Download/Upload in labels for current session.
- Dialer Connected Time.
- Display Dialer Internet IP.
- Picture box to show connectivity
- Check Gateway Button.
- The code will keep checking the dialer status (every 5sec) /net status (every 10sec) and update the text label accordingly.
- Many other small enhancements
I must be missing some other functions but this was all required at a moment.
I will update more later if got the chance…
Ok lets hit the Road , and view the code …
the SOURCE-CODE Journey !
// PPPoE Internet Dialer - Broadband PPPoE Dialer V 2.0 // Dear Humans, You are absolutely free to use it as you like // This PPPoE dialer program is made in C# // using Visual Studio 2012 with .Net Framework 4.5 & Dotras Library // Syed Jahanzaib / aacable @ hotmail . com // http : // aacable . wordpress . com // March, 2017 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using DotRas; using Microsoft.Win32; using System.Net; using System.IO; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Diagnostics; namespace pppoe_dialer___zaib_last { public partial class Form1 : Form { public class Globals { public static string PPPNAME = "Internet-Dialer"; public static string dcmanual = "0"; public static string RedialCheckValue = "0"; NetworkInterface networkInterface; long lngBytesSend; long lngBtyesReceived; } private Timer _timer; private DateTime _startTime = DateTime.MinValue; private TimeSpan _currentElapsedTime = TimeSpan.Zero; private TimeSpan _totalElapsedTime = TimeSpan.Zero; private bool _timerRunning = false; DateTime _started = DateTime.UtcNow; DateTime startTime = new DateTime(); private NetworkInterface[] nicArr; int lanInterval = 2; //3 sec int netInterval = 10; //10 sec private Timer timer; private const double timerUpdate = 1000; //private bool willClose; private bool connected; private RasHandle handle = null; private RasHandle Rashandler = null; private RasConnection connection = null; //DateTime startTime = new DateTime(); public Form1() { InitializeComponent(); if (RedialCheckBox.Checked) { this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will auto Redial if get disconnected.")); Globals.RedialCheckValue = "YES"; } InitializeNetworkInterface(); InitializeTimer(); _timer = new Timer(); _timer.Interval = 1000; _timer.Tick += new EventHandler(_timer_Tick); Timer t = new Timer(); t.Interval = 1000; //1 sec t.Tick += new EventHandler(t_Tick); t.Start(); var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) { startelptimer(); } if (conn != null) { var local = NetworkInterface.GetAllNetworkInterfaces().Where(i => i.Name == Globals.PPPNAME).FirstOrDefault(); var stringAddress = local.GetIPProperties().UnicastAddresses[0].Address.ToString(); var ipAddress1 = IPAddress.Parse(stringAddress); pppip.Text = ipAddress1.ToString(); notifyIcon1.Icon = Resource1.icon_online; this.pictureBox2.Image = Resource1.net_conn_image_1; } else { this.pictureBox2.Image = Resource1.net_disconnected_image_2; sl2.Text = "Disconnected"; } } void _timer_Tick(object sender, EventArgs e) { var timeSinceStartTime = DateTime.Now - _startTime; timeSinceStartTime = new TimeSpan(timeSinceStartTime.Hours, timeSinceStartTime.Minutes, timeSinceStartTime.Seconds); _currentElapsedTime = timeSinceStartTime + _totalElapsedTime; sl2.Text = timeSinceStartTime.ToString(); } private void timerdialer_Tick(object sender, EventArgs e) { var timeSinceStartTime = DateTime.Now - _startTime; timeSinceStartTime = new TimeSpan(timeSinceStartTime.Hours, timeSinceStartTime.Minutes, timeSinceStartTime.Seconds); _currentElapsedTime = timeSinceStartTime + _totalElapsedTime; sl2.Text = timeSinceStartTime.ToString(); } private void timerStart_Click(object sender, EventArgs e) { // If the timer isn't already running // Set the start time to Now _startTime = DateTime.Now; // Store the total elapsed time so far //_totalElapsedTime = _currentElapsedTime; _timer.Start(); _timerRunning = true; } private void InitializeNetworkInterface() { // Grab all local interfaces to this computer nicArr = NetworkInterface.GetAllNetworkInterfaces(); // Add each interface name to the combo box for (int i = 0; i < nicArr.Length; i++) cmbInterface.Items.Add(nicArr[i].Name); // Change the initial selection to the first interface cmbInterface.SelectedIndex = 0; } private void InitializeTimer() { timer = new Timer(); timer.Interval = (int)timerUpdate; timer.Tick += new EventHandler(timer_Tick); timer.Start(); } void t_Tick(object sender, EventArgs e) { lanInterval--; netInterval--; if (lanInterval == 0) { checkpppstatus(); lanInterval = 2; //reset to base value } if (netInterval == 0) { // checknetstatus(); netInterval = 10; //reset to base value } } protected void checkpppstatus() { this.Invoke((MethodInvoker)delegate { var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) { dialerStatus.Text = "Connected !"; //connstatus.ForeColor = System.Drawing.Color.Green; } else { dialerStatus.Text = "Disconnected !"; connstatus.ForeColor = System.Drawing.Color.Red; pppip.Text = "---"; sl2.Text = "Dicsonnected !"; } }); } protected void checknetstatus() { if (IsOnline(textBox1.Text) == true) { //internetStatusLabel.ForeColor = System.Drawing.Color.Green; string Status = "Connected !"; // internetStatus.Text = Status; } else { // internetStatusLabel.ForeColor = System.Drawing.Color.Red; string Status = "DOWN"; // internetStatus.Text = Status; } } protected void Displaynotify() { try { notifyIcon1.BalloonTipTitle = "You have successfully connected to the Internet ..."; notifyIcon1.BalloonTipText = "Internet Connected ..."; notifyIcon1.Visible = true; notifyIcon1.ShowBalloonTip(5000); } catch (Exception ex) { } } protected void stopelptimer() { // If the timer isn't already running // Set the start time to Now _startTime = DateTime.Now; // Store the total elapsed time so far //_totalElapsedTime = _currentElapsedTime; _timer.Stop(); _timerRunning = false; TimeSpan _currentElapsedTime = TimeSpan.Zero; TimeSpan _totalElapsedTime = TimeSpan.Zero; _totalElapsedTime = _currentElapsedTime; _timer.Stop(); _timerRunning = false; } protected void startelptimer() { // If the timer isn't already running // Set the start time to Now _startTime = DateTime.Now; // Store the total elapsed time so far //_totalElapsedTime = DateTime.Now; _timer.Start(); _timerRunning = true; } protected void Displaynotifyfordisconnect() { try { notifyIcon1.BalloonTipTitle = "Internet Dialer DISCONNECTED !!!"; notifyIcon1.BalloonTipText = "Internet Disconnected !!!"; notifyIcon1.Visible = true; notifyIcon1.ShowBalloonTip(5000); // MessageBox.Show("DC"); { this.Invoke((MethodInvoker)delegate { this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "\r\nDialer Disconnected !")); }); } } catch (Exception ex) { } } private void saveCredential(string username, string password, bool remember, bool auto) { RegistryKey hkcu = Registry.CurrentUser; RegistryKey software = hkcu.OpenSubKey("Software", true); RegistryKey zaib = software.CreateSubKey("zaib"); zaib.SetValue("username", username, RegistryValueKind.String); zaib.SetValue("password", password, RegistryValueKind.String); if (Globals.RedialCheckValue == "YES") { zaib.SetValue("autoredial", "YES", RegistryValueKind.String); } else { zaib.SetValue("autoredial", "NO", RegistryValueKind.String); } zaib.Close(); } private void readCredential() { RegistryKey hkcu = Registry.CurrentUser; RegistryKey software = hkcu.OpenSubKey("Software", true); RegistryKey zaib = software.CreateSubKey("zaib"); try { textBox1.Text = (string)zaib.GetValue("username", ""); textBox2.Text = (string)zaib.GetValue("password", ""); textBox3.Text = (string)zaib.GetValue("autoredial", ""); if (textBox3.Text == "YES") { RedialCheckBox.Checked = true; } else { RedialCheckBox.Checked = false; } } catch (Exception ex) { // never saved } zaib.Close(); } private void Form1_Move_1(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { this.Hide(); notifyIcon1.ShowBalloonTip(2000, "Internet Dialer - Broadband PPPoE Dialer V 2.0", "The App has be moved to the tray.", ToolTipIcon.Info); checkpppstatus(); } } private void button1_Click(object sender, EventArgs e) { string path; path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User); using (RasPhoneBook pbk = new RasPhoneBook()) { pbk.Open(path); RasEntry entry = RasEntry.CreateBroadbandEntry(Globals.PPPNAME, RasDevice.GetDeviceByName("PPPOE", RasDeviceType.PPPoE, false)); // Configure any options for your entry here via entry.Options entry.RedialCount = 99; // Finally Add the PPPOE Dialer in the network connection , hurrahhhh , zaib // If Preiovus Entry found, delete, and reacreate var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) { //MessageBox.Show("Same Dialer Already connected ! First Disconnect it to re-create new."); this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer Already connected ! First Disconnect it to update/recreate", Globals.PPPNAME)); return; } if (pbk.Entries.Contains(Globals.PPPNAME)) { //MessageBox.Show("DIALER ALREADY Exists!, Updating Credentials Done.",Globals.PPPNAME); this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n","Dialer already Exists!, Saving current Credentials to registry Done.",Globals.PPPNAME, "{0}\r\n\r\n")); saveCredential(textBox1.Text, textBox2.Text, true, true); } else { //pbk.Entries.Clear(); rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text); rasDialer1.AllowUseStoredCredentials = true; pbk.Entries.Add(entry); // If Dialer Create, show successfull message. MessageBox.Show("Internet Dialer created Successfully."); saveCredential(textBox1.Text, textBox2.Text, true, true); } } } private void Form1_Load(object sender, EventArgs e) { } private void textBox1_TextChanged(object sender, EventArgs e) { } private void textBox2_TextChanged(object sender, EventArgs e) { } private void textBox1_Click(object sender, EventArgs e) { // textBox1.Clear(); } private void Button2_Click(object sender, EventArgs e) { this.Close(); } private void textBox2_Click(object sender, EventArgs e) { //textBox2.Clear(); } private void pictureBox2_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("https://aacable.wordpress.com"); } private void button2_Click_1(object sender, EventArgs e) { RasHandle handle = null; using (RasDialer dialer = new RasDialer()) { dialer.StateChanged += new EventHandler<StateChangedEventArgs>(rasDialer1_StateChanged); dialer.EntryName = (Globals.PPPNAME); { // this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "OK ...", "{0}\r\n\r\n")); }; //this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Connection in progress ...", "{0}\r\n\r\n")); dialer.StateChanged += new EventHandler<StateChangedEventArgs>(rasDialer1_StateChanged); dialer.EntryName = (Globals.PPPNAME); string username = textBox1.Text; string passwd = textBox2.Text; dialer.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text); dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User); dialer.Timeout = 1000; dialer.AllowUseStoredCredentials = true; dialer.EntryName = (Globals.PPPNAME); rasDialer1.EntryName = (Globals.PPPNAME); rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text); rasDialer1.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User); // If username or password window is empty , post error if (string.IsNullOrWhiteSpace(textBox1.Text)) { this.StatusTextBox.AppendText(string.Format("{0}\r\n\r", "You must enter username/password in order to dial", "{0}\r\n")); //MessageBox.Show("Enter username.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // // // // // // CHECK IF DIAL is press but the pppoe connection is not alreay in network connections, CReate new connection if not created earlier. string path; path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User); using (RasPhoneBook pbk = new RasPhoneBook()) { pbk.Open(path); RasEntry entry = RasEntry.CreateBroadbandEntry(Globals.PPPNAME, RasDevice.GetDeviceByName("PPPOE", RasDeviceType.PPPoE, false)); // Configure any options for your entry here via entry.Options entry.RedialCount = 99; //pbk.Entries.Clear(); rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text); rasDialer1.AllowUseStoredCredentials = true; if (pbk.Entries.Contains(Globals.PPPNAME)) { //MessageBox.Show("DIALER ALREADY Exists!, Updating Credentials Done.",Globals.PPPNAME); // this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already Exists!", Globals.PPPNAME, "{0}\r\n\r\n")); //saveCredential(textBox1.Text, textBox2.Text, true, true); var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) { this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already connected !")); } else handle = rasDialer1.DialAsync(); } else { pbk.Entries.Add(entry); // If Dialer Create, show successfull message. //MessageBox.Show("Internet Dialer created Successfully."); this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "It seems the Dialer App is executed first time therefore we need to create pppoe connection in networkk connections to be used by this DIALER program ...", Globals.PPPNAME, "{0}\r\n\r\n")); saveCredential(textBox1.Text, textBox2.Text, true, true); ///// SHORTCUT BEGINE string destDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string destFileName = @"Connect To My Internet Dialer.lnk"; // Create .lnk file string path2 = System.IO.Path.Combine(destDir, destFileName); FileStream fs = File.Create(path2); fs.Close(); // Instantiate a ShellLinkObject that references the .lnk we created Shell32.Shell shell = new Shell32.Shell(); Shell32.Folder shellFolder = shell.NameSpace(destDir); Shell32.FolderItem shellFolderItem = shellFolder.Items().Item(destFileName); Shell32.ShellLinkObject shellLinkObject = (Shell32.ShellLinkObject)shellFolderItem.GetLink; // Set .lnk properties shellLinkObject.Arguments = "-d pppoe2"; shellLinkObject.Description = Globals.PPPNAME; shellLinkObject.Path = @"%windir%\System32\rasphone.exe"; shellLinkObject.WorkingDirectory = "%windir%"; shellLinkObject.Save(path2); //// SHORTCUT END this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer created successfully, now attempting to connect suing this new pppoe connection !")); handle = rasDialer1.DialAsync(); } } } } private void StatusTextBox_TextChanged(object sender, EventArgs e) { // } private void rasDialer1_StateChanged(object sender, StateChangedEventArgs e) { this.Invoke((MethodInvoker)delegate { this.StatusTextBox.AppendText(string.Format(e.State.ToString() + "\r\n")); checkpppstatus(); }); } private void rasDialer1_DialCompleted(object sender, DialCompletedEventArgs e) { { if (e.Cancelled) { MessageBox.Show("Cancelled"); } else if (e.TimedOut) { MessageBox.Show("Time out"); } else if (e.Error != null) { //MessageBox.Show(e.Error.ToString(), "Error"); this.Invoke((MethodInvoker)delegate { this.StatusTextBox.AppendText(string.Format(e.Error.ToString() + "\r\n")); }); if (Globals.RedialCheckValue == "YES") this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Retry Auto Dialing in 1 Second ...")); rasDialer1.DialAsync(); } else if (e.Connected) { // this.Invoke((MethodInvoker)delegate { //MessageBox.Show("Connection successful zaib!"); var conn = RasConnection.GetActiveConnections().Where(c => c.EntryName == Globals.PPPNAME).FirstOrDefault(); RasIPInfo ipAddresses = (RasIPInfo)conn.GetProjectionInfo(RasProjectionType.IP); this.StatusTextBox.AppendText(string.Format("{0}\r\n", "Your internet ip is", ipAddresses.IPAddress.ToString())); this.StatusTextBox.AppendText(string.Format("{0} ", ipAddresses.IPAddress.ToString())); saveCredential(textBox1.Text, textBox2.Text, true, true); var local = NetworkInterface.GetAllNetworkInterfaces().Where(i => i.Name == Globals.PPPNAME).FirstOrDefault(); var stringAddress = local.GetIPProperties().UnicastAddresses[0].Address.ToString(); var ipAddress1 = IPAddress.Parse(stringAddress); //sl2.Text = timeSinceStartTime.ToString(); pppip.Text = ipAddress1.ToString(); //gwLabel.Text = "Gateway is : " + "; ShowInTaskbar = true; this.Hide(); InitializeNetworkInterface(); //Displaynotify(); UpdateNetworkInterface(); stopelptimer(); startelptimer(); }); } } } private void dcButton_Click(object sender, EventArgs e) { var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) { //InitializeNetworkInterface(); conn.HangUp(); Globals.dcmanual = "yes"; Globals.RedialCheckValue = "NO"; //MessageBox.Show("Disconnect on User Request"); this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "\r\nDisconnected on user request !")); lblInterfaceType.Text = "---"; lblUpload.Text = "---"; lblDownload.Text = "---"; connstatus.ForeColor = Color.Red; checkpppstatus(); //this.Hide(); Displaynotifyfordisconnect(); } else MessageBox.Show("Dialer is not Active !", Globals.PPPNAME); } private void rasDialer1_Error(object sender, System.IO.ErrorEventArgs e) { //this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "\r\n AUTO DC DONT KNOW !")); MessageBox.Show("UNKOWN!!!!!!!!!!!!"); } private void Form1_Resize(object sender, EventArgs e) { notifyIcon1.Text = "My Internet Dialer"; } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; } private void notifyIcon1_MouseDoubleClick_1(object sender, MouseEventArgs e) { Show(); WindowState = FormWindowState.Normal; } private void notifyIcon1_MouseMove(object sender, MouseEventArgs e) { notifyIcon1.Text = "Internet Dialer - Broadband PPPoE Dialer V 2.0"; } private void notifyIcon1_BalloonTipClicked(object sender, EventArgs e) { } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { } private void notifyIcon1_BalloonTipShown(object sender, EventArgs e) { } private void Form1_Load_1(object sender, EventArgs e) { timer4dt.Start(); datelabel.Text = DateTime.Now.ToLongDateString(); timelabel.Text = DateTime.Now.ToLongTimeString(); readCredential(); checkpppstatus(); Timer MyTimer = new Timer(); MyTimer.Interval = 5000; MyTimer.Tick += new EventHandler(MyTimer_Tick); MyTimer.Start(); Timer MyTimer10 = new Timer(); MyTimer10.Interval = 5000; MyTimer10.Tick += new EventHandler(MyTimer_Tick); MyTimer10.Start(); var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already connected !")); } private void MyTimer_Tick(object sender, EventArgs e) { //checkpppstatus(); } private void MyTimer10_Tick(object sender, EventArgs e) { // // checknetstatus(); } private void contextMenuStrip1_DoubleClick(object sender, EventArgs e) { this.Show(); } private void showToolStripMenuItem_Click(object sender, EventArgs e) { //this.Show(); this.Show(); WindowState = FormWindowState.Normal; } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void notifyIcon1_Click(object sender, EventArgs e) { // this.Show(); //WindowState = FormWindowState.Normal; } private void label3_Click(object sender, EventArgs e) { } private void connstatus_Click(object sender, EventArgs e) { } private void connstatus_Click_1(object sender, EventArgs e) { } private void rasDialDialog1_Error(object sender, RasErrorEventArgs e) { } private void rasConnectionWatcher1_Disconnected(object sender, RasConnectionEventArgs e) { checkpppstatus(); notifyIcon1.Icon = Resource1.icon_standby; this.pictureBox2.Image = Resource1.net_disconnected_image_2; Displaynotifyfordisconnect(); stopelptimer(); //MessageBox.Show(Globals.RedialCheckValue); if (Globals.dcmanual == "YES") { //MessageBox.Show("YES MANUAL DISCONNECTED ..."); return; } else { } if (Globals.RedialCheckValue == "YES") this.Invoke((MethodInvoker)delegate { this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Retry Auto Dialing in 1 Seconds!")); }); DateTime Tthen = DateTime.Now; do { Application.DoEvents(); } while (Tthen.AddSeconds(1) > DateTime.Now); //Waits 5 seconds. var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) { this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Dialer already Connected !")); } else { rasDialer1.EntryName = (Globals.PPPNAME); rasDialer1.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text); rasDialer1.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User); var conns2 = RasConnection.GetActiveConnections(); var conn2 = conns2.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (Globals.RedialCheckValue == "YES") handle = rasDialer1.DialAsync(); } // this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "NO AUTO DIAL CHECK!")); } private void rasConnectionWatcher1_Connected(object sender, RasConnectionEventArgs e) { Globals.dcmanual = "no"; UpdateNetworkInterface(); Displaynotify(); //startelptimer(); notifyIcon1.Icon = Resource1.icon_online; this.pictureBox2.Image = Resource1.net_conn_image_1; } private void rasConnectionWatcher1_Error(object sender, ErrorEventArgs e) { MessageBox.Show("ERR"); } private void rasPhoneBookDialog1_ChangedEntry(object sender, RasPhoneBookDialogEventArgs e) { MessageBox.Show("ENTRY CHANGED"); } // Tafreeh start public bool IsOnline(string website) { Ping x = new Ping(); PingReply reply = x.Send(IPAddress.Parse("8.8.8.8")); //enter ip of the machine if (reply.Status == IPStatus.Success) // here we check for the reply status if it is success it means the host is reachable { return true; // status.Text = "Available. And Round Trip Time of the packet is:" + reply.RoundtripTime.ToString(); } else //if host is not reachable. return false; // status.Text = "Not available"; } //} private void AboutMeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start("https://aacable.wordpress.com"); } long lngBytesSend; long lngBtyesReceived; private void UpdateNetworkInterface() { this.Invoke((MethodInvoker)delegate { NetworkInterface nic = nicArr[cmbInterface.SelectedIndex]; IPv4InterfaceStatistics interfaceStats = nic.GetIPv4Statistics(); IPv4InterfaceStatistics status = nic.GetIPv4Statistics(); lblInterfaceType.Text = nic.NetworkInterfaceType.ToString(); int sent_Speed = (int)(status.BytesSent - lngBytesSend) / 1024; int receive_speed = (int)(status.BytesReceived - lngBtyesReceived) / 1024; int bytesReceivedSpeed = (int)(interfaceStats.BytesReceived - lngBtyesReceived) / 1024; int totinmb = (int)(status.BytesReceived) / 1024 / 1024; lblDownload.Text = totinmb + " MB"; int totSentinmb = (int)(status.BytesSent) / 1024 / 1024; lblUpload.Text = totSentinmb + " MB"; lngBytesSend = status.BytesSent; lngBtyesReceived = status.BytesReceived; }); } void timer_Tick(object sender, EventArgs e) { var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) UpdateNetworkInterface(); InitializeNetworkInterface(); } private void cmbInterface_SelectedIndexChanged(object sender, EventArgs e) { } private void dialerCheck_Click(object sender, EventArgs e) { //Gateway IP NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adapters) { IPInterfaceProperties adapterProperties = adapter.GetIPProperties(); GatewayIPAddressInformationCollection addresses = adapterProperties.GatewayAddresses; if (addresses.Count > 0) { foreach (GatewayIPAddressInformation address in addresses) { StatusTextBox.Text += "Gateway Address | " + address.Address.ToString() + "\r\n"; } } } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { // timer.Dispose(); // this.Dispose(); } private void timer4dt_Tick(object sender, EventArgs e) { timelabel.Text = DateTime.Now.ToLongTimeString(); timer4dt.Start(); } private void resetStats_Click(object sender, EventArgs e) { _timer.Stop(); _timerRunning = false; // Reset the elapsed time TimeSpan objects _totalElapsedTime = TimeSpan.Zero; _currentElapsedTime = TimeSpan.Zero; } private void timerStart_Click_1(object sender, EventArgs e) { // If the timer isn't already running if (!_timerRunning) { // Set the start time to Now _startTime = DateTime.Now; // Store the total elapsed time so far _totalElapsedTime = _currentElapsedTime; _timer.Start(); _timerRunning = true; } else // If the timer is already running { _startTime = DateTime.Now; // Store the total elapsed time so far _totalElapsedTime = _currentElapsedTime; _timer.Start(); _timerRunning = true; } } private void timerdialer_Tick_1(object sender, EventArgs e) { { var timeSinceStartTime = DateTime.Now - _startTime; timeSinceStartTime = new TimeSpan(timeSinceStartTime.Hours, timeSinceStartTime.Minutes, timeSinceStartTime.Seconds); _currentElapsedTime = timeSinceStartTime + _totalElapsedTime; } } private void timerStop_Click(object sender, EventArgs e) { _timer.Stop(); _timerRunning = false; } // tafreh2 start protected void checknetstatusBoxMsg() { if (IsOnline(textBox1.Text) == true) { //internetStatusLabel.ForeColor = System.Drawing.Color.Green; string Status = "Connected"; // internetStatus.Text = Status; this.StatusTextBox.AppendText(string.Format("{0}\r\n", Status)); } else { // internetStatusLabel.ForeColor = System.Drawing.Color.Red; string Status = "Disconnected"; this.StatusTextBox.AppendText(string.Format("{0}\r\n ", Status, "{0}\r\n\r\n")); } } protected void checkpppstatusBoxMsg() { this.Invoke((MethodInvoker)delegate { var conns = RasConnection.GetActiveConnections(); var conn = conns.FirstOrDefault(o => o.EntryName == Globals.PPPNAME); if (conn != null) { string Status = "PPP Dialer Stauts: Connected"; this.StatusTextBox.AppendText(string.Format("{0}\r\n", Status)); } else { string Status = "PPP Dialer Stauts: Disconnected"; this.StatusTextBox.AppendText(string.Format("{0}\r\n", Status)); } }); } // tafreh2 end private void netStatusButton_Click(object sender, EventArgs e) { checknetstatusBoxMsg(); } private void dialerLanStatus_Click(object sender, EventArgs e) { checkpppstatusBoxMsg(); } private void gatewayDetails_Click(object sender, EventArgs e) { //Gateway IP NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); this.StatusTextBox.AppendText(string.Format("{0}\r\n", "Gateway Details!")); foreach (NetworkInterface adapter in adapters) { IPInterfaceProperties adapterProperties = adapter.GetIPProperties(); GatewayIPAddressInformationCollection addresses = adapterProperties.GatewayAddresses; if (addresses.Count > 0) { foreach (GatewayIPAddressInformation address in addresses) { this.StatusTextBox.AppendText(string.Format(address.Address.ToString() + "\r\n")); } } } } private void StatusTextBox_VisibleChanged(object sender, EventArgs e) { StatusTextBox.SelectionStart = textBox1.Text.Length; StatusTextBox.ScrollToCaret(); } private void label5_Click(object sender, EventArgs e) { } private static void ShowNetworkTraffic() { PerformanceCounterCategory performanceCounterCategory = new PerformanceCounterCategory("Network Interface"); string instance = performanceCounterCategory.GetInstanceNames()[0]; // 1st NIC ! PerformanceCounter performanceCounterSent = new PerformanceCounter("Network Interface", "Bytes Sent/sec", instance); PerformanceCounter performanceCounterReceived = new PerformanceCounter("Network Interface", "Bytes Received/sec", instance); for (int i = 0; i < 10; i++) { Console.WriteLine("bytes sent: {0}k\tbytes received: {1}k", performanceCounterSent.NextValue() / 1024, performanceCounterReceived.NextValue() / 1024); } } // tafreeh starts private static void RedialAttempt() { } private void pictureBox1_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("https://aacable.wordpress.com"); } private void AboutMeLabel_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start("https://aacable.wordpress.com"); } private void RedialCheckBox_CheckedChanged(object sender, EventArgs e) { if (RedialCheckBox.Checked) { //this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will auto Redial if get disconnected.")); Globals.RedialCheckValue = "YES"; RegistryKey hkcu = Registry.CurrentUser; RegistryKey software = hkcu.OpenSubKey("Software", true); RegistryKey zaib = software.CreateSubKey("zaib"); zaib.SetValue("autoredial", "YES", RegistryValueKind.String); zaib.Close(); } } private void testb_Click(object sender, EventArgs e) { MessageBox.Show(Globals.RedialCheckValue); } private void notifyIcon1_DoubleClick(object sender, EventArgs e) { this.Show(); WindowState = FormWindowState.Normal; } private void RedialCheckBox_CheckStateChanged(object sender, EventArgs e) { if (RedialCheckBox.Checked) { this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will auto Redial if get disconnected.")); Globals.RedialCheckValue = "YES"; RegistryKey hkcu = Registry.CurrentUser; RegistryKey software = hkcu.OpenSubKey("Software", true); RegistryKey zaib = software.CreateSubKey("zaib"); zaib.SetValue("autoredial", "YES", RegistryValueKind.String); zaib.Close(); } else { this.StatusTextBox.AppendText(string.Format("{0}\r\n", "System will NOT auto Redial if get disconnected.")); RegistryKey hkcu = Registry.CurrentUser; RegistryKey software = hkcu.OpenSubKey("Software", true); RegistryKey zaib = software.CreateSubKey("zaib"); zaib.SetValue("autoredial", "NO", RegistryValueKind.String); zaib.Close(); } } private void AboutMeButton_Click(object sender, EventArgs e) { AboutBox1 box = new AboutBox1(); box.ShowDialog(); } // tafreeh ends } } // The CODE ends Here. // Any suggestions / modifications are most welcome. // zaib
i HAVE UPLOADED THE TEST PACKAGE HERE.
https://drive.google.com/open?id=0B8B_P2ljEc2xaGU1MHhsNktsdjg
I am pretty sure that above code will help you in many parts when you will create your own project. I faced many challenges duet first time programming but your situation may be different if you have already working example in ahead of you 🙂
I will be more then happy if someone posts some more advance level of this dialer code for all.
Regard’s
Syed Jahanzaib
https://aacable.wordpress.com
Email: aacable@hotmail.com
Allah Hafiz !