You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
8.1 KiB
277 lines
8.1 KiB
using System;
|
|
using System.Net;
|
|
using System.IO;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Text;
|
|
using System.Xml;
|
|
|
|
namespace UDDI.Tools
|
|
{
|
|
class UDDISend
|
|
{
|
|
public enum AuthenticationType
|
|
{
|
|
Uninitialized = 0,
|
|
WindowsAuthentication = 1,
|
|
UDDIAuthentication = 2,
|
|
ClientCertificateAuthentication = 3
|
|
}
|
|
|
|
public const int BlockSize = 4096;
|
|
|
|
public static AuthenticationType AuthType = AuthenticationType.Uninitialized;
|
|
|
|
public static string Url = null;
|
|
public static string MessageFilename = null;
|
|
public static string CertificateFilename = null;
|
|
|
|
public static void Main( string[] args )
|
|
{
|
|
Console.WriteLine( "Microsoft (R) UDDI Send Utility" );
|
|
Console.WriteLine( "Copyright (C) Microsoft Corp. 2002. All rights reserved.\r\n" );
|
|
|
|
try
|
|
{
|
|
ProcessCommandLine( args );
|
|
|
|
//
|
|
// Retrieve the input data from the specified file
|
|
//
|
|
Console.Write( "Loading '" + MessageFilename + "'... ");
|
|
|
|
FileStream f = new FileStream( MessageFilename, FileMode.Open, FileAccess.Read );
|
|
|
|
System.IO.BinaryReader br = new BinaryReader( f );
|
|
byte[] cbInput = new byte[ BlockSize ];
|
|
int n = 0;
|
|
int nTotal = 0;
|
|
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( Url );
|
|
req.Timeout = -1;
|
|
|
|
if( AuthenticationType.WindowsAuthentication == AuthType )
|
|
{
|
|
req.Credentials = CredentialCache.DefaultCredentials;
|
|
req.PreAuthenticate = true;
|
|
}
|
|
else if( AuthenticationType.ClientCertificateAuthentication == AuthType )
|
|
{
|
|
req.ClientCertificates.Add( X509Certificate.CreateFromCertFile( CertificateFilename ) );
|
|
}
|
|
|
|
//
|
|
// Populate the request data from the input file
|
|
//
|
|
req.Method = "POST";
|
|
req.ContentType = "text/xml; charset=\"utf-8\"";
|
|
req.ContentLength = f.Length;
|
|
req.Headers.Add( "SOAPAction", "\"\"" );
|
|
|
|
n = br.Read( cbInput, 0, BlockSize );
|
|
|
|
while( n > 0 )
|
|
{
|
|
nTotal += n;
|
|
req.GetRequestStream().Write( cbInput, 0, n );
|
|
n = br.Read( cbInput, 0, BlockSize );
|
|
}
|
|
|
|
Console.WriteLine( "done." );
|
|
Console.Write( "Transmitting... " );
|
|
|
|
Stream strmResponse;
|
|
HttpWebResponse result;
|
|
|
|
try
|
|
{
|
|
result = (HttpWebResponse) req.GetResponse();
|
|
Console.WriteLine( "done." );
|
|
}
|
|
catch( WebException we )
|
|
{
|
|
Console.WriteLine( "error." );
|
|
|
|
result = (HttpWebResponse) we.Response;
|
|
Console.WriteLine( "\r\nException: {0}", we.ToString() );
|
|
}
|
|
|
|
//
|
|
// Write the results to the standard output
|
|
//
|
|
Console.Write( "\r\nResponse stream received\r\nStatus code: " + result.StatusCode );
|
|
Console.Write( "\r\nStatus Description: " + result.StatusDescription );
|
|
|
|
strmResponse = result.GetResponseStream();
|
|
|
|
Byte[] cbRead = new Byte[ 512 ];
|
|
BinaryReader br1 = new BinaryReader( strmResponse );
|
|
int nBytesRead = br1.Read( cbRead, 0, 512 );
|
|
|
|
Console.WriteLine("\r\n\r\nXML:\r\n");
|
|
|
|
FileStream file = new FileStream( "output.xml", System.IO.FileMode.Create );
|
|
BinaryWriter strm = new BinaryWriter( file, System.Text.Encoding.UTF8 );
|
|
|
|
while( nBytesRead > 0 )
|
|
{
|
|
Console.Write( System.Text.Encoding.UTF8.GetString( cbRead, 0, nBytesRead ) );
|
|
strm.Write( cbRead, 0, nBytesRead );
|
|
|
|
nBytesRead = br1.Read( cbRead, 0, 512 );
|
|
}
|
|
|
|
strm.Close();
|
|
|
|
Console.WriteLine("");
|
|
}
|
|
catch( CommandLineException e )
|
|
{
|
|
if( null != e.Message && e.Message.Length > 0 )
|
|
{
|
|
Console.WriteLine( e.Message );
|
|
Console.WriteLine();
|
|
}
|
|
else
|
|
{
|
|
DisplayUsage();
|
|
}
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
Console.WriteLine ("Exception: {0}", e.ToString());
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
internal static void ProcessCommandLine( string[] args )
|
|
{
|
|
int i = 0;
|
|
|
|
if( 0 == args.Length )
|
|
throw new CommandLineException();
|
|
|
|
while( i < args.Length )
|
|
{
|
|
if( "-" == args[ i ].Substring( 0, 1 ) || "/" == args[ i ].Substring( 0, 1 ) )
|
|
{
|
|
switch( args[ i ].Substring( 1 ).ToLower() )
|
|
{
|
|
case "w":
|
|
AuthType = AuthenticationType.WindowsAuthentication;
|
|
Console.WriteLine( "Including Windows Authentication credentials\r\n" );
|
|
|
|
break;
|
|
|
|
case "u":
|
|
AuthType = AuthenticationType.UDDIAuthentication;
|
|
Console.WriteLine( "Using UDDI Authentication -- no credentials included\r\n" );
|
|
|
|
break;
|
|
|
|
case "c":
|
|
if( i + 1 >= args.Length )
|
|
throw new CommandLineException( "Missing required parameter 'CertificateFilename'." );
|
|
|
|
i ++;
|
|
|
|
if( !File.Exists( args[ i ] ) )
|
|
throw new CommandLineException( "Certificate file '" + args[ i ] + "' does not exist." );
|
|
|
|
AuthType = AuthenticationType.ClientCertificateAuthentication;
|
|
CertificateFilename = args[ i ];
|
|
|
|
Console.WriteLine( "Using client certificate '" + CertificateFilename + "' for authentication.\r\n" );
|
|
|
|
break;
|
|
|
|
case "?":
|
|
throw new CommandLineException();
|
|
|
|
default:
|
|
throw new CommandLineException( "Invalid switch." );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( null == Url )
|
|
Url = args[ i ];
|
|
else if( null == MessageFilename )
|
|
MessageFilename = args[ i ];
|
|
else
|
|
throw new CommandLineException( "Too many command line parameters." );
|
|
}
|
|
|
|
i ++;
|
|
}
|
|
|
|
if( null == Url )
|
|
throw new CommandLineException( "Missing required parameter 'URL'." );
|
|
|
|
if( null == MessageFilename )
|
|
throw new CommandLineException( "Missing required parameter 'InputFile'." );
|
|
|
|
if( AuthenticationType.Uninitialized == AuthType )
|
|
{
|
|
AuthType = AuthenticationType.UDDIAuthentication;
|
|
Console.WriteLine( "Using UDDI Authentication -- no credentials included\r\n" );
|
|
}
|
|
}
|
|
|
|
public static void DisplayUsage()
|
|
{
|
|
Console.WriteLine( "Sends a UDDI message to a specific URL." );
|
|
Console.WriteLine( "\r\nUsage:" );
|
|
Console.WriteLine( "\tsend [switches] URL InputFile" );
|
|
Console.WriteLine( "\r\nSwitches:" );
|
|
Console.WriteLine( "\t-w Windows authentication" );
|
|
Console.WriteLine( "\t-u UDDI authentication (default)" );
|
|
Console.WriteLine( "\t-c <certfile> Client certificate authentication" );
|
|
Console.WriteLine( "\r\nExamples:" );
|
|
Console.WriteLine( "\tsend -w http://uddi.microsoft.com/inquire c:\\somefile.xml" );
|
|
Console.WriteLine( "\tsend -u https://test.uddi.microsoft.com/publish c:\\somefile.xml" );
|
|
Console.WriteLine( "\tsend -c uddi.cer https://uddi.microsoft.com/operator c:\\somefile.xml" );
|
|
}
|
|
|
|
/// ****************************************************************
|
|
/// public class CommandLineException
|
|
/// ----------------------------------------------------------------
|
|
/// <summary>
|
|
/// Exception class for errors encountered while parsing the
|
|
/// command-line.
|
|
/// </summary>
|
|
/// ****************************************************************
|
|
///
|
|
public class CommandLineException : ApplicationException
|
|
{
|
|
/// ************************************************************
|
|
/// public CommandLineException [constructor]
|
|
/// ------------------------------------------------------------
|
|
/// <summary>
|
|
/// CommandLineException constructor.
|
|
/// </summary>
|
|
/// ************************************************************
|
|
///
|
|
public CommandLineException()
|
|
: base( "" )
|
|
{
|
|
}
|
|
|
|
/// ************************************************************
|
|
/// public CommandLineException [constructor]
|
|
/// ------------------------------------------------------------
|
|
/// <summary>
|
|
/// CommandLineException constructor.
|
|
/// </summary>
|
|
/// ------------------------------------------------------------
|
|
/// <param name="message">
|
|
/// Exception message.
|
|
/// </param>
|
|
/// ************************************************************
|
|
///
|
|
public CommandLineException( string message )
|
|
: base( message )
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|