aboutsummaryrefslogtreecommitdiff
path: root/nexgb/auto_ge.go
blob: 10b4ac0889324ac8edc6d49d4936560f1845f990 (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
141
142
143
144
145
146
147
148
149
150
151
152
153
package xgb

/*
	This file was generated by ge.xml on May 8 2012 11:03:23pm EDT.
	This file is automatically generated. Edit at your peril!
*/

// GeInit must be called before using the Generic Event Extension extension.
func (c *Conn) GeInit() error {
	reply, err := c.QueryExtension(23, "Generic Event Extension").Reply()
	switch {
	case err != nil:
		return err
	case !reply.Present:
		return errorf("No extension named Generic Event Extension could be found on on the server.")
	}

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

	return nil
}

func init() {
	newExtEventFuncs["Generic Event Extension"] = make(map[int]newEventFun)
	newExtErrorFuncs["Generic Event Extension"] = make(map[int]newErrorFun)
}

// Skipping definition for base type 'Int8'

// 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'

// Request GeQueryVersion
// size: 8
type GeQueryVersionCookie struct {
	*cookie
}

func (c *Conn) GeQueryVersion(ClientMajorVersion uint16, ClientMinorVersion uint16) GeQueryVersionCookie {
	cookie := c.newCookie(true, true)
	c.newRequest(c.geQueryVersionRequest(ClientMajorVersion, ClientMinorVersion), cookie)
	return GeQueryVersionCookie{cookie}
}

func (c *Conn) GeQueryVersionUnchecked(ClientMajorVersion uint16, ClientMinorVersion uint16) GeQueryVersionCookie {
	cookie := c.newCookie(false, true)
	c.newRequest(c.geQueryVersionRequest(ClientMajorVersion, ClientMinorVersion), cookie)
	return GeQueryVersionCookie{cookie}
}

// Request reply for GeQueryVersion
// size: 32
type GeQueryVersionReply struct {
	Sequence uint16
	Length   uint32
	// padding: 1 bytes
	MajorVersion uint16
	MinorVersion uint16
	// padding: 20 bytes
}

// Waits and reads reply data from request GeQueryVersion
func (cook GeQueryVersionCookie) Reply() (*GeQueryVersionReply, error) {
	buf, err := cook.reply()
	if err != nil {
		return nil, err
	}
	if buf == nil {
		return nil, nil
	}
	return geQueryVersionReply(buf), nil
}

// Read reply into structure from buffer for GeQueryVersion
func geQueryVersionReply(buf []byte) *GeQueryVersionReply {
	v := new(GeQueryVersionReply)
	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.MajorVersion = Get16(buf[b:])
	b += 2

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

	b += 20 // padding

	return v
}

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

// Write request to wire for GeQueryVersion
func (c *Conn) geQueryVersionRequest(ClientMajorVersion uint16, ClientMinorVersion uint16) []byte {
	size := 8
	b := 0
	buf := make([]byte, size)

	buf[b] = c.extensions["GENERIC EVENT EXTENSION"]
	b += 1

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

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

	Put16(buf[b:], ClientMajorVersion)
	b += 2

	Put16(buf[b:], ClientMinorVersion)
	b += 2

	return buf
}