←Select platform

ILtmsLogHandler Interface

Summary

This interface is implemented by the designer to enable the application to log server events.

Syntax

C#
VB
C++
public interface ILtmsLogHandler  
Public Interface ILtmsLogHandler  
public interface class ILtmsLogHandler  

Remarks

Once the application has defined its own log handler it can pass a pointer to its ILtmsLogHandler interface using the ILogHandler property.

The server will call the application, and log events through the assigned log handler interface.

Example

C#
VB
using Leadtools; 
using Leadtools.MediaStreaming; 
 
 
enum W3CLOG 
{ 
   date = 0x00000001, 
   time = 0x00000002, 
   c_ip = 0x00000004, 
   cs_username = 0x00000008, 
   s_sitename = 0x00000010, 
   s_computername = 0x00000020, 
   s_ip = 0x00000040, 
   s_port = 0x00000080, 
   cs_method = 0x00000100, 
   cs_uri_stem = 0x00000200, 
   cs_uri_query = 0x00000400, 
   sc_status = 0x00000800, 
   sc_win32_status = 0x00001000, 
   sc_bytes = 0x00002000, 
   cs_bytes = 0x00004000, 
   time_taken = 0x00008000, 
   cs_version = 0x00010000, 
   cs_host = 0x00020000, 
   cs_user_agent = 0x00040000, 
   cs_cookie = 0x00080000, 
   cs_referer = 0x00100000, 
   sc_substatus = 0x00200000, 
}; 
 
public class CW3CLogHandler : ILtmsLogHandler 
{ 
   bool m_enable; 
   int m_fields; 
   bool m_localtime; 
   DateTime m_dtfile; 
   string m_software; 
   string m_folder; 
   string m_prefix; 
   StreamWriter m_sw; 
 
   public CW3CLogHandler(string prefix, string software, bool enable, string folder, int fields, bool localtime) 
   { 
      m_prefix = prefix; 
      m_software = software; 
      m_enable = enable; 
      m_folder = folder; 
      m_fields = fields; 
      m_localtime = localtime; 
   } 
   ~CW3CLogHandler() 
   { 
 
   } 
 
   void WriteString(string str) 
   { 
      m_sw.Write(str); 
   } 
 
   DateTime GetTime(double dTime) 
   { 
      DateTime dt = DateTime.FromOADate(dTime); 
 
      if (m_localtime) 
         return dt.ToLocalTime(); 
 
      return dt; 
   } 
 
   string GetLogPath(double timestamp) 
   { 
      DateTime dt = GetTime(timestamp); 
      string strFullPath; 
 
      try 
      { 
         PathResolver resolver = new PathResolver(); 
         strFullPath = resolver.Resolve(m_folder); 
      } 
      catch 
      { 
         return ""; 
      } 
 
      strFullPath += "\\"; 
      strFullPath += m_prefix; 
 
      if (!m_localtime) 
      { 
         strFullPath += dt.ToString("y-MM-dd-HH-mm-ss").Replace("-", "") + "UTC.log"; 
      } 
      else 
      { 
         strFullPath += dt.ToString("y-MM-dd-HH-mm-ss").Replace("-", "") + ".log"; 
      } 
 
      return strFullPath; 
   } 
 
