make ah available in http callback properly
authorAndy Green <andy.green@linaro.org>
Sat, 9 Nov 2013 03:40:32 +0000 (11:40 +0800)
committerAndy Green <andy.green@linaro.org>
Sat, 9 Nov 2013 03:40:32 +0000 (11:40 +0800)
Signed-off-by: Andy Green <andy.green@linaro.org>
lib/handshake.c
lib/private-libwebsockets.h

index 3007426..3e1941c 100644 (file)
@@ -137,9 +137,12 @@ libwebsocket_read(struct libwebsocket_context *context,
 
                        /* union transition */
                        memset(&wsi->u, 0, sizeof(wsi->u));
-
                        wsi->mode = LWS_CONNMODE_HTTP_SERVING_ACCEPTED;
                        wsi->state = WSI_STATE_HTTP;
+
+                       /* expose it at the same offset as u.hdr */
+                       wsi->u.http.ah = ah;
+
                        n = 0;
                        if (wsi->protocol->callback)
                                n = wsi->protocol->callback(context, wsi,
@@ -149,6 +152,8 @@ libwebsocket_read(struct libwebsocket_context *context,
                        /* now drop the header info we kept a pointer to */
                        if (ah)
                                free(ah);
+                       /* not possible to continue to use past here */
+                       wsi->u.http.ah = NULL;
 
                        if (n) {
                                lwsl_info("LWS_CALLBACK_HTTP closing\n");
index 5963db5..7cf8899 100644 (file)
@@ -306,12 +306,6 @@ struct libwebsocket_context {
  * other APIs to get information out of it.
  */
 
-struct _lws_http_mode_related {
-       int fd;
-       unsigned long filepos;
-       unsigned long filelen;
-};
-
 struct lws_fragments {
        unsigned short offset;
        unsigned short len;
@@ -330,6 +324,13 @@ struct allocated_headers {
 #endif
 };
 
+struct _lws_http_mode_related {
+       struct allocated_headers *ah; /* mirroring  _lws_header_related */
+       int fd;
+       unsigned long filepos;
+       unsigned long filelen;
+};
+
 struct _lws_header_related {
        struct allocated_headers *ah;
        short lextable_pos;