Imported Claus Isager's CICRadarR

This commit is contained in:
Claus Isager 2015-03-27 08:39:50 +01:00 committed by Jakob Aarøe Dam
commit 249ae5818b
156 changed files with 10807 additions and 0 deletions

20
CICRadarR.sln Normal file
View file

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CICRadarR", "CICRadarR\CICRadarR.vbproj", "{04C6C533-9FEA-41B2-B554-A166C7C7FE32}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|x86.ActiveCfg = Debug|x86
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Debug|x86.Build.0 = Debug|x86
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|x86.ActiveCfg = Release|x86
{04C6C533-9FEA-41B2-B554-A166C7C7FE32}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

BIN
CICRadarR.suo Normal file

Binary file not shown.

60
CICRadarR/CICRadarR.Designer.vb generated Normal file
View file

@ -0,0 +1,60 @@
Imports System.ServiceProcess
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class CICRadarR
Inherits System.ServiceProcess.ServiceBase
'UserService overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
' The main entry point for the process
<MTAThread()> _
<System.Diagnostics.DebuggerNonUserCode()> _
Shared Sub Main()
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
' More than one NT Service may run within the same process. To add
' another service to this process, change the following line to
' create a second service object. For example,
'
' ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
'
ServicesToRun = New System.ServiceProcess.ServiceBase() {New CICRadarR}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
End Sub
'Required by the Component Designer
Private components As System.ComponentModel.IContainer
' NOTE: The following procedure is required by the Component Designer
' It can be modified using the Component Designer.
' Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.TimerCleanUpHash = New System.Timers.Timer()
CType(Me.TimerCleanUpHash, System.ComponentModel.ISupportInitialize).BeginInit()
'
'TimerCleanUpHash
'
Me.TimerCleanUpHash.Enabled = True
Me.TimerCleanUpHash.Interval = 60000.0R
'
'CICRadarR
'
Me.ServiceName = "Service1"
CType(Me.TimerCleanUpHash, System.ComponentModel.ISupportInitialize).EndInit()
End Sub
Friend WithEvents TimerCleanUpHash As System.Timers.Timer
End Class

126
CICRadarR/CICRadarR.resx Normal file
View file

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="TimerCleanUpHash.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

BIN
CICRadarR/CICRadarR.suo Normal file

Binary file not shown.

1174
CICRadarR/CICRadarR.vb Normal file

File diff suppressed because it is too large Load diff

162
CICRadarR/CICRadarR.vbproj Normal file
View file

@ -0,0 +1,162 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>
</SchemaVersion>
<ProjectGuid>{04C6C533-9FEA-41B2-B554-A166C7C7FE32}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>CICRadarR.CICRadarR</StartupObject>
<RootNamespace>CICRadarR</RootNamespace>
<AssemblyName>CICRadarR</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Console</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>CICRadarR.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>CICRadarR.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.Drawing" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Diagnostics" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="Conversion.vb" />
<Compile Include="VendorSpefic.vb" />
<Compile Include="Crypto.vb" />
<Compile Include="IniFileVb.vb" />
<Compile Include="Log.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="CICRadarR.vb">
<SubType>Component</SubType>
</Compile>
<Compile Include="CICRadarR.Designer.vb">
<DependentUpon>CICRadarR.vb</DependentUpon>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="NASAuthList.vb" />
<Compile Include="ProjectInstaller.Designer.vb">
<DependentUpon>ProjectInstaller.vb</DependentUpon>
</Compile>
<Compile Include="ProjectInstaller.vb">
<SubType>Component</SubType>
</Compile>
<Compile Include="RADIUSAttributes.vb" />
<Compile Include="RADIUSPacket.vb" />
<Compile Include="RADIUSServer.vb" />
<Compile Include="SmsClass.vb" />
<Compile Include="TestService.Designer.vb">
<DependentUpon>TestService.vb</DependentUpon>
</Compile>
<Compile Include="TestService.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="UDPServer.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="CICRadarR.resx">
<DependentUpon>CICRadarR.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="ProjectInstaller.resx">
<DependentUpon>ProjectInstaller.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TestService.resx">
<DependentUpon>TestService.vb</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\app.manifest" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

56
CICRadarR/Conversion.vb Normal file
View file

@ -0,0 +1,56 @@

Friend Class Conversion
Friend Shared Function ConvertToString(ByRef bytes() As Byte) As String
Dim k As New System.Text.StringBuilder
Dim i As Integer
For i = 0 To bytes.Length - 1 : k.Append(Chr(bytes(i))) : Next
Return k.ToString
End Function
Friend Shared Function ConvertToBytes(ByVal str As String) As Byte()
Dim res() As Byte = {}
Array.Resize(Of Byte)(res, str.Length)
Dim i As Integer
For i = 0 To res.Length - 1
res(i) = Convert.ToByte(str.Chars(i))
Next
Return res
End Function
Friend Shared Function ConvertToDateTime(ByVal value As String) As DateTime
Dim ret As DateTime
value = LCase(value)
Try
value = Replace(value, "utc", "")
value = Replace(value, "mon", "")
value = Replace(value, "tue", "")
value = Replace(value, "wed", "")
value = Replace(value, "thu", "")
value = Replace(value, "fri", "")
value = Replace(value, "sat", "")
value = Replace(value, "sun", "")
value = Replace(value, "jan", "1/")
value = Replace(value, "feb", "2/")
value = Replace(value, "mar", "3/")
value = Replace(value, "apr", "4/")
value = Replace(value, "may", "5/")
value = Replace(value, "jun", "6/")
value = Replace(value, "jul", "7/")
value = Replace(value, "aug", "8/")
value = Replace(value, "sep", "9/")
value = Replace(value, "oct", "10/")
value = Replace(value, "nov", "11/")
value = Replace(value, "dec", "12/")
Do While InStr(value, " ") <> 0
value = Replace(value, " ", " ")
Loop
value = Replace(value, "/ ", "/")
ret = Convert.ToDateTime(value)
Catch ex As Exception
ret = Nothing
End Try
Return ret
End Function
End Class

344
CICRadarR/Crypto.vb Normal file
View file

@ -0,0 +1,344 @@
Imports System
Imports System.IO
Imports System.Security.Cryptography
'
' encrypt/decrypt functions
' Parameter checks and error handling
' are ommited for better readability
'
Public Class EncDec
' Encrypt a byte array into a byte array using a key and an IV
Public Shared Function Encrypt(ByVal clearData As Byte(), ByVal Key As Byte(), ByVal IV As Byte()) As Byte()
' Create a MemoryStream to accept the encrypted bytes
Dim ms As New MemoryStream()
' Create a symmetric algorithm.
' We are going to use Rijndael because it is strong and
' available on all platforms.
' You can use other algorithms, to do so substitute the
' next line with something like
' TripleDES alg = TripleDES.Create();
Dim alg As Rijndael = Rijndael.Create()
' Now set the key and the IV.
' We need the IV (Initialization Vector) because
' the algorithm is operating in its default
' mode called CBC (Cipher Block Chaining).
' The IV is XORed with the first block (8 byte)
' of the data before it is encrypted, and then each
' encrypted block is XORed with the
' following block of plaintext.
' This is done to make encryption more secure.
' There is also a mode called ECB which does not need an IV,
' but it is much less secure.
alg.Key = Key
alg.IV = IV
' Create a CryptoStream through which we are going to be
' pumping our data.
' CryptoStreamMode.Write means that we are going to be
' writing data to the stream and the output will be written
' in the MemoryStream we have provided.
Dim cs As New CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write)
' Write the data and make it do the encryption
cs.Write(clearData, 0, clearData.Length)
' Close the crypto stream (or do FlushFinalBlock).
' This will tell it that we have done our encryption and
' there is no more data coming in,
' and it is now a good time to apply the padding and
' finalize the encryption process.
cs.Close()
' Now get the encrypted data from the MemoryStream.
' Some people make a mistake of using GetBuffer() here,
' which is not the right way.
Dim encryptedData As Byte() = ms.ToArray()
Return encryptedData
End Function
' Encrypt a string into a string using a password
' Uses Encrypt(byte[], byte[], byte[])
Public Shared Function Encrypt(ByVal clearText As String, ByVal Password As String) As String
' First we need to turn the input string into a byte array.
Dim clearBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(clearText)
' Then, we need to turn the password into Key and IV
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the encryption using the
' function that accepts byte arrays.
' Using PasswordDeriveBytes object we are first getting
' 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by default
' 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is
' 8 bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off
' the algorithm to find out the sizes.
Dim encryptedData As Byte() = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16))
' Now we need to turn the resulting byte array into a string.
' A common mistake would be to use an Encoding class for that.
'It does not work because not all byte values can be
' represented by characters.
' We are going to be using Base64 encoding that is designed
'exactly for what we are trying to do.
Return Convert.ToBase64String(encryptedData)
End Function
' Encrypt bytes into bytes using a password
' Uses Encrypt(byte[], byte[], byte[])
Public Shared Function Encrypt(ByVal clearData As Byte(), ByVal Password As String) As Byte()
' We need to turn the password into Key and IV.
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the encryption using the function
' that accepts byte arrays.
' Using PasswordDeriveBytes object we are first getting
' 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by default
' 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is 8
' bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off the
' algorithm to find out the sizes.
Return Encrypt(clearData, pdb.GetBytes(32), pdb.GetBytes(16))
End Function
' Encrypt a file into another file using a password
Public Shared Sub Encrypt(ByVal fileIn As String, ByVal fileOut As String, ByVal Password As String)
' First we are going to open the file streams
Dim fsIn As New FileStream(fileIn, FileMode.Open, FileAccess.Read)
Dim fsOut As New FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write)
' Then we are going to derive a Key and an IV from the
' Password and create an algorithm
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
Dim alg As Rijndael = Rijndael.Create()
alg.Key = pdb.GetBytes(32)
alg.IV = pdb.GetBytes(16)
' Now create a crypto stream through which we are going
' to be pumping data.
' Our fileOut is going to be receiving the encrypted bytes.
Dim cs As New CryptoStream(fsOut, alg.CreateEncryptor(), CryptoStreamMode.Write)
' Now will will initialize a buffer and will be processing
' the input file in chunks.
' This is done to avoid reading the whole file (which can
' be huge) into memory.
Dim bufferLen As Integer = 4096
Dim buffer As Byte() = New Byte(bufferLen - 1) {}
Dim bytesRead As Integer
Do
' read a chunk of data from the input file
bytesRead = fsIn.Read(buffer, 0, bufferLen)
' encrypt it
cs.Write(buffer, 0, bytesRead)
Loop While bytesRead <> 0
' close everything
' this will also close the unrelying fsOut stream
cs.Close()
fsIn.Close()
End Sub
' Decrypt a byte array into a byte array using a key and an IV
Public Shared Function Decrypt(ByVal cipherData As Byte(), ByVal Key As Byte(), ByVal IV As Byte()) As Byte()
' Create a MemoryStream that is going to accept the
' decrypted bytes
Dim ms As New MemoryStream()
' Create a symmetric algorithm.
' We are going to use Rijndael because it is strong and
' available on all platforms.
' You can use other algorithms, to do so substitute the next
' line with something like
' TripleDES alg = TripleDES.Create();
Dim alg As Rijndael = Rijndael.Create()
' Now set the key and the IV.
' We need the IV (Initialization Vector) because the algorithm
' is operating in its default
' mode called CBC (Cipher Block Chaining). The IV is XORed with
' the first block (8 byte)
' of the data after it is decrypted, and then each decrypted
' block is XORed with the previous
' cipher block. This is done to make encryption more secure.
' There is also a mode called ECB which does not need an IV,
' but it is much less secure.
alg.Key = Key
alg.IV = IV
' Create a CryptoStream through which we are going to be
' pumping our data.
' CryptoStreamMode.Write means that we are going to be
' writing data to the stream
' and the output will be written in the MemoryStream
' we have provided.
Dim cs As New CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write)
' Write the data and make it do the decryption
cs.Write(cipherData, 0, cipherData.Length)
' Close the crypto stream (or do FlushFinalBlock).
' This will tell it that we have done our decryption
' and there is no more data coming in,
' and it is now a good time to remove the padding
' and finalize the decryption process.
cs.Close()
' Now get the decrypted data from the MemoryStream.
' Some people make a mistake of using GetBuffer() here,
' which is not the right way.
Dim decryptedData As Byte() = ms.ToArray()
Return decryptedData
End Function
' Decrypt a string into a string using a password
' Uses Decrypt(byte[], byte[], byte[])
Public Shared Function Decrypt(ByVal cipherText As String, ByVal Password As String) As String
' First we need to turn the input string into a byte array.
' We presume that Base64 encoding was used
Dim cipherBytes As Byte() = Convert.FromBase64String(cipherText)
' Then, we need to turn the password into Key and IV
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the decryption using
' the function that accepts byte arrays.
' Using PasswordDeriveBytes object we are first
' getting 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by
' default 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is
' 8 bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off
' the algorithm to find out the sizes.
Dim decryptedData As Byte() = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16))
' Now we need to turn the resulting byte array into a string.
' A common mistake would be to use an Encoding class for that.
' It does not work
' because not all byte values can be represented by characters.
' We are going to be using Base64 encoding that is
' designed exactly for what we are trying to do.
Return System.Text.Encoding.Unicode.GetString(decryptedData)
End Function
' Decrypt bytes into bytes using a password
' Uses Decrypt(byte[], byte[], byte[])
Public Shared Function Decrypt(ByVal cipherData As Byte(), ByVal Password As String) As Byte()
' We need to turn the password into Key and IV.
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the Decryption using the
'function that accepts byte arrays.
' Using PasswordDeriveBytes object we are first getting
' 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by default
' 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is
' 8 bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off the
' algorithm to find out the sizes.
Return Decrypt(cipherData, pdb.GetBytes(32), pdb.GetBytes(16))
End Function
' Decrypt a file into another file using a password
Public Shared Sub Decrypt(ByVal fileIn As String, ByVal fileOut As String, ByVal Password As String)
' First we are going to open the file streams
Dim fsIn As New FileStream(fileIn, FileMode.Open, FileAccess.Read)
Dim fsOut As New FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write)
' Then we are going to derive a Key and an IV from
' the Password and create an algorithm
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
Dim alg As Rijndael = Rijndael.Create()
alg.Key = pdb.GetBytes(32)
alg.IV = pdb.GetBytes(16)
' Now create a crypto stream through which we are going
' to be pumping data.
' Our fileOut is going to be receiving the Decrypted bytes.
Dim cs As New CryptoStream(fsOut, alg.CreateDecryptor(), CryptoStreamMode.Write)
' Now will will initialize a buffer and will be
' processing the input file in chunks.
' This is done to avoid reading the whole file (which can be
' huge) into memory.
Dim bufferLen As Integer = 4096
Dim buffer As Byte() = New Byte(bufferLen - 1) {}
Dim bytesRead As Integer
Do
' read a chunk of data from the input file
bytesRead = fsIn.Read(buffer, 0, bufferLen)
' Decrypt it
cs.Write(buffer, 0, bytesRead)
Loop While bytesRead <> 0
' close everything
cs.Close()
' this will also close the unrelying fsOut stream
fsIn.Close()
End Sub
End Class

376
CICRadarR/IniFileVb.vb Normal file
View file

