MCPcopy Create free account
hub / github.com/apache/nifi-minifi-cpp / sendReportReq

Method sendReportReq

libminifi/src/FlowControlProtocol.cpp:257–384  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

255}
256
257int FlowControlProtocol::sendReportReq() {
258 uint16_t port = this->_serverPort;
259
260 if (this->_socket <= 0)
261 this->_socket = connectServer(_serverName.c_str(), port);
262
263 if (this->_socket <= 0)
264 return -1;
265
266 // Calculate the total payload msg size
267 uint32_t payloadSize = FlowControlMsgIDEncodingLen(FLOW_YML_NAME, gsl::narrow<int>(this->_controller->getName().size() + 1));
268 const size_t size = sizeof(FlowControlProtocolHeader) + payloadSize;
269
270 std::vector<uint8_t> buffer;
271 buffer.resize(size);
272 auto* data = buffer.data();
273
274 // encode the HDR
275 FlowControlProtocolHeader hdr;
276 hdr.msgType = REPORT_REQ;
277 hdr.payloadLen = payloadSize;
278 hdr.seqNumber = this->_seqNumber;
279 hdr.status = RESP_SUCCESS;
280 data = this->encode(data, hdr.msgType);
281 data = this->encode(data, hdr.seqNumber);
282 data = this->encode(data, hdr.status);
283 data = this->encode(data, hdr.payloadLen);
284
285 // encode the YAML name
286 data = this->encode(data, FLOW_YML_NAME);
287 data = this->encode(data, this->_controller->getName());
288
289 // send it
290 int status = sendData(buffer.data(), gsl::narrow<int>(size));
291 buffer.clear();
292 if (status <= 0) {
293 utils::file::FileUtils::close(_socket);
294 _socket = 0;
295 logger_->log_error("Flow Control Protocol Send Report Req failed");
296 return -1;
297 }
298
299 // Looking for report respond
300 status = readHdr(&hdr);
301
302 if (status <= 0) {
303 utils::file::FileUtils::close(_socket);
304 _socket = 0;
305 logger_->log_error("Flow Control Protocol Read Report Resp header failed");
306 return -1;
307 }
308 logger_->log_debug("Flow Control Protocol receive MsgType %s", FlowControlMsgTypeToStr((FlowControlMsgType) hdr.msgType));
309 logger_->log_debug("Flow Control Protocol receive Seq Num %" PRIu32, hdr.seqNumber);
310 logger_->log_debug("Flow Control Protocol receive Resp Code %s", FlowControlRespCodeToStr((FlowControlRespCode) hdr.status));
311 logger_->log_debug("Flow Control Protocol receive Payload len %" PRIu32, hdr.payloadLen);
312
313 if (hdr.status == RESP_SUCCESS && hdr.seqNumber == this->_seqNumber) {
314 this->_seqNumber++;

Callers 1

runMethod · 0.80

Calls 15

encodeMethod · 0.95
decodeMethod · 0.95
sendDataFunction · 0.85
closeFunction · 0.85
readHdrFunction · 0.85
c_strMethod · 0.80
log_errorMethod · 0.80
log_debugMethod · 0.80
log_warnMethod · 0.80
log_traceMethod · 0.80
FlowControlMsgTypeToStrFunction · 0.50

Tested by

no test coverage detected