示例#1
0
        private void SaveLog(SeverityLevel level, string text)
        {
            _connection = ConnectionInstance.Instance.GetConnection(_loggerConnectionString);
            text        = text.Replace("'", "''");
            text        = text.Replace("\"", "\\\"");
            var command = new OdbcCommand($"INSERT INTO `Log` (`Level`, `Message`, `Timestamp`) VALUES('{LevelNames[level]}', '{text}', '{DateTime.Now}')")
            {
                Connection = _connection
            };

            try
            {
                if (_connection.State == ConnectionState.Closed)
                {
                    _connection.Open();
                    if (_connection.State == ConnectionState.Open)
                    {
                        command.ExecuteNonQuery();
                    }
                }
            }
            finally
            {
                ConnectionInstance.CloseConnection(_loggerConnectionString);
            }
        }
示例#2
0
 /// <summary>
 /// 执行命令
 /// </summary>
 public override void ExecuteCommand()
 {
     try
     {
         CommandInstance.CommandText = SqlCommandText;
         CommandInstance.Connection  = ConnectionInstance;
         ConnectionInstance.Open();
         if (SqlParametersInstance != null && SqlParametersInstance.Count > 0)
         {
             foreach (SqlParameter parameter in SqlParametersInstance)
             {
                 SqlParameter copyParameter = (SqlParameter)((ICloneable)parameter).Clone();
                 CommandInstance.Parameters.Add(copyParameter);
             }
         }
         SqlDataOperationRecord = CommandInstance.ExecuteNonQuery();
         ConnectionInstance.Close();
     }
     catch (Exception exception)
     {
         base.SettingOperattionMessage(exception.Message);
     }
     SettingCommandText(string.Empty);
     CommandInstance.Parameters.Clear();
     SqlParametersInstance.Clear();
 }
示例#3
0
        public static void PurgeLog()
        {
            var _connection = ConnectionInstance.Instance.GetConnection($"DSN={DsnName}");
            var command     = new OdbcCommand($"DELETE * FROM `{LogTable}` WHERE `Timestamp` < {DeadDate.ToOADate()}")
            {
                Connection = _connection
            };

            _connection.Open();
            try
            {
                int affectedRows = command.ExecuteNonQuery();

                if (affectedRows > 0)
                {
                    Logger.Instance.Debug($"Purged {affectedRows} log entries that had timestamps before {DeadDate}.");
                }
            }
            catch (OdbcException e)
            {
                Logger.Instance.Error($"An error occured while purging log entries with timestamps before {DeadDate}: {e.Message}");
            }
            finally
            {
                ConnectionInstance.CloseConnection($"DSN={DsnName}");
            }
        }
示例#4
0
 /// <summary>
 /// 数据读取器
 /// </summary>
 /// <returns></returns>
 public override DbDataReader ExecuteReader()
 {
     try
     {
         CommandInstance.CommandText = SqlCommandText;
         CommandInstance.Connection  = ConnectionInstance;
         ConnectionInstance.Open();
         if (SqlParametersInstance != null)
         {
             if (SqlParametersInstance.Count > 0)
             {
                 CommandInstance.Parameters.AddRange(SqlParametersInstance.ToArray());
             }
         }
         this.reader = CommandInstance.ExecuteReader();
         ConnectionInstance.Close();
     }
     catch (Exception ex)
     {
         base.SettingOperattionMessage(ex.Message);
     }
     SettingCommandText(string.Empty);
     CommandInstance.Parameters.Clear();
     SqlParametersInstance.Clear();
     return(this.reader);
 }
        public void StopConnect()
        {
            if (ConnectionInstance != null)
            {
                ConnectionInstance.Disconnect();
                ConnectionInstance = null;
            }
            StopHeartbeat();

            Thread.Sleep(200);
        }
        private void SendHeartBeatThread(object sender)
        {
            if (Connected)
            {
                //IsMaster = ConnectionInstance.IsMaster();
                if (!ConnectionInstance.SendHeartBeat())
                {
                    LOG.Error(string.Format("心跳检测错误"));

                    //连接错误
                    ServerEventArg arg = new ServerEventArg("Unknown", ServerEventType.Disconnected);
                    OnConnectFaultHander?.BeginInvoke(arg, null, null);
                }
            }
        }
