From 66a0560e4e097a54e439cdc529e28fcd0f9014e8 Mon Sep 17 00:00:00 2001 From: PumpkinSeed Date: Mon, 25 Jul 2022 11:28:53 +0200 Subject: [PATCH] windows: support Windows SOCKADDR_BTH structure Implements the Windows SOCKADDR_BTH structure so it can be used as a parameter in windows.Connect. Fixes: golang/go#53929 Change-Id: Ibe54071897b60ecd91f44c7c0c894d831e56fe56 Reviewed-on: https://go-review.googlesource.com/c/sys/+/419394 Reviewed-by: Than McIntosh TryBot-Result: Gopher Robot Run-TryBot: Alex Brainman Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Reviewed-by: Alex Brainman --- windows/syscall_windows.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go index d180a659..e2791381 100644 --- a/windows/syscall_windows.go +++ b/windows/syscall_windows.go @@ -972,6 +972,32 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { return unsafe.Pointer(&sa.raw), sl, nil } +type RawSockaddrBth struct { + AddressFamily [2]byte + BtAddr [8]byte + ServiceClassId [16]byte + Port [4]byte +} + +type SockaddrBth struct { + BtAddr uint64 + ServiceClassId GUID + Port uint32 + + raw RawSockaddrBth +} + +func (sa *SockaddrBth) sockaddr() (unsafe.Pointer, int32, error) { + family := AF_BTH + sa.raw = RawSockaddrBth{ + AddressFamily: *(*[2]byte)(unsafe.Pointer(&family)), + BtAddr: *(*[8]byte)(unsafe.Pointer(&sa.BtAddr)), + Port: *(*[4]byte)(unsafe.Pointer(&sa.Port)), + ServiceClassId: *(*[16]byte)(unsafe.Pointer(&sa.ServiceClassId)), + } + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { switch rsa.Addr.Family { case AF_UNIX: