Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bnetex kompiliert nicht auf osx sierra #1

Open
mhomeister opened this issue Jul 9, 2017 · 6 comments
Open

Bnetex kompiliert nicht auf osx sierra #1

mhomeister opened this issue Jul 9, 2017 · 6 comments

Comments

@mhomeister
Copy link

Hey Oli, wir kennen uns von gaaaaanz früher ausm bforum :-)

Habe gestern wieder was mit bmax machen wollen, mitlerweile auf osx und bekomme bnetex leider auf sierra nicht konpiliert. Hast du hierfür evtl schon einen fix parat? Dankeeee

@mhomeister
Copy link
Author

Kompiliert natürlich. Fehler poste ich nachher :-)

@mhomeister
Copy link
Author

Michas-MacbookPro:bin michaelhomeister$ ./bmk makemods vertex.bnetex
Compiling:bsd.c
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:45:18: error: use of
undeclared identifier 'SIOCGIFHWADDR'
ioctl(Socket, SIOCGIFHWADDR, pInterface);
^
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:46:29: error: no
member named 'ifr_hwaddr' in 'struct ifreq'
memcpy(MAC, &pInterface->ifr_hwaddr.sa_data, 6);
~~~~~~~~~~ ^
/usr/include/secure/_string.h:65:33: note: expanded from macro 'memcpy'
__builtin___memcpy_chk (dest, src, len, __darwin_obsz0 (dest))
^~~
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:48:57: error: no
member named 'ifr_netmask' in 'struct ifreq'
...*Netmask = ntohl(((struct sockaddr_in *)&pInterface->ifr_netmask)->sin_a...
~~~~~~~~~~ ^
/usr/include/sys/_endian.h:135:39: note: expanded from macro 'ntohl'
#define ntohl(x) __DARWIN_OSSwapInt32(x)
^
/usr/include/libkern/_OSByteOrder.h:75:27: note: expanded from macro
'__DARWIN_OSSwapInt32'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x))
^
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:48:57: error: no
member named 'ifr_netmask' in 'struct ifreq'
...*Netmask = ntohl(((struct sockaddr_in *)&pInterface->ifr_netmask)->sin_a...
~~~~~~~~~~ ^
/usr/include/sys/_endian.h:135:39: note: expanded from macro 'ntohl'
#define ntohl(x) __DARWIN_OSSwapInt32(x)
^
/usr/include/libkern/_OSByteOrder.h:75:58: note: expanded from macro
'__DARWIN_OSSwapInt32'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x))
^
/usr/include/libkern/_OSByteOrder.h:48:34: note: expanded from macro
'__DARWIN_OSSwapConstInt32'
((__uint32_t)((((__uint32_t)(x) & 0xff000000) >> 24) |
^
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:48:57: error: no
member named 'ifr_netmask' in 'struct ifreq'
...*Netmask = ntohl(((struct sockaddr_in *)&pInterface->ifr_netmask)->sin_a...
~~~~~~~~~~ ^
/usr/include/sys/_endian.h:135:39: note: expanded from macro 'ntohl'
#define ntohl(x) __DARWIN_OSSwapInt32(x)
^
/usr/include/libkern/_OSByteOrder.h:75:58: note: expanded from macro
'__DARWIN_OSSwapInt32'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x))
^
/usr/include/libkern/_OSByteOrder.h:49:32: note: expanded from macro
'__DARWIN_OSSwapConstInt32'
(((__uint32_t)(x) & 0x00ff0000) >> 8) |
^
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:48:57: error: no
member named 'ifr_netmask' in 'struct ifreq'
...*Netmask = ntohl(((struct sockaddr_in *)&pInterface->ifr_netmask)->sin_a...
~~~~~~~~~~ ^
/usr/include/sys/_endian.h:135:39: note: expanded from macro 'ntohl'
#define ntohl(x) __DARWIN_OSSwapInt32(x)
^
/usr/include/libkern/_OSByteOrder.h:75:58: note: expanded from macro
'__DARWIN_OSSwapInt32'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x))
^
/usr/include/libkern/_OSByteOrder.h:50:32: note: expanded from macro
'__DARWIN_OSSwapConstInt32'
(((__uint32_t)(x) & 0x0000ff00) << 8) |
^
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:48:57: error: no
member named 'ifr_netmask' in 'struct ifreq'
...*Netmask = ntohl(((struct sockaddr_in *)&pInterface->ifr_netmask)->sin_a...
~~~~~~~~~~ ^
/usr/include/sys/_endian.h:135:39: note: expanded from macro 'ntohl'
#define ntohl(x) __DARWIN_OSSwapInt32(x)
^
/usr/include/libkern/_OSByteOrder.h:75:58: note: expanded from macro
'__DARWIN_OSSwapInt32'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x))
^
/usr/include/libkern/_OSByteOrder.h:51:32: note: expanded from macro
'__DARWIN_OSSwapConstInt32'
(((__uint32_t)(x) & 0x000000ff) << 24)))
^
/Applications/BlitzMax151/mod/vertex.mod/bnetex.mod/bsd.c:48:57: error: no
member named 'ifr_netmask' in 'struct ifreq'
...*Netmask = ntohl(((struct sockaddr_in *)&pInterface->ifr_netmask)->sin_a...
~~~~~~~~~~ ^
/usr/include/sys/_endian.h:135:39: note: expanded from macro 'ntohl'
#define ntohl(x) __DARWIN_OSSwapInt32(x)
^
/usr/include/libkern/_OSByteOrder.h:75:76: note: expanded from macro
'__DARWIN_OSSwapInt32'
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x))
^
8 errors generated.

