HTTP_PROXY: make usable
[platform/upstream/libwebsockets.git] / lib / service.c
index b23defd..6d7e538 100644 (file)
 static int
 lws_calllback_as_writeable(struct lws *wsi)
 {
+       struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi];
        int n;
 
+       lws_stats_atomic_bump(wsi->context, pt, LWSSTATS_C_WRITEABLE_CB, 1);
+#if defined(LWS_WITH_STATS)
+       {
+               uint64_t ul = time_in_microseconds() - wsi->active_writable_req_us;
+
+               lws_stats_atomic_bump(wsi->context, pt, LWSSTATS_MS_WRITABLE_DELAY, ul);
+               lws_stats_atomic_max(wsi->context, pt, LWSSTATS_MS_WORST_WRITABLE_DELAY, ul);
+               wsi->active_writable_req_us = 0;
+       }
+#endif
+
        switch (wsi->mode) {
        case LWSCM_RAW:
                n = LWS_CALLBACK_RAW_WRITEABLE;
@@ -425,6 +437,8 @@ lws_service_timeout_check(struct lws *wsi, unsigned int sec)
                if (wsi->desc.sockfd != LWS_SOCK_INVALID && wsi->position_in_fds_table >= 0)
                        n = pt->fds[wsi->position_in_fds_table].events;
 
+               lws_stats_atomic_bump(wsi->context, pt, LWSSTATS_C_TIMEOUTS, 1);
+
                /* no need to log normal idle keepalive timeout */
                if (wsi->pending_timeout != PENDING_TIMEOUT_HTTP_KEEPALIVE_IDLE)
                        lwsl_notice("wsi %p: TIMEDOUT WAITING on %d (did hdr %d, ah %p, wl %d, pfd events %d) %llu vs %llu\n",
@@ -683,8 +697,8 @@ spin_chunks:
                return 0;
 
        if (wsi->u.http.content_remain &&
-           (int)wsi->u.http.content_remain < *len)
-               n = wsi->u.http.content_remain;
+           wsi->u.http.content_remain < *len)
+               n = (int)wsi->u.http.content_remain;
        else
                n = *len;
 
@@ -786,6 +800,13 @@ lws_service_fd_tsi(struct lws_context *context, struct lws_pollfd *pollfd, int t
        if (context->last_timeout_check_s != now) {
                context->last_timeout_check_s = now;
 
+#if defined(LWS_WITH_STATS)
+               if (!tsi && now - context->last_dump > 10) {
+                       lws_stats_log_dump(context);
+                       context->last_dump = now;
+               }
+#endif
+
                lws_plat_service_periodic(context);
 
                /* retire unused deprecated context */
@@ -1131,7 +1152,7 @@ read:
                                        eff_buf.token_len = context->pt_serv_buf_size;
                                }
 
-                               if (eff_buf.token_len > context->pt_serv_buf_size)
+                               if ((unsigned int)eff_buf.token_len > context->pt_serv_buf_size)
                                        eff_buf.token_len = context->pt_serv_buf_size;
 
                                eff_buf.token_len = lws_ssl_capable_read(wsi,
@@ -1182,6 +1203,9 @@ drain:
                                lwsl_notice("LWS_CALLBACK_RECEIVE_CLIENT_HTTP closed it\n");
                                goto close_and_handled;
                        }
+
+                       n = 0;
+                       goto handled;
                }
 #endif
                /*