Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 22 additions & 15 deletions foodgroup/chat_nav.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,16 @@ import (
"github.com/mk6i/open-oscar-server/wire"
)

var defaultExchangeCfg = wire.TLVBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.ChatRoomTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatRoomTLVClassPerms, uint16(0x0010)),
wire.NewTLVBE(wire.ChatRoomTLVMaxNameLen, uint16(100)),
wire.NewTLVBE(wire.ChatRoomTLVFlags, uint16(15)),
wire.NewTLVBE(wire.ChatRoomTLVNavCreatePerms, uint8(2)),
wire.NewTLVBE(wire.ChatRoomTLVCharSet1, "us-ascii"),
wire.NewTLVBE(wire.ChatRoomTLVLang1, "en"),
wire.NewTLVBE(wire.ChatRoomTLVCharSet2, "us-ascii"),
wire.NewTLVBE(wire.ChatRoomTLVLang2, "en"),
},
var defaultExchangeCfg = wire.TLVList{
wire.NewTLVBE(wire.ChatRoomTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatRoomTLVClassPerms, uint16(0x0010)),
wire.NewTLVBE(wire.ChatRoomTLVMaxNameLen, uint16(100)),
wire.NewTLVBE(wire.ChatRoomTLVFlags, uint16(15)),
wire.NewTLVBE(wire.ChatRoomTLVNavCreatePerms, uint8(2)),
wire.NewTLVBE(wire.ChatRoomTLVCharSet1, "us-ascii"),
wire.NewTLVBE(wire.ChatRoomTLVLang1, "en"),
wire.NewTLVBE(wire.ChatRoomTLVCharSet2, "us-ascii"),
wire.NewTLVBE(wire.ChatRoomTLVLang2, "en"),
}

