", r);
+    else
+        ap_rputs("Scoreboard: ", r);
+
+    for (i = 0; i < server_limit; ++i) {
+        for (j = 0; j < thread_limit; ++j) {
+            int indx = (i * thread_limit) + j;
+            ap_rputc(stat_buffer[indx], r);
+            if ((indx % STATUS_MAXLINE == (STATUS_MAXLINE - 1))
+                && !short_report)
+                ap_rputs("\n", r);
+        }
+    }
+
+    if (short_report)
+        ap_rputs("\n", r);
+    else {
+        ap_rputs("\n", r);
+        ap_rputs("Scoreboard Key:
\n", r);
+        ap_rputs("\"_\" Waiting for Connection, \n", r);
+        ap_rputs("\"S\" Starting up, \n", r);
+        ap_rputs("\"R\" Reading Request,
\n", r);
+        ap_rputs("\"W\" Sending Reply, \n", r);
+        ap_rputs("\"K\" Keepalive (read), \n", r);
+        ap_rputs("\"D\" DNS Lookup,
\n", r);
+        ap_rputs("\"C\" Closing connection, \n", r);
+        ap_rputs("\"L\" Logging, \n", r);
+        ap_rputs("\"G\" Gracefully finishing,
 \n", r);
+        ap_rputs("\"I\" Idle cleanup of worker, \n", r);
+        ap_rputs("\".\" Open slot with no current process
\n", r);
+            for (i = 0; i < server_limit; ++i) {
+                for (j = 0; j < thread_limit; ++j) {
+                    int indx = (i * thread_limit) + j;
+
+                    if (stat_buffer[indx] != '.') {
+                        ap_rprintf(r, "   %" APR_PID_T_FMT
+                                   " in state: %c ", pid_buffer[i],
+                                   stat_buffer[indx]);
+
+                        if (++k >= 3) {
+                            ap_rputs("\n", r);
+                            k = 0;
+                        } else
+                            ap_rputs(",", r);
+                    }
+                }
+            }
+
+            ap_rputs("\n", r);
+            ap_rputs("\n", r);
+        }
+    }
+
+    if (ap_extended_status && !short_report) {
+        if (no_table_report)
+            ap_rputs("| Srv | PID | Acc" + " | M" +#ifdef HAVE_TIMES + " | CPU\n" +#endif + " | SS | Req" + " | Conn | Child | Slot" + " | Client | VHost" + " | Request | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| %d-%d | - | %d/%lu/%lu", + i, (int)worker_generation, + (int)conn_lres, my_lres, lres); + else + ap_rprintf(r, + " | |||||||||||||||||||||
| %d-%d | %" + APR_PID_T_FMT + " | %d/%lu/%lu", + i, (int)worker_generation, + worker_pid, + (int)conn_lres, + my_lres, lres); + + switch (ws_record->status) { + case SERVER_READY: + ap_rputs(" | _", r); + break; + case SERVER_STARTING: + ap_rputs(" | S", r); + break; + case SERVER_BUSY_READ: + ap_rputs(" | R", r); + break; + case SERVER_BUSY_WRITE: + ap_rputs(" | W", r); + break; + case SERVER_BUSY_KEEPALIVE: + ap_rputs(" | K", r); + break; + case SERVER_BUSY_LOG: + ap_rputs(" | L", r); + break; + case SERVER_BUSY_DNS: + ap_rputs(" | D", r); + break; + case SERVER_CLOSING: + ap_rputs(" | C", r); + break; + case SERVER_DEAD: + ap_rputs(" | .", r); + break; + case SERVER_GRACEFUL: + ap_rputs(" | G", r); + break; + case SERVER_IDLE_KILL: + ap_rputs(" | I", r); + break; + default: + ap_rputs(" | ?", r); + break; + } + + ap_rprintf(r, + "\n" +#ifdef HAVE_TIMES + " | %.2f" +#endif + " | %ld | %ld", +#ifdef HAVE_TIMES + (ws_record->times.tms_utime + + ws_record->times.tms_stime + + ws_record->times.tms_cutime + + ws_record->times.tms_cstime) / tick, +#endif + (long)apr_time_sec(nowtime - + ws_record->last_used), + (long)req_time); + + ap_rprintf(r, " | %-1.1f | %-2.2f | %-2.2f\n", + (float)conn_bytes / KBYTE, (float) my_bytes / MBYTE, + (float)bytes / MBYTE); + + if (ws_record->status == SERVER_BUSY_READ) + ap_rprintf(r, + " | ? | ? | ..reading.. | %s | %s | %s\n\n", + ap_escape_html(r->pool, + ws_record->client), + ap_escape_html(r->pool, + ws_record->vhost), + ap_escape_html(r->pool, + ap_escape_logitem(r->pool, + ws_record->request))); + } /* no_table_report */ + } /* for (j...) */ + } /* for (i...) */ + + if (!no_table_report) { + ap_rputs(" | 
| Srv | Child Server number - generation | 
|---|---|
| PID | OS process ID | 
| Acc | Number of accesses this connection / this child / this slot | 
| M | Mode of operation | 
| CPU | CPU usage, number of seconds | 
| SS | Seconds since beginning of most recent request | 
| Req | Milliseconds required to process most recent request | 
| Conn | Kilobytes transferred this connection | 
| Child | Megabytes transferred this child | 
| Slot | Total megabytes transferred this slot | 
ExtendedStatus On directive.\n", r);
+        }
+    }
+
+    {
+        /* Run extension hooks to insert extra content. */
+        int flags =
+            (short_report ? AP_STATUS_SHORT : 0) |
+            (no_table_report ? AP_STATUS_NOTABLE : 0) |
+            (ap_extended_status ? AP_STATUS_EXTENDED : 0);
+
+        ap_run_status_hook(r, flags);
+    }
+
+    if (!short_report) {
+        ap_rputs(ap_psignature("| ID | Environment | Pss" + " | Connections | Requests | Dropped (503)" + " | Avail | 
|---|---|---|---|---|---|---|
| %d | %s | %d/%d/%d" + " | %d | %d | %d | %d%% | 
| Pss | Number of processors active/idle/max | 
|---|
| ID | PID | STATUS | SB STATUS" + " | Type | Processor | Pss | AVAIL" + " | 
|---|---|---|---|---|---|---|---|
| %3d | %5d | %8s | %8s" + " | %12s | %48s | %d/%d/%d" + " | %3d%% | 
| STATUS | Processor status | 
|---|---|
| Pss | Number of processors active/idle/max |