   public void LoadConfig(Server server) 
   { 
      bool enable = m_enable; 
      bool localtime = m_localtime; 
      string folder = m_folder; 
      int fields = m_fields; 
      bool dirty = false; 
 
      ApplicationProperties AppProps = server.GetApplicationProperties(); 
 
      try 
      { 
         enable = AppProps.GetBoolean("LogEnable"); 
      } 
      catch 
      { 
         AppProps.AddBoolean("LogEnable", enable); 
         dirty = true; 
      } 
 
      try 
      { 
         localtime = AppProps.GetBoolean("LogLocalTime"); 
      } 
      catch 
      { 
         AppProps.AddBoolean("LogLocalTime", localtime); 
         dirty = true; 
      } 
 
      try 
      { 
         folder = AppProps.GetString("LogFolder"); 
      } 
      catch 
      { 
         AppProps.AddString("LogFolder", folder); 
         dirty = true; 
      } 
 
      try 
      { 
         fields = AppProps.GetInteger("LogFields"); 
      } 
      catch 
      { 
         AppProps.AddInteger("LogFields", fields); 
         dirty = true; 
      } 
 
      if (dirty) 
         server.SetApplicationProperties(AppProps); 
 
      // if anything has changed then we need to close the current file 
      if (!enable && (string.Compare(m_folder, folder, true) != 0) || fields != m_fields || m_localtime != localtime) 
      { 
         if (m_sw != null) 
            m_sw.Close(); 
      } 
 
      m_folder = folder; 
      m_localtime = localtime; 
      m_enable = enable; 
      m_fields = fields; 
   } 
 