@oliverskawronek
Copy link
Owner

Moin, habe hier leider kein Mac zum testen.
https://stackoverflow.com/questions/34282811/how-to-get-ip-addresses-of-all-interfaces-on-os-x-using-c
Was gibt ifconfig -a bei dir aus? Das wäre zumindest ein Workaround, die Ausgabe zu Parsen um an die MAC-Adresse etc. zu kommen.

@mhomeister
Copy link
Author

mhomeister commented Jul 10, 2017

Hey, danke dir! Habe mitlerweile auch versucht mit den Sockets und Socketstreams klar zu kommen. Finde es mega umständlich und habs nun versucht auf BnetEx Funktionen umzumünzen. Leider noch nicht perfekt.

Michas-MacbookPro:~ michaelhomeister$ ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 6c:40:08:ab:f7:38 
	inet6 fe80::886:e112:5179:dd0f%en0 prefixlen 64 secured scopeid 0x4 
	inet 192.168.2.103 netmask 0xffffff00 broadcast 192.168.2.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
	options=60<TSO4,TSO6>
	ether 72:00:06:9e:41:d0 
	media: autoselect <full-duplex>
	status: inactive
en2: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
	options=60<TSO4,TSO6>
	ether 72:00:06:9e:41:d1 
	media: autoselect <full-duplex>
	status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=63<RXCSUM,TXCSUM,TSO4,TSO6>
	ether 72:00:06:9e:41:d0 
	Configuration:
		id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
		maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
		root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
		ipfilter disabled flags 0x2
	member: en1 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 5 priority 0 path cost 0
	member: en2 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 6 priority 0 path cost 0
	nd6 options=201<PERFORMNUD,DAD>
	media: <unknown type>
	status: inactive
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
	ether 0e:40:08:ab:f7:38 
	media: autoselect
	status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
	ether ea:29:d5:b9:ab:3d 
	inet6 fe80::e829:d5ff:feb9:ab3d%awdl0 prefixlen 64 scopeid 0x9 
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
	inet6 fe80::de7d:6f9a:5442:b4b6%utun0 prefixlen 64 scopeid 0xa 
	nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
	inet6 fe80::f44d:b121:6776:464b%utun1 prefixlen 64 scopeid 0xb 
	nd6 options=201<PERFORMNUD,DAD>
Michas-MacbookPro:~ michaelhomeister$ 

Wir können auch gern direkt schreiben, 015129109129 Whatsapp

Dankeee

@mhomeister
Copy link
Author

mhomeister commented Jul 10, 2017

Hey,

ich habe die Sockets nun mit BNetEx Funktionen zum laufen bekommen, für TCP, daran hab ich mich nun gewöhnt und macht mir die Programmierung doch viel leichter :) Dankee

