Code archives/Networking/getSubnetMask() & getBroadcastAddress()

This code has been declared by its author to be Public Domain code.

Download source code

getSubnetMask() & getBroadcastAddress() by Jeremy Alessi
(Posted 20 years ago)
This combo adds getSubnetMask() to Blitz3D via a .dll and userlib that I wrote in Visual C++ and additionally adds a getBroadcastAddress() function written in Blitz which can be used to ping a LAN of any network class type.

I originally created this to "fix" BlitzPlay which is limited to a class-C network assumption and additionally doesn't even use the broadcast address for that assumption but instead pings 255 ip addresses. With this code multiplayer LAN searches can be conducted instantly on any network class.

Here's a link to the .dll/userlib
http://www.alessigames.com/codeArchives/ipHelper.zip

There's a onesComplement() function included as well which is used in the getBroadcastAddress() function.
Function getBroadcastAddress$( ip$ )

	subnetMask$ = getSubnetMask()

	bank = CreateBank( 4 )
	byte$ = ""
	j = 1
	For i = 0 To 3
		byte = ""
		While Mid( subnetMask$, j, 1 ) <> "." And j < Len( subnetMask$ )
			byte$ = byte$ + Mid( subnetMask$, j, 1 )
			j = j + 1
		Wend
		j = j + 1
		PokeByte( bank, i, byte$ )
	Next
	
	onesComplement( bank, 0, 4 )
		
	bank2 = CreateBank( 4 )
	byte$ = ""
	j = 1
	For i = 0 To 3
		byte$ = ""
		While Mid( ip$, j, 1 ) <> "." And j < Len( ip$ )
			byte$ = byte$ + Mid( ip$, j, 1 )
			j = j + 1
		Wend
		j = j + 1
		PokeByte( bank2, i, byte$ )
	Next
	
	bank3 = CreateBank( 4 )
	For i = 0 To 3
		PokeByte( bank3, i, ( PeekByte( bank, i ) Or PeekByte( bank2, i ) ) )
	Next
	
	broadcastAddress$ = ( PeekByte( bank3, 0 ) + "." + PeekByte( bank3, 1 ) + "." + PeekByte( bank3, 2) + "." + PeekByte( bank3, 3 ) )

	FreeBank( bank )
	FreeBank( bank2 )
	FreeBank( bank3 )
	
	Return broadcastAddress$


End Function