48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
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
|
|
}
|