1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package goSam
- import (
- "fmt"
- "strings"
- )
- // The Possible Results send by SAM
- const (
- ResultOk = "OK" //Operation completed successfully
- ResultCantReachPeer = "CANT_REACH_PEER" //The peer exists, but cannot be reached
- ResultDuplicatedID = "DUPLICATED_ID" //If the nickname is already associated with a session :
- ResultDuplicatedDest = "DUPLICATED_DEST" //The specified Destination is already in use
- ResultI2PError = "I2P_ERROR" //A generic I2P error (e.g. I2CP disconnection, etc.)
- ResultInvalidKey = "INVALID_KEY" //The specified key is not valid (bad format, etc.)
- ResultKeyNotFound = "KEY_NOT_FOUND" //The naming system can't resolve the given name
- ResultPeerNotFound = "PEER_NOT_FOUND" //The peer cannot be found on the network
- ResultTimeout = "TIMEOUT" // Timeout while waiting for an event (e.g. peer answer)
- )
- // A ReplyError is a custom error type, containing the Result and full Reply
- type ReplyError struct {
- Result string
- Reply *Reply
- }
- func (r ReplyError) Error() string {
- return fmt.Sprintf("ReplyError: Result:%s - Reply:%+v", r.Result, r.Reply)
- }
- // Reply is the parsed result of a SAM command, containing a map of all the key-value pairs
- type Reply struct {
- Topic string
- Type string
- Pairs map[string]string
- }
- func parseReply(line string) (*Reply, error) {
- line = strings.TrimSpace(line)
- parts := strings.Split(line, " ")
- if len(parts) < 3 {
- return nil, fmt.Errorf("Malformed Reply.\n%s\n", line)
- }
- r := &Reply{
- Topic: parts[0],
- Type: parts[1],
- Pairs: make(map[string]string, len(parts)-2),
- }
- for _, v := range parts[2:] {
- kvPair := strings.SplitN(v, "=", 2)
- if kvPair != nil {
- if len(kvPair) != 2 {
- return nil, fmt.Errorf("Malformed key-value-pair.\n%s\n", kvPair)
- }
- }
- r.Pairs[kvPair[0]] = kvPair[1]
- }
- return r, nil
- }
|