|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Net.Security;
|
|
|
|
|
using System.Net.Sockets;
|
|
|
|
|
|
|
|
|
|
namespace LogentriesCore
|
|
|
|
|
{
|
|
|
|
|
class LeClient
|
|
|
|
|
{
|
|
|
|
|
// Logentries API server address.
|
|
|
|
|
protected const String LeApiUrl = "api.logentries.com";
|
|
|
|
|
|
|
|
|
|
// Port number for token logging on Logentries API server.
|
|
|
|
|
protected const int LeApiTokenPort = 10000;
|
|
|
|
|
|
|
|
|
|
// Port number for TLS encrypted token logging on Logentries API server
|
|
|
|
|
protected const int LeApiTokenTlsPort = 20000;
|
|
|
|
|
|
|
|
|
|
// Port number for HTTP PUT logging on Logentries API server.
|
|
|
|
|
protected const int LeApiHttpPort = 80;
|
|
|
|
|
|
|
|
|
|
// Port number for SSL HTTP PUT logging on Logentries API server.
|
|
|
|
|
protected const int LeApiHttpsPort = 443;
|
|
|
|
|
|
|
|
|
|
// Creates LeClient instance. If do not define useServerUrl and/or useOverrideProt during call
|
|
|
|
|
// LeClient will be configured to work with api.logentries.com server; otherwise - with
|
|
|
|
|
// defined server on defined port.
|
|
|
|
|
public LeClient(bool useHttpPut, bool useSsl, bool useDataHub, String serverAddr, int port)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
// Override port number and server address to send logs to DataHub instance.
|
|
|
|
|
if (useDataHub)
|
|
|
|
|
{
|
|
|
|
|
m_UseSsl = false; // DataHub does not support receiving log messages over SSL for now.
|
|
|
|
|
m_TcpPort = port;
|
|
|
|
|
m_ServerAddr = serverAddr;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_UseSsl = useSsl;
|
|
|
|
|
|
|
|
|
|
if (!m_UseSsl)
|
|
|
|
|
m_TcpPort = useHttpPut ? LeApiHttpPort : LeApiTokenPort;
|
|
|
|
|
else
|
|
|
|
|
m_TcpPort = useHttpPut ? LeApiHttpsPort : LeApiTokenTlsPort;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool m_UseSsl = false;
|
|
|
|
|
private int m_TcpPort;
|
|
|
|
|
private TcpClient m_Client = null;
|
|
|
|
|
private Stream m_Stream = null;
|
|
|
|
|
private SslStream m_SslStream = null;
|
|
|
|
|
private String m_ServerAddr = LeApiUrl; // By default m_ServerAddr points to api.logentries.com if useDataHub is not set to true.
|
|
|
|
|
|
|
|
|
|
private Stream ActiveStream
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return m_UseSsl ? m_SslStream : m_Stream;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Connect()
|
|
|
|
|
{
|
|
|
|
|
m_Client = new TcpClient(m_ServerAddr, m_TcpPort);
|
|
|
|
|
m_Client.NoDelay = true;
|
|
|
|
|
|
|
|
|
|
m_Stream = m_Client.GetStream();
|
|
|
|
|
|
|
|
|
|
if (m_UseSsl)
|
|
|
|
|
{
|
|
|
|
|
m_SslStream = new SslStream(m_Stream);
|
|
|
|
|
m_SslStream.AuthenticateAsClient(m_ServerAddr);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Write(byte[] buffer, int offset, int count)
|
|
|
|
|
{
|
|
|
|
|
ActiveStream.Write(buffer, offset, count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Flush()
|
|
|
|
|
{
|
|
|
|
|
ActiveStream.Flush();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Close()
|
|
|
|
|
{
|
|
|
|
|
if (m_Client != null)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
m_Client.Close();
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|