• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mavlink / MAVSDK / 7965506471

19 Feb 2024 09:51PM CUT coverage: 36.22% (+0.008%) from 36.212%
7965506471

push

github

web-flow
Merge pull request #2223 from mavlink/pr-absl-fix

Fix illegal instruction on RPi 4

10035 of 27706 relevant lines covered (36.22%)

127.69 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/mavsdk/core/http_loader.cpp
1
#include "http_loader.h"
2
#include "curl_wrapper.h"
3

4
namespace mavsdk {
5

6
#ifdef TESTING
7
HttpLoader::HttpLoader(const std::shared_ptr<ICurlWrapper>& curl_wrapper) :
8
    _curl_wrapper(curl_wrapper)
9
{
10
    start();
11
}
12
#endif
13

14
HttpLoader::HttpLoader() : _curl_wrapper(std::make_shared<CurlWrapper>())
×
15
{
16
    start();
×
17
}
×
18

19
HttpLoader::~HttpLoader()
×
20
{
21
    stop();
×
22
}
×
23

24
void HttpLoader::start()
×
25
{
26
    _should_exit = false;
×
27
    _work_thread = new std::thread(work_thread, this);
×
28
}
×
29

30
void HttpLoader::stop()
×
31
{
32
    _should_exit = true;
×
33
    _work_queue.stop();
×
34
    if (_work_thread != nullptr) {
×
35
        _work_thread->join();
×
36
        delete _work_thread;
×
37
        _work_thread = nullptr;
×
38
    }
39
}
×
40

41
bool HttpLoader::download_sync(const std::string& url, const std::string& local_path)
×
42
{
43
    auto work_item = std::make_shared<DownloadItem>(url, local_path, nullptr);
×
44
    bool success = do_download(work_item, _curl_wrapper);
×
45
    return success;
×
46
}
47

48
void HttpLoader::download_async(
×
49
    const std::string& url,
50
    const std::string& local_path,
51
    const ProgressCallback& progress_callback)
52
{
53
    auto work_item = std::make_shared<DownloadItem>(url, local_path, progress_callback);
×
54
    _work_queue.enqueue(work_item);
×
55
}
×
56

57
bool HttpLoader::upload_sync(const std::string& target_url, const std::string& local_path)
×
58
{
59
    auto work_item = std::make_shared<UploadItem>(target_url, local_path, nullptr);
×
60
    bool success = do_upload(work_item, _curl_wrapper);
×
61
    return success;
×
62
}
63

64
void HttpLoader::upload_async(
×
65
    const std::string& target_url,
66
    const std::string& local_path,
67
    const ProgressCallback& progress_callback)
68
{
69
    auto work_item = std::make_shared<UploadItem>(target_url, local_path, progress_callback);
×
70
    _work_queue.enqueue(work_item);
×
71
}
×
72

73
void HttpLoader::work_thread(HttpLoader* self)
×
74
{
75
    while (!self->_should_exit) {
×
76
        auto item = self->_work_queue.dequeue();
×
77
        auto curl_wrapper = self->_curl_wrapper;
×
78
        if (!item || curl_wrapper == nullptr) {
×
79
            continue;
×
80
        }
81
        do_item(item.value(), curl_wrapper);
×
82
    }
83
}
×
84

85
void HttpLoader::do_item(
×
86
    const std::shared_ptr<WorkItem>& item, const std::shared_ptr<ICurlWrapper>& curl_wrapper)
87
{
88
    auto download_item = std::dynamic_pointer_cast<DownloadItem>(item);
×
89
    if (nullptr != download_item) {
×
90
        do_download(download_item, curl_wrapper);
×
91
        return;
×
92
    }
93

94
    auto upload_item = std::dynamic_pointer_cast<UploadItem>(item);
×
95
    if (nullptr != upload_item) {
×
96
        do_upload(upload_item, curl_wrapper);
×
97
        return;
×
98
    }
99
}
100

101
bool HttpLoader::do_download(
×
102
    const std::shared_ptr<DownloadItem>& item, const std::shared_ptr<ICurlWrapper>& curl_wrapper)
103
{
104
    bool success = curl_wrapper->download_file_to_path(
×
105
        item->get_url(), item->get_local_path(), item->get_progress_callback());
×
106
    return success;
×
107
}
108

109
bool HttpLoader::do_upload(
×
110
    const std::shared_ptr<UploadItem>& item, const std::shared_ptr<ICurlWrapper>& curl_wrapper)
111
{
112
    bool success = curl_wrapper->upload_file(
×
113
        item->get_target_url(), item->get_local_path(), item->get_progress_callback());
×
114
    return success;
×
115
}
116

117
bool HttpLoader::download_text_sync(const std::string& url, std::string& content)
×
118
{
119
    bool success = _curl_wrapper->download_text(url, content);
×
120
    return success;
×
121
}
122

123
} // namespace mavsdk
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc