Syed Jahanzaib Personal Blog to Share Knowledge !

March 20, 2017

C# PPPoE Dialer Application Code

Filed under: Programming — Tags: , , , , , — Syed Jahanzaib / Pinochio~:) @ 4:35 PM

vc.png

pppoe dialer ver 2

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.

if u r good.png

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 !

Advertisements

4 Comments »

  1. Sir people with less mind keep to them selves and still their a question where they will take all this knowledge ! Besides your affortd salute you thanks for the every single knowledge that you pass own

    Like

    Comment by Jawwad hussain — March 20, 2017 @ 7:12 PM

  2. Assalmualykum sir kya hal hain aap k men sargodha sy hon aur mikrotik rb 951ui-2hnd use kr rha hon for parsonal use mera masla yeh he k meny 1 d link router wifi hay lgaya he aur is men sy tp link 5210 lgayi he aur hotspot configr h mgr mery user disconet ho jaty hen khas kr k mobil user mobile user dono device sy conect hoty hen d link inner use k lya aur tplink outer k lya h sir koi hal bta den “waslam”

    On Mar 20, 2017 4:36 PM, “Syed Jahanzaib Personal Blog to Share Knowledge !” wrote:

    > Syed Jahanzaib / Pinochio~:) posted: ” Video of code working is available > at > https://youtu.be/SlryR7ykSqw [Watch in 720p HD or above to view > proper text] https://youtu.be/SlryR7ykSqw Sharing Some Knowledge! Last > week, I made an PPPoE Dialer program in C#. This code can create / dial ” >

    Like

    Comment by M Faheem — March 22, 2017 @ 3:54 AM

  3. Error 1 Unable to create a manifest resource name for “D:\v-project\pppoe dialer project by zaib – 15-3-2017.resx”. Could not find file ‘D:\v-project\pppoe dialer project by zaib – 15-3-2017.cs’. pppoe dialer – zaib last
    PLZ SOLVE THIS

    Like

    Comment by Aftab Ahmed — April 5, 2017 @ 4:22 PM


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: