aboutsummaryrefslogtreecommitdiff
path: root/nexgb/auto_bigreq.go
blob: c1eb4d02583ddf19cd0a5687ace265c224b509b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package xgb

/*
	This file was generated by bigreq.xml on May 7 2012 9:17:56pm EDT.
	This file is automatically generated. Edit at your peril!
*/

// BigreqInit must be called before using the BIG-REQUESTS extension.
func (c *Conn) BigreqInit() error {
	reply, err := c.QueryExtension(12, "BIG-REQUESTS").Reply()
	switch {
	case err != nil:
		return err
	case !reply.Present:
		return errorf("No extension named BIG-REQUESTS could be found on on the server.")
	}

	c.extLock.Lock()
	c.extensions["BIG-REQUESTS"] = reply.MajorOpcode
	for evNum, fun := range newExtEventFuncs["BIG-REQUESTS"] {
		newEventFuncs[int(reply.FirstEvent)+evNum] = fun
	}
	for errNum, fun := range newExtErrorFuncs["BIG-REQUESTS"] {
		newErrorFuncs[int(reply.FirstError)+errNum] = fun
	}
	c.extLock.Unlock()

	return nil
}

func init() {
	newExtEventFuncs["BIG-REQUESTS"] = make(map[int]newEventFun)
	newExtErrorFuncs["BIG-REQUESTS"] = make(map[int]newErrorFun)
}

// Skipping definition for base type 'Card16'

// Skipping definition for base type 'Char'

// Skipping definition for base type 'Card32'

// Skipping definition for base type 'Double'

// Skipping definition for base type 'Bool'

// Skipping definition for base type 'Float'

// Skipping definition for base type 'Id'

// Skipping definition for base type 'Card8'

// Skipping definition for base type 'Int16'

// Skipping definition for base type 'Int32'

// Skipping definition for base type 'Void'

// Skipping definition for base type 'Byte'

// Skipping definition for base type 'Int8'

// Request BigreqEnable
// size: 4
type BigreqEnableCookie struct {
	*cookie
}

func (c *Conn) BigreqEnable() BigreqEnableCookie {
	cookie := c.newCookie(true, true)
	c.newRequest(c.bigreqEnableRequest(), cookie)
	return BigreqEnableCookie{cookie}
}

func (c *Conn) BigreqEnableUnchecked() BigreqEnableCookie {
	cookie := c.newCookie(false, true)
	c.newRequest(c.bigreqEnableRequest(), cookie)
	return BigreqEnableCookie{cookie}
}

// Request reply for BigreqEnable
// size: 12
type BigreqEnableReply struct {
	Sequence uint16
	Length   uint32
	// padding: 1 bytes
	MaximumRequestLength uint32
}

// Waits and reads reply data from request BigreqEnable
func (cook BigreqEnableCookie) Reply() (*BigreqEnableReply, error) {
	buf, err := cook.reply()
	if err != nil {
		return nil, err
	}
	if buf == nil {
		return nil, nil
	}
	return bigreqEnableReply(buf), nil
}

// Read reply into structure from buffer for BigreqEnable
func bigreqEnableReply(buf []byte) *BigreqEnableReply {
	v := new(BigreqEnableReply)
	b := 1 // skip reply determinant

	b += 1 // padding

	v.Sequence = Get16(buf[b:])
	b += 2

	v.Length = Get32(buf[b:]) // 4-byte units
	b += 4

	v.MaximumRequestLength = Get32(buf[b:])
	b += 4

	return v
}

func (cook BigreqEnableCookie) Check() error {
	return cook.check()
}

// Write request to wire for BigreqEnable
func (c *Conn) bigreqEnableRequest() []byte {
	size := 4
	b := 0
	buf := make([]byte, size)

	buf[b] = c.extensions["BIG-REQUESTS"]
	b += 1

	buf[b] = 0 // request opcode
	b += 1

	Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
	b += 2

	return buf
}