# encoding: ascii
# api: powershell
# title: FTP functions
# description: Send-XMLFile
# version: 0.1
# type: function
# author: redyey
# license: CC0
# function: Send-XMLFile
# x-poshcode-id: 5690
# x-archived: 2016-06-08T09:41:20
# x-published: 2016-01-14T17:24:00
#
# Verify-XMLFileUpload
#
function Send-XMLFile ($Path, $IP, $Username, $Password)
{
	[Net.ServicePointManager]::ServerCertificateValidationCallback = { $True }
	if (!(Test-Path $Path\SSP.XML))
	{
		Write-Error "No file found in directory exiting script"
	}
	
	else
	{
		$Filename = Get-Childitem $Path\SSP.XML -File | Select-Object Name, FullName
		Write-Output $Filename.FullName | Out-Null
		$FTP = [System.Net.FTPWebRequest]::Create("FTP://$IP/" + $Filename.Name)
		$FTP = [System.Net.FTPWebRequest]$FTP
		$FTP.UsePassive = $True
		$FTP.UseBinary = $True
		$FTP.EnableSsl = $True
		$FTP.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)
		$FTP.Method = [System.Net.WebRequestMethods+FTP]::UploadFile
		$RS = $FTP.GetRequestStream()
		
		$Reader = New-Object System.IO.FileStream ($Filename.FullName, [IO.FileMode]::Open, [IO.FileAccess]::Read, [IO.FileShare]::Read)
		[byte[]]$Buffer = New-Object byte[] 4096
		[int]$Count = 0
		do
		{
			$Count = $Reader.Read($Buffer, 0, $Buffer.Length)
			$RS.Write($Buffer, 0, $Count)
		}
		while ($Count -gt 0)
		$Reader.Close()
		$RS.Close()
	}
}

function Verify-XMLFileUpload($Username, $Password, $FTP_URI, $SubFolder)
{
	try
	{
		$FTP_URIX = $FTP_URI + $SubFolder
		$URI = [System.URI]$FTP_URIX
		$Encoding = [System.Text.Encoding]::GetEncoding(28591) #Set Encoding To ISO-8859-1 (Westeuropean ISO)
		[Net.ServicePointManager]::ServerCertificateValidationCallback = { $True }
		$FTP = [System.Net.FTPWebRequest]::Create($URI)
		$FTP.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)
		$FTP.Method = [system.Net.WebRequestMethods+FTP]::ListDirectoryDetails
		$FTP.UsePassive = $True
		$FTP.UseBinary = $True
		$FTP.EnableSsl = $True
		$Response = $FTP.GetResponse()
		$Strm = $Response.GetResponseStream()
		$Reader = New-Object System.IO.StreamReader($Strm, $Encoding)
		$List = $Reader.ReadToEnd()
		$Reader.Close | Out-Null
	}
	catch [System.InvalidOperationException]
	{
		throw "GetResponse or BeginGetResponse was used more than once OR EnableSSL was set to True but the server does not support this feature."
	}
}


# Execute like this

Send-XMLFile -IP "10.0.0.1" -Password $Pass -Username "redyey" -Path "C:\toupload"
Verify-XMLFileUpload -Username "redyey" -Password $Pass -FTP_URI FTP://10.0.0.1/ -subfolder /
