Files
ownwire-go-sdk/protocol.go

48 lines
1.1 KiB
Go
Raw Permalink Normal View History

package ownwire_sdk
import (
"fmt"
"strconv"
"strings"
)
type SessionInit struct {
SessionId string
ServerPubKeyB64 string
SaltB64 string
SeqOut uint64
SeqInMax uint64
}
// ParseSessionInit parses:
// "/session:<id>:<server_pubkey_b64>:<salt_b64>:<seq_out>:<seq_in_max>"
func ParseSessionInit(line string) (SessionInit, error) {
if !strings.HasPrefix(line, "/session:") {
return SessionInit{}, fmt.Errorf("invalid session line prefix: %q", line)
}
parts := strings.Split(line, ":")
if len(parts) < 6 || parts[0] != "/session" {
return SessionInit{}, fmt.Errorf("invalid session line: %q", line)
}
seq_out, err := strconv.ParseUint(parts[4], 10, 64)
if err != nil {
return SessionInit{}, fmt.Errorf("invalid seq_out: %w", err)
}
seq_in_max, err := strconv.ParseUint(parts[5], 10, 64)
if err != nil {
return SessionInit{}, fmt.Errorf("invalid seq_in_max: %w", err)
}
out := SessionInit{
SessionId: parts[1],
ServerPubKeyB64: parts[2],
SaltB64: parts[3],
SeqOut: seq_out,
SeqInMax: seq_in_max,
}
return out, nil
}