home *** CD-ROM | disk | FTP | other *** search
- Attribute VB_Name = "Module1"
- Option Base 1
- Dim hi, lo, returncode, returncode2, savedata, strdata, strdata2 As String
- Dim asciilist, receiving, isdone, isready, lastpacket As Boolean
- Dim CurrentByte, totalreceived, receivesize, TotalByte As Long
- Dim transferstate As Integer
- Dim b(1024) As Byte
- Dim ba() As Byte
- Dim Elapsed, f, x, c, o As Long
- Dim temp, myip, os, saveport As String
- Dim ob As Byte
- Dim Rate As Double
- Public ftpcompleted As Integer
-
- Private Sub Timer1_Timer()
- Elapsed = Elapsed + 1
- If CurrentByte > 0 And TotalByte > 0 Then
- ftpcompleted = CurrentByte / TotalByte * 100
- Rate = CurrentByte / Elapsed / 1000
- End If
- End Sub
-
- Private Sub Winsock1_SendComplete(): isready = True: End Sub
-
- Private Sub Winsock2_SendComplete(): isdone = True: End Sub
-
- Private Sub Winsock1_DataArrival(ByVal bytestotal As Long)
- winsock1.GetData strdata
- If isready Then returncode = Left(strdata, 3)
- If returncode = "221" Then savedata = strdata
- If returncode = "227" Then savedata = strdata
- If returncode = "150" Then savedata = strdata
- End Sub
-
- Private Sub Winsock2_DataArrival(ByVal bytestotal As Long)
- transferstate = 0
- If receiving Then transferstate = 1
- If asciilist Then transferstate = 2
- Select Case transferstate
- Case 0: winsock2.GetData strdata2
- Case 1: winsock2.GetData ba(): Put #1, , ba()
- totalreceived = totalreceived + bytestotal
- CurrentByte = CurrentByte + bytestotal
- Case 2: winsock2.GetData strdata2: Write #1, strdata2
- End Select
-
- If isdone Then returncode = Left(strdata2, 3)
- End Sub
- Private Sub winsock2_ConnectionRequest(ByVal requestID As Long)
- If winsock2.State <> sckClosed Then winsock2.Close
- winsock2.Accept requestID
- End Sub
-
- Public Sub LogonSendFile(FtpAddress As String, UserName As String, Password As String, LocalFileName As String, RemoteFileName As String)
- Elapsed = 0
- lastpacket = False
- receiving = False
- winsock1.RemoteHost = FtpAddress
- winsock1.RemotePort = 21
- winsock1.Protocol = sckTCPProtocol
- winsock1.Connect
-
- resetwinsock:
-
- While winsock1.State = 9
- If winsock1.State <> sckClosed Then
- winsock1.Close
- While winsock1.State <> sckClosed: DoEvents: Wend
- End If
- winsock1.Connect
- DoEvents
- Wend
-
- While winsock1.State <> sckConnected
- If winsock1.State = 9 Then GoTo resetwinsock
- DoEvents
- Wend
-
- While returncode <> "220": DoEvents: Wend
-
- temp = winsock1.LocalIP: myip = ""
- For x = 1 To Len(temp)
- If Mid(temp, x, 1) = "." Then myip = myip + "," Else myip = myip + Mid(temp, x, 1)
- Next x
-
- winsock1.SendData "user " + UserName + Chr(13) + Chr(10)
- While returncode <> "331": DoEvents: Wend
-
- winsock1.SendData "pass " + Password + Chr(13) + Chr(10)
- While returncode <> "230": DoEvents: Wend
-
- 'request port assignment from remote
-
- winsock1.SendData "pasv" + Chr(13) + Chr(10)
- While returncode <> "227": DoEvents: Wend
- For x = 1 To 4: savedata = Right(savedata, Len(savedata) - InStr(1, savedata, ",")): Next x
- savedata = Left(savedata, Len(savedata) - 3)
- hi = Left(savedata, InStr(1, savedata, ",") - 1)
- lo = Right(savedata, Len(savedata) - (Len(hi) + 1))
-
- isready = False
-
- 'open data port
-
- winsock2.LocalPort = Val(hi) * 256 + Val(lo)
- winsock2.Listen
-
- winsock1.SendData "port " + myip + "," + savedata + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- winsock1.SendData "type i" + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- winsock1.SendData "stor " + RemoteFileName + Chr(13) + Chr(10)
- While returncode <> "150": DoEvents: Wend
- While winsock2.State <> sckConnected: DoEvents: Wend
-
- 'send data to remote
-
- 'read file in 1k chunks
-
- f = FileLen(LocalFileName)
- If f > 1024 Then c = Int(f / 1024): o = f - (c * 1024) Else o = f
- TotalByte = f
- Open LocalFileName For Binary Access Read As #1
- lastpacket = False
-
- If f > 1024 Then
- For x = 1 To c
- isdone = False
- Get 1, , b()
- winsock2.SendData b()
- CurrentByte = CurrentByte + 1024
- While Not isdone: DoEvents: Wend
- Next x
- End If
-
- os = ""
- If o = 0 Then lastpacket = True: isdone = True
-
- If o > 0 Then
- isdone = False
- For x = 1 To o
- Get 1, , ob: os = os + Chr(ob)
- CurrentByte = CurrentByte + 1
- Next x
- winsock2.SendData os
- While Not isdone: DoEvents: Wend
- lastpacket = True
- isdone = True
- End If
-
- 'close data port
-
- If lastpacket Then
- Close #1
- winsock2.Close
- winsock1.SendData "quit" + Chr(13) + Chr(10)
- While returncode <> "221": DoEvents: Wend
- winsock1.Close
- While winsock1.State <> sckClosed: DoEvents: Wend
- While winsock2.State <> sckClosed: DoEvents: Wend
- CurrentByte = 0
- TotalByte = 0
- Elapsed = 0
- End If
-
- End Sub
- Public Sub LogonGetFile(FtpAddress As String, UserName As String, Password As String, LocalFileName As String, RemoteFileName As String)
- receiving = True
- Elapsed = 0
- winsock1.RemoteHost = FtpAddress
- winsock1.RemotePort = 21
- winsock1.Protocol = sckTCPProtocol
- winsock1.Connect
-
- resetwinsock:
-
- While winsock1.State = 9
- If winsock1.State <> sckClosed Then
- winsock1.Close
- While winsock1.State <> sckClosed: DoEvents: Wend
- End If
- winsock1.Connect
- DoEvents
- Wend
-
- While winsock1.State <> sckConnected
- If winsock1.State = 9 Then GoTo resetwinsock
- DoEvents
- Wend
-
- While returncode <> "220": DoEvents: Wend
-
- temp = winsock1.LocalIP: myip = ""
- For x = 1 To Len(temp)
- If Mid(temp, x, 1) = "." Then myip = myip + "," Else myip = myip + Mid(temp, x, 1)
- Next x
-
- winsock1.SendData "user " + UserName + Chr(13) + Chr(10)
- While returncode <> "331": DoEvents: Wend
-
- winsock1.SendData "pass " + Password + Chr(13) + Chr(10)
- While returncode <> "230": DoEvents: Wend
-
- winsock1.SendData "pasv" + Chr(13) + Chr(10)
- While returncode <> "227": DoEvents: Wend
- For x = 1 To 4: savedata = Right(savedata, Len(savedata) - InStr(1, savedata, ",")): Next x
- savedata = Left(savedata, Len(savedata) - 3)
- hi = Left(savedata, InStr(1, savedata, ",") - 1)
- lo = Right(savedata, Len(savedata) - (Len(hi) + 1))
-
- isready = False
-
- winsock2.LocalPort = Val(hi) * 256 + Val(lo)
- winsock2.Listen
-
- winsock1.SendData "port " + myip + "," + savedata + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- winsock1.SendData "type i" + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- buffer = ""
- totalreceived = 0
-
- Open LocalFileName For Binary Access Write As #1
-
- c = 0
- winsock1.SendData "retr " + RemoteFileName + Chr(13) + Chr(10)
- While returncode <> "150": DoEvents: Wend
- savedata = Mid(savedata, InStr(1, savedata, "(") + 1, InStr(1, savedata, ")") - InStr(1, savedata, "(") - 7)
- receivesize = Val(savedata)
- bytestotal = receivesize
- While winsock2.State = sckConnected: DoEvents: Wend
- If winsock2.State <> sckConnected Then
- Close #1
- winsock2.Close
- winsock1.SendData "quit" + Chr(13) + Chr(10)
- While returncode <> "221": DoEvents: Wend
- winsock1.Close
- While winsock1.State <> sckClosed: DoEvents: Wend
- While winsock2.State <> sckClosed: DoEvents: Wend
- CurrentByte = 0
- TotalByte = 0
- Elapsed = 0
- End If
-
- End Sub
- Public Sub Logon(ByVal FtpAddress As String, ByVal UserName As String, ByVal Password As String)
-
- winsock1.RemoteHost = FtpAddress
- winsock1.RemotePort = 21
- winsock1.Protocol = sckTCPProtocol
- winsock1.Connect
-
- resetwinsock:
-
- While winsock1.State = 9
- If winsock1.State <> sckClosed Then
- winsock1.Close
- While winsock1.State <> sckClosed: DoEvents: Wend
- End If
- winsock1.Connect
- DoEvents
- Wend
-
- While winsock1.State <> sckConnected
- If winsock1.State = 9 Then GoTo resetwinsock
- DoEvents
- Wend
-
- While returncode <> "220": DoEvents: Wend
-
- winsock1.SendData "user " + UserName + Chr(13) + Chr(10)
- While returncode <> "331": DoEvents: Wend
-
- winsock1.SendData "pass " + Password + Chr(13) + Chr(10)
- While returncode <> "230": DoEvents: Wend
-
- End Sub
- Public Sub SendFile(LocalFileName As String, RemoteFileName As String)
- While winsock1.State <> sckConnected: DoEvents: Wend
-
- lastpacket = False
- receiving = False
- Elapsed = 0
-
- temp = winsock1.LocalIP: myip = ""
- For x = 1 To Len(temp)
- If Mid(temp, x, 1) = "." Then myip = myip + "," Else myip = myip + Mid(temp, x, 1)
- Next x
-
- 'request port assignment from remote
-
- winsock1.SendData "pasv" + Chr(13) + Chr(10)
- While returncode <> "227": DoEvents: Wend
- For x = 1 To 4: savedata = Right(savedata, Len(savedata) - InStr(1, savedata, ",")): Next x
- savedata = Left(savedata, Len(savedata) - 3)
- hi = Left(savedata, InStr(1, savedata, ",") - 1)
- lo = Right(savedata, Len(savedata) - (Len(hi) + 1))
-
- isready = False
-
- 'open data port
-
- winsock2.LocalPort = Val(hi) * 256 + Val(lo)
- winsock2.Listen
-
- winsock1.SendData "port " + myip + "," + savedata + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- winsock1.SendData "type i" + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- winsock1.SendData "stor " + RemoteFileName + Chr(13) + Chr(10)
- While returncode <> "150": DoEvents: Wend
- While winsock2.State <> sckConnected: DoEvents: Wend
-
- 'send data to remote
-
- 'read file in 1k chunks
-
- f = FileLen(LocalFileName)
- If f > 1024 Then c = Int(f / 1024): o = f - (c * 1024) Else o = f
- Open LocalFileName For Binary Access Read As #1
- lastpacket = False
- TotalByte = f
- If f > 1024 Then
- For x = 1 To c
- isdone = False
- Get 1, , b()
- winsock2.SendData b()
- CurrentByte = CurrentByte + 1024
- While Not isdone: DoEvents: Wend
- Next x
- End If
-
- os = ""
- If o = 0 Then lastpacket = True: isdone = True
-
- If o > 0 Then
- isdone = False
- For x = 1 To o
- Get 1, , ob: os = os + Chr(ob)
- CurrentByte = CurrentByte + 1
- Next x
- winsock2.SendData os
- While Not isdone: DoEvents: Wend
- lastpacket = True
- isdone = True
- End If
-
- 'close data port
-
- If lastpacket Then
- Close #1
- winsock2.Close
- While winsock2.State <> sckClosed: DoEvents: Wend
- CurrentByte = 0
- TotalByte = 0
- Elapsed = 0
- End If
-
- End Sub
- Public Sub CloseFtp()
- winsock1.SendData "quit" + Chr(13) + Chr(10)
- While returncode <> "221": DoEvents: Wend
- winsock1.Close
- While winsock1.State <> sckClosed: DoEvents: Wend
- End Sub
- Public Sub GetFile(LocalFileName As String, RemoteFileName As String)
- receiving = True
- Elapsed = 0
- While winsock1.State <> sckConnected: DoEvents: Wend
-
- temp = winsock1.LocalIP: myip = ""
- For x = 1 To Len(temp)
- If Mid(temp, x, 1) = "." Then myip = myip + "," Else myip = myip + Mid(temp, x, 1)
- Next x
-
- winsock1.SendData "pasv" + Chr(13) + Chr(10)
- While returncode <> "227": DoEvents: Wend
- For x = 1 To 4: savedata = Right(savedata, Len(savedata) - InStr(1, savedata, ",")): Next x
- savedata = Left(savedata, Len(savedata) - 3)
- hi = Left(savedata, InStr(1, savedata, ",") - 1)
- lo = Right(savedata, Len(savedata) - (Len(hi) + 1))
-
- isready = False
-
- winsock2.LocalPort = Val(hi) * 256 + Val(lo)
- winsock2.Listen
-
- winsock1.SendData "port " + myip + "," + savedata + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- winsock1.SendData "type i" + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- buffer = ""
- totalreceived = 0
-
- Open LocalFileName For Binary Access Write As #1
-
- c = 0
- winsock1.SendData "retr " + RemoteFileName + Chr(13) + Chr(10)
- While returncode <> "150": DoEvents: Wend
- savedata = Mid(savedata, InStr(1, savedata, "(") + 1, InStr(1, savedata, ")") - InStr(1, savedata, "(") - 7)
- receivesize = Val(savedata)
- TotalByte = receivesize
- While winsock2.State = sckConnected: DoEvents: Wend
-
- If winsock2.State <> sckConnected Then
- Close #1
- winsock2.Close
- While winsock2.State <> sckClosed: DoEvents: Wend
- CurrentByte = 0
- TotalByte = 0
- Elapsed = 0
- End If
-
-
- End Sub
- Public Sub GetDir(ByVal LocalFileName As String, ByVal Params As String)
- asciilist = True
-
- If Params <> "" Then Params = "-" + Params
- receiving = True
- Elapsed = 0
- While winsock1.State <> sckConnected: DoEvents: Wend
-
- temp = winsock1.LocalIP: myip = ""
- For x = 1 To Len(temp)
- If Mid(temp, x, 1) = "." Then myip = myip + "," Else myip = myip + Mid(temp, x, 1)
- Next x
-
- winsock1.SendData "pasv" + Chr(13) + Chr(10)
- While returncode <> "227": DoEvents: Wend
- For x = 1 To 4: savedata = Right(savedata, Len(savedata) - InStr(1, savedata, ",")): Next x
- savedata = Left(savedata, Len(savedata) - 3)
- hi = Left(savedata, InStr(1, savedata, ",") - 1)
- lo = Right(savedata, Len(savedata) - (Len(hi) + 1))
-
- isready = False
-
- winsock2.LocalPort = Val(hi) * 256 + Val(lo)
- winsock2.Listen
-
- winsock1.SendData "port " + myip + "," + savedata + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- winsock1.SendData "type a" + Chr(13) + Chr(10)
- While returncode <> "200": DoEvents: Wend
-
- buffer = ""
- totalreceived = 0
-
- Open LocalFileName For Output As #1
-
- c = 0
- winsock1.SendData "quote nlst " + Params + Chr(13) + Chr(10)
- While returncode <> "150": DoEvents: Wend
- While returncode <> "226": DoEvents: Wend
- While winsock2.State = sckConnected: DoEvents: Wend
-
- If winsock2.State <> sckConnected Then
- Close #1
- winsock2.Close
- While winsock2.State <> sckClosed: DoEvents: Wend
- End If
- asciilist = False
-
- End Sub
- Public Sub ChangeDir(ByVal Directory As String)
- winsock1.SendData "cwd " + Directory + Chr(13) + Chr(10)
- While returncode <> "250": DoEvents: Wend
- End Sub
- Public Sub CreateDir(ByVal Directory As String)
- winsock1.SendData "mkd " + Directory + Chr(13) + Chr(10)
- While returncode <> "257": DoEvents: Wend
- End Sub
- Public Sub DeleteDir(ByVal Directory As String)
- winsock1.SendData "dele " + Directory + Chr(13) + Chr(10)
- While returncode <> "250": DoEvents: Wend
- End Sub
- Public Sub DeleteFile(FileName As String)
- winsock1.SendData "dele " + FileName + Chr(13) + Chr(10)
- While returncode <> "250": DoEvents: Wend
- End Sub
- Public Sub Site(SiteText As String)
- winsock1.SendData "site " + SiteText + Chr(13) + Chr(10)
- While returncode <> "250": DoEvents: Wend
- End Sub
- 'Public Sub Quote(QuoteText As String)
- ' Winsock1.SendData "quote " + SiteText + Chr(13) + Chr(10)
- ' While returncode <> "250": DoEvents: Wend
- 'End Sub
- Public Function TotalBytes() As Long
- TotalBytes = TotalByte
- End Function
- Public Function CurrentBytes() As Long
- CurrentBytes = CurrentByte
- End Function
- Public Function TransferRate() As String
- TransferRate = Format(Rate, "#00.00")
- End Function
- Public Function ElapsedTime() As Long
- ElapsedTime = Elapsed
- End Function
- Public Function CompletedPercent() As Integer
- CompletedPercent = ftpcompleted
- End Function
-
-
-