示例#7
0
        /// <summary>
        /// Creates a new instance of UdpProxy
        /// </summary>
        /// <param name="localPort">The local port number to open for the proxy
        /// (remote port is set later as it is unknown until just before connection)</param>
        /// <param name="remoteHost">The remote host to route the incoming data to</param>
        /// <param name="displayHost">The remote host dns for user display</param>
        public UdpProxy(int localPort, string remoteHost, string displayHost)
        {
            LocalPort  = localPort;
            RemoteHost = remoteHost;

            // Reserve the port so we don't need to pick new ports later
            m_listener = new UdpClient(new IPEndPoint(IPAddress.Loopback, localPort));

            var udpGrouping = ComponentEngine.Instance.GetComponent <TcpComponent>().udpGroup;

            m_connectionInstance = new ConnectionInstance
            {
                HostName = displayHost,
                Id       = Guid.NewGuid(),
                Parent   = udpGrouping,
            };
        }
示例#8
0
        public DataTable LoadLog()
        {
            var    _connection = ConnectionInstance.Instance.GetConnection($"DSN={DsnName}");
            string query       = $"SELECT `Timestamp`, `Level`, `Message` FROM `{LogTable}` WHERE `Level` NOT LIKE 'DEBUG' ORDER BY `Timestamp` DESC";

            if (Settings.DebugMode)
            {
                query = $"SELECT `Timestamp`, `Level`, `Message` FROM `{LogTable}` ORDER BY `Timestamp` DESC";
            }
            _connection.Open();
            OdbcDataAdapter adapter = new OdbcDataAdapter(query, _connection);
            DataTable       table   = new DataTable();

            try
            {
                adapter.Fill(table);
                table.DefaultView.AllowDelete = false;
                table.DefaultView.AllowEdit   = false;
                table.DefaultView.AllowNew    = false;

                return(table);
            }
            catch (Exception e)
            {
                Logger.Instance.Error($"An error occured while retrieving the log: {e.Message}");
            }
            finally
            {
                ConnectionInstance.CloseConnection($"DSN={DsnName}");
            }

            var           mapping    = new Mapping();
            List <string> logColumns = mapping.GetColumns(LogTable, DsnName);
            DataTable     logTable   = new DataTable();

            foreach (string logColumn in logColumns)
            {
                logTable.Columns.Add(logColumn);
            }

            logTable.DefaultView.AllowDelete = false;
            logTable.DefaultView.AllowEdit   = false;
            logTable.DefaultView.AllowNew    = false;

            return(logTable);
        }
示例#9
0
        public SslMitmInstance(Stream client, Stream server, ConnectionInstance connectionInstance, int chunkSize = 4096)
        {
            ProxyManagerWindow.Instance.Dispatcher.BeginInvoke(new Action(() =>
            {
                ((ManagerWindowViewModel)ProxyManagerWindow.Instance.DataContext).RefreshConversations();
            }));

            m_connectionInstance = connectionInstance;
            connectionInstance.SslMitmInstance = this;

            m_client = client;
            m_server = server;

            OnFrameIn += WsEventHander.Instance.OnFrameIn;

            ForwardStreamNew(client, server, new byte[chunkSize], CommPacketDirection.ClientToServer);
            ForwardStreamNew(server, client, new byte[chunkSize], CommPacketDirection.ServerToClient);

            Dispatcher(CommPacketDirection.ServerToClient);
            Dispatcher(CommPacketDirection.ClientToServer);
        }
示例#10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RedisCacheManager"/> class.
 /// </summary>
 public RedisCacheManager()
 {
     _cache     = ConnectionInstance.GetDatabase();
     _protector = new MachineKeyDataProtector(new[] { typeof(RedisCacheManager).FullName });
 }
