github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/pkg/assetserver/webview/webkit2_36+.go (about) 1 //go:build linux && (webkit2_36 || webkit2_40) 2 3 package webview 4 5 /* 6 #cgo linux pkg-config: gtk+-3.0 webkit2gtk-4.0 libsoup-2.4 7 8 #include "gtk/gtk.h" 9 #include "webkit2/webkit2.h" 10 #include "libsoup/soup.h" 11 */ 12 import "C" 13 14 import ( 15 "net/http" 16 "strings" 17 "unsafe" 18 ) 19 20 func webkit_uri_scheme_request_get_http_method(req *C.WebKitURISchemeRequest) string { 21 method := C.GoString(C.webkit_uri_scheme_request_get_http_method(req)) 22 return strings.ToUpper(method) 23 } 24 25 func webkit_uri_scheme_request_get_http_headers(req *C.WebKitURISchemeRequest) http.Header { 26 hdrs := C.webkit_uri_scheme_request_get_http_headers(req) 27 28 var iter C.SoupMessageHeadersIter 29 C.soup_message_headers_iter_init(&iter, hdrs) 30 31 var name *C.char 32 var value *C.char 33 34 h := http.Header{} 35 for C.soup_message_headers_iter_next(&iter, &name, &value) != 0 { 36 h.Add(C.GoString(name), C.GoString(value)) 37 } 38 39 return h 40 } 41 42 func webkit_uri_scheme_request_finish(req *C.WebKitURISchemeRequest, code int, header http.Header, stream *C.GInputStream, streamLength int64) error { 43 resp := C.webkit_uri_scheme_response_new(stream, C.gint64(streamLength)) 44 defer C.g_object_unref(C.gpointer(resp)) 45 46 cReason := C.CString(http.StatusText(code)) 47 C.webkit_uri_scheme_response_set_status(resp, C.guint(code), cReason) 48 C.free(unsafe.Pointer(cReason)) 49 50 cMimeType := C.CString(header.Get(HeaderContentType)) 51 C.webkit_uri_scheme_response_set_content_type(resp, cMimeType) 52 C.free(unsafe.Pointer(cMimeType)) 53 54 hdrs := C.soup_message_headers_new(C.SOUP_MESSAGE_HEADERS_RESPONSE) 55 for name, values := range header { 56 cName := C.CString(name) 57 for _, value := range values { 58 cValue := C.CString(value) 59 C.soup_message_headers_append(hdrs, cName, cValue) 60 C.free(unsafe.Pointer(cValue)) 61 } 62 C.free(unsafe.Pointer(cName)) 63 } 64 65 C.webkit_uri_scheme_response_set_http_headers(resp, hdrs) 66 67 C.webkit_uri_scheme_request_finish_with_response(req, resp) 68 return nil 69 }