   bool CreateLog(double timestamp) 
   { 
      if (m_sw != null) 
         m_sw.Close(); 
 
      if (!m_enable) 
         return false; 
 
      try 
      { 
         m_sw = File.CreateText(GetLogPath(timestamp)); 
      } 
      catch 
      { 
         return false; 
      } 
 
      m_dtfile = GetTime(timestamp); 
 
      string s; 
      s = "#Software: " + m_software + "\r\n"; 
      WriteString(s); 
      WriteString("#Version: 1.0\r\n"); 
      DateTime dt = GetTime(timestamp); 
      s = "#Date: " + dt.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n"; 
      WriteString(s); 
 
      s = "#Fields:"; 
 
      if ((m_fields & (int)W3CLOG.date) == (int)W3CLOG.date) 
      { 
         s += " date"; 
      } 
      if ((m_fields & (int)W3CLOG.time) == (int)W3CLOG.time) 
      { 
         s += " time"; 
      } 
      if ((m_fields & (int)W3CLOG.s_sitename) == (int)W3CLOG.s_sitename) 
      { 
         s += " s-sitename"; 
      } 
      if ((m_fields & (int)W3CLOG.s_computername) == (int)W3CLOG.s_computername) 
      { 
         s += " s-computername"; 
      } 
      if ((m_fields & (int)W3CLOG.s_ip) == (int)W3CLOG.s_ip) 
      { 
         s += " s-ip"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_method) == (int)W3CLOG.cs_method) 
      { 
         s += " cs-method"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_uri_stem) == (int)W3CLOG.cs_uri_stem) 
      { 
         s += " cs-uri-stem"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_uri_query) == (int)W3CLOG.cs_uri_query) 
      { 
         s += " cs-uri-query"; 
      } 
      if ((m_fields & (int)W3CLOG.s_port) == (int)W3CLOG.s_port) 
      { 
         s += " s-port"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_username) == (int)W3CLOG.cs_username) 
      { 
         s += " cs-username"; 
      } 
      if ((m_fields & (int)W3CLOG.c_ip) == (int)W3CLOG.c_ip) 
      { 
         s += " c-ip"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_version) == (int)W3CLOG.cs_version) 
      { 
         s += " cs-version"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_user_agent) == (int)W3CLOG.cs_user_agent) 
      { 
         s += " cs(User-Agent)"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_cookie) == (int)W3CLOG.cs_cookie) 
      { 
         s += " cs(Cookie)"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_referer) == (int)W3CLOG.cs_referer) 
      { 
         s += " cs(Referer)"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_host) == (int)W3CLOG.cs_host) 
      { 
         s += " cs-host"; 
      } 
      if ((m_fields & (int)W3CLOG.sc_status) == (int)W3CLOG.sc_status) 
      { 
         s += " sc-status"; 
      } 
      if ((m_fields & (int)W3CLOG.sc_substatus) == (int)W3CLOG.sc_substatus) 
      { 
         s += " sc-substatus"; 
      } 
      if ((m_fields & (int)W3CLOG.sc_win32_status) == (int)W3CLOG.sc_win32_status) 
      { 
         s += " sc-win32-status"; 
      } 
      if ((m_fields & (int)W3CLOG.sc_bytes) == (int)W3CLOG.sc_bytes) 
      { 
         s += " sc-bytes"; 
      } 
      if ((m_fields & (int)W3CLOG.cs_bytes) == (int)W3CLOG.cs_bytes) 
      { 
         s += " cs-bytes"; 
      } 
      if ((m_fields & (int)W3CLOG.time_taken) == (int)W3CLOG.time_taken) 
      { 
         s += " time-taken"; 
      } 
      s += "\r\n"; 
      WriteString(s); 
 
      m_sw.Flush(); 
 
      return true; 
   } 
 
   string escape(string s) 
   { 
      string t = ""; 
      foreach (char c in s) 
      { 
         if (!char.IsControl(c) && !char.IsWhiteSpace(c)) 
            t += c; 
         else 
            t += "+"; 
      } 
 
      return t; 
   } 
 
   public void InitializeLog(double timestamp) 
   { 
      CreateLog(timestamp); 
   } 
 
   public void TerminateLog() 
   { 
      if (m_sw != null) 
         m_sw.Close(); 
   } 
 
   public void LogInformation(ILtmsLogInformation info) 
   { 
      string s = ""; 
 
      if (!m_enable) 
         return; 
 
      // check if we need to roll to a new file 
      { 
         DateTime dt = GetTime(info.TimeStamp); 
 
         if (m_sw == null || dt.Day != m_dtfile.Day || dt.Month != m_dtfile.Month || dt.Year != m_dtfile.Year) 
         { 
            if (!CreateLog(info.TimeStamp)) 
               return; 
         } 
      } 
      if ((m_fields & (int)W3CLOG.date) == (int)W3CLOG.date) 
      { 
         DateTime dt = GetTime(info.TimeStamp); 
 
         if (s.Length > 0) 
            s += " "; 
         s += dt.ToString("yyyy-MM-dd"); 
      } 
      if ((m_fields & (int)W3CLOG.time) == (int)W3CLOG.time) 
      { 
         DateTime dt = GetTime(info.TimeStamp); 
 
         if (s.Length > 0) 
            s += " "; 
         s += dt.ToString("HH:mm:ss"); 
      } 
      if ((m_fields & (int)W3CLOG.s_sitename) == (int)W3CLOG.s_sitename) 
      { 
         string str = info.SiteName; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
 
      } 
      if ((m_fields & (int)W3CLOG.s_computername) == (int)W3CLOG.s_computername) 
      { 
         string str = info.ComputerName; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.s_ip) == (int)W3CLOG.s_ip) 
      { 
         string str = info.ServerIP; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_method) == (int)W3CLOG.cs_method) 
      { 
         string str = info.Method; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_uri_stem) == (int)W3CLOG.cs_uri_stem) 
      { 
         string str = info.URIStem; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_uri_query) == (int)W3CLOG.cs_uri_query) 
      { 
         string str = info.URIQuery; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.s_port) == (int)W3CLOG.s_port) 
      { 
         int n = info.ServerPort; 
         if (s.Length > 0) 
            s += " "; 
         s += n.ToString(); 
      } 
      if ((m_fields & (int)W3CLOG.cs_username) == (int)W3CLOG.cs_username) 
      { 
         string str = info.UserName; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.c_ip) == (int)W3CLOG.c_ip) 
      { 
         string str = info.ClientIP; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_version) == (int)W3CLOG.cs_version) 
      { 
         string str = info.ProtocolVersion; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_user_agent) == (int)W3CLOG.cs_user_agent) 
      { 
         string str = info.UserAgent; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_cookie) == (int)W3CLOG.cs_cookie) 
      { 
         string str = info.Cookie; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_referer) == (int)W3CLOG.cs_referer) 
      { 
         string str = info.Referrer; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.cs_host) == (int)W3CLOG.cs_host) 
      { 
         string str = info.Host; 
         if (s.Length > 0) 
            s += " "; 
         if (str.Length == 0) 
            s += "-"; 
         else 
            s += escape(str); 
      } 
      if ((m_fields & (int)W3CLOG.sc_status) == (int)W3CLOG.sc_status) 
      { 
         int n = info.Status; 
         if (s.Length > 0) 
            s += " "; 
         s += n.ToString(); 
      } 
      if ((m_fields & (int)W3CLOG.sc_substatus) == (int)W3CLOG.sc_substatus) 
      { 
         int n = info.ProtocolSubStatus; 
         if (s.Length > 0) 
            s += " "; 
         s += n.ToString(); 
      } 
      if ((m_fields & (int)W3CLOG.sc_win32_status) == (int)W3CLOG.sc_win32_status) 
      { 
         int n = info.Win32Status; 
         if (s.Length > 0) 
            s += " "; 
         s += n.ToString(); 
      } 
      if ((m_fields & (int)W3CLOG.sc_bytes) == (int)W3CLOG.sc_bytes) 
      { 
         int n = info.BytesSent; 
         if (s.Length > 0) 
            s += " "; 
         if (n < 0) 
            s += "-"; 
         else 
            s += n.ToString(); 
      } 
      if ((m_fields & (int)W3CLOG.cs_bytes) == (int)W3CLOG.cs_bytes) 
      { 
         int n = info.BytesReceived; 
         if (s.Length > 0) 
            s += " "; 
         if (n < 0) 
            s += "-"; 
         else 
            s += n.ToString(); 
      } 
      if ((m_fields & (int)W3CLOG.time_taken) == (int)W3CLOG.time_taken) 
      { 
         int n = info.TimeTaken; 
         if (s.Length > 0) 
            s += " "; 
         if (n < 0) 
            s += "-"; 
         else 
            s += n.ToString(); 
      } 
 
      s += "\r\n"; 
      WriteString(s); 
      m_sw.Flush(); 
   } 
} 
 
 
public Server _server = null; 
public bool _result = false; 
 
