MCPcopy
hub / github.com/jackc/pgx / Receive

Method Receive

pgproto3/backend.go:170–256  ·  pgproto3/backend.go::Backend.Receive

Receive receives a message from the frontend. The returned message is only valid until the next call to Receive.

()

Source from the content-addressed store, hash-verified

168
169// Receive receives a message from the frontend. The returned message is only valid until the next call to Receive.
170func (b *Backend) Receive() (FrontendMessage, error) {
171 if !b.partialMsg {
172 header, err := b.cr.Next(5)
173 if err != nil {
174 return nil, translateEOFtoErrUnexpectedEOF(err)
175 }
176
177 b.msgType = header[0]
178
179 msgLength := int(int32(binary.BigEndian.Uint32(header[1:])))
180 if msgLength < 4 {
181 return nil, fmt.Errorf("invalid message length: %d", msgLength)
182 }
183
184 b.bodyLen = msgLength - 4
185 if b.maxBodyLen > 0 && b.bodyLen > b.maxBodyLen {
186 return nil, &ExceededMaxBodyLenErr{b.maxBodyLen, b.bodyLen}
187 }
188 b.partialMsg = true
189 }
190
191 var msg FrontendMessage
192 switch b.msgType {
193 case 'B':
194 msg = &b.bind
195 case 'C':
196 msg = &b._close
197 case 'D':
198 msg = &b.describe
199 case 'E':
200 msg = &b.execute
201 case 'F':
202 msg = &b.functionCall
203 case 'f':
204 msg = &b.copyFail
205 case 'd':
206 msg = &b.copyData
207 case 'c':
208 msg = &b.copyDone
209 case 'H':
210 msg = &b.flush
211 case 'P':
212 msg = &b.parse
213 case 'p':
214 switch b.authType {
215 case AuthTypeSASL:
216 msg = &SASLInitialResponse{}
217 case AuthTypeSASLContinue:
218 msg = &SASLResponse{}
219 case AuthTypeSASLFinal:
220 msg = &SASLResponse{}
221 case AuthTypeGSS, AuthTypeGSSCont:
222 msg = &GSSResponse{}
223 case AuthTypeCleartextPassword, AuthTypeMD5Password:
224 fallthrough
225 default:
226 // to maintain backwards compatibility
227 msg = &PasswordMessage{}

Callers 11

FuzzBackendFunction · 0.95
RunMethod · 0.45
WriteMethod · 0.45
StepMethod · 0.45
StepMethod · 0.45
signalMessageMethod · 0.45
peekMessageMethod · 0.45

Calls 5

Uint32Method · 0.80
traceMessageMethod · 0.80
NextMethod · 0.65
DecodeMethod · 0.65