@@ -164,6 +164,7 @@ public void run()
164164 while (!Thread .currentThread ().isInterrupted ())
165165 {
166166 Socket client = serverSocket .accept ();
167+ client .setSoTimeout (20 * 60 * 1000 ); // 20-minute session limit
167168 Thread responder = new Thread (() -> respond (client ));
168169 responder .setDaemon (true );
169170 responder .start ();
@@ -183,11 +184,12 @@ private void respond(final Socket CLIENT)
183184 BufferedWriter writer = new BufferedWriter (new OutputStreamWriter (CLIENT .getOutputStream (), java .nio .charset .StandardCharsets .UTF_8 ));
184185 BufferedReader reader = new BufferedReader (new java .io .InputStreamReader (CLIENT .getInputStream (), java .nio .charset .StandardCharsets .UTF_8 ));
185186
187+ writer .write ("[ NWE port " + STATUS_PORT + " — Connection Status & Server Health Report | 20-minute session ]\n " );
186188 writer .write (languages .LanguagePack .t (remoteIp , "label.lang_menu" ) + "\n " );
187189 writer .write (languages .LanguagePack .t (remoteIp , "label.lang_prompt" ) + "\n " );
188190 writer .flush ();
189191
190- CLIENT .setSoTimeout (4000 ); // short timeout for lang selection
192+ CLIENT .setSoTimeout (20 * 60 * 1000 ); // 20-minute language selection window
191193 try
192194 {
193195 String line = reader .readLine ();
@@ -219,6 +221,26 @@ private void respond(final Socket CLIENT)
219221 db .N21Store .storeGeo (remoteIp , geoParts .length > 0 ? geoParts [0 ] : "" , geoParts .length > 1 ? geoParts [1 ] : "" );
220222 db .N21Store .storeStatusSnapshot (count , uptimeSecs , totalMB , usedMB );
221223
224+ // ── Geo list for all live connections ─────────────────────
225+ StringBuilder geoList = new StringBuilder ();
226+ for (connections .Connection c : WATCHED .CURRENT_CONNECTION )
227+ {
228+ if (c .internet_address != null )
229+ {
230+ String ip = c .internet_address .getHostAddress ();
231+ geoList .append (" " ).append (ip )
232+ .append (" " ).append (fetchGeo (ip )).append ("\n " );
233+ }
234+ }
235+
236+ // ── Running JVM threads (server executables) ──────────────
237+ StringBuilder threads = new StringBuilder ();
238+ Thread .getAllStackTraces ().keySet ().stream ()
239+ .filter (t -> t .getState () == Thread .State .RUNNABLE || t .getState () == Thread .State .TIMED_WAITING )
240+ .sorted (java .util .Comparator .comparing (Thread ::getName ))
241+ .forEach (t -> threads .append (" [" ).append (t .getState ()).append ("] " )
242+ .append (t .getName ()).append ("\n " ));
243+
222244 java .util .function .Function <String ,String > L = k -> languages .LanguagePack .t (remoteIp , k );
223245
224246 String report =
@@ -230,7 +252,9 @@ private void respond(final Socket CLIENT)
230252 L .apply ("label.time" ) + " " + localTime + "\n " +
231253 L .apply ("label.uptime" ) + " " + uptime + "\n " +
232254 L .apply ("label.memory" ) + " " + totalMB + "MB (used: " + usedMB + "MB)\n " +
233- L .apply ("label.connections" ) + " " + count + "\n " +
255+ L .apply ("label.connections" ) + " " + count + " current\n " +
256+ "\n Connected IPs & Geo:\n " + (geoList .length () > 0 ? geoList : " (none)\n " ) +
257+ "\n Running Server Threads:\n " + (threads .length () > 0 ? threads : " (none)\n " ) +
234258 "\n " + L .apply ("label.lang_revert" ) + "\n " ;
235259
236260 CommonRails .printSystemComponent (this , this .hashCode (),
@@ -405,6 +429,7 @@ private void handle(final Socket CLIENT)
405429 BufferedReader in = new BufferedReader (new InputStreamReader (CLIENT .getInputStream ()));
406430 BufferedWriter out = new BufferedWriter (new OutputStreamWriter (CLIENT .getOutputStream ()))
407431 ) {
432+ writeLine (out , "[ NWE port " + PORT + " — Module Installation Service | install, unload, and manage NWE modules ]" );
408433 writeLine (out , "ModuleInstallationService v2.0" );
409434 writeLine (out , "Type 'identify <nationalId>' first, then 'help' for commands." );
410435
@@ -802,6 +827,7 @@ private void handle(final Socket CLIENT)
802827 BufferedReader in = new BufferedReader (new InputStreamReader (CLIENT .getInputStream ()));
803828 BufferedWriter out = new BufferedWriter (new OutputStreamWriter (CLIENT .getOutputStream ()))
804829 ) {
830+ writeLine (out , "[ NWE port " + PORT + " — ASCII Signature Service | issues unique binary ASCII signatures per National ID ]" );
805831 writeLine (out , "ASCIICreatorServer — Binary ASCII Signature Service" );
806832 writeLine (out , "Commands: request <nationalId> | view <nationalId> | quit" );
807833
0 commit comments