]> git.r.bdr.sh - rbdr/mobius/blame - hotline/field.go
Add support for server banner
[rbdr/mobius] / hotline / field.go
CommitLineData
6988a057
JH
1package hotline
2
3import (
4 "encoding/binary"
5 "github.com/jhalter/mobius/concat"
6)
7
8const fieldError = 100
9const fieldData = 101
10const fieldUserName = 102
11const fieldUserID = 103
12const fieldUserIconID = 104
13const fieldUserLogin = 105
14const fieldUserPassword = 106
15const fieldRefNum = 107
16const fieldTransferSize = 108
17const fieldChatOptions = 109
18const fieldUserAccess = 110
aebc4d36
JH
19
20// const fieldUserAlias = 111 TODO: implement
6988a057
JH
21const fieldUserFlags = 112
22const fieldOptions = 113
23const fieldChatID = 114
24const fieldChatSubject = 115
25const fieldWaitingCount = 116
9067f234 26const fieldBannerType = 152
6988a057
JH
27const fieldVersion = 160
28const fieldCommunityBannerID = 161
29const fieldServerName = 162
30const fieldFileNameWithInfo = 200
31const fieldFileName = 201
32const fieldFilePath = 202
16a4ad70
JH
33const fieldFileResumeData = 203
34const fieldFileTransferOptions = 204
6988a057
JH
35const fieldFileTypeString = 205
36const fieldFileCreatorString = 206
37const fieldFileSize = 207
38const fieldFileCreateDate = 208
39const fieldFileModifyDate = 209
40const fieldFileComment = 210
41const fieldFileNewName = 211
42const fieldFileNewPath = 212
43const fieldFileType = 213
5ae50876 44const fieldQuotingMsg = 214
6988a057
JH
45const fieldAutomaticResponse = 215
46const fieldFolderItemCount = 220
47const fieldUsernameWithInfo = 300
48const fieldNewsArtListData = 321
49const fieldNewsCatName = 322
50const fieldNewsCatListData15 = 323
51const fieldNewsPath = 325
52const fieldNewsArtID = 326
53const fieldNewsArtDataFlav = 327
54const fieldNewsArtTitle = 328
55const fieldNewsArtPoster = 329
56const fieldNewsArtDate = 330
57const fieldNewsArtPrevArt = 331
58const fieldNewsArtNextArt = 332
59const fieldNewsArtData = 333
60const fieldNewsArtFlags = 334
61const fieldNewsArtParentArt = 335
62const fieldNewsArt1stChildArt = 336
63const fieldNewsArtRecurseDel = 337
64
65type Field struct {
66 ID []byte // Type of field
67 FieldSize []byte // Size of the data part
68 Data []byte // Actual field content
69}
70
71type requiredField struct {
72 ID int
73 minLen int
74 maxLen int
75}
76
77func NewField(id uint16, data []byte) Field {
78 idBytes := make([]byte, 2)
79 binary.BigEndian.PutUint16(idBytes, id)
80
81 bs := make([]byte, 2)
82 binary.BigEndian.PutUint16(bs, uint16(len(data)))
83
84 return Field{
85 ID: idBytes,
86 FieldSize: bs,
87 Data: data,
88 }
89}
90
91func (f Field) Payload() []byte {
92 return concat.Slices(f.ID, f.FieldSize, f.Data)
93}
d2810ae9
JH
94
95func getField(id int, fields *[]Field) *Field {
96 for _, field := range *fields {
97 if id == int(binary.BigEndian.Uint16(field.ID)) {
98 return &field
99 }
100 }
101 return nil
102}