@ -0,0 +1,376 @@
' Programmer: Ludvik Jerabek
' Date: 08\23\2010
' Purpose: Allow INI manipulation in .NET
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Collections
Imports System.Diagnostics
' IniFile class used to read and write ini files by loading the file into memory
Public Class IniFile
' List of IniSection objects keeps track of all the sections in the INI file
Private m_sections As Hashtable
' Public constructor
Public Sub New()
m_sections = New Hashtable(StringComparer.InvariantCultureIgnoreCase)
End Sub
' Loads the Reads the data in the ini file into the IniFile object
Public Sub Load(ByVal sFileName As String, Optional ByVal bMerge As Boolean = False)
If Not bMerge Then
RemoveAllSections()
End If
' Clear the object...
Dim tempsection As IniSection = Nothing
Dim oReader As New StreamReader(sFileName)
Dim regexcomment As New Regex("^([\s]*#.*)", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
' Broken but left for history
'Dim regexsection As New Regex("\[[\s]*([^\[\s].*[^\s\]])[\s]*\]", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
Dim regexsection As New Regex("^[\s]*\[[\s]*([^\[\s].*[^\s\]])[\s]*\][\s]*$", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
Dim regexkey As New Regex("^\s*([^=\s]*)[^=]*=(.*)", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
While Not oReader.EndOfStream
Dim line As String = oReader.ReadLine()
If line <> String.Empty Then
Dim m As Match = Nothing
If regexcomment.Match(line).Success Then
m = regexcomment.Match(line)
Trace.WriteLine(String.Format("Skipping Comment: {0}", m.Groups(0).Value))
ElseIf regexsection.Match(line).Success Then
m = regexsection.Match(line)
Trace.WriteLine(String.Format("Adding section [{0}]", m.Groups(1).Value))
tempsection = AddSection(m.Groups(1).Value)
ElseIf regexkey.Match(line).Success AndAlso tempsection IsNot Nothing Then
m = regexkey.Match(line)
Trace.WriteLine(String.Format("Adding Key [{0}]=[{1}]", m.Groups(1).Value, m.Groups(2).Value))
tempsection.AddKey(m.Groups(1).Value).Value = m.Groups(2).Value
ElseIf tempsection IsNot Nothing Then
' Handle Key without value
Trace.WriteLine(String.Format("Adding Key [{0}]", line))
tempsection.AddKey(line)
Else
' This should not occur unless the tempsection is not created yet...
Trace.WriteLine(String.Format("Skipping unknown type of data: {0}", line))
End If
End If
End While
oReader.Close()
End Sub
' Used to save the data back to the file or your choice
Public Sub Save(ByVal sFileName As String)
Dim oWriter As New StreamWriter(sFileName, False)
For Each s As IniSection In Sections
Trace.WriteLine(String.Format("Writing Section: [{0}]", s.Name))
oWriter.WriteLine(String.Format("[{0}]", s.Name))
For Each k As IniSection.IniKey In s.Keys
If k.Value <> String.Empty Then
Trace.WriteLine(String.Format("Writing Key: {0}={1}", k.Name, k.Value))
oWriter.WriteLine(String.Format("{0}={1}", k.Name, k.Value))
Else
Trace.WriteLine(String.Format("Writing Key: {0}", k.Name))
oWriter.WriteLine(String.Format("{0}", k.Name))
End If
Next
Next
oWriter.Close()
End Sub
' Gets all the sections
Public ReadOnly Property Sections() As System.Collections.ICollection
Get
Return m_sections.Values
End Get
End Property
' Adds a section to the IniFile object, returns a IniSection object to the new or existing object
Public Function AddSection(ByVal sSection As String) As IniSection
Dim s As IniSection = Nothing
sSection = sSection.Trim()
' Trim spaces
If m_sections.ContainsKey(sSection) Then
s = DirectCast(m_sections(sSection), IniSection)
Else
s = New IniSection(Me, sSection)
m_sections(sSection) = s
End If
Return s
End Function
' Removes a section by its name sSection, returns trus on success
Public Function RemoveSection(ByVal sSection As String) As Boolean
sSection = sSection.Trim()
Return RemoveSection(GetSection(sSection))
End Function
' Removes section by object, returns trus on success
Public Function RemoveSection(ByVal Section As IniSection) As Boolean
If Section IsNot Nothing Then
Try
m_sections.Remove(Section.Name)
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Removes all existing sections, returns trus on success
Public Function RemoveAllSections() As Boolean
m_sections.Clear()
Return (m_sections.Count = 0)
End Function
' Returns an IniSection to the section by name, NULL if it was not found
Public Function GetSection(ByVal sSection As String) As IniSection
sSection = sSection.Trim()
' Trim spaces
If m_sections.ContainsKey(sSection) Then
Return DirectCast(m_sections(sSection), IniSection)
End If
Return Nothing
End Function
' Returns a KeyValue in a certain section
Public Function GetKeyValue(ByVal sSection As String, ByVal sKey As String) As String
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
Dim k As IniSection.IniKey = s.GetKey(sKey)
If k IsNot Nothing Then
Return k.Value
End If
End If
Return String.Empty
End Function
' Sets a KeyValuePair in a certain section
Public Function SetKeyValue(ByVal sSection As String, ByVal sKey As String, ByVal sValue As String) As Boolean
Dim s As IniSection = AddSection(sSection)
If s IsNot Nothing Then
Dim k As IniSection.IniKey = s.AddKey(sKey)
If k IsNot Nothing Then
k.Value = sValue
Return True
End If
End If
Return False
End Function
' Renames an existing section returns true on success, false if the section didn't exist or there was another section with the same sNewSection
Public Function RenameSection(ByVal sSection As String, ByVal sNewSection As String) As Boolean
' Note string trims are done in lower calls.
Dim bRval As Boolean = False
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
bRval = s.SetName(sNewSection)
End If
Return bRval
End Function
' Renames an existing key returns true on success, false if the key didn't exist or there was another section with the same sNewKey
Public Function RenameKey(ByVal sSection As String, ByVal sKey As String, ByVal sNewKey As String) As Boolean
' Note string trims are done in lower calls.
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
Dim k As IniSection.IniKey = s.GetKey(sKey)
If k IsNot Nothing Then
Return k.SetName(sNewKey)
End If
End If
Return False
End Function
' Remove a key by section name and key name
Public Function RemoveKey(ByVal sSection As String, ByVal sKey As String) As Boolean
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
Return s.RemoveKey(sKey)
End If
Return False
End Function
' IniSection class
Public Class IniSection
' IniFile IniFile object instance
Private m_pIniFile As IniFile
' Name of the section
Private m_sSection As String
' List of IniKeys in the section
Private m_keys As Hashtable
' Constuctor so objects are internally managed
Protected Friend Sub New(ByVal parent As IniFile, ByVal sSection As String)
m_pIniFile = parent
m_sSection = sSection
m_keys = New Hashtable(StringComparer.InvariantCultureIgnoreCase)
End Sub
' Returns all the keys in a section
Public ReadOnly Property Keys() As System.Collections.ICollection
Get
Return m_keys.Values
End Get
End Property
' Returns the section name
Public ReadOnly Property Name() As String
Get
Return m_sSection
End Get
End Property
' Adds a key to the IniSection object, returns a IniKey object to the new or existing object
Public Function AddKey(ByVal sKey As String) As IniKey
sKey = sKey.Trim()
Dim k As IniSection.IniKey = Nothing
If sKey.Length <> 0 Then
If m_keys.ContainsKey(sKey) Then
k = DirectCast(m_keys(sKey), IniKey)
Else
k = New IniSection.IniKey(Me, sKey)
m_keys(sKey) = k
End If
End If
Return k
End Function
' Removes a single key by string
Public Function RemoveKey(ByVal sKey As String) As Boolean
Return RemoveKey(GetKey(sKey))
End Function
' Removes a single key by IniKey object
Public Function RemoveKey(ByVal Key As IniKey) As Boolean
If Key IsNot Nothing Then
Try
m_keys.Remove(Key.Name)
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Removes all the keys in the section
Public Function RemoveAllKeys() As Boolean
m_keys.Clear()
Return (m_keys.Count = 0)
End Function
' Returns a IniKey object to the key by name, NULL if it was not found
Public Function GetKey(ByVal sKey As String) As IniKey
sKey = sKey.Trim()
If m_keys.ContainsKey(sKey) Then
Return DirectCast(m_keys(sKey), IniKey)
End If
Return Nothing
End Function
' Sets the section name, returns true on success, fails if the section
' name sSection already exists
Public Function SetName(ByVal sSection As String) As Boolean
sSection = sSection.Trim()
If sSection.Length <> 0 Then
' Get existing section if it even exists...
Dim s As IniSection = m_pIniFile.GetSection(sSection)
If s IsNot Me AndAlso s IsNot Nothing Then
Return False
End If
Try
' Remove the current section
m_pIniFile.m_sections.Remove(m_sSection)
' Set the new section name to this object
m_pIniFile.m_sections(sSection) = Me
' Set the new section name
m_sSection = sSection
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Returns the section name
Public Function GetName() As String
Return m_sSection
End Function
' IniKey class
Public Class IniKey
' Name of the Key
Private m_sKey As String
' Value associated
Private m_sValue As String
' Pointer to the parent CIniSection
Private m_section As IniSection
' Constuctor so objects are internally managed
Protected Friend Sub New(ByVal parent As IniSection, ByVal sKey As String)
m_section = parent
m_sKey = sKey
End Sub
' Returns the name of the Key
Public ReadOnly Property Name() As String
Get
Return m_sKey
End Get
End Property
' Sets or Gets the value of the key
Public Property Value() As String
Get
Return m_sValue
End Get
Set(ByVal value As String)
m_sValue = value
End Set
End Property
' Sets the value of the key
Public Sub SetValue(ByVal sValue As String)
m_sValue = sValue
End Sub
' Returns the value of the Key
Public Function GetValue() As String
Return m_sValue
End Function
' Sets the key name
' Returns true on success, fails if the section name sKey already exists
Public Function SetName(ByVal sKey As String) As Boolean
sKey = sKey.Trim()
If sKey.Length <> 0 Then
Dim k As IniKey = m_section.GetKey(sKey)
If k IsNot Me AndAlso k IsNot Nothing Then
Return False
End If
Try
' Remove the current key
m_section.m_keys.Remove(m_sKey)
' Set the new key name to this object
m_section.m_keys(sKey) = Me
' Set the new key name
m_sKey = sKey
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Returns the name of the Key
Public Function GetName() As String
Return m_sKey
End Function
End Class
' End of IniKey class
End Class
' End of IniSection class
End Class
' End of IniFile class

44
CICRadarR/Log.vb Normal file
View file

@ -0,0 +1,44 @@
Imports System
Imports System.IO
Imports System.Data
Namespace LogFile
Public Class LogWriter
Public filePath As String
Private fileStream As FileStream
Private streamWriter As StreamWriter
Public Sub OpenFile()
Try
Dim strPath As String
strPath = filePath
If System.IO.File.Exists(strPath) Then
fileStream = New FileStream(strPath, FileMode.Append, FileAccess.Write)
Else
fileStream = New FileStream(strPath, FileMode.Create, FileAccess.Write)
End If
streamWriter = New StreamWriter(fileStream)
Catch
End Try
End Sub
Public Sub WriteLog(ByVal strComments As String)
Try
OpenFile()
streamWriter.WriteLine(strComments)
CloseFile()
Catch
End Try
End Sub
Public Sub CloseFile()
Try
streamWriter.Close()
fileStream.Close()
Catch
End Try
End Sub
End Class
End Namespace

View file

@ -0,0 +1,13 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.1008
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>TestService</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View file

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("CICRadarR")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Microsoft")>
<Assembly: AssemblyProduct("CICRadarR")>
<Assembly: AssemblyCopyright("Copyright © Microsoft 2012")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("ce54c196-bc53-47c7-9e19-91495f15dcb6")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View file

@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.1008
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CICRadarR.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View file

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View file

@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.1008
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.CICRadarR.My.MySettings
Get
Return Global.CICRadarR.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>

17
CICRadarR/NASAuthList.vb Normal file
View file

@ -0,0 +1,17 @@
Public Class NASAuthList
Inherits System.Collections.Generic.Dictionary(Of String, String)
Public Sub AddSharedSecret(ByVal nasIP As String, ByVal secret As String)
If MyBase.ContainsKey(nasIP) Then
MyBase.Item(nasIP) = secret
Else
MyBase.Add(nasIP, secret)
End If
End Sub
Public Function GetSharedSecret(ByVal nasIP As String) As String
Dim res As String = ""
MyBase.TryGetValue(nasIP, res)
Return res
End Function
End Class

48
CICRadarR/ProjectInstaller.Designer.vb generated Normal file
View file

@ -0,0 +1,48 @@
<System.ComponentModel.RunInstaller(True)> Partial Class ProjectInstaller
Inherits System.Configuration.Install.Installer
'Installer overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Component Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Component Designer
'It can be modified using the Component Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller()
Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller()
'
'ServiceProcessInstaller1
'
Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem
Me.ServiceProcessInstaller1.Password = Nothing
Me.ServiceProcessInstaller1.Username = Nothing
'
'ServiceInstaller1
'
Me.ServiceInstaller1.Description = "Radius Server for SMS Token"
Me.ServiceInstaller1.DisplayName = "CIC Radius Server"
Me.ServiceInstaller1.ServiceName = "CICRadiusR"
Me.ServiceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic
'
'ProjectInstaller
'
Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1})
End Sub
Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller
Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller
End Class

View file

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ServiceProcessInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="ServiceInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>188, 17</value>
</metadata>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View file

@ -0,0 +1,16 @@
Imports System.ComponentModel
Imports System.Configuration.Install
Public Class ProjectInstaller
Public Sub New()
MyBase.New()
'This call is required by the Component Designer.
InitializeComponent()
'Add initialization code after the call to InitializeComponent
End Sub
End Class

View file

@ -0,0 +1,312 @@
Imports Microsoft.VisualBasic.Conversion
Imports CICRadarR.Conversion
Public Class RADIUSAttributes
Inherits List(Of RADIUSAttribute)
Friend Function LoadAttributes(ByRef data() As Byte) As Boolean
Dim offset As Integer = 20
Dim attr As RADIUSAttribute
Dim result As Boolean = True
Do While offset < data.Length And result
If offset + 1 > data.Length Then result = False
If result Then
If data(offset + 1) < 3 Then result = False
End If
If result Then
If offset + data(offset + 1) > data.Length Then result = False
End If
If result Then
attr = New RADIUSAttribute(data, offset)
Me.Add(attr)
offset += data(offset + 1)
End If
Loop
Return result
End Function
Public ReadOnly Property Length() As Integer
Get
Dim result As Integer = 0
For Each attr In Me
result += attr.Length
Next
Return result
End Get
End Property
Friend ReadOnly Property Bytes() As Byte()
Get
Dim result() As Byte = {}
Dim offset As Integer = 0
Array.Resize(result, Me.Length)
For Each attr In Me
Array.Copy(attr.Bytes, 0, result, offset, attr.Length)
offset += attr.Length
Next
Return result
End Get
End Property
' fixed function so it return correct value (CI)
Public Function AttributeExists(ByVal type As RadiusAttributeType) As Boolean
Dim attr As RADIUSAttribute
Dim result As Boolean = False
For Each attr In Me
result = (attr.Type = type)
If result = True Then
Return True
End If
Next
Return False
End Function
Public Function GetFirstAttribute(ByVal type As RadiusAttributeType) As RADIUSAttribute
Dim atr As RADIUSAttribute
For Each atr In Me
If atr.Type = type Then Return atr
Next
Return Nothing
End Function
Public Function GetAllAttributes(ByVal type As RadiusAttributeType) As RADIUSAttributes
Dim ret As New RADIUSAttributes
Dim atr As RADIUSAttribute
For Each atr In Me
If atr.Type = type Then ret.Add(atr)
Next
Return ret
End Function
'Public Function GetAllVSAs() As RADIUSAttributes
' Dim ret As New RADIUSAttributes
' Dim atr As RADIUSAttribute
' For Each atr In Me
' If atr.Type = RadiusAttributeType.VendorSpecific Then ret.Add(atr)
' Next
' Return ret
'End Function
'Public Function GetAllCiscoAVPairs() As RADIUSAttributes
' Dim ret As New RADIUSAttributes
' Dim atr As RADIUSAttribute
' For Each atr In Me
' If atr.GetCiscoAVPair IsNot Nothing Then ret.Add(atr)
' Next
' Return ret
'End Function
'Public Function GetFirstCiscoAVPair(ByVal type As CiscoAVPairType) As CiscoAVPair
' Dim atr As RADIUSAttribute
' Dim avpair As CiscoAVPair
' For Each atr In Me
' If atr.Type = RadiusAttributeType.VendorSpecific Then
' avpair = atr.GetCiscoAVPair
' If avpair IsNot Nothing Then
' If avpair.VendorType = type Then Return avpair
' End If
' End If
' Next
' Return Nothing
'End Function
'Public Function GetFirstCiscoAVPair(ByVal name As String) As CiscoAVPair
' Dim atr As RADIUSAttribute
' Dim avpair As CiscoAVPair
' For Each atr In Me
' If atr.Type = RadiusAttributeType.VendorSpecific Then
' avpair = atr.GetCiscoAVPair
' If avpair IsNot Nothing Then
' If avpair.VendorName = name Then Return avpair
' End If
' End If
' Next
' Return Nothing
'End Function
End Class
Public Class RADIUSAttribute
Private mType As Byte
Private mLength As Byte
Private mValue() As Byte = {0}
Friend Sub New(ByRef data() As Byte, ByVal offset As Integer)
mLength = data(offset + 1)
Array.Resize(mValue, mLength - 2)
Array.Copy(data, offset + 2, mValue, 0, mLength - 2)
mType = data(offset)
End Sub
Public Sub New(ByVal type As RadiusAttributeType, ByVal data() As Byte)
CommonNew(type, data)
End Sub
Public Sub New(ByVal type As RadiusAttributeType, ByVal data As String)
Dim newdata() As Byte = ConvertToBytes(data)
CommonNew(type, newdata)
End Sub
Public Sub New(ByVal type As RadiusAttributeType, ByVal data As Long)
Dim newdata() As Byte = {data \ 16777216, _
(data Mod 16777216) \ 65536, _
(data Mod 65536) \ 256, _
(data Mod 256)}
CommonNew(type, newdata)
End Sub
Private Sub CommonNew(ByVal type As Byte, ByRef data() As Byte)
If data.Length > 253 Then
mType = 0
mLength = 3
Else
mType = type
Array.Resize(mValue, data.Length)
Array.Copy(data, 0, mValue, 0, data.Length)
mLength = mValue.Length + 2
End If
End Sub
Public ReadOnly Property Length() As Byte
Get
Return mLength
End Get
End Property
Public ReadOnly Property Type() As RadiusAttributeType
Get
Return mType
End Get
End Property
Friend ReadOnly Property Bytes() As Byte()
Get
Dim result() As Byte = {}
Array.Resize(result, mLength)
Array.Copy(mValue, 0, result, 2, mLength - 2)
result(0) = mType
result(1) = mLength
Return result
End Get
End Property
Public ReadOnly Property Value() As Byte()
Get
Return mValue
End Get
End Property
Public Function GetString() As String
Return ConvertToString(mValue)
End Function
Public Function GetLong() As Long
If mLength <> 6 Then Return 0
Return mValue(0) * 16777216 + _
mValue(1) * 65536 + _
mValue(2) * 256 + _
mValue(3)
End Function
Public Function GetIPAddress() As String
If mLength <> 6 Then Return "0.0.0.0"
Return mValue(0) & "." & mValue(1) & "." & mValue(2) & "." & mValue(3)
End Function
Public Function GetHex() As String
Dim i As Integer
Dim result As String = ""
Dim k As String
For i = 0 To mLength - 3
k = Hex(mValue(i))
If k.Length = 1 Then k = "0" & k
result = result & k & " "
Next
Return result
End Function
Public Function GetTrimHex() As String
Return Replace(GetHex, " ", "")
End Function
Public Function GetVendorSpecific() As VendorSpecificAttribute
Return New VendorSpecificAttribute(mValue)
End Function
'Public Function GetCiscoAVPair() As CiscoAVPair
' Return New CiscoAVPair(mValue)
'End Function
'Public Function GetVendorSpecific() As CiscoAVPair
' Return New CiscoAVPair(mValue)
'End Function
'Public Function CiscoAVPairTypeLookahead() As CiscoAVPairType
' If mLength < 8 Then Return CiscoAVPairType.Invalid
' If mValue(3) <> 9 Then Return CiscoAVPairType.Invalid
' If mValue(2) <> 0 Then Return CiscoAVPairType.Invalid
' If mValue(1) <> 0 Then Return CiscoAVPairType.Invalid
' If mValue(0) <> 0 Then Return CiscoAVPairType.Invalid
' Return mValue(4)
'End Function
End Class
Public Enum RadiusAttributeType As Byte
Invalid = 0
UserName = 1
UserPassword = 2
CHAPPassword = 3
NASIPAddress = 4
NASPort = 5
ServiceType = 6
FramedProtocol = 7
FramedIPAddress = 8
FramedIPNetmask = 9
FramedRouting = 10
FilterId = 11
FramedMTU = 12
FramedCompression = 13
LoginIPHost = 14
LoginService = 15
LoginTCPPort = 16
ReplyMessage = 18
CallbackNumber = 19
CallbackId = 20
FramedRoute = 22
FramedIPXNetwork = 23
State = 24
[Class] = 25
VendorSpecific = 26
SessionTimeout = 27
IdleTimeout = 28
TerminationAction = 29
CalledStationId = 30
CallingStationId = 31
NASIdentifier = 32
ProxyState = 33
LoginLATService = 34
LoginLATNode = 35
LoginLATGroup = 36
FramedAppleTalkLink = 37
FramedAppleTalkNetwork = 38
FramedAppleTalkZone = 39
AcctStatusType = 40
AcctDelayTime = 41
AcctInputOctets = 42
AcctOutputOctets = 43
AcctSessionId = 44
AcctAuthentic = 45
AcctSessionTime = 46
AcctInputPackets = 47
AcctOutputPackets = 48
AcctTerminateCause = 49
AcctMultiSessionId = 50
AcctLinkCount = 51
CHAPChallenge = 60
NASPortType = 61
PortLimit = 62
LoginLATPort = 63
MessageAuthenticator = 80
End Enum

249
CICRadarR/RADIUSPacket.vb Normal file
View file

@ -0,0 +1,249 @@
Imports System.Net
Imports System.Security.Cryptography
Imports CICRadarR.Conversion
Public Class RADIUSPacket
Private mCode As RadiusPacketCode
Private mIdentifier As Byte
Private mAuthenticator() As Byte = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Private mAttributes As New RADIUSAttributes
Private mEndPoint As IPEndPoint
Private mIsValid As Boolean
Private mServer As RADIUSServer
Friend Sub New(ByRef data() As Byte, ByVal endPoint As IPEndPoint, ByRef server As RADIUSServer)
'Check validity ...
mIsValid = mAttributes.LoadAttributes(data)
If mIsValid Then
mCode = data(0)
mIdentifier = data(1)
Array.Copy(data, 4, mAuthenticator, 0, 16)
mEndPoint = endPoint
mServer = server
End If
End Sub
Public Sub New(ByVal code As RadiusPacketCode, ByVal identifier As Byte, ByVal attributes As RADIUSAttributes, ByVal endPoint As IPEndPoint)
mCode = code
mIdentifier = identifier
If attributes Is Nothing Then
mAttributes = New RADIUSAttributes
Else
mAttributes = attributes
End If
If endPoint Is Nothing Then
mIsValid = False
Else
mEndPoint = endPoint
mIsValid = True
End If
End Sub
Public ReadOnly Property IsValid() As Boolean
Get
Return mIsValid
End Get
End Property
Public ReadOnly Property Code() As RadiusPacketCode
Get
Return mCode
End Get
End Property
Public ReadOnly Property Identifier() As Byte
Get
Return mIdentifier
End Get
End Property
Public ReadOnly Property Attributes() As RADIUSAttributes
Get
Return mAttributes
End Get
End Property
Public ReadOnly Property Authenticator() As Byte()
Get
Return mAuthenticator
End Get
End Property
Public ReadOnly Property EndPoint() As IPEndPoint
Get
Return mEndPoint
End Get
End Property
''' <summary>
''' Returns the username supplied in an Access Request. Returns
''' Nothing if a User-Name attribute is missing or the packet is not an
''' Access Request.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property UserName() As String
Get
If mCode <> RadiusPacketCode.AccessRequest Then Return Nothing
If mAttributes.GetFirstAttribute(RadiusAttributeType.UserName) Is Nothing Then Return Nothing
Return mAttributes.GetFirstAttribute(RadiusAttributeType.UserName).GetString
End Get
End Property
''' <summary>
''' Returns the password supplied in an Access Request. Returns
''' Nothing is a User-Password attribute is missing or the packet is not
''' an Access Request.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property UserPassword() As String
Get
If mCode <> RadiusPacketCode.AccessRequest Then Return Nothing
If mAttributes.GetFirstAttribute(RadiusAttributeType.UserPassword) Is Nothing Then Return Nothing
Dim secret As String = mServer.NASList.GetSharedSecret(mEndPoint.Address.ToString)
If secret = "" Then Return Nothing
Dim userpass As Byte() = mAttributes.GetFirstAttribute(RadiusAttributeType.UserPassword).Value
If userpass.Length Mod 16 > 0 Then Return Nothing
Dim hasher As MD5 = MD5.Create
Dim decoded As Byte() = {}
Array.Resize(decoded, userpass.Length)
Dim temp As Byte() = {}
Array.Resize(temp, secret.Length + 16)
Dim segment As Byte() = {}
Array.Resize(segment, 16)
ConvertToBytes(secret).CopyTo(temp, 0)
Dim i As Integer
For i = 0 To userpass.Length \ 16 - 1
If i = 0 Then
mAuthenticator.CopyTo(temp, secret.Length)
Else
Array.Copy(userpass, (i - 1) * 16, temp, secret.Length, 16)
End If
Array.Copy(userpass, i * 16, segment, 0, 16)
Array.Copy(XorBytes(hasher.ComputeHash(temp), segment), 0, decoded, i * 16, 16)
Next
hasher = Nothing
Return ConvertToString(decoded).Trim(Chr(0))
End Get
End Property
Friend Function Bytes() As Byte()
Dim mLength = 20 + mAttributes.Length
Dim result() As Byte = {}
Array.Resize(result, mLength)
result(0) = mCode
result(1) = mIdentifier
result(2) = mLength \ 256
result(3) = mLength Mod 256
mAuthenticator.CopyTo(result, 4)
If mLength > 20 Then mAttributes.Bytes.CopyTo(result, 20)
Return result
End Function
''' <summary>
''' Deprecated. User the UserName and UserPassword properties instead.
''' </summary>
''' <param name="authList"></param>
''' <param name="nasList"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function AuthenticateAccessRequest(ByRef authList As NASAuthList, ByRef nasList As NASAuthList) As Boolean
If authList Is Nothing Then Return False
If nasList Is Nothing Then Return False
If Not mIsValid Then Return False
If mCode <> RadiusPacketCode.AccessRequest Then Return True
Dim secret As String = nasList.GetSharedSecret(mEndPoint.Address.ToString)
If secret = "" Then Return False
Dim username As RADIUSAttribute = mAttributes.GetFirstAttribute(RadiusAttributeType.UserName)
If username Is Nothing Then Return False
Dim userpass As RADIUSAttribute = mAttributes.GetFirstAttribute(RadiusAttributeType.UserPassword)
If userpass Is Nothing Then Return False
Dim password As String = authList.GetSharedSecret(username.GetString)
If password = "" Then Return False
Dim passlen As Integer = password.Length \ 16
If password.Length Mod 16 > 0 Then
passlen += 1
password = password & StrDup(16 - (password.Length Mod 16), Chr(0))
End If
Dim hasher As MD5 = MD5.Create
Dim expect() As Byte = {}
Array.Resize(expect, passlen * 16)
Dim temp() As Byte = {}
Array.Resize(temp, secret.Length + 16)
ConvertToBytes(secret).CopyTo(temp, 0)
Dim i As Integer
For i = 0 To passlen - 1
If i = 0 Then
mAuthenticator.CopyTo(temp, secret.Length)
Else
Array.Copy(expect, (i - 1) * 16, temp, secret.Length, 16)
End If
Array.Copy(XorBytes(hasher.ComputeHash(temp), ConvertToBytes(password.Substring(i * 16, 16))), 0, expect, i * 16, 16)
Next
hasher = Nothing
Return (ConvertToString(expect) = userpass.GetString)
End Function
''' <summary>
''' Accept the access request.
''' </summary>
''' <remarks></remarks>
Public Sub AcceptAccessRequest()
AcceptAccessRequest(Nothing)
End Sub
''' <summary>
''' Accept the access request and include the specified attributes in the RADIUS response.
''' </summary>
''' <param name="attributes">The RADIUS attributes to include with the response.</param>
''' <remarks></remarks>
Public Sub AcceptAccessRequest(ByVal attributes As RADIUSAttributes)
If mCode <> RadiusPacketCode.AccessRequest Then Exit Sub
mServer.SendAsResponse(New RADIUSPacket(RadiusPacketCode.AccessAccept, mIdentifier, attributes, mEndPoint), mAuthenticator)
End Sub
''' <summary>
''' Reject the access request.
''' </summary>
''' <remarks></remarks>
Public Sub RejectAccessRequest()
If mCode <> RadiusPacketCode.AccessRequest Then Exit Sub
mServer.SendAsResponse(New RADIUSPacket(RadiusPacketCode.AccessReject, mIdentifier, Nothing, mEndPoint), mAuthenticator)
End Sub
Private Function XorBytes(ByVal oper1() As Byte, ByVal oper2() As Byte) As Byte()
Dim res() As Byte = {}
If oper1.Length <> oper2.Length Then Return res
Dim i As Integer
Array.Resize(res, oper1.Length)
For i = 0 To oper1.Length - 1
res(i) = oper1(i) Xor oper2(i)
Next
Return res
End Function
End Class
Public Enum RadiusPacketCode As Byte
AccessRequest = 1
AccessAccept = 2
AccessReject = 3
AccountingRequest = 4
AccountingResponse = 5
AccessChallenge = 11
StatusServer = 12
StatusClient = 13
Reserved = 255
End Enum

156
CICRadarR/RADIUSServer.vb Normal file
View file

@ -0,0 +1,156 @@
Imports System.Net
Imports CICRadarR.Conversion
Public Class RADIUSServer
Private mSocket As UDPServer
Private mSecrets As NASAuthList
Private mLastAuthenticator() As Byte = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Public Delegate Sub RADIUSHandler(ByVal packet As RADIUSPacket)
Private HandlePacket As RADIUSHandler
Public Sub New(ByVal portNumber As Integer, ByVal onRADIUSPacket As RADIUSHandler, ByRef secrets As NASAuthList)
mSocket = New UDPServer(portNumber, AddressOf SocketData)
HandlePacket = onRADIUSPacket
mSecrets = secrets
End Sub
Public Sub New(ByVal ipAddress As String, ByVal portNumber As Integer, ByVal onRADIUSPacket As RADIUSHandler, ByRef secrets As NASAuthList)
mSocket = New UDPServer(ipAddress, portNumber, AddressOf SocketData)
HandlePacket = onRADIUSPacket
mSecrets = secrets
End Sub
Friend ReadOnly Property NASList() As NASAuthList
Get
Return mSecrets
End Get
End Property
Public Sub SendAsRequest(ByVal packet As RADIUSPacket)
If packet Is Nothing Then Exit Sub
If Not packet.IsValid Then Exit Sub
Dim data() As Byte = packet.Bytes
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
Dim hash() As Byte = {}
Dim secret As String = mSecrets.GetSharedSecret(packet.EndPoint.Address.ToString)
Array.Resize(hash, data.Length + secret.Length)
data.CopyTo(hash, 0)
ConvertToBytes(secret).CopyTo(hash, data.Length)
hash = hasher.ComputeHash(hash)
hash.CopyTo(data, 4)
hash.CopyTo(mLastAuthenticator, 0)
mSocket.Send(data, packet.EndPoint)
End Sub
Public Sub SendAsResponse(ByVal packet As RADIUSPacket, ByVal requestAuth() As Byte)
Try
If packet Is Nothing Then
Exit Sub
End If
If Not packet.IsValid Then
Exit Sub
End If
If requestAuth Is Nothing Then
Exit Sub
End If
If requestAuth.Length <> 16 Then
Exit Sub
End If
Dim data() As Byte = packet.Bytes
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
Dim hash() As Byte = {}
Dim secret As String = mSecrets.GetSharedSecret(packet.EndPoint.Address.ToString)
Array.Resize(hash, data.Length + secret.Length)
data.CopyTo(hash, 0)
ConvertToBytes(secret).CopyTo(hash, data.Length)
Array.Copy(requestAuth, 0, hash, 4, 16)
hash = hasher.ComputeHash(hash)
hash.CopyTo(data, 4)
mSocket.Send(data, packet.EndPoint)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Private Sub SocketData(ByRef data() As Byte, ByRef ep As IPEndPoint)
'Verify validity ...
If data.Length < 20 Then
Exit Sub
End If
Dim len As Integer = data(2) * 256 + data(3)
If data.Length <> len Then
Exit Sub
End If
Dim code As RadiusPacketCode = data(0)
Dim auth As Boolean
If code = RadiusPacketCode.AccessRequest Or code = RadiusPacketCode.AccountingRequest Then
auth = AuthenticateRequest(data, mSecrets.GetSharedSecret(ep.Address.ToString))
Else
auth = AuthenticateResponse(data, mSecrets.GetSharedSecret(ep.Address.ToString))
End If
If Not auth Then
Exit Sub
End If
Dim packet As New RADIUSPacket(data, ep, Me)
HandlePacket(packet)
End Sub
Private Function AuthenticateRequest(ByRef dataBytes() As Byte, ByVal secret As String) As Boolean
If dataBytes Is Nothing Then Return False
If dataBytes(0) = RadiusPacketCode.AccessRequest Then Return True
If secret Is Nothing Then Return False
Dim res As Boolean = True
Dim i As Integer
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
Dim expectedHash() As Byte = {}
Array.Resize(Of Byte)(expectedHash, dataBytes.Length + secret.Length)
dataBytes.CopyTo(expectedHash, 0)
ConvertToBytes(secret).CopyTo(expectedHash, dataBytes.Length)
For i = 4 To 19 : expectedHash(i) = 0 : Next ' Setting authenticator to zero...
expectedHash = hasher.ComputeHash(expectedHash)
' Compare ...
i = 4 : Do While res And i <= 19 : If dataBytes(i) <> expectedHash(i - 4) Then : res = False : End If : i += 1 : Loop
Return res
End Function
Private Function AuthenticateResponse(ByRef dataBytes() As Byte, ByVal secret As String) As Boolean
If secret Is Nothing Then Return False
If secret = "" Then Return False
Dim res As Boolean = True
Dim i As Integer
Dim hasher As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create
Dim expectedHash() As Byte = {}
Array.Resize(Of Byte)(expectedHash, dataBytes.Length + secret.Length)
dataBytes.CopyTo(expectedHash, 0)
ConvertToBytes(secret).CopyTo(expectedHash, dataBytes.Length)
For i = 4 To 19 : expectedHash(i) = mLastAuthenticator(i - 4) : Next ' Setting authenticator to zero...
expectedHash = hasher.ComputeHash(expectedHash)
' Compare ...
i = 4 : Do While res And i <= 19 : If dataBytes(i) <> expectedHash(i - 4) Then : res = False : End If : i += 1 : Loop
Return res
End Function
End Class

66
CICRadarR/SmsClass.vb Normal file
View file

@ -0,0 +1,66 @@
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Threading
Imports System.IO.Ports
Imports System.Windows.Forms
Namespace SMS
Class SmsClass
Private serialPort As SerialPort
Public Sub New(ByVal comPort As String)
Me.serialPort = New SerialPort()
Me.serialPort.PortName = comPort
Me.serialPort.BaudRate = 38400
Me.serialPort.Parity = Parity.None
Me.serialPort.DataBits = 8
Me.serialPort.StopBits = StopBits.One
Me.serialPort.Handshake = Handshake.RequestToSend
Me.serialPort.DtrEnable = True
Me.serialPort.RtsEnable = True
Me.serialPort.NewLine = System.Environment.NewLine
End Sub
Public Function sendSms(ByVal cellNo As String, ByVal sms As String, ByVal SMSC As String) As Boolean
Dim messages As String = Nothing
messages = sms
If Me.serialPort.IsOpen = True Then
Try
Me.serialPort.WriteLine("AT" + Chr(13))
Thread.Sleep(4)
Me.serialPort.WriteLine("AT+CSCA=""" + SMSC + """" + Chr(13))
Thread.Sleep(30)
Me.serialPort.WriteLine(Chr(13))
Thread.Sleep(30)
Me.serialPort.WriteLine("AT+CMGS=""" + cellNo + """")
Thread.Sleep(30)
Me.serialPort.WriteLine(messages + Chr(26))
Catch ex As Exception
MessageBox.Show(ex.Source)
End Try
Return True
Else
Return False
End If
End Function
Public Sub Opens()
If Me.serialPort.IsOpen = False Then
Try
'bool ok =this.serialPort.IsOpen //does not work between 2 treads
Me.serialPort.Open()
Catch
Thread.Sleep(1000)
'wait for the port to get ready if
Opens()
End Try
End If
End Sub
Public Sub Closes()
If Me.serialPort.IsOpen = True Then
Me.serialPort.Close()
End If
End Sub
End Class
End Namespace

73
CICRadarR/TestService.Designer.vb generated Normal file
View file

@ -0,0 +1,73 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class TestService
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.btnStart = New System.Windows.Forms.Button()
Me.btnStop = New System.Windows.Forms.Button()
Me.Button1 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'btnStart
'
Me.btnStart.Location = New System.Drawing.Point(38, 41)
Me.btnStart.Name = "btnStart"
Me.btnStart.Size = New System.Drawing.Size(75, 23)
Me.btnStart.TabIndex = 0
Me.btnStart.Text = "Start"
Me.btnStart.UseVisualStyleBackColor = True
'
'btnStop
'
Me.btnStop.Location = New System.Drawing.Point(38, 95)
Me.btnStop.Name = "btnStop"
Me.btnStop.Size = New System.Drawing.Size(75, 23)
Me.btnStop.TabIndex = 1
Me.btnStop.Text = "Stop"
Me.btnStop.UseVisualStyleBackColor = True
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(175, 40)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 23)
Me.Button1.TabIndex = 2
Me.Button1.Text = "Button1"
Me.Button1.UseVisualStyleBackColor = True
'
'TestService
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.btnStop)
Me.Controls.Add(Me.btnStart)
Me.Name = "TestService"
Me.Text = "TestService"
Me.ResumeLayout(False)
End Sub
Friend WithEvents btnStart As System.Windows.Forms.Button
Friend WithEvents btnStop As System.Windows.Forms.Button
Friend WithEvents Button1 As System.Windows.Forms.Button
End Class

120
CICRadarR/TestService.resx Normal file
View file

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

44
CICRadarR/TestService.vb Normal file
View file

@ -0,0 +1,44 @@
Imports CICRadarR
Public Class TestService
Private Radius_Service As New CICRadarR
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
btnStart.Enabled = False
Call Radius_Service.OnstartTest()
End Sub
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
Call Radius_Service.OnStopTest()
End
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Button1.Enabled = False
Dim SessionTimeOut As Integer = 1
Dim TSGWSessionIdTimeStampHash As New Hashtable
Dim TSGWSessionIdHash As New Hashtable
TSGWSessionIdTimeStampHash.Add("ged", Now)
Threading.Thread.Sleep(65000)
Dim timeValid As Long = 0
Dim hashTime As DateTime = DirectCast(TSGWSessionIdTimeStampHash("ged"), DateTime)
timeValid = DateDiff(DateInterval.Second, hashTime, Now)
MsgBox(timeValid)
Dim Item As DictionaryEntry
For Each Item In TSGWSessionIdTimeStampHash
Dim hTime As DateTime = DirectCast(Item.Value, DateTime)
Dim tValid = DateDiff(DateInterval.Minute, hTime, Now)
If tValid >= SessionTimeOut Then
TSGWSessionIdTimeStampHash.Remove(Item.Key)
If TSGWSessionIdHash.Contains(Item.Key) Then
TSGWSessionIdHash.Remove(Item.Key)
End If
End If
Next
End Sub
End Class

57
CICRadarR/UDPServer.vb Normal file
View file

@ -0,0 +1,57 @@
Imports System.Net
Imports System.Net.Sockets
Friend Class UDPServer
Private mSocket As UdpClient
Private mAsyncResult As IAsyncResult
Friend Delegate Sub UDPPacketHandler(ByRef data() As Byte, ByRef endPoint As IPEndPoint)
Private HandlePacket As UDPPacketHandler
Friend Sub New(ByVal portNumber As Integer, ByVal onDataArrived As UDPPacketHandler)
mSocket = New UdpClient(portNumber)
HandlePacket = onDataArrived
commonNew()
End Sub
Friend Sub New(ByVal ipAddress As String, ByVal portNumber As Integer, ByVal onDataArrived As UDPPacketHandler)
Dim ep As New IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portNumber)
mSocket = New UdpClient(ep)
HandlePacket = onDataArrived
commonNew()
End Sub
Private Sub commonNew()
mAsyncResult = mSocket.BeginReceive(New AsyncCallback(AddressOf DataReceived), Nothing)
End Sub
Private Sub DataReceived(ByVal ar As IAsyncResult)
Dim ep As New IPEndPoint(0, 0)
Dim ef As Boolean = False
Dim data() As Byte = {}
Try
data = mSocket.EndReceive(mAsyncResult, ep)
Catch ex As System.Net.Sockets.SocketException
If ex.SocketErrorCode = 10054 Then ' Client killed connection
ef = False
Else
ef = True
End If
End Try
If Not ef Then
mAsyncResult = mSocket.BeginReceive(New AsyncCallback(AddressOf DataReceived), Nothing)
HandlePacket(data, ep)
End If
End Sub
Friend Sub Send(ByRef data() As Byte, ByRef endPoint As IPEndPoint)
mSocket.Send(data, data.Length, endPoint)
End Sub
End Class

131
CICRadarR/VSA.vb Normal file
View file

@ -0,0 +1,131 @@
'Copyright (C) 2008-2011 Nikolay Semov
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.
Imports CICRadarR.Conversion
Public Class CiscoAVPair
Private mVendorType As CiscoAVPairType
Private mVendorName As String
Private mVendorValue As String
Public ReadOnly Property VendorType() As CiscoAVPairType
Get
Return mVendorType
End Get
End Property
Public ReadOnly Property VendorName() As String
Get
Return mVendorName
End Get
End Property
Public ReadOnly Property VendorValue() As String
Get
Return mVendorValue
End Get
End Property
Public Function GetTimeStamp() As DateTime
Return ConvertToDateTime(mVendorValue)
End Function
Friend Sub New(ByRef value() As Byte)
mVendorType = CiscoAVPairType.Invalid
mVendorName = ""
mVendorValue = ""
If value.Length < 6 Then Exit Sub
If Not (value(0) = 0 And value(1) = 0 And value(2) = 0 And value(3) = 9) Then Exit Sub
If value.Length <> value(5) + 4 Then Exit Sub
mVendorType = value(4)
mVendorName = "generic"
Dim v() As Byte = {}
Array.Resize(v, value.Length - 6)
Array.Copy(value, 6, v, 0, v.Length)
mVendorValue = ConvertToString(v)
If VendorValue.Contains("=") Then
mVendorName = Left(VendorValue, InStr(VendorValue, "=") - 1)
mVendorValue = Right(VendorValue, VendorValue.Length - VendorName.Length - 1)
End If
If VendorName = "h323-ivr-in" Then mVendorType = CiscoAVPairType.IVR_In
If VendorName = "h323-ivr-out" Then mVendorType = CiscoAVPairType.IVR_Out
End Sub
Public Sub New(ByVal type As CiscoAVPairType, ByVal value As String)
mVendorType = type
If type = CiscoAVPairType.Invalid Then
mVendorName = ""
mVendorValue = ""
ElseIf type = CiscoAVPairType.Generic Then
mVendorName = "generic"
mVendorValue = value
Else
mVendorName = "h323-" & Replace(LCase(type.ToString), "_", "-")
mVendorValue = value
End If
End Sub
Public Sub New(ByVal name As String, ByVal value As String)
mVendorType = CiscoAVPairType.Generic
mVendorName = name
mVendorValue = value
End Sub
Public Sub GetRADIUSAttribute(ByRef attributes As RADIUSAttributes)
If attributes Is Nothing Then Exit Sub
If mVendorType = CiscoAVPairType.Invalid Then Exit Sub
Dim data() As Byte = {}
Dim len As Byte = 6
Dim lvt As Byte = mVendorType
If lvt = CiscoAVPairType.IVR_In Or lvt = CiscoAVPairType.IVR_Out Then lvt = 1
If VendorName = "generic" Then
len += VendorValue.Length
Array.Resize(data, len)
ConvertToBytes(VendorValue).CopyTo(data, 6)
Else
len += VendorName.Length + 1 + VendorValue.Length
Array.Resize(data, len)
ConvertToBytes(VendorName & "=" & VendorValue).CopyTo(data, 6)
End If
data(4) = lvt
data(5) = len - 4
data(0) = 0
data(1) = 0
data(2) = 0
data(3) = 9
Dim attr As New RADIUSAttribute(RadiusAttributeType.VendorSpecific, data)
attributes.Add(attr)
End Sub
End Class
Public Enum CiscoAVPairType As Byte
Invalid = 0
Generic = 1
Remote_Address = 23
Conf_Id = 24
Setup_Time = 25
Call_Origin = 26
Call_Type = 27
Connect_Time = 28
Disconnect_Time = 29
Disconnect_Cause = 30
Voice_Quality = 31
GW_Id = 33
IVR_In = 201
IVR_Out = 202
End Enum

142
CICRadarR/VendorSpefic.vb Normal file
View file

@ -0,0 +1,142 @@

Imports CICRadarR.Conversion
Public Class VendorSpecificAttribute
Private mVendorType As VendorSpecificType
Private mVendorName As String
Private mVendorValue As String
Public ReadOnly Property VendorType() As VendorSpecificType
Get
Return mVendorType
End Get
End Property
Public ReadOnly Property VendorName() As String
Get
Return mVendorName
End Get
End Property
Public ReadOnly Property VendorValue() As String
Get
Return mVendorValue
End Get
End Property
Public Function GetTimeStamp() As DateTime
Return ConvertToDateTime(mVendorValue)
End Function
Friend Sub New(ByRef value() As Byte)
mVendorType = VendorSpecificType.Invalid
mVendorName = ""
mVendorValue = ""
If value.Length < 6 Then
Exit Sub
End If
If value.Length <> value(5) + 4 Then
Exit Sub
End If
mVendorType = value(4)
If mVendorType = 47 Then
mVendorName = "generic"
mVendorValue = "TSGateway"
Else
mVendorName = "generic"
Dim v() As Byte = {}
Array.Resize(v, value.Length - 6)
Array.Copy(value, 6, v, 0, v.Length)
mVendorValue = ConvertToString(v)
End If
End Sub
Public Sub New(ByVal type As VendorSpecificType, ByVal value As String)
mVendorType = type
If type = VendorSpecificType.Invalid Then
mVendorName = ""
mVendorValue = ""
ElseIf type = VendorSpecificType.Generic Then
mVendorName = "generic"
mVendorValue = value
End If
End Sub
Public Sub New(ByVal name As String, ByVal value As String)
mVendorType = VendorSpecificType.Generic
mVendorName = name
mVendorValue = value
End Sub
Public Function ToBytes(data As String) As Byte()
Dim newdata() As Byte = ConvertToBytes(data)
Return newdata
End Function
Public Sub GetRADIUSAttribute(ByRef attributes As RADIUSAttributes)
If attributes Is Nothing Then Exit Sub
If mVendorType = VendorSpecificType.Invalid Then
Exit Sub
End If
Dim data() As Byte = {}
Dim len As Byte = 6
Dim lvt As Byte = mVendorType
' If lvt = CiscoAVPairType.IVR_In Or lvt = CiscoAVPairType.IVR_Out Then lvt = 1
If VendorName = "generic" Then
len += VendorValue.Length
Array.Resize(data, len)
ConvertToBytes(VendorValue).CopyTo(data, 6)
Else
len += VendorName.Length + 1 + VendorValue.Length
Array.Resize(data, len)
ConvertToBytes(VendorName & "=" & VendorValue).CopyTo(data, 6)
End If
data(4) = lvt
data(5) = len - 4
data(0) = 0
data(1) = 0
data(2) = 0
data(3) = 9
Dim attr As New RADIUSAttribute(RadiusAttributeType.VendorSpecific, data)
attributes.Add(attr)
End Sub
Public Sub SetRADIUSAttribute(ByRef attributes As RADIUSAttributes)
If mVendorType = VendorSpecificType.Invalid Then Exit Sub
Dim data() As Byte = {}
Dim len As Byte = 6
Dim lvt As Byte = mVendorType
len += VendorValue.Length
Array.Resize(data, len)
ConvertToBytes(VendorValue).CopyTo(data, 6)
data(4) = lvt
data(5) = len - 4
data(0) = 0
data(1) = 0
data(2) = 2 ' Generic value 666. Not sure if this confilct with other vendor, but RFC does not list existing vendor id's
data(3) = 154
Dim attr As New RADIUSAttribute(RadiusAttributeType.VendorSpecific, data)
attributes.Add(attr)
End Sub
End Class
Public Enum VendorSpecificType As Byte
Invalid = 0
Generic = 1
End Enum

View file

@ -0,0 +1,97 @@
Installing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Committing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Remove InstallState file because there are no installers.
Installing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Committing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Remove InstallState file because there are no installers.
Installing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
Installing service CICRadiusR...
Creating EventLog source CICRadiusR in log Application...
Rolling back assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
Restoring event log to previous state for source CICRadiusR.
Installing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Committing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Remove InstallState file because there are no installers.
Installing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Committing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly.
Remove InstallState file because there are no installers.
Installing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
Rolling back assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
Installing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
Installing service CICRadiusR...
Service CICRadiusR has been successfully installed.
Creating EventLog source CICRadiusR in log Application...
Committing assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
Uninstalling assembly 'C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog
assemblypath = C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
Removing EventLog source CICRadiusR.
Service CICRadiusR is being removed from the system...
Service CICRadiusR was successfully removed from the system.
Attempt to stop service CICRadiusR.

Binary file not shown.

View file

@ -0,0 +1,23 @@
[CICRadarR]
USELOCALMODEM=0
SMSC=+4540390999
Debug=1
ADField=telephoneNumber
COMPORT=com1
NetBiosDomain=isager
ClientList=10.10.10.47,192.168.1.139,192.168.1.101,192.168.1.61,192.168.1.44
LDAPDomain=isager.lan
Provider=https://www.cpsms.dk/sms/?username=myuser&password=mypassword&recipient=***NUMBER***&message=***TEXTMESSAGE***&from=CPSMS
EnableOTP=1
TSGW=1
EnableSMS=1
EnableEmail=1
MailServer=192.168.1.25
SenderEmail=noreply@isager.dk
ADMailfield=mail
[Clients]
10.10.10.47=iirseiKUQCWnjfg1ZLhF+w==
192.168.1.101=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
192.168.1.61=p2fyLMddDfH8aLYwMyDbhQ1l3MY9hAJxx6DyiUOhjXw=
192.168.1.139=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
192.168.1.44=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>

View file

@ -0,0 +1,66 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
CICRadarR
</name>
</assembly>
<members>
<member name="P:CICRadarR.My.Resources.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member><member name="P:CICRadarR.My.Resources.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member><member name="T:CICRadarR.My.Resources.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member><member name="P:CICRadarR.RADIUSPacket.UserName">
<summary>
Returns the username supplied in an Access Request. Returns
Nothing if a User-Name attribute is missing or the packet is not an
Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="P:CICRadarR.RADIUSPacket.UserPassword">
<summary>
Returns the password supplied in an Access Request. Returns
Nothing is a User-Password attribute is missing or the packet is not
an Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AuthenticateAccessRequest(CICRadarR.NASAuthList@,CICRadarR.NASAuthList@)">
<summary>
Deprecated. User the UserName and UserPassword properties instead.
</summary>
<param name="authList"></param>
<param name="nasList"></param>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest">
<summary>
Accept the access request.
</summary>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest(CICRadarR.RADIUSAttributes)">
<summary>
Accept the access request and include the specified attributes in the RADIUS response.
</summary>
<param name="attributes">The RADIUS attributes to include with the response.</param>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.RejectAccessRequest">
<summary>
Reject the access request.
</summary>
<remarks></remarks>
</member>
</members>
</doc>

View file

@ -0,0 +1,111 @@

Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Install phase completed successfully, and the Commit phase is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Commit phase completed successfully.
The transacted install has completed.
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Install phase completed successfully, and the Commit phase is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Commit phase completed successfully.
The transacted install has completed.
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
An exception occurred during the Install phase.
System.InvalidOperationException: Installation failed due to the absence of a ServiceProcessInstaller. The ServiceProcessInstaller must either be the containing installer, or it must be present in the Installers collection on the same installer as the ServiceInstaller.
The Rollback phase of the installation is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Rollback phase completed successfully.
The transacted install has completed.
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Install phase completed successfully, and the Commit phase is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Commit phase completed successfully.
The transacted install has completed.
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Install phase completed successfully, and the Commit phase is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Commit phase completed successfully.
The transacted install has completed.
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
An exception occurred during the Install phase.
System.InvalidOperationException: User has canceled installation of services in executable C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe.
The Rollback phase of the installation is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Rollback phase completed successfully.
The transacted install has completed.
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Install phase completed successfully, and the Commit phase is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The Commit phase completed successfully.
The transacted install has completed.
The uninstall is beginning.
See the contents of the log file for the C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe assembly's progress.
The file is located at C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.InstallLog.
The uninstall has completed.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
</application>
</compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>-->
</asmv1:assembly>

View file

@ -0,0 +1,66 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
CICRadarR
</name>
</assembly>
<members>
<member name="P:CICRadarR.My.Resources.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member><member name="P:CICRadarR.My.Resources.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member><member name="T:CICRadarR.My.Resources.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member><member name="P:CICRadarR.RADIUSPacket.UserName">
<summary>
Returns the username supplied in an Access Request. Returns
Nothing if a User-Name attribute is missing or the packet is not an
Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="P:CICRadarR.RADIUSPacket.UserPassword">
<summary>
Returns the password supplied in an Access Request. Returns
Nothing is a User-Password attribute is missing or the packet is not
an Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AuthenticateAccessRequest(CICRadarR.NASAuthList@,CICRadarR.NASAuthList@)">
<summary>
Deprecated. User the UserName and UserPassword properties instead.
</summary>
<param name="authList"></param>
<param name="nasList"></param>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest">
<summary>
Accept the access request.
</summary>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest(CICRadarR.RADIUSAttributes)">
<summary>
Accept the access request and include the specified attributes in the RADIUS response.
</summary>
<param name="attributes">The RADIUS attributes to include with the response.</param>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.RejectAccessRequest">
<summary>
Reject the access request.
</summary>
<remarks></remarks>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,21 @@
C:\CICRadarR\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
C:\CICRadarR\CICRadarR\CICRadarR\bin\Debug\CICRadarR.pdb
C:\CICRadarR\CICRadarR\CICRadarR\bin\Debug\CICRadarR.xml
C:\CICRadarR\CICRadarR\CICRadarR\obj\x86\Debug\ResolveAssemblyReference.cache
C:\CICRadarR\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.Resources.resources
C:\CICRadarR\CICRadarR\CICRadarR\obj\x86\Debug\GenerateResource.read.1.tlog
C:\CICRadarR\CICRadarR\CICRadarR\obj\x86\Debug\GenerateResource.write.1.tlog
C:\CICRadarR\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.exe
C:\CICRadarR\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.xml
C:\CICRadarR\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.pdb
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.exe
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.xml
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.pdb
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.Resources.resources
C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.exe
C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.pdb
C:\CICRadarR\CICRadarR\bin\Debug\CICRadarR.xml
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.TestService.resources
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.CICRadarR.resources
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.ProjectInstaller.resources
C:\CICRadarR\CICRadarR\obj\x86\Debug\CICRadarR.vbproj.GenerateResource.Cache

View file

@ -0,0 +1,66 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
CICRadarR
</name>
</assembly>
<members>
<member name="P:CICRadarR.My.Resources.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member><member name="P:CICRadarR.My.Resources.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member><member name="T:CICRadarR.My.Resources.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member><member name="P:CICRadarR.RADIUSPacket.UserName">
<summary>
Returns the username supplied in an Access Request. Returns
Nothing if a User-Name attribute is missing or the packet is not an
Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="P:CICRadarR.RADIUSPacket.UserPassword">
<summary>
Returns the password supplied in an Access Request. Returns
Nothing is a User-Password attribute is missing or the packet is not
an Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AuthenticateAccessRequest(CICRadarR.NASAuthList@,CICRadarR.NASAuthList@)">
<summary>
Deprecated. User the UserName and UserPassword properties instead.
</summary>
<param name="authList"></param>
<param name="nasList"></param>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest">
<summary>
Accept the access request.
</summary>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest(CICRadarR.RADIUSAttributes)">
<summary>
Accept the access request and include the specified attributes in the RADIUS response.
</summary>
<param name="attributes">The RADIUS attributes to include with the response.</param>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.RejectAccessRequest">
<summary>
Reject the access request.
</summary>
<remarks></remarks>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,13 @@
C:\CICRadarR\CICRadarR\bin\Release\CICRadarR.exe
C:\CICRadarR\CICRadarR\bin\Release\CICRadarR.pdb
C:\CICRadarR\CICRadarR\bin\Release\CICRadarR.xml
C:\CICRadarR\CICRadarR\obj\x86\Release\ResolveAssemblyReference.cache
C:\CICRadarR\CICRadarR\obj\x86\Release\CICRadarR.CICRadarR.resources
C:\CICRadarR\CICRadarR\obj\x86\Release\CICRadarR.Resources.resources
C:\CICRadarR\CICRadarR\obj\x86\Release\CICRadarR.ProjectInstaller.resources
C:\CICRadarR\CICRadarR\obj\x86\Release\CICRadarR.TestService.resources
C:\CICRadarR\CICRadarR\obj\x86\Release\GenerateResource.read.1.tlog
C:\CICRadarR\CICRadarR\obj\x86\Release\GenerateResource.write.1.tlog
C:\CICRadarR\CICRadarR\obj\x86\Release\CICRadarR.exe
C:\CICRadarR\CICRadarR\obj\x86\Release\CICRadarR.xml
C:\CICRadarR\CICRadarR\obj\x86\Release\CICRadarR.pdb

View file

@ -0,0 +1,66 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
CICRadarR
</name>
</assembly>
<members>
<member name="P:CICRadarR.My.Resources.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member><member name="P:CICRadarR.My.Resources.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member><member name="T:CICRadarR.My.Resources.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member><member name="P:CICRadarR.RADIUSPacket.UserName">
<summary>
Returns the username supplied in an Access Request. Returns
Nothing if a User-Name attribute is missing or the packet is not an
Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="P:CICRadarR.RADIUSPacket.UserPassword">
<summary>
Returns the password supplied in an Access Request. Returns
Nothing is a User-Password attribute is missing or the packet is not
an Access Request.
</summary>
<value></value>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AuthenticateAccessRequest(CICRadarR.NASAuthList@,CICRadarR.NASAuthList@)">
<summary>
Deprecated. User the UserName and UserPassword properties instead.
</summary>
<param name="authList"></param>
<param name="nasList"></param>
<returns></returns>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest">
<summary>
Accept the access request.
</summary>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.AcceptAccessRequest(CICRadarR.RADIUSAttributes)">
<summary>
Accept the access request and include the specified attributes in the RADIUS response.
</summary>
<param name="attributes">The RADIUS attributes to include with the response.</param>
<remarks></remarks>
</member><member name="M:CICRadarR.RADIUSPacket.RejectAccessRequest">
<summary>
Reject the access request.
</summary>
<remarks></remarks>
</member>
</members>
</doc>

Binary file not shown.

135
CICRadarR/random.vb Normal file
View file

@ -0,0 +1,135 @@

Imports System
Imports System.Security.Cryptography
Namespace Security
Public Enum RandomPasswordOptions
Alpha = 1
Numeric = 2
AlphaNumeric = Alpha + Numeric
AlphaNumericSpecial = 4
End Enum
Public Class RandomPasswordGenerator
' Define default password length.
Private Shared DEFAULT_PASSWORD_LENGTH As Integer = 2
'No characters that are confusing: i, I, l, L, o, O, 0, 1, u, v
Private Shared PASSWORD_CHARS_Alpha As String = "abcdefghjkmnpqrstwxyzABCDEFGHJKMNPQRSTWXYZ"
Private Shared PASSWORD_CHARS_NUMERIC As String = "23456789"
Private Shared PASSWORD_CHARS_SPECIAL As String = ""
#Region "Overloads"
''' <summary>
''' Generates a random password with the default length.
''' </summary>
''' <returns>Randomly generated password.</returns>
Public Shared Function Generate() As String
Return Generate(DEFAULT_PASSWORD_LENGTH, RandomPasswordOptions.AlphaNumericSpecial)
End Function
''' <summary>
''' Generates a random password with the default length.
''' </summary>
''' <returns>Randomly generated password.</returns>
Public Shared Function Generate(ByVal [option] As RandomPasswordOptions) As String
Return Generate(DEFAULT_PASSWORD_LENGTH, [option])
End Function
''' <summary>
''' Generates a random password with the default length.
''' </summary>
''' <returns>Randomly generated password.</returns>
Public Shared Function Generate(ByVal passwordLength As Integer) As String
Return Generate(DEFAULT_PASSWORD_LENGTH, RandomPasswordOptions.AlphaNumericSpecial)
End Function
''' <summary>
''' Generates a random password.
''' </summary>
''' <returns>Randomly generated password.</returns>
Public Shared Function Generate(ByVal passwordLength As Integer, ByVal [option] As RandomPasswordOptions) As String
Return GeneratePassword(passwordLength, [option])
End Function
#End Region
''' <summary>
''' Generates the password.
''' </summary>
''' <returns></returns>
Private Shared Function GeneratePassword(ByVal passwordLength As Integer, ByVal [option] As RandomPasswordOptions) As String
If passwordLength < 0 Then
Return Nothing
End If
Dim passwordChars = GetCharacters([option])
If String.IsNullOrEmpty(passwordChars) Then
Return Nothing
End If
Dim password = New Char(passwordLength - 1) {}
Dim random = GetRandom()
For i As Integer = 0 To passwordLength - 1
Dim index = random.[Next](passwordChars.Length)
Dim passwordChar = passwordChars(index)
password(i) = passwordChar
Next
Return New String(password)
End Function
''' <summary>
''' Gets the characters selected by the option
''' </summary>
''' <returns></returns>
Private Shared Function GetCharacters(ByVal [option] As RandomPasswordOptions) As String
Select Case [option]
Case RandomPasswordOptions.Alpha
Return PASSWORD_CHARS_Alpha
Case RandomPasswordOptions.Numeric
Return PASSWORD_CHARS_NUMERIC
Case RandomPasswordOptions.AlphaNumeric
Return PASSWORD_CHARS_Alpha + PASSWORD_CHARS_NUMERIC
Case RandomPasswordOptions.AlphaNumericSpecial
Return PASSWORD_CHARS_Alpha + PASSWORD_CHARS_NUMERIC + PASSWORD_CHARS_SPECIAL
Case Else
Exit Select
End Select
Return String.Empty
End Function
''' <summary>
''' Gets a random object with a real random seed
''' </summary>
''' <returns></returns>
Private Shared Function GetRandom() As Random
' Use a 4-byte array to fill it with random bytes and convert it then
' to an integer value.
Dim randomBytes As Byte() = New Byte(3) {}
' Generate 4 random bytes.
Dim rng As New RNGCryptoServiceProvider()
rng.GetBytes(randomBytes)
' Convert 4 bytes into a 32-bit integer value.
Dim seed As Integer = (randomBytes(0) And &H7F) << 24 Or randomBytes(1) << 16 Or randomBytes(2) << 8 Or randomBytes(3)
' Now, this is real randomization.
Return New Random(seed)
End Function
End Class
End Namespace

View file

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CICRadarRConfig", "CICRadarRConfig\CICRadarRConfig.vbproj", "{698299A4-5778-4EE0-9C46-445A9B66F645}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{698299A4-5778-4EE0-9C46-445A9B66F645}.Debug|x86.ActiveCfg = Debug|x86
{698299A4-5778-4EE0-9C46-445A9B66F645}.Debug|x86.Build.0 = Debug|x86
{698299A4-5778-4EE0-9C46-445A9B66F645}.Release|x86.ActiveCfg = Release|x86
{698299A4-5778-4EE0-9C46-445A9B66F645}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View file

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{698299A4-5778-4EE0-9C46-445A9B66F645}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>CICRadarRConfig.My.MyApplication</StartupObject>
<RootNamespace>CICRadarRConfig</RootNamespace>
<AssemblyName>CICRadarRConfig</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>CICRadarRConfig.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>CICRadarRConfig.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>lock.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="Crypto.vb" />
<Compile Include="IniFileVb.vb" />
<Compile Include="Main.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Main.Designer.vb">
<DependentUpon>Main.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="SmsClass.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Main.resx">
<DependentUpon>Main.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="lock.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,344 @@
Imports System
Imports System.IO
Imports System.Security.Cryptography
'
' encrypt/decrypt functions
' Parameter checks and error handling
' are ommited for better readability
'
Public Class EncDec
' Encrypt a byte array into a byte array using a key and an IV
Public Shared Function Encrypt(ByVal clearData As Byte(), ByVal Key As Byte(), ByVal IV As Byte()) As Byte()
' Create a MemoryStream to accept the encrypted bytes
Dim ms As New MemoryStream()
' Create a symmetric algorithm.
' We are going to use Rijndael because it is strong and
' available on all platforms.
' You can use other algorithms, to do so substitute the
' next line with something like
' TripleDES alg = TripleDES.Create();
Dim alg As Rijndael = Rijndael.Create()
' Now set the key and the IV.
' We need the IV (Initialization Vector) because
' the algorithm is operating in its default
' mode called CBC (Cipher Block Chaining).
' The IV is XORed with the first block (8 byte)
' of the data before it is encrypted, and then each
' encrypted block is XORed with the
' following block of plaintext.
' This is done to make encryption more secure.
' There is also a mode called ECB which does not need an IV,
' but it is much less secure.
alg.Key = Key
alg.IV = IV
' Create a CryptoStream through which we are going to be
' pumping our data.
' CryptoStreamMode.Write means that we are going to be
' writing data to the stream and the output will be written
' in the MemoryStream we have provided.
Dim cs As New CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write)
' Write the data and make it do the encryption
cs.Write(clearData, 0, clearData.Length)
' Close the crypto stream (or do FlushFinalBlock).
' This will tell it that we have done our encryption and
' there is no more data coming in,
' and it is now a good time to apply the padding and
' finalize the encryption process.
cs.Close()
' Now get the encrypted data from the MemoryStream.
' Some people make a mistake of using GetBuffer() here,
' which is not the right way.
Dim encryptedData As Byte() = ms.ToArray()
Return encryptedData
End Function
' Encrypt a string into a string using a password
' Uses Encrypt(byte[], byte[], byte[])
Public Shared Function Encrypt(ByVal clearText As String, ByVal Password As String) As String
' First we need to turn the input string into a byte array.
Dim clearBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(clearText)
' Then, we need to turn the password into Key and IV
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the encryption using the
' function that accepts byte arrays.
' Using PasswordDeriveBytes object we are first getting
' 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by default
' 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is
' 8 bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off
' the algorithm to find out the sizes.
Dim encryptedData As Byte() = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16))
' Now we need to turn the resulting byte array into a string.
' A common mistake would be to use an Encoding class for that.
'It does not work because not all byte values can be
' represented by characters.
' We are going to be using Base64 encoding that is designed
'exactly for what we are trying to do.
Return Convert.ToBase64String(encryptedData)
End Function
' Encrypt bytes into bytes using a password
' Uses Encrypt(byte[], byte[], byte[])
Public Shared Function Encrypt(ByVal clearData As Byte(), ByVal Password As String) As Byte()
' We need to turn the password into Key and IV.
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the encryption using the function
' that accepts byte arrays.
' Using PasswordDeriveBytes object we are first getting
' 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by default
' 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is 8
' bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off the
' algorithm to find out the sizes.
Return Encrypt(clearData, pdb.GetBytes(32), pdb.GetBytes(16))
End Function
' Encrypt a file into another file using a password
Public Shared Sub Encrypt(ByVal fileIn As String, ByVal fileOut As String, ByVal Password As String)
' First we are going to open the file streams
Dim fsIn As New FileStream(fileIn, FileMode.Open, FileAccess.Read)
Dim fsOut As New FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write)
' Then we are going to derive a Key and an IV from the
' Password and create an algorithm
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
Dim alg As Rijndael = Rijndael.Create()
alg.Key = pdb.GetBytes(32)
alg.IV = pdb.GetBytes(16)
' Now create a crypto stream through which we are going
' to be pumping data.
' Our fileOut is going to be receiving the encrypted bytes.
Dim cs As New CryptoStream(fsOut, alg.CreateEncryptor(), CryptoStreamMode.Write)
' Now will will initialize a buffer and will be processing
' the input file in chunks.
' This is done to avoid reading the whole file (which can
' be huge) into memory.
Dim bufferLen As Integer = 4096
Dim buffer As Byte() = New Byte(bufferLen - 1) {}
Dim bytesRead As Integer
Do
' read a chunk of data from the input file
bytesRead = fsIn.Read(buffer, 0, bufferLen)
' encrypt it
cs.Write(buffer, 0, bytesRead)
Loop While bytesRead <> 0
' close everything
' this will also close the unrelying fsOut stream
cs.Close()
fsIn.Close()
End Sub
' Decrypt a byte array into a byte array using a key and an IV
Public Shared Function Decrypt(ByVal cipherData As Byte(), ByVal Key As Byte(), ByVal IV As Byte()) As Byte()
' Create a MemoryStream that is going to accept the
' decrypted bytes
Dim ms As New MemoryStream()
' Create a symmetric algorithm.
' We are going to use Rijndael because it is strong and
' available on all platforms.
' You can use other algorithms, to do so substitute the next
' line with something like
' TripleDES alg = TripleDES.Create();
Dim alg As Rijndael = Rijndael.Create()
' Now set the key and the IV.
' We need the IV (Initialization Vector) because the algorithm
' is operating in its default
' mode called CBC (Cipher Block Chaining). The IV is XORed with
' the first block (8 byte)
' of the data after it is decrypted, and then each decrypted
' block is XORed with the previous
' cipher block. This is done to make encryption more secure.
' There is also a mode called ECB which does not need an IV,
' but it is much less secure.
alg.Key = Key
alg.IV = IV
' Create a CryptoStream through which we are going to be
' pumping our data.
' CryptoStreamMode.Write means that we are going to be
' writing data to the stream
' and the output will be written in the MemoryStream
' we have provided.
Dim cs As New CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write)
' Write the data and make it do the decryption
cs.Write(cipherData, 0, cipherData.Length)
' Close the crypto stream (or do FlushFinalBlock).
' This will tell it that we have done our decryption
' and there is no more data coming in,
' and it is now a good time to remove the padding
' and finalize the decryption process.
cs.Close()
' Now get the decrypted data from the MemoryStream.
' Some people make a mistake of using GetBuffer() here,
' which is not the right way.
Dim decryptedData As Byte() = ms.ToArray()
Return decryptedData
End Function
' Decrypt a string into a string using a password
' Uses Decrypt(byte[], byte[], byte[])
Public Shared Function Decrypt(ByVal cipherText As String, ByVal Password As String) As String
' First we need to turn the input string into a byte array.
' We presume that Base64 encoding was used
Dim cipherBytes As Byte() = Convert.FromBase64String(cipherText)
' Then, we need to turn the password into Key and IV
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the decryption using
' the function that accepts byte arrays.
' Using PasswordDeriveBytes object we are first
' getting 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by
' default 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is
' 8 bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off
' the algorithm to find out the sizes.
Dim decryptedData As Byte() = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16))
' Now we need to turn the resulting byte array into a string.
' A common mistake would be to use an Encoding class for that.
' It does not work
' because not all byte values can be represented by characters.
' We are going to be using Base64 encoding that is
' designed exactly for what we are trying to do.
Return System.Text.Encoding.Unicode.GetString(decryptedData)
End Function
' Decrypt bytes into bytes using a password
' Uses Decrypt(byte[], byte[], byte[])
Public Shared Function Decrypt(ByVal cipherData As Byte(), ByVal Password As String) As Byte()
' We need to turn the password into Key and IV.
' We are using salt to make it harder to guess our key
' using a dictionary attack -
' trying to guess a password by enumerating all possible words.
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
' Now get the key/IV and do the Decryption using the
'function that accepts byte arrays.
' Using PasswordDeriveBytes object we are first getting
' 32 bytes for the Key
' (the default Rijndael key length is 256bit = 32bytes)
' and then 16 bytes for the IV.
' IV should always be the block size, which is by default
' 16 bytes (128 bit) for Rijndael.
' If you are using DES/TripleDES/RC2 the block size is
' 8 bytes and so should be the IV size.
' You can also read KeySize/BlockSize properties off the
' algorithm to find out the sizes.
Return Decrypt(cipherData, pdb.GetBytes(32), pdb.GetBytes(16))
End Function
' Decrypt a file into another file using a password
Public Shared Sub Decrypt(ByVal fileIn As String, ByVal fileOut As String, ByVal Password As String)
' First we are going to open the file streams
Dim fsIn As New FileStream(fileIn, FileMode.Open, FileAccess.Read)
Dim fsOut As New FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write)
' Then we are going to derive a Key and an IV from
' the Password and create an algorithm
Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _
&H65, &H64, &H76, &H65, &H64, &H65, _
&H76})
Dim alg As Rijndael = Rijndael.Create()
alg.Key = pdb.GetBytes(32)
alg.IV = pdb.GetBytes(16)
' Now create a crypto stream through which we are going
' to be pumping data.
' Our fileOut is going to be receiving the Decrypted bytes.
Dim cs As New CryptoStream(fsOut, alg.CreateDecryptor(), CryptoStreamMode.Write)
' Now will will initialize a buffer and will be
' processing the input file in chunks.
' This is done to avoid reading the whole file (which can be
' huge) into memory.
Dim bufferLen As Integer = 4096
Dim buffer As Byte() = New Byte(bufferLen - 1) {}
Dim bytesRead As Integer
Do
' read a chunk of data from the input file
bytesRead = fsIn.Read(buffer, 0, bufferLen)
' Decrypt it
cs.Write(buffer, 0, bytesRead)
Loop While bytesRead <> 0
' close everything
cs.Close()
' this will also close the unrelying fsOut stream
fsIn.Close()
End Sub
End Class

View file

@ -0,0 +1,376 @@
' Programmer: Ludvik Jerabek
' Date: 08\23\2010
' Purpose: Allow INI manipulation in .NET
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Collections
Imports System.Diagnostics
' IniFile class used to read and write ini files by loading the file into memory
Public Class IniFile
' List of IniSection objects keeps track of all the sections in the INI file
Private m_sections As Hashtable
' Public constructor
Public Sub New()
m_sections = New Hashtable(StringComparer.InvariantCultureIgnoreCase)
End Sub
' Loads the Reads the data in the ini file into the IniFile object
Public Sub Load(ByVal sFileName As String, Optional ByVal bMerge As Boolean = False)
If Not bMerge Then
RemoveAllSections()
End If
' Clear the object...
Dim tempsection As IniSection = Nothing
Dim oReader As New StreamReader(sFileName)
Dim regexcomment As New Regex("^([\s]*#.*)", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
' Broken but left for history
'Dim regexsection As New Regex("\[[\s]*([^\[\s].*[^\s\]])[\s]*\]", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
Dim regexsection As New Regex("^[\s]*\[[\s]*([^\[\s].*[^\s\]])[\s]*\][\s]*$", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
Dim regexkey As New Regex("^\s*([^=\s]*)[^=]*=(.*)", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
While Not oReader.EndOfStream
Dim line As String = oReader.ReadLine()
If line <> String.Empty Then
Dim m As Match = Nothing
If regexcomment.Match(line).Success Then
m = regexcomment.Match(line)
Trace.WriteLine(String.Format("Skipping Comment: {0}", m.Groups(0).Value))
ElseIf regexsection.Match(line).Success Then
m = regexsection.Match(line)
Trace.WriteLine(String.Format("Adding section [{0}]", m.Groups(1).Value))
tempsection = AddSection(m.Groups(1).Value)
ElseIf regexkey.Match(line).Success AndAlso tempsection IsNot Nothing Then
m = regexkey.Match(line)
Trace.WriteLine(String.Format("Adding Key [{0}]=[{1}]", m.Groups(1).Value, m.Groups(2).Value))
tempsection.AddKey(m.Groups(1).Value).Value = m.Groups(2).Value
ElseIf tempsection IsNot Nothing Then
' Handle Key without value
Trace.WriteLine(String.Format("Adding Key [{0}]", line))
tempsection.AddKey(line)
Else
' This should not occur unless the tempsection is not created yet...
Trace.WriteLine(String.Format("Skipping unknown type of data: {0}", line))
End If
End If
End While
oReader.Close()
End Sub
' Used to save the data back to the file or your choice
Public Sub Save(ByVal sFileName As String)
Dim oWriter As New StreamWriter(sFileName, False)
For Each s As IniSection In Sections
Trace.WriteLine(String.Format("Writing Section: [{0}]", s.Name))
oWriter.WriteLine(String.Format("[{0}]", s.Name))
For Each k As IniSection.IniKey In s.Keys
If k.Value <> String.Empty Then
Trace.WriteLine(String.Format("Writing Key: {0}={1}", k.Name, k.Value))
oWriter.WriteLine(String.Format("{0}={1}", k.Name, k.Value))
Else
Trace.WriteLine(String.Format("Writing Key: {0}", k.Name))
oWriter.WriteLine(String.Format("{0}", k.Name))
End If
Next
Next
oWriter.Close()
End Sub
' Gets all the sections
Public ReadOnly Property Sections() As System.Collections.ICollection
Get
Return m_sections.Values
End Get
End Property
' Adds a section to the IniFile object, returns a IniSection object to the new or existing object
Public Function AddSection(ByVal sSection As String) As IniSection
Dim s As IniSection = Nothing
sSection = sSection.Trim()
' Trim spaces
If m_sections.ContainsKey(sSection) Then
s = DirectCast(m_sections(sSection), IniSection)
Else
s = New IniSection(Me, sSection)
m_sections(sSection) = s
End If
Return s
End Function
' Removes a section by its name sSection, returns trus on success
Public Function RemoveSection(ByVal sSection As String) As Boolean
sSection = sSection.Trim()
Return RemoveSection(GetSection(sSection))
End Function
' Removes section by object, returns trus on success
Public Function RemoveSection(ByVal Section As IniSection) As Boolean
If Section IsNot Nothing Then
Try
m_sections.Remove(Section.Name)
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Removes all existing sections, returns trus on success
Public Function RemoveAllSections() As Boolean
m_sections.Clear()
Return (m_sections.Count = 0)
End Function
' Returns an IniSection to the section by name, NULL if it was not found
Public Function GetSection(ByVal sSection As String) As IniSection
sSection = sSection.Trim()
' Trim spaces
If m_sections.ContainsKey(sSection) Then
Return DirectCast(m_sections(sSection), IniSection)
End If
Return Nothing
End Function
' Returns a KeyValue in a certain section
Public Function GetKeyValue(ByVal sSection As String, ByVal sKey As String) As String
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
Dim k As IniSection.IniKey = s.GetKey(sKey)
If k IsNot Nothing Then
Return k.Value
End If
End If
Return String.Empty
End Function
' Sets a KeyValuePair in a certain section
Public Function SetKeyValue(ByVal sSection As String, ByVal sKey As String, ByVal sValue As String) As Boolean
Dim s As IniSection = AddSection(sSection)
If s IsNot Nothing Then
Dim k As IniSection.IniKey = s.AddKey(sKey)
If k IsNot Nothing Then
k.Value = sValue
Return True
End If
End If
Return False
End Function
' Renames an existing section returns true on success, false if the section didn't exist or there was another section with the same sNewSection
Public Function RenameSection(ByVal sSection As String, ByVal sNewSection As String) As Boolean
' Note string trims are done in lower calls.
Dim bRval As Boolean = False
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
bRval = s.SetName(sNewSection)
End If
Return bRval
End Function
' Renames an existing key returns true on success, false if the key didn't exist or there was another section with the same sNewKey
Public Function RenameKey(ByVal sSection As String, ByVal sKey As String, ByVal sNewKey As String) As Boolean
' Note string trims are done in lower calls.
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
Dim k As IniSection.IniKey = s.GetKey(sKey)
If k IsNot Nothing Then
Return k.SetName(sNewKey)
End If
End If
Return False
End Function
' Remove a key by section name and key name
Public Function RemoveKey(ByVal sSection As String, ByVal sKey As String) As Boolean
Dim s As IniSection = GetSection(sSection)
If s IsNot Nothing Then
Return s.RemoveKey(sKey)
End If
Return False
End Function
' IniSection class
Public Class IniSection
' IniFile IniFile object instance
Private m_pIniFile As IniFile
' Name of the section
Private m_sSection As String
' List of IniKeys in the section
Private m_keys As Hashtable
' Constuctor so objects are internally managed
Protected Friend Sub New(ByVal parent As IniFile, ByVal sSection As String)
m_pIniFile = parent
m_sSection = sSection
m_keys = New Hashtable(StringComparer.InvariantCultureIgnoreCase)
End Sub
' Returns all the keys in a section
Public ReadOnly Property Keys() As System.Collections.ICollection
Get
Return m_keys.Values
End Get
End Property
' Returns the section name
Public ReadOnly Property Name() As String
Get
Return m_sSection
End Get
End Property
' Adds a key to the IniSection object, returns a IniKey object to the new or existing object
Public Function AddKey(ByVal sKey As String) As IniKey
sKey = sKey.Trim()
Dim k As IniSection.IniKey = Nothing
If sKey.Length <> 0 Then
If m_keys.ContainsKey(sKey) Then
k = DirectCast(m_keys(sKey), IniKey)
Else
k = New IniSection.IniKey(Me, sKey)
m_keys(sKey) = k
End If
End If
Return k
End Function
' Removes a single key by string
Public Function RemoveKey(ByVal sKey As String) As Boolean
Return RemoveKey(GetKey(sKey))
End Function
' Removes a single key by IniKey object
Public Function RemoveKey(ByVal Key As IniKey) As Boolean
If Key IsNot Nothing Then
Try
m_keys.Remove(Key.Name)
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Removes all the keys in the section
Public Function RemoveAllKeys() As Boolean
m_keys.Clear()
Return (m_keys.Count = 0)
End Function
' Returns a IniKey object to the key by name, NULL if it was not found
Public Function GetKey(ByVal sKey As String) As IniKey
sKey = sKey.Trim()
If m_keys.ContainsKey(sKey) Then
Return DirectCast(m_keys(sKey), IniKey)
End If
Return Nothing
End Function
' Sets the section name, returns true on success, fails if the section
' name sSection already exists
Public Function SetName(ByVal sSection As String) As Boolean
sSection = sSection.Trim()
If sSection.Length <> 0 Then
' Get existing section if it even exists...
Dim s As IniSection = m_pIniFile.GetSection(sSection)
If s IsNot Me AndAlso s IsNot Nothing Then
Return False
End If
Try
' Remove the current section
m_pIniFile.m_sections.Remove(m_sSection)
' Set the new section name to this object
m_pIniFile.m_sections(sSection) = Me
' Set the new section name
m_sSection = sSection
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Returns the section name
Public Function GetName() As String
Return m_sSection
End Function
' IniKey class
Public Class IniKey
' Name of the Key
Private m_sKey As String
' Value associated
Private m_sValue As String
' Pointer to the parent CIniSection
Private m_section As IniSection
' Constuctor so objects are internally managed
Protected Friend Sub New(ByVal parent As IniSection, ByVal sKey As String)
m_section = parent
m_sKey = sKey
End Sub
' Returns the name of the Key
Public ReadOnly Property Name() As String
Get
Return m_sKey
End Get
End Property
' Sets or Gets the value of the key
Public Property Value() As String
Get
Return m_sValue
End Get
Set(ByVal value As String)
m_sValue = value
End Set
End Property
' Sets the value of the key
Public Sub SetValue(ByVal sValue As String)
m_sValue = sValue
End Sub
' Returns the value of the Key
Public Function GetValue() As String
Return m_sValue
End Function
' Sets the key name
' Returns true on success, fails if the section name sKey already exists
Public Function SetName(ByVal sKey As String) As Boolean
sKey = sKey.Trim()
If sKey.Length <> 0 Then
Dim k As IniKey = m_section.GetKey(sKey)
If k IsNot Me AndAlso k IsNot Nothing Then
Return False
End If
Try
' Remove the current key
m_section.m_keys.Remove(m_sKey)
' Set the new key name to this object
m_section.m_keys(sKey) = Me
' Set the new key name
m_sKey = sKey
Return True
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
End If
Return False
End Function
' Returns the name of the Key
Public Function GetName() As String
Return m_sKey
End Function
End Class
' End of IniKey class
End Class
' End of IniSection class
End Class
' End of IniFile class

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,529 @@
Imports CICRadarRConfig.SMS
Imports System.ServiceProcess
Imports System.IO
Imports System.Net.Mail
Public Class CICRadiusRConfig
Private ConfigFile As New IniFile
Private encCode As String = "gewsyy#sjs2!"
Private Sub CICRadiusRConfig_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Height = 440
Me.Width = 620
PanelSetup.Location = New Point(136, 27)
PanelSetup.Height = 357
PanelSetup.Width = 470
PanelActiveDirectory.Location = New Point(136, 27)
PanelActiveDirectory.Height = 357
PanelActiveDirectory.Width = 470
PanelRadiusClients.Location = New Point(136, 27)
PanelRadiusClients.Height = 357
PanelRadiusClients.Width = 470
PanelSMSSetup.Location = New Point(136, 27)
PanelSMSSetup.Height = 357
PanelSMSSetup.Width = 470
PanelMailSetup.Location = New Point(136, 27)
PanelMailSetup.Height = 357
PanelMailSetup.Width = 470
Try
ConfigFile.Load(Application.StartupPath & "\CICRadarR.ini")
txtNetBios.Text = ConfigFile.GetKeyValue("CICRadarR", "NetBiosDomain")
txtLdapDomain.Text = ConfigFile.GetKeyValue("CICRadarR", "LDAPDomain")
txtProvider.Text = ConfigFile.GetKeyValue("CICRadarR", "Provider")
txtADField.Text = ConfigFile.GetKeyValue("CICRadarR", "ADField")
txtADMailField.Text = ConfigFile.GetKeyValue("CICRadarR", "ADMailField")
Dim ModemType As String
ModemType = ConfigFile.GetKeyValue("CICRadarR", "USELOCALMODEM")
If ModemType = "1" Then
rbLocalSMS.Checked = True
Else
rbLocalSMS.Checked = False
End If
Dim EnableOTP As String
EnableOTP = ConfigFile.GetKeyValue("CICRadarR", "EnableOTP")
If EnableOTP = "1" Then
ckEnableOTP.Checked = True
Dim EnableSMS As String
Dim EnableEmail As String
EnableSMS = ConfigFile.GetKeyValue("CICRadarR", "EnableSMS")
EnableEmail = ConfigFile.GetKeyValue("CICRadarR", "EnableEmail")
If EnableEmail = "1" Then
ckEnableMail.Checked = True
Else
TestMailConfigurationToolStripMenuItem.Enabled = False
lvConfig.Items.Item(3).ImageIndex = 6
ckEnableMail.Checked = False
End If
If EnableSMS = "1" Then
ckEnableSMS.Checked = True
Else
lvConfig.Items.Item(2).ImageIndex = 5
ckEnableSMS.Checked = False
TestModemConfigurationToolStripMenuItem.Enabled = False
End If
Else
lvConfig.Items.Item(2).ImageIndex = 5
lvConfig.Items.Item(3).ImageIndex = 6
TestMailConfigurationToolStripMenuItem.Enabled = False
TestModemConfigurationToolStripMenuItem.Enabled = False
ckEnableSMS.Checked = False
ckEnableMail.Checked = False
ckEnableOTP.Checked = False
End If
txtMailServer.Text = ConfigFile.GetKeyValue("CICRadarR", "MailServer")
txtSenderEmail.Text = ConfigFile.GetKeyValue("CICRadarR", "SenderEmail")
txtComPort.Text = ConfigFile.GetKeyValue("CICRadarR", "COMPORT")
txtSMSC.Text = ConfigFile.GetKeyValue("CICRadarR", "SMSC")
Dim Debug As String
Debug = ConfigFile.GetKeyValue("CICRadarR", "Debug")
If Debug = "1" Then
ckDebug.Checked = True
Else
ckDebug.Checked = False
End If
Dim RDGateway As String
RDGateway = ConfigFile.GetKeyValue("CICRadarR", "TSGW")
If RDGateway = "1" Then
rbRDGateway.Checked = True
rbCitrixNetscaler.Checked = False
Else
rbRDGateway.Checked = False
rbCitrixNetscaler.Checked = True
End If
Dim ClientList() As String
ClientList = Split(ConfigFile.GetKeyValue("CICRadarR", "ClientList"), ",")
For i As Integer = 0 To ClientList.Length - 1
ListClients.Items.Add(ClientList(i) & " ( " & ConfigFile.GetKeyValue("Clients", ClientList(i)) & " )")
Next
Catch
End Try
Dim tt As New ToolTip()
tt.ShowAlways = True
tt.SetToolTip(txtADField, "Type the Active Directory field where phonenumbers are stored." & vbCrLf & "Ex: mobile or telephoneNumber" & vbCrLf & "Use Adsiedit.msc to find the correct field.")
tt.SetToolTip(txtSMSC, "See http://smsclist.com/downloads/default.txt for your provider" & vbCrLf & "Ex: +4540390999")
tt.SetToolTip(txtComPort, "Ex: com1")
tt.SetToolTip(txtProvider, "Type the https address of your SMS provider." & vbCrLf & "Replace the message field of the url with ***TEXTMESSAGE***" & vbCrLf & "Replace the recipient field of the url with ***NUMBER***" & vbCrLf & "Ex: https://www.cpsms.dk/sms/?username=myuser&password=mypassword&recipient=***NUMBER***&message=&from=CPSMS")
tt.SetToolTip(txtNetBios, "Set NetBios Domain name" & vbCrLf & "Ex: MYDOMAIN")
tt.SetToolTip(txtLdapDomain, "Set LDAP Domain" & vbCrLf & "Ex: test.lan")
tt.SetToolTip(ckEnableOTP, "Enable SMS Magic.")
ToolStripStatusLabel1.Text = "Status: " & "Configuration loaded"
End Sub
Private Sub btnRemoveClient_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
If ListClients.SelectedIndex > -1 Then
ListClients.Items.RemoveAt(ListClients.SelectedIndex)
End If
End Sub
Private Sub btnAddClient_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
If Not ListClients.Items.Contains(txtClient.Text & " ( " & EncDec.Encrypt(txtSecret.Text, encCode) & " )") Then
ListClients.Items.Add(txtClient.Text & " ( " & EncDec.Encrypt(txtSecret.Text, encCode) & " )")
End If
End Sub
Private Sub btnRestart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRestart.Click
Dim ok As MsgBoxResult
btnRestart.Enabled = False
ok = MsgBox("Restart CICRadiusR Service?", MsgBoxStyle.YesNo, "Restart Service")
If ok = vbYes Then
ToolStripStatusLabel1.Text = "Status: " & "Radius server restarting..."
Dim controller As New ServiceController("CICRadiusR")
controller.Stop()
controller.WaitForStatus(ServiceControllerStatus.Stopped)
ToolStripStatusLabel1.Text = "Status: " & "Radius server stopped"
controller.Start()
controller.WaitForStatus(ServiceControllerStatus.Running)
ToolStripStatusLabel1.Text = "Status: " & "Radius server started"
MsgBox("CICRadiusR Service restarted", MsgBoxStyle.Information, "Information")
End If
btnRestart.Enabled = True
End Sub
Private Sub lvConfig_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles lvConfig.SelectedIndexChanged
Dim ele As ListViewItem
If lvConfig.SelectedIndices.Count > 0 Then
Select lvConfig.SelectedItems(0).Text.ToUpper
Case "SETUP"
PanelSetup.Visible = True
PanelActiveDirectory.Visible = False
PanelSMSSetup.Visible = False
PanelMailSetup.Visible = False
PanelRadiusClients.Visible = False
Case "ACTIVE DIRECTORY"
PanelSetup.Visible = False
PanelActiveDirectory.Visible = True
PanelSMSSetup.Visible = False
PanelMailSetup.Visible = False
PanelRadiusClients.Visible = False
Case "SMS SETUP"
If ckEnableSMS.Checked = True Then
PanelSetup.Visible = False
PanelActiveDirectory.Visible = False
PanelSMSSetup.Visible = True
PanelMailSetup.Visible = False
PanelRadiusClients.Visible = False
End If
Case "MAIL SETUP"
If ckEnableMail.Checked = True Then
PanelSetup.Visible = False
PanelActiveDirectory.Visible = False
PanelSMSSetup.Visible = False
PanelMailSetup.Visible = True
PanelRadiusClients.Visible = False
End If
Case "RADIUS CLIENTS"
PanelSetup.Visible = False
PanelActiveDirectory.Visible = False
PanelSMSSetup.Visible = False
PanelMailSetup.Visible = False
PanelRadiusClients.Visible = True
Panel1.AutoScrollPosition = New Point(0, 130)
End Select
End If
End Sub
Private Sub rbRDGateway_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbRDGateway.CheckedChanged
If rbRDGateway.Checked = True Then
rbCitrixNetscaler.Checked = False
End If
End Sub
Private Sub rbCitrixNetscaler_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbCitrixNetscaler.CheckedChanged
If rbCitrixNetscaler.Checked = True Then
rbRDGateway.Checked = False
End If
End Sub
Private Sub rbOnlineSMS_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbOnlineSMS.CheckedChanged
If rbOnlineSMS.Checked = True Then
rbLocalSMS.Checked = False
txtComPort.Enabled = False
txtSMSC.Enabled = False
txtProvider.Enabled = True
txtSMSC.BackColor = Color.White
txtComPort.BackColor = Color.White
End If
End Sub
Private Sub rbLocalSMS_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbLocalSMS.CheckedChanged
If rbLocalSMS.Checked = True Then
rbOnlineSMS.Checked = False
txtComPort.Enabled = True
txtSMSC.Enabled = True
txtProvider.Enabled = False
txtProvider.BackColor = Color.White
End If
End Sub
Private Sub btnTestModem_Click(sender As System.Object, e As System.EventArgs) Handles btnTestModem.Click
Call TestModem()
End Sub
Private Sub ckEnableOTP_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles ckEnableOTP.CheckedChanged
If ckEnableOTP.Checked = True Then
ckEnableMail.Enabled = True
ckEnableSMS.Enabled = True
'If ckEnableSMS.Checked = True Then
' lvConfig.Items.Item(2).ImageIndex = 2
'Else
' lvConfig.Items.Item(2).ImageIndex = 5
'End If
'If ckEnableMail.Checked = True Then
' lvConfig.Items.Item(3).ImageIndex = 3
'Else
' lvConfig.Items.Item(3).ImageIndex = 6
'End If
'txtADField.Enabled = True
'txtComPort.Enabled = True
'txtSMSC.Enabled = True
'If rbLocalSMS.Checked = True Then
' txtComPort.Enabled = True
' txtSMSC.Enabled = True
' txtProvider.Enabled = False
'Else
' txtComPort.Enabled = False
' txtSMSC.Enabled = False
' txtProvider.Enabled = True
'End If
'btnTestModem.Enabled = True
Else
ckEnableMail.Enabled = False
ckEnableSMS.Enabled = False
lvConfig.Items.Item(2).ImageIndex = 5
lvConfig.Items.Item(3).ImageIndex = 6
'txtADField.Enabled = False
'txtComPort.Enabled = False
'txtSMSC.Enabled = False
'txtProvider.Enabled = False
'btnTestModem.Enabled = False
End If
End Sub
Private Sub ckEnableSMS_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles ckEnableSMS.CheckedChanged
If ckEnableSMS.Checked = True Then
lvConfig.Items.Item(2).ImageIndex = 2
TestModemConfigurationToolStripMenuItem.Enabled = True
Else
TestModemConfigurationToolStripMenuItem.Enabled = False
lvConfig.Items.Item(2).ImageIndex = 5
End If
End Sub
Private Sub ckEnableMail_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles ckEnableMail.CheckedChanged
If ckEnableMail.Checked = True Then
lvConfig.Items.Item(3).ImageIndex = 3
TestMailConfigurationToolStripMenuItem.Enabled = True
Else
lvConfig.Items.Item(3).ImageIndex = 6
TestMailConfigurationToolStripMenuItem.Enabled = False
End If
End Sub
Private Sub SaveConfigurationToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SaveConfigurationToolStripMenuItem.Click
Call save()
End Sub
Private Sub RestartRadiusServerToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles RestartRadiusServerToolStripMenuItem.Click
Dim ok As MsgBoxResult
RestartRadiusServerToolStripMenuItem.Enabled = False
ok = MsgBox("Restart CICRadiusR Service?", MsgBoxStyle.YesNo + MsgBoxStyle.Information, "Restart Service")
If ok = vbYes Then
Dim controller As New ServiceController("CICRadiusR")
controller.Stop()
controller.WaitForStatus(ServiceControllerStatus.Stopped)
controller.Start()
controller.WaitForStatus(ServiceControllerStatus.Running)
MsgBox("CICRadiusR Service restarted", MsgBoxStyle.Information, "Information")
End If
RestartRadiusServerToolStripMenuItem.Enabled = True
End Sub
Sub Save()
ConfigFile.SetKeyValue("CICRadarR", "NetBiosDomain", txtNetBios.Text)
ConfigFile.SetKeyValue("CICRadarR", "LDAPDomain", txtLdapDomain.Text)
ConfigFile.SetKeyValue("CICRadarR", "Provider", txtProvider.Text)
ConfigFile.SetKeyValue("CICRadarR", "ADField", txtADField.Text)
ConfigFile.SetKeyValue("CICRadarR", "ADMailField", txtADMailField.Text)
ConfigFile.SetKeyValue("CICRadarR", "SenderEmail", txtSenderEmail.Text)
ConfigFile.SetKeyValue("CICRadarR", "MailServer", txtMailServer.Text)
If rbLocalSMS.Checked = True Then
ConfigFile.SetKeyValue("CICRadarR", "USELOCALMODEM", "1")
Else
ConfigFile.SetKeyValue("CICRadarR", "USELOCALMODEM", "0")
End If
ConfigFile.SetKeyValue("CICRadarR", "COMPORT", txtComPort.Text)
ConfigFile.SetKeyValue("CICRadarR", "SMSC", txtSMSC.Text)
If ckDebug.Checked = True Then
ConfigFile.SetKeyValue("CICRadarR", "Debug", "1")
Else
ConfigFile.SetKeyValue("CICRadarR", "Debug", "0")
End If
If ckEnableOTP.Checked = True Then
ConfigFile.SetKeyValue("CICRadarR", "EnableOTP", "1")
Else
ConfigFile.SetKeyValue("CICRadarR", "EnableOTP", "0")
End If
If rbRDGateway.Checked = True Then
ConfigFile.SetKeyValue("CICRadarR", "TSGW", "1")
Else
ConfigFile.SetKeyValue("CICRadarR", "TSGW", "0")
End If
If ckEnableMail.Checked = True Then
ConfigFile.SetKeyValue("CICRadarR", "EnableEmail", "1")
Else
ConfigFile.SetKeyValue("CICRadarR", "EnableEmail", "0")
End If
If ckEnableSMS.Checked = True Then
ConfigFile.SetKeyValue("CICRadarR", "EnableSMS", "1")
Else
ConfigFile.SetKeyValue("CICRadarR", "EnableSMS", "0")
End If
ConfigFile.RemoveSection("Clients")
Dim ClientList As String = ""
For i As Integer = 0 To ListClients.Items.Count - 1
Dim Client As String
Dim Secret As String
Client = Split(ListClients.Items(i), " ( ")(0)
Secret = Replace(Split(ListClients.Items(i), " ( ")(1), " )", "")
ConfigFile.SetKeyValue("Clients", Client, Secret)
If i = ListClients.Items.Count - 1 Then
ClientList = ClientList & Client
Else
ClientList = ClientList & Client & ","
End If
Next
ConfigFile.SetKeyValue("CICRadarR", "ClientList", ClientList)
ConfigFile.Save(Application.StartupPath & "\CICRadarR.ini")
End Sub
Private Sub ExitToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ExitToolStripMenuItem.Click
Select Case MsgBox("Save configuration before exit?", MsgBoxStyle.YesNoCancel + MsgBoxStyle.Information, "Configuration")
Case vbYes
Call Save()
ToolStripStatusLabel1.Text = "Status: " & "Configuration saved"
MsgBox("Configuration saved", vbOKOnly + MsgBoxStyle.Information, "Configuration")
End
Case vbNo
End
Case vbCancel
End Select
End Sub
Private Sub AboutToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles AboutToolStripMenuItem.Click
MsgBox("Configuration tool for CICRadar." & vbCrLf & vbCrLf & "Version 1.1", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "About")
End Sub
Sub TestModem()
Dim number As String
number = InputBox("Type the phone number to send the test sms to" & vbCrLf & vbCrLf & "Ex: +4512345678", "Phone Number", "", Me.Left + 150, Me.Top + 100)
If rbLocalSMS.Checked = True Then
Dim testsms As New SmsClass(txtComPort.Text)
testsms.Opens()
testsms.sendSms(number, "Test SMS Service", txtSMSC.Text)
testsms.Closes()
Else
Dim baseurl As String = txtProvider.Text.Split("?")(0)
Dim client As New System.Net.WebClient()
' Add a user agent header in case the requested URI contains a query.
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR1.0.3705;)")
Dim parameters As String = txtProvider.Text.Split("?")(1)
Dim pary As String() = parameters.Split("&")
For i As Integer = 0 To pary.Length - 1
If pary(i).IndexOf("***TEXTMESSAGE***") > 0 Then
Dim qpar As String() = pary(i).Split("=")
client.QueryString.Add(qpar(0), "Test SMS Service")
ElseIf pary(i).IndexOf("***NUMBER***") > 0 Then
Dim qpar As String() = pary(i).Split("=")
client.QueryString.Add(qpar(0), number)
Else
Dim qpar As String() = pary(i).Split("=")
client.QueryString.Add(qpar(0), qpar(1))
End If
Next
Dim data As Stream = client.OpenRead(baseurl)
Dim reader As New StreamReader(data)
Dim s As String = reader.ReadToEnd()
data.Close()
reader.Close()
End If
End Sub
Sub TestEmail()
Dim email As String
email = InputBox("Type the email address to send the test email to" & vbCrLf & vbCrLf & "Ex: test@my.mail.com", "Email", "", Me.Left + 150, Me.Top + 100)
Dim mail As New MailMessage()
mail.To.Add(email)
mail.From = New MailAddress(txtSenderEmail.Text)
mail.Subject = "Test mail from CICRadar"
mail.Body = "Just a test."
mail.IsBodyHtml = False
Dim smtp As New SmtpClient(txtMailServer.Text)
Try
smtp.Send(mail)
ToolStripStatusLabel1.Text = "Status: Mail send"
Catch e As InvalidCastException
ToolStripStatusLabel1.Text = "Status: Failed to send mail"
End Try
End Sub
Private Sub TestModemConfigurationToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TestModemConfigurationToolStripMenuItem.Click
Call TestModem()
End Sub
Private Sub TestMailConfigurationToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TestMailConfigurationToolStripMenuItem.Click
Call TestEmail()
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Call TestEmail()
End Sub
Private Sub btnRemoveClient_Click(sender As System.Object, e As System.EventArgs) Handles btnRemoveClient.Click
If ListClients.SelectedIndex > -1 Then
ListClients.Items.RemoveAt(ListClients.SelectedIndex)
End If
End Sub
Private Sub btnAddClient_Click(sender As System.Object, e As System.EventArgs) Handles btnAddClient.Click
If Not ListClients.Items.Contains(txtClient.Text & " ( " & EncDec.Encrypt(txtSecret.Text, encCode) & " )") Then
ListClients.Items.Add(txtClient.Text & " ( " & EncDec.Encrypt(txtSecret.Text, encCode) & " )")
End If
End Sub
End Class

View file

@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.1008
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.CICRadarRConfig.CICRadiusRConfig
End Sub
End Class
End Namespace

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-16"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>CICRadiusRConfig</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View file

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("CICRadarRConfig")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Microsoft")>
<Assembly: AssemblyProduct("CICRadarRConfig")>
<Assembly: AssemblyCopyright("Copyright © Microsoft 2012")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("f0feb00f-1171-4cdf-b5d1-30cc01b75624")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View file

@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.1008
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CICRadarRConfig.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View file

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View file

@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.1008
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.CICRadarRConfig.My.MySettings
Get
Return Global.CICRadarRConfig.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View file

@ -0,0 +1,66 @@
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Threading
Imports System.IO.Ports
Imports System.Windows.Forms
Namespace SMS
Class SmsClass
Private serialPort As SerialPort
Public Sub New(ByVal comPort As String)
Me.serialPort = New SerialPort()
Me.serialPort.PortName = comPort
Me.serialPort.BaudRate = 38400
Me.serialPort.Parity = Parity.None
Me.serialPort.DataBits = 8
Me.serialPort.StopBits = StopBits.One
Me.serialPort.Handshake = Handshake.RequestToSend
Me.serialPort.DtrEnable = True
Me.serialPort.RtsEnable = True
Me.serialPort.NewLine = System.Environment.NewLine
End Sub
Public Function sendSms(ByVal cellNo As String, ByVal sms As String, ByVal SMSC As String) As Boolean
Dim messages As String = Nothing
messages = sms
If Me.serialPort.IsOpen = True Then
Try
Me.serialPort.WriteLine("AT" + Chr(13))
Thread.Sleep(4)
Me.serialPort.WriteLine("AT+CSCA=""" + SMSC + """" + Chr(13))
Thread.Sleep(30)
Me.serialPort.WriteLine(Chr(13))
Thread.Sleep(30)
Me.serialPort.WriteLine("AT+CMGS=""" + cellNo + """")
Thread.Sleep(30)
Me.serialPort.WriteLine(messages + Chr(26))
Catch ex As Exception
MessageBox.Show(ex.Source)
End Try
Return True
Else
Return False
End If
End Function
Public Sub Opens()
If Me.serialPort.IsOpen = False Then
Try
'bool ok =this.serialPort.IsOpen //does not work between 2 treads
Me.serialPort.Open()
Catch
Thread.Sleep(1000)
'wait for the port to get ready if
Opens()
End Try
End If
End Sub
Public Sub Closes()
If Me.serialPort.IsOpen = True Then
Me.serialPort.Close()
End If
End Sub
End Class
End Namespace

View file

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<configuration>
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information"/>
</switches>
<sharedListeners>
<add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter"/>
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</sharedListeners>
</system.diagnostics>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View file

@ -0,0 +1,24 @@
[CICRadarR]
ClientList=10.10.10.47,192.168.1.139,192.168.1.101,192.168.1.61,192.168.1.44,188.244.24.22
SenderEmail=noreply2@isager.dk
EnableOTP=1
Provider=https://www.cpsms.dk/sms/?username=myuser&password=mypassword&recipient=***NUMBER***&message=***TEXTMESSAGE***&from=CPSMS
Debug=0
EnableSMS=1
ADField=telephoneNumber
NetBiosDomain=isager
TSGW=1
LDAPDomain=isager.lan
EnableEmail=1
USELOCALMODEM=0
SMSC=+4540390999
COMPORT=com1
MailServer=192.168.1.25
ADMailfield=mail
[Clients]
188.244.24.22=/pkahxdoI69d+omeup3YZA==
192.168.1.139=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
10.10.10.47=iirseiKUQCWnjfg1ZLhF+w==
192.168.1.101=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=
192.168.1.61=p2fyLMddDfH8aLYwMyDbhQ1l3MY9hAJxx6DyiUOhjXw=
192.168.1.44=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c=

View file

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<configuration>
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information"/>
</switches>
<sharedListeners>
<add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter"/>
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</sharedListeners>
</system.diagnostics>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View file

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<configuration>
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information"/>
</switches>
<sharedListeners>
<add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter"/>
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</sharedListeners>
</system.diagnostics>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View file

@ -0,0 +1,24 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
CICRadarRConfig
</name>
</assembly>
<members>
<member name="P:CICRadarRConfig.My.Resources.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member><member name="P:CICRadarRConfig.My.Resources.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member><member name="T:CICRadarRConfig.My.Resources.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member>
</members>
</doc>

Some files were not shown because too many files have changed in this diff Show more