public void W3CLogHandlerExample() 
{ 
   try 
   { 
      State enumState; 
      CW3CLogHandler _loghandler; 
 
      // create an instance of the server object 
      _server = new Leadtools.MediaStreaming.Server(); 
 
      // create the log handler 
      _loghandler = new CW3CLogHandler("ltmsServer_", "LEADTOOLS Media Streaming Server", true, "%ltmsLogFolder%", 0, false); 
 
      // set the log handler 
      _server.ILogHandler = _loghandler; 
 
      { 
         // for demonstration, compare the interface we just set 
         ILtmsLogHandler ihandler = null; 
         ihandler = _server.ILogHandler; 
 
         if (ihandler != (ILtmsLogHandler)_loghandler) 
         { 
            _result = false; 
            return; 
         } 
      } 
 
      // load the config file located in the config subfolder under the executable folder 
      // or comment this section out to run with the server�s default settings 
      _server.ImportConfigFile("%ltmsConfigFolder%\\LeadtoolsMediaStreamingServer.xml"); 
 
      // start the server 
      _server.Start(); 
 
      // confirm the running state for demonstration purposes 
      enumState = _server.State; 
 
      if (enumState == State.Started) 
      { 
         // display a message that the server is running and wait for OK 
         MessageBox.Show("The server has started. Press OK to stop.", "LEADTOOLS Media Streaming Examples", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
 
      // stop the server 
      _server.Stop(); 
 
      // remove the log handler 
      _server.ILogHandler = null; 
 
      _result = true; 
   } 
   catch (Exception) 
   { 
      _result = false; 
   } 
} 
Imports Leadtools 
Imports Leadtools.MediaStreaming 
 
 
Private Enum W3CLOG 
   [date] = &H1 
   time = &H2 
   c_ip = &H4 
   cs_username = &H8 
   s_sitename = &H10 
   s_computername = &H20 
   s_ip = &H40 
   s_port = &H80 
   cs_method = &H100 
   cs_uri_stem = &H200 
   cs_uri_query = &H400 
   sc_status = &H800 
   sc_win32_status = &H1000 
   sc_bytes = &H2000 
   cs_bytes = &H4000 
   time_taken = &H8000 
   cs_version = &H10000 
   cs_host = &H20000 
   cs_user_agent = &H40000 
   cs_cookie = &H80000 
   cs_referer = &H100000 
   sc_substatus = &H200000 
End Enum 
 
Public Class CW3CLogHandler : Implements ILtmsLogHandler 
   Private m_enable As Boolean 
   Private m_fields As Integer 
   Private m_localtime As Boolean 
   Private m_dtfile As DateTime 
   Private m_software As String 
   Private m_folder As String 
   Private m_prefix As String 
   Private m_sw As StreamWriter 
 
   Public Sub New(ByVal prefix As String, ByVal software As String, ByVal enable As Boolean, ByVal folder As String, ByVal fields As Integer, ByVal localtime As Boolean) 
      m_prefix = prefix 
      m_software = software 
      m_enable = enable 
      m_folder = folder 
      m_fields = fields 
      m_localtime = localtime 
   End Sub 
   Protected Overrides Sub Finalize() 
 
   End Sub 
 
   Private Sub WriteString(ByVal str As String) 
      m_sw.Write(str) 
   End Sub 
 
   Private Function GetTime(ByVal dTime As Double) As DateTime 
      Dim dt As DateTime = DateTime.FromOADate(dTime) 
 
      If m_localtime Then 
         Return dt.ToLocalTime() 
      End If 
 
      Return dt 
   End Function 
 
   Private Function GetLogPath(ByVal timestamp As Double) As String 
      Dim dt As DateTime = GetTime(timestamp) 
      Dim strFullPath As String 
 
      Try 
         Dim resolver As PathResolver = New PathResolver() 
         strFullPath = resolver.Resolve(m_folder) 
      Catch 
         Return "" 
      End Try 
 
      strFullPath &= "\" 
      strFullPath &= m_prefix 
 
      If (Not m_localtime) Then 
         strFullPath &= dt.ToString("y-MM-dd-HH-mm-ss").Replace("-", "") & "UTC.log" 
      Else 
         strFullPath &= dt.ToString("y-MM-dd-HH-mm-ss").Replace("-", "") & ".log" 
      End If 
 
      Return strFullPath 
   End Function 
 
   Public Sub LoadConfig(ByVal server As Server) 
      Dim enable As Boolean = m_enable 
      Dim localtime As Boolean = m_localtime 
      Dim folder As String = m_folder 
      Dim fields As Integer = m_fields 
      Dim dirty As Boolean = False 
 
      Dim AppProps As ApplicationProperties = server.GetApplicationProperties() 
 
      Try 
         enable = AppProps.GetBoolean("LogEnable") 
      Catch 
         AppProps.AddBoolean("LogEnable", enable) 
         dirty = True 
      End Try 
 
      Try 
         localtime = AppProps.GetBoolean("LogLocalTime") 
      Catch 
         AppProps.AddBoolean("LogLocalTime", localtime) 
         dirty = True 
      End Try 
 
      Try 
         folder = AppProps.GetString("LogFolder") 
      Catch 
         AppProps.AddString("LogFolder", folder) 
         dirty = True 
      End Try 
 
      Try 
         fields = AppProps.GetInteger("LogFields") 
      Catch 
         AppProps.AddInteger("LogFields", fields) 
         dirty = True 
      End Try 
 
      If dirty Then 
         server.SetApplicationProperties(AppProps) 
      End If 
 
      ' if anything has changed then we need to close the current file 
      If (Not enable) AndAlso (String.Compare(m_folder, folder, True) <> 0) OrElse fields <> m_fields OrElse m_localtime <> localtime Then 
         If Not m_sw Is Nothing Then 
            m_sw.Close() 
         End If 
      End If 
 
      m_folder = folder 
      m_localtime = localtime 
      m_enable = enable 
      m_fields = fields 
   End Sub 
 
   Private Function CreateLog(ByVal timestamp As Double) As Boolean 
      If Not m_sw Is Nothing Then 
         m_sw.Close() 
      End If 
 
      If (Not m_enable) Then 
         Return False 
      End If 
 
      Try 
         m_sw = File.CreateText(GetLogPath(timestamp)) 
      Catch 
         Return False 
      End Try 
 
      m_dtfile = GetTime(timestamp) 
 
      Dim s As String 
      s = "#Software: " & m_software & Constants.vbCrLf 
      WriteString(s) 
      WriteString("#Version: 1.0" & Constants.vbCrLf) 
      Dim dt As DateTime = GetTime(timestamp) 
      s = "#Date: " & dt.ToString("yyyy-MM-dd HH:mm:ss") & Constants.vbCrLf 
      WriteString(s) 
 
      s = "#Fields:" 
 
      If (m_fields And CInt(W3CLOG.date)) = CInt(W3CLOG.date) Then 
         s &= " date" 
      End If 
      If (m_fields And CInt(W3CLOG.time)) = CInt(W3CLOG.time) Then 
         s &= " time" 
      End If 
      If (m_fields And CInt(W3CLOG.s_sitename)) = CInt(W3CLOG.s_sitename) Then 
         s &= " s-sitename" 
      End If 
      If (m_fields And CInt(W3CLOG.s_computername)) = CInt(W3CLOG.s_computername) Then 
         s &= " s-computername" 
      End If 
      If (m_fields And CInt(W3CLOG.s_ip)) = CInt(W3CLOG.s_ip) Then 
         s &= " s-ip" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_method)) = CInt(W3CLOG.cs_method) Then 
         s &= " cs-method" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_uri_stem)) = CInt(W3CLOG.cs_uri_stem) Then 
         s &= " cs-uri-stem" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_uri_query)) = CInt(W3CLOG.cs_uri_query) Then 
         s &= " cs-uri-query" 
      End If 
      If (m_fields And CInt(W3CLOG.s_port)) = CInt(W3CLOG.s_port) Then 
         s &= " s-port" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_username)) = CInt(W3CLOG.cs_username) Then 
         s &= " cs-username" 
      End If 
      If (m_fields And CInt(W3CLOG.c_ip)) = CInt(W3CLOG.c_ip) Then 
         s &= " c-ip" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_version)) = CInt(W3CLOG.cs_version) Then 
         s &= " cs-version" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_user_agent)) = CInt(W3CLOG.cs_user_agent) Then 
         s &= " cs(User-Agent)" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_cookie)) = CInt(W3CLOG.cs_cookie) Then 
         s &= " cs(Cookie)" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_referer)) = CInt(W3CLOG.cs_referer) Then 
         s &= " cs(Referer)" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_host)) = CInt(W3CLOG.cs_host) Then 
         s &= " cs-host" 
      End If 
      If (m_fields And CInt(W3CLOG.sc_status)) = CInt(W3CLOG.sc_status) Then 
         s &= " sc-status" 
      End If 
      If (m_fields And CInt(W3CLOG.sc_substatus)) = CInt(W3CLOG.sc_substatus) Then 
         s &= " sc-substatus" 
      End If 
      If (m_fields And CInt(W3CLOG.sc_win32_status)) = CInt(W3CLOG.sc_win32_status) Then 
         s &= " sc-win32-status" 
      End If 
      If (m_fields And CInt(W3CLOG.sc_bytes)) = CInt(W3CLOG.sc_bytes) Then 
         s &= " sc-bytes" 
      End If 
      If (m_fields And CInt(W3CLOG.cs_bytes)) = CInt(W3CLOG.cs_bytes) Then 
         s &= " cs-bytes" 
      End If 
      If (m_fields And CInt(W3CLOG.time_taken)) = CInt(W3CLOG.time_taken) Then 
         s &= " time-taken" 
      End If 
      s &= Constants.vbCrLf 
      WriteString(s) 
 
      m_sw.Flush() 
 
      Return True 
   End Function 
 
   Private Function escape(ByVal s As String) As String 
      Dim t As String = "" 
      For Each c As Char In s 
         If (Not Char.IsControl(c)) AndAlso (Not Char.IsWhiteSpace(c)) Then 
            t &= c 
         Else 
            t &= "+" 
         End If 
      Next c 
 
      Return t 
   End Function 
 
   Public Sub InitializeLog(ByVal timestamp As Double) Implements ILtmsLogHandler.InitializeLog 
      CreateLog(timestamp) 
   End Sub 
 
   Public Sub TerminateLog() Implements ILtmsLogHandler.TerminateLog 
      If Not m_sw Is Nothing Then 
         m_sw.Close() 
      End If 
   End Sub 
 
   Public Sub LogInformation(ByVal info As ILtmsLogInformation) Implements ILtmsLogHandler.LogInformation 
      Dim s As String = "" 
 
      If (Not m_enable) Then 
         Return 
      End If 
 
      ' check if we need to roll to a new file 
      Dim dt As DateTime = GetTime(info.TimeStamp) 
 
      If m_sw Is Nothing OrElse dt.Day <> m_dtfile.Day OrElse dt.Month <> m_dtfile.Month OrElse dt.Year <> m_dtfile.Year Then 
         If (Not CreateLog(info.TimeStamp)) Then 
            Return 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.date)) = CInt(W3CLOG.date) Then 
         Dim dtDate As DateTime = GetTime(info.TimeStamp) 
 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         s &= dtDate.ToString("yyyy-MM-dd") 
      End If 
      If (m_fields And CInt(W3CLOG.time)) = CInt(W3CLOG.time) Then 
         Dim dtTime As DateTime = GetTime(info.TimeStamp) 
 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         s &= dtTime.ToString("HH:mm:ss") 
      End If 
      If (m_fields And CInt(W3CLOG.s_sitename)) = CInt(W3CLOG.s_sitename) Then 
         Dim str As String = info.SiteName 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
 
      End If 
      If (m_fields And CInt(W3CLOG.s_computername)) = CInt(W3CLOG.s_computername) Then 
         Dim str As String = info.ComputerName 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.s_ip)) = CInt(W3CLOG.s_ip) Then 
         Dim str As String = info.ServerIP 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_method)) = CInt(W3CLOG.cs_method) Then 
         Dim str As String = info.Method 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_uri_stem)) = CInt(W3CLOG.cs_uri_stem) Then 
         Dim str As String = info.URIStem 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_uri_query)) = CInt(W3CLOG.cs_uri_query) Then 
         Dim str As String = info.URIQuery 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.s_port)) = CInt(W3CLOG.s_port) Then 
         Dim n As Integer = info.ServerPort 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         s &= n.ToString() 
      End If 
      If (m_fields And CInt(W3CLOG.cs_username)) = CInt(W3CLOG.cs_username) Then 
         Dim str As String = info.UserName 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.c_ip)) = CInt(W3CLOG.c_ip) Then 
         Dim str As String = info.ClientIP 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_version)) = CInt(W3CLOG.cs_version) Then 
         Dim str As String = info.ProtocolVersion 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_user_agent)) = CInt(W3CLOG.cs_user_agent) Then 
         Dim str As String = info.UserAgent 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_cookie)) = CInt(W3CLOG.cs_cookie) Then 
         Dim str As String = info.Cookie 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_referer)) = CInt(W3CLOG.cs_referer) Then 
         Dim str As String = info.Referrer 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_host)) = CInt(W3CLOG.cs_host) Then 
         Dim str As String = info.Host 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If str.Length = 0 Then 
            s &= "-" 
         Else 
            s &= escape(str) 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.sc_status)) = CInt(W3CLOG.sc_status) Then 
         Dim n As Integer = info.Status 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         s &= n.ToString() 
      End If 
      If (m_fields And CInt(W3CLOG.sc_substatus)) = CInt(W3CLOG.sc_substatus) Then 
         Dim n As Integer = info.ProtocolSubStatus 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         s &= n.ToString() 
      End If 
      If (m_fields And CInt(W3CLOG.sc_win32_status)) = CInt(W3CLOG.sc_win32_status) Then 
         Dim n As Integer = info.Win32Status 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         s &= n.ToString() 
      End If 
      If (m_fields And CInt(W3CLOG.sc_bytes)) = CInt(W3CLOG.sc_bytes) Then 
         Dim n As Integer = info.BytesSent 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If n < 0 Then 
            s &= "-" 
         Else 
            s &= n.ToString() 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.cs_bytes)) = CInt(W3CLOG.cs_bytes) Then 
         Dim n As Integer = info.BytesReceived 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If n < 0 Then 
            s &= "-" 
         Else 
            s &= n.ToString() 
         End If 
      End If 
      If (m_fields And CInt(W3CLOG.time_taken)) = CInt(W3CLOG.time_taken) Then 
         Dim n As Integer = info.TimeTaken 
         If s.Length > 0 Then 
            s &= " " 
         End If 
         If n < 0 Then 
            s &= "-" 
         Else 
            s &= n.ToString() 
         End If 
      End If 
 
      s &= Constants.vbCrLf 
      WriteString(s) 
      m_sw.Flush() 
   End Sub 
