(c) BigSpeed Computing Inc. - Secure private networking
'Visual Basic .NET example of secure file sharing server
'To keep this VB.NET example simple, we are going to implement
'only the main file operations and one predefined user account
Option Strict Off
Option Explicit On
Friend Class CfMain
Inherits System.Windows.Forms.Form
#Region "Windows Form Designer generated code "
'To keep this VB .NET example simple, we are going to implement
'only the basic file operations
Dim fSettings As CfSettings
'Initializations
Private Sub fMain_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
fSettings = New CfSettings 'create settings form
SetProperties()
UpdateStatus()
End Sub
Const MyUsername = "test"
Const MyPassword = "test"
' *** General ***
Public Function App_Path() As String
Return System.AppDomain.CurrentDomain.BaseDirectory()
End Function
'Insert a leading slash
Private Function PreSlash(ByVal aPath As String) As String
If Mid(aPath, 1, 1) = "\" Then
PreSlash = aPath
Else
PreSlash = "\" + aPath
End If
End Function
Private Function GetUsername(ByVal aHandle As Long) As String
GetUsername = FileSrv.GetUserName(aHandle)
If GetUsername = "" Then
GetUsername = "Default"
End If
GetUsername = "User " + GetUsername
End Function
' *** Working ***
'Update the status text
Private Sub UpdateStatus()
If FileSrv.Running Then
StatusBar.Panels.Item(0).Text = "Started"
btnStart.Enabled = False
btnStop.Enabled = True
Else
StatusBar.Panels.Item(0).Text = "Stopped"
btnStart.Enabled = True
btnStop.Enabled = False
End If
If lvClients.Items.Count = 0 Then
StatusBar.Panels.Item(1).Text = "No active connection"
Else
StatusBar.Panels.Item(1).Text = Str(lvClients.Items.Count) + " connection(s)"
End If
btnRemove.Enabled = lvClients.SelectedItems.Count > 0
End Sub
'Set the component properties
Private Sub SetProperties()
FileSrv.ListeningPort = fSettings.txtPort.Text
FileSrv.CryptoKey = fSettings.txtKey.Text
FileSrv.UseCompression = fSettings.chkCompress.Checked
End Sub
'Record a log message
Private Sub LogMsg(ByVal aMsg As String)
Dim Line As String
If txtLog.Text > "" Then
Line = Chr(13) & Chr(10)
End If
Line = Line & "[" & VB6.Format(Now, "hh:mm:ss") & "]: "
Line = Line & aMsg
txtLog.SelectionStart = Len(txtLog.Text)
txtLog.SelectedText = Line
End Sub
Private Function ItemFromHandle(ByVal aHandle As Long) As ListViewItem
'iterate on the list
Dim i As Integer
For i = 0 To lvClients.Items.Count - 1
If lvClients.Items(i).Tag = aHandle Then
ItemFromHandle = lvClients.Items(i)
Exit Function
End If
Next i
ItemFromHandle = Nothing
End Function
'*** Event handlers
'Modify the settings
Private Sub btnSettings_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSettings.Click
If fSettings.ShowDialog <> DialogResult.OK Then Exit Sub
SetProperties()
UpdateStatus()
End Sub
'The crypto key match is changed
Private Sub SockLib_OnKeyChanged(ByVal eventSender As System.Object, ByVal eventArgs As AxbsSocketLibrary.IBSSockLibXEvents_OnKeyChangedEvent)
UpdateStatus()
End Sub
'Show my IP address
Private Sub btnIP_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIP.Click
MsgBox(FileSrv.LocalIP)
End Sub
'Terminate the application
Private Sub btnExit_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
End
End Sub
'Start the server
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
If FileSrv.Start Then
LogMsg("Server started")
Else
Call MsgBox("Cannot start the server!", , "Error")
End If
UpdateStatus()
End Sub
'Stop the server
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
Dim LI As ListViewItem
Dim i As Integer
FileSrv.Stop()
For i = lvClients.Items.Count - 1 To 0 Step -1
FileSrv.RemoveClient(lvClients.Items(i).Tag)
lvClients.Items.Remove(lvClients.Items(i))
Next i
UpdateStatus()
LogMsg("Server stopped")
End Sub
'Remove a client connection
Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click
If lvClients.SelectedItems.Count = 0 Then Exit Sub
FileSrv.RemoveClient(lvClients.SelectedItems(0).Tag)
lvClients.Items.Remove(lvClients.SelectedItems(0))
UpdateStatus()
End Sub
'Clear the log
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
txtLog.Text = ""
End Sub
' *** FileSrv events ***
'A new connection is available
Private Sub FileSrv_OnNewClient(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNewClientEvent) Handles FileSrv.OnNewClient
Dim LI As ListViewItem
LI = lvClients.Items.Add("Not signed in")
LI.Tag = e.aHandle
LI.SubItems.Add(FileSrv.GetClientAddress(e.aHandle))
LI.SubItems.Add(FileSrv.GetClientPort(e.aHandle))
LI.SubItems.Add(VB6.Format(Now, "hh:mm:ss"))
LI.SubItems.Add("Connected")
UpdateStatus()
LogMsg("New connection from " + LI.SubItems.Item(0).Text + ":" + LI.SubItems.Item(1).Text)
End Sub
'A connection is broken
Private Sub FileSrv_OnClientDisconnected(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnClientDisconnectedEvent) Handles FileSrv.OnClientDisconnected
Dim LI As ListViewItem
LI = ItemFromHandle(e.aHandle)
If LI Is Nothing Then Exit Sub
LogMsg("Disconnected " + LI.Text + " " + FileSrv.GetClientAddress(e.aHandle) + ":" + FileSrv.GetClientPort(e.aHandle))
lvClients.Items.Remove(LI)
End Sub
'The key matching is changed
Private Sub FileSrv_OnKeyChanged(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnKeyChangedEvent) Handles FileSrv.OnKeyChanged
Dim LI As ListViewItem
LI = ItemFromHandle(e.aHandle)
If LI Is Nothing Then Exit Sub
LogMsg("Key changed for " + GetUsername(e.aHandle) + " " + FileSrv.GetClientAddress(e.aHandle) + ":" + FileSrv.GetClientPort(e.aHandle))
If FileSrv.WrongKey(e.aHandle) Then
LI.SubItems.Item(4).Text = "Wrong key"
Else
LI.SubItems.Item(4).Text = "Connected"
End If
End Sub
'A request for a password
Private Sub FileSrv_OnNeedPassword(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedPasswordEvent) Handles FileSrv.OnNeedPassword
If e.aUsername = MyUsername Then
'this is our user
e.aOkay = True
e.aPassword = MyPassword
Else
'Unknown user
e.aOkay = False
End If
End Sub
'An user is signed-in
Private Sub FileSrv_OnSignin(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnSigninEvent) Handles FileSrv.OnSignin
Dim S As String
Dim LI As ListViewItem
S = GetUsername(e.aHandle)
LI = ItemFromHandle(e.aHandle)
If Not (LI Is Nothing) Then
LI.Text = S
End If
S = S + " " + FileSrv.GetClientAddress(e.aHandle) + ":" + FileSrv.GetClientPort(e.aHandle)
If e.aCode = 0 Then
S = S + " signed in successfully"
Else
S = S + " failed sign-in"
End If
LogMsg(S)
End Sub
'A request to list the folder contents
Private Sub FileSrv_OnNeedListFolder(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedListFolderEvent) Handles FileSrv.OnNeedListFolder
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": list folder " + PreSlash(e.aPath))
End Sub
'A request to create a folder
Private Sub FileSrv_OnNeedCreateFolder(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedCreateFolderEvent) Handles FileSrv.OnNeedCreateFolder
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": create folder " + PreSlash(e.aPath))
End Sub
'A request to rename a folder
Private Sub FileSrv_OnNeedRenameFolder(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedRenameFolderEvent) Handles FileSrv.OnNeedRenameFolder
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": rename folder " + PreSlash(e.aPath))
End Sub
'A request to rename a file
Private Sub FileSrv_OnNeedRenameFile(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedRenameFileEvent) Handles FileSrv.OnNeedRenameFile
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": rename file " + PreSlash(e.aPath))
End Sub
'A request to delete a folder
Private Sub FileSrv_OnNeedDeleteFolder(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedDeleteFolderEvent) Handles FileSrv.OnNeedDeleteFolder
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": delete folder " + PreSlash(e.aPath))
End Sub
'A request to delete a file
Private Sub FileSrv_OnNeedDeleteFile(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedDeleteFileEvent) Handles FileSrv.OnNeedDeleteFile
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": delete file " + PreSlash(e.aPath))
End Sub
'A request to download
Private Sub FileSrv_OnNeedDownload(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedDownloadEvent) Handles FileSrv.OnNeedDownload
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": start downloading " + PreSlash(e.aPath))
End Sub
'The download operation is completed
Private Sub FileSrv_OnDownloadDone(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnDownloadDoneEvent) Handles FileSrv.OnDownloadDone
LogMsg(GetUsername(e.aHandle) + ": finish downloading ")
End Sub
'A request to upload
Private Sub FileSrv_OnNeedUpload(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnNeedUploadEvent) Handles FileSrv.OnNeedUpload
e.aOkay = True
e.aRoot = App_Path()
LogMsg(GetUsername(e.aHandle) + ": start uploading " + PreSlash(e.aPath))
End Sub
'The upload operation is completed
Private Sub FileSrv_OnUploadDone(ByVal sender As Object, ByVal e As AxBSFileSrvLib.IBSFileSrvXEvents_OnUploadDoneEvent) Handles FileSrv.OnUploadDone
LogMsg(GetUsername(e.aHandle) + ": finish uploading ")
End Sub
Private Sub lvClients_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvClients.SelectedIndexChanged
UpdateStatus()
End Sub
End Class
(c) BigSpeed Computing Inc. - Secure private networking