상속: System.EventArgs
        private static void EventSink_SocketConnect( SocketConnectEventArgs e )
        {
            try
            {
                IPAddress ip = ((IPEndPoint)e.Socket.RemoteEndPoint).Address;

                if ( Firewall.IsBlocked( ip ) )
                {
                    log.Error(String.Format("Client: {0}: Firewall blocked connection attempt.", ip));
                    e.AllowConnection = false;
                    return;
                }
                else if ( IPLimiter.SocketBlock && !IPLimiter.Verify( ip ) )
                {
                    log.Error(String.Format("Client: {0}: Past IP limit threshold", ip));

                    e.AllowConnection = false;
                    return;
                }
            }
            catch
            {
                e.AllowConnection = false;
            }
        }
예제 #2
0
        private static void EventSink_SocketConnect(SocketConnectEventArgs e)
        {
            try
            {
                IPAddress ip = ((IPEndPoint)e.Socket.RemoteEndPoint).Address;

                if (Firewall.IsBlocked(ip))
                {
                    Utility.PushColor(ConsoleColor.DarkRed);
                    Console.WriteLine("Client: {0}: Firewall blocked connection attempt.", ip);
                    Utility.PopColor();
                    e.AllowConnection = false;
                    return;
                }
                else if (IPLimiter.SocketBlock && !IPLimiter.Verify(ip))
                {
                    Utility.PushColor(ConsoleColor.DarkRed);
                    Console.WriteLine("Client: {0}: Past IP limit threshold", ip);
                    Utility.PopColor();

                    using (StreamWriter op = new StreamWriter("ipLimits.log", true))
                        op.WriteLine("{0}\tPast IP limit threshold\t{1}", ip, DateTime.Now);
	
                    e.AllowConnection = false;
                    return;
                }
            }
            catch
            {
                e.AllowConnection = false;
            }
        }
예제 #3
0
		private static void EventSink_SocketConnect(SocketConnectEventArgs e)
		{
			if (e.AllowConnection && !NagleEnabled)
			{
				e.Socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, 1); // RunUO uses its own algorithm
			}
		}
예제 #4
0
		private static void OnSocketConnect(SocketConnectEventArgs e)
		{
			try
			{
				IPAddress ip = ((IPEndPoint)e.Socket.RemoteEndPoint).Address;

				if (Firewall.IsBlocked(ip))
				{
					Console.WriteLine("Client: {0}: Firewall blocked connection attempt.", ip);
					e.AllowConnection = false;
					return;
				}

				if (!IPLimiter.SocketBlock || IPLimiter.Verify(ip))
				{
					return;
				}

				LoggingCustom.Log(
					"LOG_IPLimits.log",
					String.Format("{0}\tPast IP limit threshold\t{1}", ip, DateTime.Now.ToSimpleString("t d-m-y N")));

				Console.WriteLine("Client: {0}: Past IP limit threshold", ip);

				e.AllowConnection = false;
			}
			catch
			{
				e.AllowConnection = false;
			}
		}
예제 #5
0
        private static void EventSink_SocketConnect( SocketConnectEventArgs e )
        {
            if ( !e.AllowConnection )
                return;

            Socket s = e.Socket;

            s.SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 15000 );
            s.SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 15000 );

            if ( CoalesceBufferSize > 0 )
                s.SetSocketOption( SocketOptionLevel.Tcp, SocketOptionName.NoDelay, 1 ); // RunUO uses its own algorithm
        }
예제 #6
0
        private static void EventSink_SocketConnect(SocketConnectEventArgs e)
        {
            if (!e.AllowConnection)
            {
                return;
            }

            Socket s = e.Socket;

            s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 15000);
            s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 15000);

            if (CoalesceBufferSize > 0)
            {
                s.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, 1);                   // RunUO uses its own algorithm
            }
        }
예제 #7
0
 public static void InvokeSocketConnect( SocketConnectEventArgs e )
 {
     if ( SocketConnect != null )
         SocketConnect( e );
 }
예제 #8
0
 public static void InvokeSocketConnect(SocketConnectEventArgs e) => SocketConnect?.Invoke(e);
예제 #9
0
        private void OnAccept( IAsyncResult asyncResult )
        {
            try
            {
                Socket s = m_Listener.EndAccept( asyncResult );

                SocketConnectEventArgs e = new SocketConnectEventArgs( s );
                EventSink.InvokeSocketConnect( e );

                if ( e.AllowConnection )
                {
                    lock ( m_Accepted.SyncRoot )
                        m_Accepted.Enqueue( s );
                }
                else
                {
                    try{ s.Shutdown( SocketShutdown.Both ); }
                    catch{}

                    try{ s.Close(); }
                    catch{}
                }
            }
            catch
            {
            }
            finally
            {
                m_Listener.BeginAccept( m_OnAccept, m_Listener );
            }
        }
예제 #10
0
        private bool VerifySocket(Socket socket)
        {
            try
            {
                SocketConnectEventArgs args = new SocketConnectEventArgs(socket);

                EventSink.InvokeSocketConnect(args);

                return args.AllowConnection;
            }
            catch (Exception ex)
            {
                NetState.TraceException(ex);

                return false;
            }
        }
예제 #11
0
		public static void InvokeSocketConnect(SocketConnectEventArgs e)
		{
			if (SocketConnect != null)
			{
				foreach (SocketConnectEventHandler currentDelegate in SocketConnect.GetInvocationList())
				{
					try
					{
						currentDelegate.Invoke(e);
					}
					catch (Exception ex)
					{
						// Log an exception
						EventSink.InvokeLogException(new LogExceptionEventArgs(ex));
					}
				}
			}
		}