End Class 
 
 
Public _server As Server = Nothing 
Public _result As Boolean = False 
 
Public Sub W3CLogHandlerExample() 
   Try 
      Dim enumState As State 
      Dim _loghandler As CW3CLogHandler 
 
      ' create an instance of the server object 
      _server = New Leadtools.MediaStreaming.Server() 
 
      ' create the log handler 
      _loghandler = New CW3CLogHandler("ltmsServer_", "LEADTOOLS Media Streaming Server", True, "%ltmsLogFolder%", 0, False) 
 
      ' set the log handler 
      _server.ILogHandler = _loghandler 
 
      ' for demonstration, compare the interface we just set 
      Dim ihandler As ILtmsLogHandler = Nothing 
      ihandler = _server.ILogHandler 
      If Not ihandler Is CType(_loghandler, ILtmsLogHandler) Then 
         _result = False 
         Return 
      End If 
 
      ' load the config file located in the config subfolder under the executable folder 
      ' or comment this section out to run with the server�s default settings 
      _server.ImportConfigFile("%ltmsConfigFolder%\LeadtoolsMediaStreamingServer.xml") 
 
      ' start the server 
      _server.Start() 
 
      ' confirm the running state for demonstration purposes 
      enumState = _server.State 
 
      If enumState = State.Started Then 
         ' display a message that the server is running and wait for OK 
         MessageBox.Show("The server has started. Press OK to stop.", "LEADTOOLS Media Streaming Examples", MessageBoxButtons.OK, MessageBoxIcon.Information) 
      End If 
 
      ' stop the server 
      _server.Stop() 
 
      ' remove the log handler 
      _server.ILogHandler = Nothing 
 
      _result = True 
   Catch e1 As Exception 
      _result = False 
   End Try 
End Sub 

Requirements

Target Platforms

Help Version 19.0.2017.10.27
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.MediaStreaming Assembly