Type TTCPStream
	Field localIp:Int
	Field localPort:Short
	
	Field remoteIp:Int
	Field remotePort:Short
	
	Field socket:TSocket
	Field socketstream:TSocketStream
	
	Field rdStream:TRamStream	'readStream
	
	Field sendBank:TBank
	Field sendBankStream:TBankStream
	
	Method New()
	End Method
	
	Method reinitBank()
		sendBank = CreateBank(0)
		sendBankStream = CreateBankStream(sendBank)
	End Method
	
	Method Init()
		socket = CreateTCPSocket() 
	End Method
	
	Method setLocalIp(ip:Int)
		localIp = ip
	End Method
	
	Method setLocalPort(p:Short)
		localPort = p
	End Method
	
	Method setRemotePort(p:Short)
		remotePort = p
	End Method
	
	Method setRemoteIp(ip:Int)
		remoteIp = ip
	End Method
	
	Method Listen()
		If Not BindSocket(socket, localPort) Throw("Couldn't bind socket to port")
		SocketListen socket
	End Method 
	
	Method Accept:TTCPStream()
		Local client:TSocket=SocketAccept( socket ) 
		If client
			Local stream:TTCPStream = New TTCPStream
			stream.socket = client 
			stream.setRemoteIp( SocketRemoteIP(stream.socket) )
			stream.setRemotePort( SocketRemotePort(stream.socket) )
			stream.socketstream = CreateSocketStream(stream.socket)
			stream.reinitBank()
			Return stream
		Else
			Return Null
		End If
	End Method
	
	Method Connect()
		If ConnectSocket(socket, remoteIp, remotePort) Then
			setLocalPort( SocketLocalPort(socket) )
			setLocalIp( SocketLocalIP(socket) )
			socketstream = CreateSocketStream(socket)
			reinitBank()
			Return 1
		Else
			Return 0
		End If
	End Method
	
	Method getState()
		Return SocketConnected(socket)
	End Method 
	
	Method WriteLine(s:String)
		sendBankStream.WriteLine(s)
	End Method
	
	Method WriteShort(s:Short)
		sendBankStream.WriteShort(s)
	End Method
	
	Method WriteInt(i:Int)
		sendBankStream.WriteInt(i)
	End Method
	
	Method WriteByte(b:Byte)
		sendBankStream.WriteByte(b)
	End Method
	
	Method SendMsg()
		If Not getState() Return 0
		
		Local size:Int = BankSize(sendBank)-1
		
		sendBankStream.close()
		
		sendBankStream = CreateBankStream(sendBank)
		
		For Local i:Int = 0 To BankSize(sendBank)-1
			socketstream.WriteByte( sendBankStream.ReadByte() )
		Next
		
		reinitBank()
		
		Return size	
	End Method
	
	Method RecvMsg()
		Local avail:Int = socket.readavail()
		If avail
			Print "avail " + avail
			Local recvBuffer:Byte Ptr = MemAlloc(avail)
			
			Local s:TRamStream = CreateRamStream(recvBuffer, avail, True, True)	
			Local size:Int = socket.recv( recvBuffer, avail )
			s.close()
			
			rdStream = CreateRamStream(recvBuffer, avail, True, True)	
			Return avail
		Else
			Return 0
		End If
	End Method
	
	Method Eof()
		Return rdStream.Eof()
	End Method
	
	Method ReadLine:String()
		Return rdStream.ReadLine()
	End Method
	
	Method ReadInt:Int()
		Return rdStream.ReadInt()
	End Method
	
	Method ReadShort:Short()
		Return rdStream.ReadShort()
	End Method
	
	Method ReadByte:Byte()
		Return rdStream.ReadByte()
	End Method
End Type

@oliverskawronek
Copy link
Owner

Danke für die Ausgabe von ifconfig! Für jeden Netzadapter steht IP-Adresse, Netzmaske und Broadcast drin, leider aber nicht die MAC-Adresse.

Wenn du die Liste der Netzadapter nicht benötigst, müsste es auch gehen, dass du

?MacOS
	Import "bsd.c"
?

Function GetNetworkAdapter im Extern "C"-Block und TNetwork.GetAdapterInfo auskommentierst.

Über WhatsApp könnten wir zwar auch reden, aber wer das gleiche Problem hat, freut sich vielleicht das zu lesen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants