edits
[iotcloud.git] / version2 / src / C / CloudComm.cc
index 2a7d233608d9498679c1348bbf3530324ebb73bb..c229259140501fa1384cb74eb1fa49824b58a5c9 100644 (file)
@@ -64,9 +64,16 @@ CloudComm::CloudComm(Table *_table,  IoTString *_baseurl, IoTString *_password,
 }
 
 CloudComm::~CloudComm() {
-       delete random;
        delete getslot;
        delete putslot;
+       if (salt)
+               delete salt;
+       if (password)
+               delete password;
+       if (random)
+               delete random;
+       if (baseurl)
+               delete baseurl;
 }
 
 /**
@@ -437,12 +444,18 @@ bool CloudComm::getSalt() {
        try {
                timer->startTime();
                wc = openURL(urlstr);
+               delete urlstr;
+               urlstr = NULL;
                closeURLReq(&wc);
                timer->endTime();
        } catch (SocketTimeoutException *e) {
+               if (urlstr)
+                       delete urlstr;
                timer->endTime();
                throw new ServerException("getSalt failed", ServerException_TypeConnectTimeout);
        } catch (Exception *e) {
+               if (urlstr)
+                       delete urlstr;
                throw new Error("getSlot failed");
        }
 
@@ -559,30 +572,38 @@ Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
                throw new Error("putSlot failed");
        }
 
+       Array<char> *resptype = NULL;
        try {
                int respcode = getResponseCode(&wc);
                readHeaders(&wc);
                timer->startTime();
-               Array<char> *resptype = new Array<char>(7);
+               resptype = new Array<char>(7);
                readURLData(&wc, resptype);
                timer->endTime();
 
                if (resptype->equals(getslot)) {
+                       delete resptype;
                        Array<Slot *> *tmp = processSlots(&wc);
                        close(wc.fd);
                        return tmp;
                } else if (resptype->equals(putslot)) {
+                       delete resptype;
                        close(wc.fd);
                        return NULL;
                } else {
+                       delete resptype;
                        close(wc.fd);
                        throw new Error("Bad response to putslot");
                }
        } catch (SocketTimeoutException *e) {
+               if (resptype != NULL)
+                       delete resptype;
                timer->endTime();
                close(wc.fd);
                throw new ServerException("putSlot failed", ServerException_TypeInputTimeout);
        } catch (Exception *e) {
+               if (resptype != NULL)
+                       delete resptype;
                throw new Error("putSlot failed");
        }
 }
@@ -627,6 +648,7 @@ Array<Slot *> *CloudComm::getSlots(int64_t sequencenumber) {
                if (!resptype->equals(getslot))
                        throw new Error("Bad Response: ");
 
+               delete resptype;
                Array<Slot *> *tmp = processSlots(&wc);
                close(wc.fd);
                return tmp;
@@ -658,6 +680,7 @@ Array<Slot *> *CloudComm::processSlots(WebConnection *wc) {
                slots->set(i, Slot_decode(table, data, mac));
                delete data;
        }
+       delete sizesofslots;
        return slots;
 }