client version of coap

Dependencies:   nRF24L01P cantcoap3

Dependents:   client3

Revision:
2:e8823d9fa162
Parent:
1:1d936c763440
Child:
4:792cf53a73c4
--- a/coapClient.cpp	Sun Jan 20 13:48:02 2019 +0000
+++ b/coapClient.cpp	Thu Jan 24 16:33:30 2019 +0000
@@ -2,9 +2,8 @@
 // Created by Kamil Mykitiuk on 2019-01-17.
 //
 
-#include <cstring>
 #include "coapClient.h"
-
+#include "dbg.h"
 
 bool match_uri(CoapPDU& coapPDU, char* uri) {
     char respone_uri[32];
@@ -23,31 +22,22 @@
     if (response.validate()) {
         if (isExpectedResponse(response, message_id, uri)) {
             return true;
-        } else {
-            sendReset(response.getMessageID()); // if this is not what we wanted, inform server about error
         }
     }
     return false;
 }
 
+bool CoapClient::hasGetResponse(CoapPDU& response) {
+    return std::memcmp(response.getTokenPointer(), this->token, static_cast<size_t>(response.getTokenLength())) == 0 &&
+           response.getCode() == CoapPDU::COAP_CONTENT;
+}
 
-/* send reset to server
- *
- * @return 0 if successful
- * -4 if radio is not working properly
- * */
-int CoapClient::sendReset(uint16_t message_id) {
-    CoapPDU reset = CoapPDU();
-    reset.setMessageID(message_id);
-    reset.setType(CoapPDU::COAP_RESET);
-    int ret = this->radioWrapper.write(reset.getPDUPointer(), reset.getPDULength());
-    if (ret < 0) {
-        return RADIO_NOT_WORKING;
-    } else {
-        return 0;
-    }
+bool CoapClient::hasPostResponse(CoapPDU& response) {
+    return response.getCode() == CoapPDU::COAP_CREATED &&
+           std::memcmp(response.getTokenPointer(), this->token, static_cast<size_t>(response.getTokenLength())) == 0;
 }
 
+
 /* send get request to given uri of connected server
  *
  * @return number of saved bytes in provided buffer or
@@ -74,26 +64,27 @@
         int readLen = radioWrapper.read(returnBuffer, radioWrapper.packetSize(), timeout); // add timeout param
         if (readLen > 0) { // if something is recieved process it
             CoapPDU response(returnBuffer, len, readLen);
-            if (isAck(response, messageId, uri)) {
-                if (std::memcmp(response.getTokenPointer(), this->token,
-                                static_cast<size_t>(response.getTokenLength())) == 0) {
-                    if (response.getPayloadLength() >= len) {
-                        std::memcpy(buffer, response.getPayloadPointer(),
-                                    static_cast<size_t>(response.getPayloadLength()));
-                        return response.getPayloadLength();
-                    } else {
-                        return SMALL_BUFFER;
-                    }
+            if (isAck(response, messageId, uri) && hasGetResponse(response)) {
+                DBG("RESPONSE: %d", readLen);
+                response.printHuman();
+                if (response.getPayloadLength() <= len) {
+                    std::memcpy(buffer, response.getPayloadPointer(),
+                                static_cast<size_t>(response.getPayloadLength()));
+                    return response.getPayloadLength();
                 } else {
-                    return SERVER_RESPONSE_AMBIGOUS;
+                    return SMALL_BUFFER;
                 }
+            } else {
+                return SERVER_RESPONSE_AMBIGOUS;
             }
         } else if (readLen < 0) {
             return RADIO_NOT_WORKING;
         }
         timeout *= 2;
     }
-    return SERVER_TIMED_OUT;
+
+    return
+            SERVER_TIMED_OUT;
 }
 
 /* send post request to given uri of connected server
@@ -121,13 +112,10 @@
         int readLen = radioWrapper.read(returnBuffer, radioWrapper.packetSize(), timeout); // add timeout param
         if (readLen > 0) { // if something is recieved process it
             CoapPDU response(returnBuffer, len, readLen);
-            if (isAck(response, messageId, uri)) {
-                if (response.getCode() == CoapPDU::COAP_CREATED &&
-                    std::memcmp(response.getTokenPointer(), this->token,
-                                static_cast<size_t>(response.getTokenLength())) == 0) {
-                    return 0;
-                } else  // if server hasn't responded properly
-                    return SERVER_RESPONSE_AMBIGOUS;
+            if (isAck(response, messageId, uri) && hasPostResponse(response)) {
+                return 0;
+            } else { // if server hasn't responded properly
+                return SERVER_RESPONSE_AMBIGOUS;
             }
         } else if (readLen < 0) {
             return RADIO_NOT_WORKING;
@@ -141,12 +129,15 @@
     coapPDU.setVersion(1);
     coapPDU.setType(CoapPDU::COAP_CONFIRMABLE);
     coapPDU.setMessageID(this->message_counter);
-    coapPDU.setToken(this->token, 4);
+    coapPDU.setToken(this->token, 1);
     return this->message_counter++;
 }
 
-CoapClient::CoapClient(uint8_t* token, int retransmissionLimit, int timeout, int channel, unsigned long long rx_address,  unsigned long long tx_address) : 
-listeningTimeout(timeout), retransmissionLimit(retransmissionLimit), radioWrapper(channel, rx_address, tx_address) {
-    std::memcpy(this->token, token, 4);
-    this->message_counter = 16;
+CoapClient::CoapClient(uint8_t* token, int retransmissionLimit, int timeout, int channel, unsigned long long rx_address,
+                       unsigned long long tx_address) :
+        listeningTimeout(timeout), retransmissionLimit(retransmissionLimit),
+        radioWrapper(channel, rx_address, tx_address) {
+    std::memcpy(this->token, token, 1);
+    this->message_counter = 16; // set to random
 }
+