- Uses UDP running on port 27017 (although previous versions used 27013 and 27014, so maybe they just bump the port# when they change protocols).
- Login encryption might use ICE. According to the Valve Developer pages, ICE is used to encrypt script files used for games, so it does not seem unreasonable that they would use it for their protocol, however, it doesn't necessarily imply that they do use it for encryption of network data.
- Uses RSA (or very similar encryption) scheme to transmit messages. They use the CryptoPP library for this.
- Each message contains a 36-byte header beginning with the string "VS01" followed by 32-bytes that determine what type of message it is.
bytes 0-3: "VS01"
bytes 4-7: type of message
bytes 8-11: destination ID
bytes 12-15: source ID
bytes 16-19: id/sequence#1
bytes 20-23: iid/sequence#2 (looks like which id this packet is responding to)
bytes 24-27: 0, 1, or 2 are all i've seen so far. No idea.
bytes 28-31: id/sequence#1 or id/sequence#1+1 (if contains remainder of data from previous split packet)
bytes 32-35: length (of whole packet, even if split)
- There is a ticket requested support for the Steam protocol within libpurple