]> git.r.bdr.sh - rbdr/mobius/blame - hotline/field.go
Improve Frogblast client compatibility
[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 21const fieldUserFlags = 112
ea5d8c51 22const fieldOptions = 113
6988a057
JH
23const fieldChatID = 114
24const fieldChatSubject = 115
25const fieldWaitingCount = 116
9067f234 26const fieldBannerType = 152
688c86d2 27const fieldNoServerAgreement = 152
6988a057
JH
28const fieldVersion = 160
29const fieldCommunityBannerID = 161
30const fieldServerName = 162
31const fieldFileNameWithInfo = 200
32const fieldFileName = 201
33const fieldFilePath = 202
16a4ad70
JH
34const fieldFileResumeData = 203
35const fieldFileTransferOptions = 204
6988a057
JH
36const fieldFileTypeString = 205
37const fieldFileCreatorString = 206
38const fieldFileSize = 207
39const fieldFileCreateDate = 208
40const fieldFileModifyDate = 209
41const fieldFileComment = 210
42const fieldFileNewName = 211
43const fieldFileNewPath = 212
44const fieldFileType = 213
5ae50876 45const fieldQuotingMsg = 214
6988a057
JH
46const fieldAutomaticResponse = 215
47const fieldFolderItemCount = 220
48const fieldUsernameWithInfo = 300
49const fieldNewsArtListData = 321
50const fieldNewsCatName = 322
51const fieldNewsCatListData15 = 323
52const fieldNewsPath = 325
53const fieldNewsArtID = 326
54const fieldNewsArtDataFlav = 327
55const fieldNewsArtTitle = 328
56const fieldNewsArtPoster = 329
57const fieldNewsArtDate = 330
58const fieldNewsArtPrevArt = 331
59const fieldNewsArtNextArt = 332
60const fieldNewsArtData = 333
043c00da
JH
61
62// const fieldNewsArtFlags = 334
6988a057
JH
63const fieldNewsArtParentArt = 335
64const fieldNewsArt1stChildArt = 336
043c00da
JH
65
66// const fieldNewsArtRecurseDel = 337
6988a057
JH
67
68type Field struct {
69 ID []byte // Type of field
70 FieldSize []byte // Size of the data part
71 Data []byte // Actual field content
72}
73
74type requiredField struct {
75 ID int
76 minLen int
77 maxLen int
78}
79
80func NewField(id uint16, data []byte) Field {
81 idBytes := make([]byte, 2)
82 binary.BigEndian.PutUint16(idBytes, id)
83
84 bs := make([]byte, 2)
85 binary.BigEndian.PutUint16(bs, uint16(len(data)))
86
87 return Field{
88 ID: idBytes,
89 FieldSize: bs,
90 Data: data,
91 }
92}
93
94func (f Field) Payload() []byte {
95 return concat.Slices(f.ID, f.FieldSize, f.Data)
96}
d2810ae9
JH
97
98func getField(id int, fields *[]Field) *Field {
99 for _, field := range *fields {
100 if id == int(binary.BigEndian.Uint16(field.ID)) {
101 return &field
102 }
103 }
104 return nil
105}