Zebediah Figura : http.sys: Fill out the local and remote addresses.

Alexandre Julliard julliard at winehq.org
Tue Aug 27 15:28:15 CDT 2019


Module: wine
Branch: master
Commit: 0d5643592fe5c41f22cb73f9158685e02a1fd214
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0d5643592fe5c41f22cb73f9158685e02a1fd214

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Mon Aug 26 23:31:19 2019 -0500

http.sys: Fill out the local and remote addresses.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/http.sys/http.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/dlls/http.sys/http.c b/dlls/http.sys/http.c
index 1208669..8c46282 100644
--- a/dlls/http.sys/http.c
+++ b/dlls/http.sys/http.c
@@ -274,6 +274,8 @@ static NTSTATUS complete_irp(struct connection *conn, IRP *irp)
     const DWORD output_len = stack->Parameters.DeviceIoControl.OutputBufferLength;
     ULONG cooked_len, host_len, abs_path_len, query_len, offset;
     const char *p, *host, *abs_path, *query;
+    struct sockaddr_in addr;
+    int len;
 
     TRACE("Completing IRP %p.\n", irp);
 
@@ -309,6 +311,9 @@ static NTSTATUS complete_irp(struct connection *conn, IRP *irp)
     cooked_len = (7 /* scheme */ + host_len + abs_path_len + query_len) * sizeof(WCHAR);
     irp_size += cooked_len + sizeof(WCHAR);
 
+    /* addresses */
+    irp_size += 2 * sizeof(addr);
+
     TRACE("Need %u bytes, have %u.\n", irp_size, output_len);
     irp->IoStatus.Information = irp_size;
 
@@ -376,6 +381,18 @@ static NTSTATUS complete_irp(struct connection *conn, IRP *irp)
         buffer[offset++] = 0;
         buffer[offset++] = 0;
 
+        req->Address.pRemoteAddress = params.addr + offset;
+        len = sizeof(addr);
+        getpeername(conn->socket, (struct sockaddr *)&addr, &len);
+        memcpy(buffer + offset, &addr, sizeof(addr));
+        offset += sizeof(addr);
+
+        req->Address.pLocalAddress = params.addr + offset;
+        len = sizeof(addr);
+        getsockname(conn->socket, (struct sockaddr *)&addr, &len);
+        memcpy(buffer + offset, &addr, sizeof(addr));
+        offset += sizeof(addr);
+
         req->BytesReceived = conn->req_len;
     }
     else
@@ -425,6 +442,18 @@ static NTSTATUS complete_irp(struct connection *conn, IRP *irp)
         buffer[offset++] = 0;
         buffer[offset++] = 0;
 
+        req->Address.pRemoteAddress = params.addr + offset;
+        len = sizeof(addr);
+        getpeername(conn->socket, (struct sockaddr *)&addr, &len);
+        memcpy(buffer + offset, &addr, sizeof(addr));
+        offset += sizeof(addr);
+
+        req->Address.pLocalAddress = params.addr + offset;
+        len = sizeof(addr);
+        getsockname(conn->socket, (struct sockaddr *)&addr, &len);
+        memcpy(buffer + offset, &addr, sizeof(addr));
+        offset += sizeof(addr);
+
         req->BytesReceived = conn->req_len;
     }
 




More information about the wine-cvs mailing list