FIXED:
* Link in README
* ReadConnResponse was not properly reading in the response status byte
  before checking the checksum, leading to receiving/parsing Response
  messages from a net.Conn *always* failing with an errs.ErrBadHdr.
  This has been rectified.
This commit is contained in:
brent saner 2025-09-30 14:15:00 -04:00
parent a86367b5b9
commit cefca8ad91
Signed by: bts
GPG Key ID: 8C004C2F93481F6B
4 changed files with 33 additions and 3 deletions

View File

@ -57,3 +57,6 @@ The following are a wishlist or things planned that may come in later versions.
** This of course won't work for serializing and keeping *order* of children (e.g. RG => Record); that'd still need to be ordered, but it will allow for parallel parsing *of* those children. Should benchmark, though; it may not be worth it.
* `context.Context` support for `Read*` and `Write*` funcs
** This is a relatively low priority as the passed `net.Conn` will likely return an error if its own context is canceled. This can be handled in the caller downstream.
* `.Append*()` methods to append any type to any parent type. e.g. `<Response>.AppendFVP(<FieldValuePair>)` would append an FVP to the most recent ResponseRecord to the most recent ResponseRecordGroup (or create if they don't exist), `<Response>.AppendRecord(...)` for appending a record to most recent record group etc.
* Better/more strict interfaces
* Maps should be `any`, not `interface{}` values

View File

@ -559,7 +559,7 @@ pre.rouge .gs {
<div class="details">
<span id="author" class="author">Brent Saner</span><br>
<span id="email" class="email"><a href="mailto:bts@square-r00t.net">bts@square-r00t.net</a></span><br>
<span id="revdate">Last rendered 2025-09-24 17:00:17 -0400</span>
<span id="revdate">Last rendered 2025-09-30 14:15:01 -0400</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
@ -659,6 +659,15 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
</ul>
</div>
</li>
<li>
<p><code>.Append*()</code> methods to append any type to any parent type. e.g. <code>&lt;Response&gt;.AppendFVP(&lt;FieldValuePair&gt;)</code> would append an FVP to the most recent ResponseRecord to the most recent ResponseRecordGroup (or create if they don&#8217;t exist), <code>&lt;Response&gt;.AppendRecord(&#8230;&#8203;)</code> for appending a record to most recent record group etc.</p>
</li>
<li>
<p>Better/more strict interfaces</p>
</li>
<li>
<p>Maps should be <code>any</code>, not <code>interface{}</code> values</p>
</li>
</ul>
</div>
</div>
@ -666,7 +675,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
</div>
<div id="footer">
<div id="footer-text">
Last updated 2025-09-24 17:00:00 -0400
Last updated 2025-09-25 17:54:36 -0400
</div>
</div>
</body>

View File

@ -51,3 +51,13 @@ versions.
- This is a relatively low priority as the passed `net.Conn` will
likely return an error if its own context is canceled. This can
be handled in the caller downstream.
- `.Append*()` methods to append any type to any parent type. e.g.
`<Response>.AppendFVP(<FieldValuePair>)` would append an FVP to the
most recent ResponseRecord to the most recent ResponseRecordGroup
(or create if they dont exist), `<Response>.AppendRecord(…​)` for
appending a record to most recent record group etc.
- Better/more strict interfaces
- Maps should be `any`, not `interface{}` values

View File

@ -92,7 +92,15 @@ func ReadConnResponse(conn net.Conn) (resp *Response, err error) {
var size int
var buf *bytes.Buffer = new(bytes.Buffer)
// First get the checksum.
// Buffer in the status byte...
b = make([]byte, 1)
if _, err = conn.Read(b); err != nil {
return
}
if _, err = buf.Write(b); err != nil {
return
}
// Then get the checksum. Per spec, *all* responses *must* have a checksum.
b = make([]byte, len(hdrCKSUM))
if _, err = conn.Read(b); err != nil {
return