QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MockLinkFTP.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QByteArray>
4#include <QtCore/QFile>
5#include <QtCore/QHash>
6#include <QtCore/QObject>
7#include <QtCore/QStringList>
8
9#include "MAVLinkFTP.h"
10
11class MockLink;
12
15class MockLinkFTP : public QObject
16{
17 Q_OBJECT
18
19public:
20 MockLinkFTP(uint8_t systemIdServer, uint8_t componentIdServer, MockLink *mockLink);
22
25 void setFileList(const QStringList &fileList) { _fileList = fileList; }
26
28 void mavlinkMessageReceived(const mavlink_message_t &message);
29
30 void enableRandomDrops(bool enable) { _randomDropsEnabled = enable; }
31
33 QStringList uploadedFiles() const { return _uploadedFiles.keys(); }
34
36 QByteArray uploadedFileContents(const QString& remotePath) const { return _uploadedFiles.value(remotePath); }
37
39 void clearUploadedFiles() { _uploadedFiles.clear(); }
40
51
53 void setErrorMode(ErrorMode_t errMode) { _errMode = errMode; };
54
65
67 static constexpr const size_t cFailureModes = std::size(MockLinkFTP::rgFailureModes);
68
69 static constexpr const char *sizeFilenamePrefix = "mocklink-size-";
70
71signals:
74
77
78private:
80 void _sendAck(uint8_t targetSystemId, uint8_t targetComponentId, uint16_t seqNumber, MavlinkFTP::OpCode_t reqOpCode);
81 void _sendNak(uint8_t targetSystemId, uint8_t targetComponentId, MavlinkFTP::ErrorCode_t error, uint16_t seqNumber, MavlinkFTP::OpCode_t reqOpCode);
82 void _sendNakErrno(uint8_t targetSystemId, uint8_t targetComponentId, uint8_t nakErrno, uint16_t seqNumber, MavlinkFTP::OpCode_t reqOpCode);
84 void _sendResponse(uint8_t targetSystemId, uint8_t targetComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
87 void _listCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
88 void _openCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
89 void _createFileCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
90 void _openFileWOCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
91 void _readCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
92 void _burstReadCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
93 void _terminateCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
94 void _resetCommand(uint8_t senderSystemId, uint8_t senderComponentId, uint16_t seqNumber);
95 void _writeCommand(uint8_t senderSystemId, uint8_t senderComponentId, MavlinkFTP::Request *request, uint16_t seqNumber);
96 void _finalizeActiveUpload();
99 uint16_t _nextSeqNumber(uint16_t seqNumber) const;
100 static QString _createTestTempFile(int size);
101 QString _generateParamPck(bool withDefaults);
102
104 static void ensureNullTemination(MavlinkFTP::Request *request);
105
106 const uint8_t _systemIdServer;
107 const uint8_t _componentIdServer;
108 MockLink *_mockLink;
109
110 bool _lastReplyValid = false;
111 bool _randomDropsEnabled = false;
112 ErrorMode_t _errMode = errModeNone;
113 mavlink_message_t _lastReply{};
114 QFile _currentFile;
115 QString _paramPckTempFile;
116 struct UploadSession {
117 bool active = false;
118 QString remotePath;
119 QByteArray buffer;
120
121 void reset() {
122 active = false;
123 remotePath.clear();
124 buffer.clear();
125 }
126 };
127 UploadSession _uploadSession;
128 QHash<QString, QByteArray> _uploadedFiles;
129 QStringList _fileList;
130 uint16_t _lastReplySequence = 0;
131
132 static constexpr uint8_t _sessionId = 1;
133};
Error error
struct __mavlink_message mavlink_message_t
ErrorCode_t
Error codes returned in Nak response PayloadHeader.data[0].
Definition MAVLinkFTP.h:61
Mock implementation of Mavlink FTP server.
Definition MockLinkFTP.h:16
void enableRandomDrops(bool enable)
Definition MockLinkFTP.h:30
void resetCommandReceived()
You can connect to this signal to be notified when the server receives a Reset command.
void setFileList(const QStringList &fileList)
Definition MockLinkFTP.h:25
void terminateCommandReceived()
You can connect to this signal to be notified when the server receives a Terminate command.
static constexpr const char * sizeFilenamePrefix
Definition MockLinkFTP.h:69
void mavlinkMessageReceived(const mavlink_message_t &message)
Called to handle an FTP message.
static constexpr const ErrorMode_t rgFailureModes[]
Definition MockLinkFTP.h:58
ErrorMode_t
By calling setErrorMode with one of these modes you can cause the server to simulate an error.
Definition MockLinkFTP.h:42
@ errModeBadSequence
Return response with bad sequence number.
Definition MockLinkFTP.h:49
@ errModeNoSecondResponseAllowRetry
No response to subsequent request to initial command, error will be cleared after this so retry will ...
Definition MockLinkFTP.h:47
@ errModeNakSecondResponse
Nak subsequent request to initial command.
Definition MockLinkFTP.h:48
@ errModeNoResponse
No response to any request, client should eventually time out with no Ack.
Definition MockLinkFTP.h:44
@ errModeNone
No error, respond correctly.
Definition MockLinkFTP.h:43
@ errModeNoSecondResponse
No response to subsequent request to initial command.
Definition MockLinkFTP.h:46
@ errModeNakResponse
Nak all requests.
Definition MockLinkFTP.h:45
QStringList uploadedFiles() const
Returns the list of remote paths which have been uploaded in this session.
Definition MockLinkFTP.h:33
static constexpr const size_t cFailureModes
The number of ErrorModes in the rgFailureModes array.
Definition MockLinkFTP.h:67
void clearUploadedFiles()
Clears the stored uploaded file contents.
Definition MockLinkFTP.h:39
void setErrorMode(ErrorMode_t errMode)
Sets the error mode for command responses. This allows you to simulate various server errors.
Definition MockLinkFTP.h:53
QByteArray uploadedFileContents(const QString &remotePath) const
Returns the contents of an uploaded file. Empty if the path is unknown.
Definition MockLinkFTP.h:36