<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Success!  My problem was I set query=1 in my CP_LOGIN.<div class=""><br class=""></div><div class="">It looks like the MacTrek client opens one socket, does a query, then closes that socket and opens a second socket to play.  I think I spotted a query=1 in the first socket and emulated that.  Doh!</div><div class=""><br class=""></div><div class="">Thank you for including this line in your debugging info:</div><div class=""><br class=""></div><div class="">> <span style="white-space: pre-wrap;" class="">CP_LOGIN query= 0 name= guest</span></div><div class=""><br class=""><div class=""><div class="">Now I have a bunch of other packet types to parse.  The universe is eager to be updated! ;-)  Hopefully I’ll get started on some drawing code tomorrow.  </div><div class=""><br class=""></div><div class="">Darrell</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Mar 4, 2019, at 4:20 PM, James Cameron <<a href="mailto:quozl@laptop.org" class="">quozl@laptop.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">No worries.  You may be interested in the Gytha client TCP and UDP</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">module, at 300 lines.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="https://github.com/quozl/gytha/blob/master/gytha/client.py" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://github.com/quozl/gytha/blob/master/gytha/client.py</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Our earlier use of the socket API for networking was because it was</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">the lowest common denominator on UNIX systems.  Socket API also</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">appears in the Gytha client for same reason.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">When you're building on top of a larger stack, interoperability</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">becomes a challenge.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On Mon, Mar 04, 2019 at 03:57:26PM -0800, Darrell Root wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">Thank you for that packet dump in netrek format.  I’ll have to upgrade my logs<br class="">to be that helpful.  ;-)<br class=""><br class="">I’m actively troubleshooting using your data.<br class=""><br class="">On a general netrek-dev note, programming with Swift for most things is cool.<br class="">I’m using Apple’s new Network framework to send my data (I believe they are<br class="">working with the IETF on that), so no more BSD socket API.  My TCP reader/<br class="">writer is around 100 lines (have not implemented UDP).  Packet analyzer is<br class="">larger of course.<br class=""><br class="">One Swift pain point is generating arbitrary packets.  In C you can just send a<br class="">struct out a network interface.  But Swift does not guarantee the layout of<br class="">native-Swift Structs, particularly Structs with arrays.  Swift also does not<br class="">have arrays of predefined sizes.<br class=""><br class="">For simple structs with no arrays/strings, it works to create the Struct<br class="">natively in Swift and spit it out the network interface (at least for Swift<br class="">4.2)..  But whenever I have a struct with an array or String, I have to define<br class="">the struct in C and import it into Swift.  This makes it “difficult” to layout<br class="">the packet in Swift, although I’m now past that challenge.<br class=""><br class="">I remember looking at the Netrek source code back in 1991.  I was impressed,<br class="">but the C was mostly beyond my abilities.  I looked at it again recently.  It's<br class="">still beyond my abilities.  Swift just works better with the way my brain is<br class="">wired.  I salute you all!<br class=""><br class="">Darrell<br class=""><br class="">   On Mar 4, 2019, at 2:52 PM, James Cameron <[1]<a href="mailto:quozl@laptop.org" class="">quozl@laptop.org</a>> wrote:<br class=""><br class="">   Here's a packet dump from Gytha just now.<br class=""><br class="">   [2]<a href="http://dev.laptop.org/~quozl/z/1h0wOC.txt" class="">http://dev.laptop.org/~quozl/z/1h0wOC.txt</a><br class=""><br class="">   Note how CP_FEATURE is sent early, and there's a burst of SP_FEATURE<br class="">   after CP_LOGIN and before SP_LOGIN.<br class=""><br class="">   Also, I was wrong in previous mail, SP_YOU is seen before CP_LOGIN,<br class="">   but with zero flags.<br class=""><br class="">   On Mon, Mar 04, 2019 at 02:26:14PM -0800, Darrell Root wrote:<br class=""><br class="">       I’ll take a look at those documents although I’m already all over<br class="">       packets.h<br class="">       from the distribution.<br class=""><br class="">       Here’s the full sequence in order.  SP_YOU comes early before I send my<br class="">       login<br class="">       authentication as guest.<br class=""><br class="">       Darrell<br class=""><br class="">       "Sending CP_PACKET 27"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_YOU"<br class="">       "Sending CP_LOGIN 8"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PL_LOGIN"<br class="">       "Received SP_HOSTILE"<br class="">       "Received SP_PLAYER_INFO"<br class="">       "Received SP_KILLS"<br class="">       "Received SP_PSTATUS"<br class="">       "Received SP_FLAGS"<br class="">       "Received SP_PLAYER"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_PLANET_LOC"<br class="">       "Received SP_LOGIN"<br class="">       "Sending CP_FEATURE 60"<br class="">       "Sending CP_OUTFIT 9"<br class=""><br class="">          On Mar 4, 2019, at 2:19 PM, James Cameron <[1][3]<a href="mailto:quozl@laptop.org" class="">quozl@laptop.org</a>><br class="">       wrote:<br class=""><br class="">          G'day Darrell,<br class=""><br class="">          According to protocol, you should expect SP_YOU in response to<br class="">          CP_LOGIN and CP_FEATURE.  You say you have it in the count of<br class="">       packets,<br class="">          but you don't have it in the end of the sequence.  Can you show the<br class="">          whole sequence?<br class=""><br class="">          Also, see these references;<br class=""><br class="">          1.  netrek protocol<br class=""><br class="">          [2][4]<a href="https://github.com/quozl/netrek-server/blob/master/include/" class="">https://github.com/quozl/netrek-server/blob/master/include/</a><br class="">       packets.h#L24<br class=""><br class="">          2.  sending CP_FEATURE of FEATURE_PACKETS immediately after<br class="">       CP_SOCKET,<br class=""><br class="">          [5]<a href="https://github.com/quozl/gytha/blob/master/gytha/__init__.py#" class="">https://github.com/quozl/gytha/blob/master/gytha/__init__.py#</a><br class="">       L5644<br class=""><br class="">          On Mon, Mar 04, 2019 at 01:07:35PM -0800, Darrell Root wrote:<br class=""><br class="">              netrek-dev,<br class=""><br class="">              I’m working on a Swift Netrek client for the Mac.  I’m having<br class="">       trouble<br class="">              getting<br class="">              through the login sequence.<br class=""><br class="">              I’m using netrek-server-vanilla netrek-server-vanilla-2.19.0<br class="">       with no<br class="">              active<br class="">              players as a test target.  In my packet traces below the server<br class="">       is at<br class="">              192.168.0.10.<br class=""><br class="">              I’m able to successfully play on my test server with the MacTrek<br class="">              client.<br class=""><br class="">              Here’s a count of the packets I’ve been able to send/receive and<br class="">              process (not<br class="">              in order):<br class=""><br class="">               31 "Received SP_FLAGS"<br class="">               32 "Received SP_HOSTILE"<br class="">               32 "Received SP_KILLS"<br class="">                1 "Received SP_LOGIN"<br class="">               40 "Received SP_PLANET_LOC"<br class="">               32 "Received SP_PLAYER"<br class="">               52 "Received SP_PLAYER_INFO"<br class="">               32 "Received SP_PL_LOGIN"<br class="">               32 "Received SP_PSTATUS"<br class="">                1 "Received SP_YOU"<br class="">                1 "Sending CP_FEATURE 60"<br class="">                1 "Sending CP_LOGIN 8"<br class="">                1 "Sending CP_OUTFIT 9"<br class="">                1 "Sending CP_SOCKET 27"<br class=""><br class="">              Here’s the end of the sequence:<br class=""><br class="">              ...<br class="">              "Received SP_LOGIN"<br class="">              "Sending CP_FEATURE 60"<br class="">              "Sending CP_OUTFIT 9"<br class=""><br class="">              No response to CP_OUTFIT.<br class="">              The server logs an inability to do a DNS reverse lookup on<br class="">              192.168.0.31, but I<br class="">              don’t think that is related (and it doesn’t stop the MacTrek<br class="">              Objective-C client<br class="">              from playing).<br class=""><br class="">              I presume that something is wrong with my CP_OUTFIT or CP_LOGIN,<br class="">       or<br class="">              that some<br class="">              other packet is required to login on the server.<br class=""><br class="">              Here’s my CP_FEATURE:<br class=""><br class="">              12:46:33.444140 IP 192.168.0.31.62943 > 192.168.0.10.netrek:<br class="">       Flags<br class="">              [P.], seq<br class="">              61:149, ack 5873, win 2048, options [nop,nop,TS val 516594040<br class="">       ecr<br class="">              1657847922],<br class="">              length 88<br class="">              0x0000:  685b 3589 0a04 1410 9fd7 77b1 0800 4500<br class="">              0x0010:  008c 0000 4000 4006 b8f2 c0a8 001f c0a8<br class="">              0x0020:  000a f5df 0a20 187e d37b 87ce 7c2f 8018<br class="">              0x0030:  0800 96e5 0000 0101 080a 1eca 9978 62d0<br class="">              0x0040:  c072 3c53 0000 0000 0001 4645 4154 5552<br class="">              0x0050:  455f 5041 434b 4554 5300 0000 0000 0000<br class="">              0x0060:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">              0x0070:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">              0x0080:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">              0x0090:  0000 0000 0000 0000 0000<br class=""><br class="">              Here’s a packet dump of a MacTrek CP_FEATURE packet.  Mine looks<br class="">              correct.<br class=""><br class="">              08:29:02.233675 IP 192.168.0.31.60481 > 192.168.0.10.netrek:<br class="">       Flags<br class="">              [P.], seq<br class="">              9:97, ack 1, win 2058, options [nop,nop,TS val 501230260 ecr<br class="">              1642419149],<br class="">              length 88<br class="">              0x0000:  685b 3589 0a04 1410 9fd7 77b1 0800 4500<br class="">              0x0010:  008c 0000 4000 4006 b8f2 c0a8 001f c0a8<br class="">              0x0020:  000a ec41 0a20 47c9 bead f710 babe 8018<br class="">              0x0030:  080a b569 0000 0101 080a 1de0 2ab4 61e5<br class="">              0x0040:  53cd 3c53 0000 0000 0001 4645 4154 5552<br class="">              0x0050:  455f 5041 434b 4554 5300 0000 0000 0000<br class="">              0x0060:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">              0x0070:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">              0x0080:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">              0x0090:  0000 0000 0000 0000 0000<br class=""><br class="">              For reference here’s reference information on that structure:<br class=""><br class="">              #define CP_FEATURE      60<br class=""><br class="">              struct feature_cpacket { /* CP_FEATURE py-struct "!bcbbi80s" #60<br class="">       */<br class="">                char                 type;<br class="">                char                 feature_type;   /* either 'C' or 'S' */<br class="">                char                 arg1,<br class="">                                     arg2;<br class="">                int                  value;<br class="">                char                 name[80];<br class="">              };<br class=""><br class="">              struct feature_var feature_vars[] = {<br class="">               {"FEATURE_PACKETS",   &F_client_feature_packets,      NULL},<br class=""><br class="">              Here’s my CP_OUTFIT when I try to login as fed (I also tried<br class="">       setting<br class="">              team to 0 at 0x0044 since that is what MacTrek appears to do).<br class=""><br class="">              12:46:34.381240 IP 192.168.0.31.62943 > 192.168.0.10.netrek:<br class="">       Flags<br class="">              [P.], seq 149:153, ack 5873, win 2048, options [nop,nop,TS val<br class="">              516594969 ecr 1657848989], length 4<br class="">                     0x0000:  685b 3589 0a04 1410 9fd7 77b1 0800 4500<br class="">                     0x0010:  0038 0000 4000 4006 b946 c0a8 001f c0a8<br class="">                     0x0020:  000a f5df 0a20 187e d3d3 87ce 7c2f 8018<br class="">                     0x0030:  0800 0e95 0000 0101 080a 1eca 9d19 62d0<br class="">                     0x0040:  c49d 0901 0200<br class=""><br class="">              Here’s info on that struct:<br class=""><br class="">              #define CP_OUTFIT       9               /* outfit to new ship */<br class=""><br class="">              struct outfit_cpacket { /* CP_OUTFIT py-struct "!bbbx" #9 */<br class="">                 char type;<br class="">                 char team;<br class="">                 char ship;<br class="">                 char pad1;<br class="">              };<br class=""><br class="">              Could the problem be with my earlier packets?  They got<br class="">       responses.  But<br class="">              here they are for completeness:<br class=""><br class="">              CP_SOCKET:  (note that my client does not support UDP)<br class=""><br class="">              11:46:12.530856 IP 192.168.0.31.62508 > 192.168.0.10.netrek:<br class="">       Flags<br class="">              [P.], seq 1:9, ack 1, win 2058, options [nop,nop,TS val<br class="">       512991468 ecr<br class="">              1654229963], length 8<br class="">                     0x0000:  685b 3589 0a04 1410 9fd7 77b1 0800 4500<br class="">                     0x0010:  003c 0000 4000 4006 b942 c0a8 001f c0a8<br class="">                     0x0020:  000a f42c 0a20 c97b 28a2 549c ed30 8018<br class="">                     0x0030:  080a 67e8 0000 0101 080a 1e93 a0ec 6299<br class="">                     0x0040:  8bcb 1b04 0a00 0000 8020<br class=""><br class="">              #define CP_SOCKET       27              /* new socket for<br class="">       reconnection<br class="">              */<br class=""><br class="">              struct socket_cpacket { /* CP_SOCKET py-struct "!bbbxI" #27 */<br class="">                 char type;<br class="">                 char version;<br class="">                 char udp_version;   /* was pad2 */<br class="">                 char pad3;<br class="">                 u_int socket;<br class="">              };<br class=""><br class="">              CP_LOGIN: (hardcoded to guest as the username, password and<br class="">       login<br class="">              empty)<br class=""><br class="">              11:46:13.591234 IP 192.168.0.31.62508 > 192.168.0.10.netrek:<br class="">       Flags<br class="">              [P.], seq 9:61, ack 5769, win 2048, options [nop,nop,TS val<br class="">       512992524<br class="">              ecr 1654231039], length 52<br class="">                     0x0000:  685b 3589 0a04 1410 9fd7 77b1 0800 4500<br class="">                     0x0010:  0068 0000 4000 4006 b916 c0a8 001f c0a8<br class="">                     0x0020:  000a f42c 0a20 c97b 28aa 549d 03b8 8018<br class="">                     0x0030:  0800 a51c 0000 0101 080a 1e93 a50c 6299<br class="">                     0x0040:  8fff 0801 0000 6775 6573 7400 0000 0000<br class="">                     0x0050:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">                     0x0060:  0000 0000 0000 0000 0000 0000 0000 0000<br class="">                     0x0070:  0000 0000 0000<br class=""><br class="">              struct login_cpacket { /* CP_LOGIN py-struct '!bbxx16s16s16s' #8<br class="">       */<br class="">                 char type;<br class="">                 char query;<br class="">                 char pad2;<br class="">                 char pad3;<br class="">                 char name[NAME_LEN];<br class="">                 char password[NAME_LEN];<br class="">                 char login[NAME_LEN];<br class="">              };<br class=""><br class="">              Any ideas what I need to correct or what else I need to supply<br class="">       to<br class="">              successfully login as guest?<br class=""><br class="">              Darrell<br class=""><br class="">              _______________________________________________<br class="">              netrek-dev mailing list<br class="">              [6]<a href="mailto:netrek-dev@us.netrek.org" class="">netrek-dev@us.netrek.org</a><br class="">              [7]<a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a><br class=""><br class="">          --<br class="">          James Cameron<br class="">          [8]<a href="http://quozl.netrek.org/" class="">http://quozl.netrek.org/</a><br class=""><br class="">       References:<br class=""><br class="">       [1] [9]<a href="mailto:quozl@laptop.org" class="">mailto:quozl@laptop.org</a><br class="">       [2] [10]<a href="https://github.com/quozl/netrek-server/blob/master/include/" class="">https://github.com/quozl/netrek-server/blob/master/include/</a><br class="">       packets.h#L24<br class=""><br class="">       _______________________________________________<br class="">       netrek-dev mailing list<br class="">       [11]<a href="mailto:netrek-dev@us.netrek.org" class="">netrek-dev@us.netrek.org</a><br class="">       [12]<a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a><br class=""><br class="">   --<span class="Apple-converted-space"> </span><br class="">   James Cameron<br class="">   [13]<a href="http://quozl.netrek.org/" class="">http://quozl.netrek.org/</a><br class="">   _______________________________________________<br class="">   netrek-dev mailing list<br class="">   [14]<a href="mailto:netrek-dev@us.netrek.org" class="">netrek-dev@us.netrek.org</a><br class="">   [15]<a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a><br class=""><br class="">References:<br class=""><br class="">[1]<span class="Apple-converted-space"> </span><a href="mailto:quozl@laptop.org" class="">mailto:quozl@laptop.org</a><br class="">[2]<span class="Apple-converted-space"> </span><a href="http://dev.laptop.org/~quozl/z/1h0wOC.txt" class="">http://dev.laptop.org/~quozl/z/1h0wOC.txt</a><br class="">[3]<span class="Apple-converted-space"> </span><a href="mailto:quozl@laptop.org" class="">mailto:quozl@laptop.org</a><br class="">[4]<span class="Apple-converted-space"> </span><a href="https://github.com/quozl/netrek-server/blob/master/include/packets.h#L24" class="">https://github.com/quozl/netrek-server/blob/master/include/packets.h#L24</a><br class="">[5]<span class="Apple-converted-space"> </span><a href="https://github.com/quozl/gytha/blob/master/gytha/__init__.py#L5644" class="">https://github.com/quozl/gytha/blob/master/gytha/__init__.py#L5644</a><br class="">[6]<span class="Apple-converted-space"> </span><a href="mailto:netrek-dev@us.netrek.org" class="">mailto:netrek-dev@us.netrek.org</a><br class="">[7]<span class="Apple-converted-space"> </span><a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a><br class="">[8]<span class="Apple-converted-space"> </span><a href="http://quozl.netrek.org/" class="">http://quozl.netrek.org/</a><br class="">[9]<span class="Apple-converted-space"> </span><a href="mailto:quozl@laptop.org" class="">mailto:quozl@laptop.org</a><br class="">[10]<span class="Apple-converted-space"> </span><a href="https://github.com/quozl/netrek-server/blob/master/include/packets.h#L24" class="">https://github.com/quozl/netrek-server/blob/master/include/packets.h#L24</a><br class="">[11]<span class="Apple-converted-space"> </span><a href="mailto:netrek-dev@us.netrek.org" class="">mailto:netrek-dev@us.netrek.org</a><br class="">[12]<span class="Apple-converted-space"> </span><a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a><br class="">[13]<span class="Apple-converted-space"> </span><a href="http://quozl.netrek.org/" class="">http://quozl.netrek.org/</a><br class="">[14]<span class="Apple-converted-space"> </span><a href="mailto:netrek-dev@us.netrek.org" class="">mailto:netrek-dev@us.netrek.org</a><br class="">[15]<span class="Apple-converted-space"> </span><a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a><br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">_______________________________________________<br class="">netrek-dev mailing list<br class=""><a href="mailto:netrek-dev@us.netrek.org" class="">netrek-dev@us.netrek.org</a><br class=""><a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a><br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">--<span class="Apple-converted-space"> </span></span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">James Cameron</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="http://quozl.netrek.org/" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">http://quozl.netrek.org/</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">netrek-dev mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="mailto:netrek-dev@us.netrek.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">netrek-dev@us.netrek.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="http://mailman.us.netrek.org/mailman/listinfo/netrek-dev" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">http://mailman.us.netrek.org/mailman/listinfo/netrek-dev</a></div></blockquote></div><br class=""></div></div></div></body></html>