@@ -163,7 +163,7 @@ public String command() {
163163
164164 return this .save (meetingCode , builder );
165165 }
166-
166+ response . setStatus ( 403 );
167167 return "{ \" error\" : \" expired\" }" ;
168168 }
169169
@@ -173,25 +173,28 @@ public String save() {
173173 response .setContentType ("application/json" );
174174
175175 final Object meetingCode = request .getSession ().getAttribute ("meeting_code" );
176- final String sessionId = request .getSession ().getId ();
177- if ( meetingCode != null && sessions .get (meetingCode ) != null && sessions .get (meetingCode ).contains (sessionId )) {
178- String message ;
179- if ((message = request .getParameter ("text" )) != null && !message .isEmpty ()) {
180- String [] agent = request .getHeader ("User-Agent" ).split (" " );
181- this .setVariable ("browser" , agent [agent .length - 1 ]);
182-
183- final SimpleDateFormat format = new SimpleDateFormat ("yyyy-M-d h:m:s" );
184- final Builder builder = new Builder ();
185- builder .put ("user" , request .getSession ().getAttribute ("user" ));
186- builder .put ("time" , format .format (new Date ()));
187- builder .put ("message" , filter (message ));
188- builder .put ("session_id" , sessionId );
189-
190- return this .save (meetingCode , builder );
176+ if (this .meetings .containsKey (meetingCode )) {
177+ final String sessionId = request .getSession ().getId ();
178+ if ( meetingCode != null && sessions .get (meetingCode ) != null && sessions .get (meetingCode ).contains (sessionId )) {
179+ String message ;
180+ if ((message = request .getParameter ("text" )) != null && !message .isEmpty ()) {
181+ String [] agent = request .getHeader ("User-Agent" ).split (" " );
182+ this .setVariable ("browser" , agent [agent .length - 1 ]);
183+
184+ final SimpleDateFormat format = new SimpleDateFormat ("yyyy-M-d h:m:s" );
185+ final Builder builder = new Builder ();
186+ builder .put ("user" , request .getSession ().getAttribute ("user" ));
187+ builder .put ("time" , format .format (new Date ()));
188+ builder .put ("message" , filter (message ));
189+ builder .put ("session_id" , sessionId );
190+
191+ return this .save (meetingCode , builder );
192+ }
191193 }
192194 }
193-
194- return "{}" ;
195+
196+ response .setStatus (403 );
197+ return "{ \" error\" : \" expired\" }" ;
195198 }
196199
197200 public String update () throws ApplicationException , IOException {
@@ -201,14 +204,27 @@ public String update() throws ApplicationException, IOException {
201204 if (meetingCode != null ) {
202205 return this .update (meetingCode .toString (), sessionId );
203206 }
204- return "" ;
207+ final HttpServletResponse response = (HttpServletResponse ) this .context .getAttribute ("HTTP_RESPONSE" );
208+ response .setContentType ("application/json" );
209+ response .setStatus (403 );
210+ return "{ \" error\" : \" expired\" }" ;
205211 }
206212
207213 public String update (String meetingCode , String sessionId ) throws ApplicationException , IOException {
208- if (sessions .get (meetingCode ) != null && sessions .get (meetingCode ).contains (sessionId )) {
209- return this .update (sessionId );
214+ if (this .meetings .containsKey (meetingCode )) {
215+ if (sessions .get (meetingCode ) != null && sessions .get (meetingCode ).contains (sessionId )) {
216+ return this .update (sessionId );
217+ }
218+ final HttpServletResponse response = (HttpServletResponse ) this .context .getAttribute ("HTTP_RESPONSE" );
219+ response .setContentType ("application/json" );
220+ response .setStatus (403 );
221+ return "{ \" error\" : \" session-timeout\" }" ;
210222 }
211- return "" ;
223+
224+ final HttpServletResponse response = (HttpServletResponse ) this .context .getAttribute ("HTTP_RESPONSE" );
225+ response .setContentType ("application/json" );
226+ response .setStatus (403 );
227+ return "{ \" error\" : \" expired\" }" ;
212228 }
213229
214230 public String upload () throws ApplicationException {
@@ -307,16 +323,24 @@ public void sessionCreated(HttpSessionEvent arg0) {
307323 public void sessionDestroyed (HttpSessionEvent arg0 ) {
308324 Object meetingCode = arg0 .getSession ().getAttribute ("meeting_code" );
309325 if ( meetingCode != null ) {
326+ final SimpleDateFormat format = new SimpleDateFormat ("yyyy-M-d h:m:s" );
327+ final Builder builder = new Builder ();
328+ builder .put ("user" , null );
329+ builder .put ("time" , format .format (new Date ()));
330+ builder .put ("cmd" , "expired" );
331+ this .save (meetingCode , builder );
332+
310333 Queue <Builder > messages ;
311334 List <String > session_ids ;
312- synchronized (meetings ) {
313- if ((session_ids = this .sessions .get (meetingCode )) != null )
314- {
335+ synchronized (meetings ) {
336+ if ((session_ids = this .sessions .get (meetingCode )) != null ) {
315337 session_ids .remove (arg0 .getSession ().getId ());
316338 }
339+
317340 if ((messages = meetings .get (meetingCode )) != null ) {
318341 messages .remove (meetingCode );
319342 }
343+
320344 meetings .notifyAll ();
321345 }
322346
0 commit comments