示例#11
0
        private void OnBeginAcceptTcpClient(IAsyncResult ar)
        {
            TcpClient clientConnection;

            try
            {
                clientConnection = m_listener.EndAcceptTcpClient(ar);
            }
            catch
            {
                Kill();
                return;
            }

            m_listener.BeginAcceptTcpClient(OnBeginAcceptTcpClient, ar.AsyncState);

            string remoteHost = null;

            try
            {
                // SSL the client
                var clientStream     = clientConnection.GetStream();
                var inputSplitStream = new SplitStream.SplitStream(clientStream);
                var splitStream1     = inputSplitStream.GetReader();
                splitStream1.IsMaster = true;
                var splitStream2 = inputSplitStream.GetReader();
                inputSplitStream.StartReadAhead();

                StringBuilder sb = new StringBuilder();
                int           byt;
                byte[]        buffer = new byte[1024];
                remoteHost = null;

                while (true)
                {
                    if ((byt = splitStream2.ReadByte()) == -1)
                    {
                        break;
                    }

                    sb.Append((char)byt);
                    int av = 0;
                    while ((av = splitStream2.GetBufferAvailable()) > 0)
                    {
                        splitStream2.Read(buffer, 0, Math.Min(buffer.Length, av));
                        sb.Append(Encoding.UTF8.GetString(buffer, 0, av));
                    }

                    var   sbstring = sb.ToString();
                    Match q        = s_hostreg.Match(sbstring);

                    if (q.Success)
                    {
                        remoteHost = q.Groups[0].Value;
                        break;
                    }
                }

                inputSplitStream.TerminateReader(splitStream2);
                splitStream2.Dispose();

                var clientSecureStream = new SslStream(splitStream1, false);
                clientSecureStream.AuthenticateAsServer(m_certificates.Where(cur => remoteHost.EndsWith(cur.Key)).First().Value);

                // Connect to server
                var serverConnection = new TcpClient(m_hostLookup[remoteHost], m_port);

                // SSL the server
                var serverStream       = serverConnection.GetStream();
                var serverSecureStream = new SslStream(serverStream, false, (a, b, c, d) => true);
                serverSecureStream.AuthenticateAsClient(remoteHost);

                ProxyManagerWindow.Instance.Dispatcher.BeginInvoke(new Action(() =>
                {
                    var connectionGrouping = ComponentEngine.Instance.GetComponent <TcpComponent>().GetGrouping(remoteHost, m_port);

                    ConnectionInstance instanceModel = new ConnectionInstance()
                    {
                        HostName = remoteHost,
                        Id       = Guid.NewGuid(),
                        Parent   = connectionGrouping,
                    };
                    SslMitmInstance instance = new SslMitmInstance(clientSecureStream, serverSecureStream, instanceModel)
                    {
                        ReplaceIpaddr = m_replaceIpaddr,
                    };

                    connectionGrouping.Instances.Add(instanceModel);
                }));
            }
            catch (Exception)
            {
                //MainWindow.Instance.Dispatcher.Invoke(new Action(() =>
                //{
                //    MessageBox.Show($"5 Fatal error (did you prep?) ({remoteHost ?? "nohost"}): {ex.Message}");
                //}));
            }
        }
        public void StartConnect()
        {
            if (Connected)
            {
                return;
            }

            // 创建
            switch (HostType)
            {
            case HostConnectionType.Machine:
                ConnectionInstance = MachineProxy.Create(RemoteHostAddress);
                break;

            case HostConnectionType.Process:
                ConnectionInstance = ProcessProxy.Create(RemoteHostAddress);
                break;

            case HostConnectionType.Resource:
                ConnectionInstance = ResourceProxy.Create(RemoteHostAddress);
                break;

            case HostConnectionType.Partner:
                ConnectionInstance = PartnerProxy.Create(RemoteHostAddress);
                break;

            case HostConnectionType.Admin:
                ConnectionInstance = AdminProxy.Create(RemoteHostAddress);
                break;

            default:
                throw new NotSupportedException();
            }

            // 连接
            ConnectionInstance?.Connect();

            if (Connected)
            {
                //连接事件
                ServerEventArg arg = new ServerEventArg("Unknown", ServerEventType.Connected);

                LOG.Info($"启动{HostType.ToString()}对方端口{RemoteHostAddress}成功");

                OnConnectedHander?.BeginInvoke(arg, null, null);

                //启动心跳
                //StartHeartbeat();
            }
            else
            {
                //连接失败
                ServerEventArg arg = new ServerEventArg("Unknown", ServerEventType.Fault);

                LOG.Debug($"启动{HostType.ToString()}对方端口{RemoteHostAddress}失败");


                OnConnectFaultHander?.BeginInvoke(arg, null, null);

                ConnectionInstance = null;
            }
        }