@@ -66,6 +66,7 @@ private void OnHttpDecode(ISession session, PipeStream pstream)
6666 }
6767 else
6868 {
69+ HttpToken token = ( HttpToken ) session . Tag ;
6970 if ( session . Server . EnableLog ( LogType . Info ) )
7071 session . Server . Log ( LogType . Info , session , $ "HTTP { mRequest . ID } { session . RemoteEndPoint } request from multi receive") ;
7172 if ( mRequest . State == LoadedState . None )
@@ -76,7 +77,10 @@ private void OnHttpDecode(ISession session, PipeStream pstream)
7677 {
7778 session . Server . Log ( LogType . Warring , session , $ "HTTP { mRequest . ID } { session . RemoteEndPoint } receive data error!") ;
7879 }
79- session . Dispose ( ) ;
80+ token . KeepAlive = false ;
81+ var response = mRequest . CreateResponse ( ) ;
82+ InnerErrorResult innerErrorResult = new InnerErrorResult ( "400" , "Request http receive data error!" ) ;
83+ response . Result ( innerErrorResult ) ;
8084 return ;
8185 }
8286 var span = pstream . FirstBuffer . Memory . Slice ( 0 , 10 ) . Span ;
@@ -89,29 +93,34 @@ private void OnHttpDecode(ISession session, PipeStream pstream)
8993 if ( session . Server . EnableLog ( LogType . Warring ) )
9094 {
9195 session . Server . Log ( LogType . Warring , session , $ "HTTP { mRequest . ID } { session . RemoteEndPoint } protocol data error!") ;
92- }
93- session . Dispose ( ) ;
96+ }
97+ token . KeepAlive = false ;
98+ var response = mRequest . CreateResponse ( ) ;
99+ InnerErrorResult innerErrorResult = new InnerErrorResult ( "400" , "Request http protocol data error!" ) ;
100+ response . Result ( innerErrorResult ) ;
94101 return ;
95102 }
96103 }
97- if ( ( int ) mRequest . State < ( int ) LoadedState . Header && pstream . Length > 1024 * 4 )
104+ if ( ( int ) mRequest . State < ( int ) LoadedState . Header && ( pstream . Length > 1024 * 4 || mReceives > 20 ) )
98105 {
99106 if ( session . Server . EnableLog ( LogType . Warring ) )
100107 {
101108 session . Server . Log ( LogType . Warring , session , $ "HTTP { mRequest . ID } { session . RemoteEndPoint } header too long!") ;
102109 }
103- session . Dispose ( ) ;
110+ token . KeepAlive = false ;
111+ var response = mRequest . CreateResponse ( ) ;
112+ InnerErrorResult innerErrorResult = new InnerErrorResult ( "400" , "Request header too large" ) ;
113+ response . Result ( innerErrorResult ) ;
104114 }
105115 else if ( mRequest . Length > mServerConfig . MaxBodyLength )
106116 {
107117 if ( session . Server . EnableLog ( LogType . Warring ) )
108118 {
109119 session . Server . Log ( LogType . Warring , session , $ "HTTP { mRequest . ID } { session . RemoteEndPoint } body too long!") ;
110120 }
111- HttpToken token = ( HttpToken ) session . Tag ;
112121 token . KeepAlive = false ;
113122 var response = mRequest . CreateResponse ( ) ;
114- InnerErrorResult innerErrorResult = new InnerErrorResult ( "413 " , "Request Entity Too Large " ) ;
123+ InnerErrorResult innerErrorResult = new InnerErrorResult ( "400 " , "Request entity too large " ) ;
115124 response . Result ( innerErrorResult ) ;
116125 return ;
117126 }
@@ -130,22 +139,27 @@ private void OnWebSocketDecode(ISession session, PipeStream pstream)
130139 {
131140 mWebSocketRequest ++ ;
132141 long now = session . Server . GetRunTime ( ) ;
133- if ( now - mLastTime > 1000 )
142+ if ( now - mLastTime < 1000 )
134143 {
135144 if ( mServerConfig . WebSocketMaxRPS > 0 && mWebSocketRequest > mServerConfig . WebSocketMaxRPS )
136145 {
137146 if ( session . Server . EnableLog ( LogType . Warring ) )
138147 {
139- session . Server . Log ( LogType . Warring , session , $ "Websocket { mRequest ? . ID } { session . RemoteEndPoint } session rps to max !") ;
148+ session . Server . Log ( LogType . Warring , session , $ "Websocket { mRequest ? . ID } { session . RemoteEndPoint } session rps limit !") ;
140149 }
141- session . Dispose ( ) ;
142- }
143- else
144- {
145- mWebSocketRequest = 0 ;
146- mLastTime = now ;
150+ HttpToken token = ( HttpToken ) session . Tag ;
151+ token . KeepAlive = false ;
152+ var error = new ActionResult ( 500 , "session rps limit!" ) ;
153+ var frame = mServer . CreateDataFrame ( error ) ;
154+ frame . Send ( session ) ;
155+ // session.Dispose() ;
147156 }
148157 }
158+ else
159+ {
160+ mWebSocketRequest = 0 ;
161+ mLastTime = now ;
162+ }
149163 DataFrame data = mDataPacket ;
150164 mDataPacket = null ;
151165 Completed ? . Invoke ( this , mCompletedArgs . SetInfo ( session , data ) ) ;
0 commit comments