var (
Expand Down Expand Up @@ -61,11 +59,17 @@ func (s ChatNavService) RequestChatRights(_ context.Context, inFrame wire.SNACFr
wire.NewTLVBE(wire.ChatNavTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatNavTLVExchangeInfo, wire.SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: state.PrivateExchange,
TLVBlock: defaultExchangeCfg,
TLVPaddedRestBlock: wire.TLVPaddedRestBlock{
Reserved: 0,
TLVList: defaultExchangeCfg,
},
}),
wire.NewTLVBE(wire.ChatNavTLVExchangeInfo, wire.SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: state.PublicExchange,
TLVBlock: defaultExchangeCfg,
TLVPaddedRestBlock: wire.TLVPaddedRestBlock{
Reserved: 0,
TLVList: defaultExchangeCfg,
},
}),
},
},
Expand Down Expand Up @@ -191,7 +195,10 @@ func (s ChatNavService) ExchangeInfo(_ context.Context, inFrame wire.SNACFrame,
wire.NewTLVBE(wire.ChatNavTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatNavTLVExchangeInfo, wire.SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: inBody.Exchange,
TLVBlock: defaultExchangeCfg,
TLVPaddedRestBlock: wire.TLVPaddedRestBlock{
Reserved: 0,
TLVList: defaultExchangeCfg,
},
}),
},
},
Expand Down
12 changes: 8 additions & 4 deletions foodgroup/chat_nav_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,8 @@ func TestChatNavService_RequestChatRights(t *testing.T) {
wire.NewTLVBE(wire.ChatNavTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatNavTLVExchangeInfo, wire.SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: 4,
TLVBlock: wire.TLVBlock{
TLVPaddedRestBlock: wire.TLVPaddedRestBlock{
Reserved: 0,
TLVList: wire.TLVList{
wire.NewTLVBE(wire.ChatRoomTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatRoomTLVClassPerms, uint16(0x0010)),
Expand All @@ -630,7 +631,8 @@ func TestChatNavService_RequestChatRights(t *testing.T) {
}),
wire.NewTLVBE(wire.ChatNavTLVExchangeInfo, wire.SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: 5,
TLVBlock: wire.TLVBlock{
TLVPaddedRestBlock: wire.TLVPaddedRestBlock{
Reserved: 0,
TLVList: wire.TLVList{
wire.NewTLVBE(wire.ChatRoomTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatRoomTLVClassPerms, uint16(0x0010)),
Expand Down Expand Up @@ -682,7 +684,8 @@ func TestChatNavService_ExchangeInfo(t *testing.T) {
wire.NewTLVBE(wire.ChatNavTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatNavTLVExchangeInfo, wire.SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: state.PrivateExchange,
TLVBlock: wire.TLVBlock{
TLVPaddedRestBlock: wire.TLVPaddedRestBlock{
Reserved: 0,
TLVList: wire.TLVList{
wire.NewTLVBE(wire.ChatRoomTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatRoomTLVClassPerms, uint16(0x0010)),
Expand Down Expand Up @@ -723,7 +726,8 @@ func TestChatNavService_ExchangeInfo(t *testing.T) {
wire.NewTLVBE(wire.ChatNavTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatNavTLVExchangeInfo, wire.SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: state.PublicExchange,
TLVBlock: wire.TLVBlock{
TLVPaddedRestBlock: wire.TLVPaddedRestBlock{
Reserved: 0,
TLVList: wire.TLVList{
wire.NewTLVBE(wire.ChatRoomTLVMaxConcurrentRooms, uint8(10)),
wire.NewTLVBE(wire.ChatRoomTLVClassPerms, uint16(0x0010)),
Expand Down
2 changes: 1 addition & 1 deletion foodgroup/oservice.go
Original file line number Diff line number Diff line change
Expand Up @@ -616,9 +616,9 @@ func (s OServiceService) ServiceRequest(ctx context.Context, service uint16, ses
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, inBody.FoodGroup),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, host),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, cookie),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, inBody.FoodGroup),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, stateCode),
},
},
Expand Down
24 changes: 12 additions & 12 deletions foodgroup/oservice_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Admin),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1234"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Admin),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x00)),
},
},
Expand Down Expand Up @@ -110,9 +110,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Alert),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1234"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Alert),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x00)),
},
},
Expand Down Expand Up @@ -158,9 +158,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.BART),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1234"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.BART),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x00)),
},
},
Expand Down Expand Up @@ -206,9 +206,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ChatNav),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1234"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ChatNav),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x00)),
},
},
Expand Down Expand Up @@ -263,9 +263,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Chat),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1234"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-auth-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Chat),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x00)),
},
},
Expand Down Expand Up @@ -321,9 +321,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ODir),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1234"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ODir),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x00)),
},
},
Expand Down Expand Up @@ -454,9 +454,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Admin),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1235"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Admin),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x02)),
},
},
Expand Down Expand Up @@ -507,9 +507,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Alert),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1235"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Alert),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x02)),
},
},
Expand Down Expand Up @@ -560,9 +560,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.BART),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1235"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.BART),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x02)),
},
},
Expand Down Expand Up @@ -613,9 +613,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ChatNav),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1235"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ChatNav),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x02)),
},
},
Expand Down Expand Up @@ -671,9 +671,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Chat),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1235"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-auth-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.Chat),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x02)),
},
},
Expand Down Expand Up @@ -734,9 +734,9 @@ func TestOServiceService_ServiceRequest(t *testing.T) {
Body: wire.SNAC_0x01_0x05_OServiceServiceResponse{
TLVRestBlock: wire.TLVRestBlock{
TLVList: wire.TLVList{
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ODir),
wire.NewTLVBE(wire.OServiceTLVTagsReconnectHere, "127.0.0.1:1235"),
wire.NewTLVBE(wire.OServiceTLVTagsLoginCookie, []byte("the-cookie")),
wire.NewTLVBE(wire.OServiceTLVTagsGroupID, wire.ODir),
wire.NewTLVBE(wire.OServiceTLVTagsSSLState, uint8(0x02)),
},
},
Expand Down
2 changes: 1 addition & 1 deletion wire/snacs.go
Original file line number Diff line number Diff line change
Expand Up @@ -1151,7 +1151,7 @@ type SNAC_0x0D_0x09_ChatNavNavInfo struct {

type SNAC_0x0D_0x09_TLVExchangeInfo struct {
Identifier uint16
TLVBlock
TLVPaddedRestBlock
}

//
Expand Down
35 changes: 35 additions & 0 deletions wire/snacs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,3 +147,38 @@ func TestUnmarshalChatMessageText(t *testing.T) {
})
}
}

func TestTLVPaddedRestBlock_Marshal(t *testing.T) {
block := TLVPaddedRestBlock{
Reserved: 0,
TLVList: TLVList{
NewTLVBE(0x03, uint8(10)),
},
}

buf := &bytes.Buffer{}
err := MarshalBE(block, buf)
assert.NoError(t, err)

expected := []byte{0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0A}
assert.Equal(t, expected, buf.Bytes())
}

func TestSNAC_0x0D_0x09_TLVExchangeInfo_Marshal(t *testing.T) {
info := SNAC_0x0D_0x09_TLVExchangeInfo{
Identifier: 4,
TLVPaddedRestBlock: TLVPaddedRestBlock{
Reserved: 0,
TLVList: TLVList{
NewTLVBE(0x03, uint8(10)),
},
},
}

buf := &bytes.Buffer{}
err := MarshalBE(info, buf)
assert.NoError(t, err)

expected := []byte{0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0A}
assert.Equal(t, expected, buf.Bytes())
}
7 changes: 7 additions & 0 deletions wire/tlv.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ type TLVLBlock struct {
TLVList `oscar:"len_prefix=uint16"`
}

// TLVPaddedRestBlock is a TLV array with a 2 byte reserved field followed by
// TLVs with no count prefix.
type TLVPaddedRestBlock struct {
Reserved uint16
TLVList
}

// TLVList is a list of TLV elements. It provides methods to append and access
// TLVs in the array. It provides methods that decode the data blob into the
// appropriate type at runtime. The caller assumes the TLV data type at runtime
Expand Down
Loading