X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=doc%2Fprotocol.txt;h=82dca59bfc617da485c66eab75867a4ca856a443;hb=f022af66da282285a420f70168cc6d5f30eb35e5;hp=93037e70b637ec2075d76992bd42e903e94f6349;hpb=cde8c70f8c841cf56fe4173d5249a64ceba63b42;p=oweals%2Fminetest.git diff --git a/doc/protocol.txt b/doc/protocol.txt index 93037e70b..82dca59bf 100644 --- a/doc/protocol.txt +++ b/doc/protocol.txt @@ -2,6 +2,8 @@ Minetest-c55 protocol (incomplete, early draft): Updated 2011-06-18 A custom protocol over UDP. +Integers are big endian. +Refer to connection.{h,cpp} for further reference. Initialization: - A dummy reliable packet with peer_id=PEER_ID_INEXISTENT=0 is sent to the server: @@ -15,7 +17,7 @@ Initialization: u8 channel = 0 # Reliable packet header u8 type = TYPE_RELIABLE = 3 - u16 seqnum = SEQNUM_INITIAL = 6550 + u16 seqnum = SEQNUM_INITIAL = 65500 # Original packet header u8 type = TYPE_ORIGINAL = 1 # And no actual payload. @@ -27,7 +29,7 @@ Initialization: u8 channel = 0 # Reliable packet header u8 type = TYPE_RELIABLE = 3 - u16 seqnum = SEQNUM_INITIAL = 6550 + u16 seqnum = SEQNUM_INITIAL = 65500 # Control packet header u8 type = TYPE_CONTROL = 0 u8 controltype = CONTROLTYPE_SET_PEER_ID = 1 @@ -40,5 +42,31 @@ Initialization: u8 channel = 0 # Control packet header u8 type = TYPE_CONTROL = 0 - u8 controltype = CONTROLTYPE_DISCO = 2 + u8 controltype = CONTROLTYPE_DISCO = 3 + +- Here's a quick untested connect-disconnect done in PHP: +# host: ip of server (use gethostbyname(hostname) to get from a dns name) +# port: port of server +function check_if_minetestserver_up($host, $port) +{ + $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + $timeout = array("sec" => 1, "usec" => 0); + socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout); + $buf = "\x4f\x45\x74\x03\x00\x00\x00\x03\xff\xdc\x01"; + socket_sendto($socket, $buf, strlen($buf), 0, $host, $port); + $buf = socket_read($socket, 1000); + if($buf != "") + { + # We got a reply! read the peer id from it. + $peer_id = substr($buf, 9, 2); + + # Disconnect + $buf = "\x4f\x45\x74\x03".$peer_id."\x00\x00\x03"; + socket_sendto($socket, $buf, strlen($buf), 0, $host, $port); + socket_close($socket); + + return true; + } + return false; +}