]> Cypherpunks.ru repositories - nncp.git/blob - src/area.go
Note about buildability with 1.22
[nncp.git] / src / area.go
1 // NNCP -- Node to Node copy, utilities for store-and-forward data exchange
2 // Copyright (C) 2016-2024 Sergey Matveev <stargrave@stargrave.org>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, version 3 of the License.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 package nncp
17
18 import (
19         "errors"
20 )
21
22 const AreaDir = "area"
23
24 var (
25         PktAreaOverhead int64
26 )
27
28 type AreaId [32]byte
29
30 func (id AreaId) String() string {
31         return Base32Codec.EncodeToString(id[:])
32 }
33
34 type Area struct {
35         Name string
36         Id   *AreaId
37         Pub  *[32]byte
38         Prv  *[32]byte
39
40         Subs []*NodeId
41
42         Exec     map[string][]string
43         Incoming *string
44
45         AllowUnknown bool
46 }
47
48 func AreaIdFromString(raw string) (*AreaId, error) {
49         idRaw, err := Base32Codec.DecodeString(raw)
50         if err != nil {
51                 return nil, err
52         }
53         if len(idRaw) != 32 {
54                 return nil, errors.New("Invalid area id size")
55         }
56         areaId := new(AreaId)
57         copy(areaId[:], idRaw)
58         return areaId, nil
59 }
60
61 func (ctx *Ctx) AreaName(id *AreaId) string {
62         area := ctx.AreaId2Area[*id]
63         if area == nil {
64                 return id.String()
65         }
66         return area.Name
67 }