Skip to content
Snippets Groups Projects

eddie-communication: rework networking code to match CoAP standards

Merged Jacopo Zorzetto requested to merge jacopo/eddie:coap_rfc into main
6 files
+ 1405
752
Compare changes
  • Side-by-side
  • Inline
Files
6
@@ -35,22 +35,29 @@ public:
@@ -35,22 +35,29 @@ public:
Value get(Key const &k) {
Value get(Key const &k) {
std::unique_lock<decltype(m_)> lock(m_);
std::unique_lock<decltype(m_)> lock(m_);
Value elem = c_[k];
Value elem = c_[k];
// m_.unlock()
return elem;
return elem;
}
}
 
std::list<Value> get_all() {
 
std::unique_lock<decltype(m_)> lock(m_);
 
std::list<Value> return_list;
 
 
for(auto const& imap: c_)
 
return_list.push_back(imap.second);
 
 
return return_list;
 
}
 
template<class Value2>
template<class Value2>
void set(Key const &k, Value2 &&v) {
void set(Key const &k, Value2 &&v) {
std::unique_lock<decltype(m_)> lock(m_);
std::unique_lock<decltype(m_)> lock(m_);
c_[k] = std::forward<Value2>(v);
c_[k] = std::forward<Value2>(v);
// m_.unlock()
}
}
void erase(Key const &k) {
void erase(Key const &k) {
std::unique_lock<decltype(m_)> lock(m_);
std::unique_lock<decltype(m_)> lock(m_);
Value elem = this->get(k);
Value elem = this->get(k);
c_.erase(k);
c_.erase(k);
// m_.unlock()
}
}
};
};
@@ -79,8 +86,6 @@ public:
@@ -79,8 +86,6 @@ public:
*/
*/
void remove_valid_key (Key const &k) {
void remove_valid_key (Key const &k) {
std::unique_lock<decltype(m_)> lock(m_);
std::unique_lock<decltype(m_)> lock(m_);
// erase key and remove all messages
s_.erase(k);
s_.erase(k);
mm_.erase(k);
mm_.erase(k);
}
}
@@ -91,10 +96,7 @@ public:
@@ -91,10 +96,7 @@ public:
* @return true if the key is found, false otherwise
* @return true if the key is found, false otherwise
*/
*/
int contains_key(Key const &k) {
int contains_key(Key const &k) {
// lock the storage
std::unique_lock<decltype(m_)> lock(m_);
std::unique_lock<decltype(m_)> lock(m_);
// check if the set contains the key
auto result = s_.find(k);
auto result = s_.find(k);
return result != s_.end();
return result != s_.end();
}
}
@@ -103,18 +105,16 @@ public:
@@ -103,18 +105,16 @@ public:
void insert_new_message(Key const &k, Value2 &&v) {
void insert_new_message(Key const &k, Value2 &&v) {
std::unique_lock<decltype(m_)> lock(m_);
std::unique_lock<decltype(m_)> lock(m_);
if (s_.find(k) != s_.end()) { // the key is present, add the message
if (s_.find(k) != s_.end()) {
mm_.insert(std::make_pair(k, v));
mm_.insert(std::make_pair(k, v));
}
}
// key not present, ignore the message
}
}
std::list<Value> get(Key const &k) {
std::list<Value> get(Key const &k) {
std::unique_lock<decltype(m_)> lock(m_);
std::unique_lock<decltype(m_)> lock(m_);
std::list<Value> return_list;
std::list<Value> return_list;
if (s_.find(k) != s_.end()) { // work only if the key is valid
if (s_.find(k) != s_.end()) {
auto items = mm_.equal_range(k);
auto items = mm_.equal_range(k);
for (auto item = items.first; item != items.second; ++item) {
for (auto item = items.first; item != items.second; ++item) {
@@ -131,14 +131,11 @@ class CoapClient {
@@ -131,14 +131,11 @@ class CoapClient {
private:
private:
int quit = 0;
int quit = 0;
coap_context_t *context = nullptr;
coap_context_t *context = nullptr;
std::thread runner;
static int resolve_address(const char *host, const char *service, coap_address_t *dst);
static int resolve_address(const char *host, const char *service, coap_address_t *dst);
coap_session_t *open_session(const char *dst_host, const char *dst_port, coap_proto_t protocol);
coap_session_t *open_session(const char *dst_host, const char *dst_port, coap_proto_t protocol);
void destroyClient();
public:
public:
static ThreadSafeMap<int, coap_pdu_t *> *messages;
static ThreadSafeMap<int, coap_pdu_t *> *messages;
static ThreadSafeStorage<std::string, coap_pdu_t *> *multicast_messages;
static ThreadSafeStorage<std::string, coap_pdu_t *> *multicast_messages;
@@ -147,48 +144,38 @@ public:
@@ -147,48 +144,38 @@ public:
CoapClient();
CoapClient();
 
void destroy_client();
 
int get_quit() const;
int get_quit() const;
void set_quit(int value);
void set_quit(int value);
coap_context_t *get_context();
coap_context_t *get_context();
int initClient();
int init_client();
static coap_response_t
static coap_response_t
message_handler(coap_session_t *session,
message_handler(coap_session_t *session, const coap_pdu_t *sent, const coap_pdu_t *received,
const coap_pdu_t *sent,
const coap_pdu_t *received,
coap_mid_t id);
coap_mid_t id);
coap_mid_t send_get_request(const char *dst_host,
coap_mid_t
const char *dst_port,
send_get_request(const char *dst_host, const char *dst_port, const char *dst_resource,
const char *dst_resource,
const char *query);
const char *query,
unsigned char *data,
std::string
size_t data_length);
send_get_nc_request(const char *dst_host, const char *query, unsigned char *data,
size_t data_len);
std::string send_get_request_non_confirmable(const char *destination,
const char *query,
coap_mid_t
unsigned char *data,
send_post_request(const char *dst_host, const char *dst_port, const char *dst_resource,
size_t data_length);
const char *query, const char *data);
coap_mid_t send_post_request(const char *dst_host,
coap_mid_t
const char *dst_port,
send_delete_request(const char *dst_host, const char *dst_port, const char *res_to_delete);
const char *dst_resource,
const char *query);
coap_mid_t
send_put_request(const char *dst_host, const char *dst_port, const char *dst_resource,
coap_mid_t send_delete_request(const char *dst_host,
const char *query, const char *data);
const char *dst_port,
const char *res_to_delete);
coap_mid_t send_put_request(const char *dst_host,
const char *dst_port,
const char *dst_resource,
const char *query,
const char *data);
int run();
};
};
#endif //EDDIE_COAPCLIENT_H
#endif //EDDIE_COAPCLIENT_H
Loading