From 96dd5bcd8a57cd90d036ca9c45c34ffc833af200 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Thu, 18 Jan 2018 22:04:37 -0800 Subject: [PATCH] edits --- version2/src/C/CloudComm.cc | 316 ++++++++++++++-------------- version2/src/C/CloudComm.h | 6 +- version2/src/C/TransactionStatus.cc | 50 ----- version2/src/C/TransactionStatus.h | 83 +++----- 4 files changed, 196 insertions(+), 259 deletions(-) delete mode 100644 version2/src/C/TransactionStatus.cc diff --git a/version2/src/C/CloudComm.cc b/version2/src/C/CloudComm.cc index c5da91a..1c8114e 100644 --- a/version2/src/C/CloudComm.cc +++ b/version2/src/C/CloudComm.cc @@ -14,14 +14,14 @@ CloudComm::CloudComm() : listeningPort(-1), localServerThread(NULL), doEnd(false) - timer(TimingSingleton.getInstance()) + timer(TimingSingleton_getInstance()) { } /** * Constructor for actual use. Takes in the url and password. */ -CloudComm::CloudComm(Table _table, String _baseurl, String _password, int _listeningPort) : +CloudComm::CloudComm(Table* _table, IoTString* _baseurl, IoTString* _password, int _listeningPort) : baseurl(_baseurl), key(NULL), mac(NULL), @@ -32,14 +32,14 @@ CloudComm::CloudComm(Table _table, String _baseurl, String _password, int _list listeningPort(_listeningPort), localServerThread(NULL), doEnd(false) - timer(TimingSingleton.getInstance()) { - if (this.listeningPort > 0) { + timer(TimingSingleton_getInstance()) { + if (listeningPort > 0) { localServerThread = new Thread(new Runnable() { void run() { localServerWorkerFunction(); } }); - localServerThread.start(); + localServerThread->start(); } } @@ -48,14 +48,14 @@ CloudComm::CloudComm(Table _table, String _baseurl, String _password, int _list */ SecretKeySpec *CloudComm::initKey() { try { - PBEKeySpec keyspec = new PBEKeySpec(password.toCharArray(), + PBEKeySpec keyspec = new PBEKeySpec(password->toCharArray(), salt, 65536, 128); - SecretKey tmpkey = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256").generateSecret(keyspec); - return new SecretKeySpec(tmpkey.getEncoded(), "AES"); + SecretKey tmpkey = SecretKeyFactory_getInstance("PBKDF2WithHmacSHA256")->generateSecret(keyspec); + return new SecretKeySpec(tmpkey->getEncoded(), "AES"); } catch (Exception e) { - e.printStackTrace(); + e->printStackTrace(); throw new Error("Failed generating key."); } } @@ -86,10 +86,10 @@ void CloudComm::initCrypt() { try { key = initKey(); password = NULL;// drop password - mac = Mac.getInstance("HmacSHA256"); - mac.init(key); + mac = Mac_getInstance("HmacSHA256"); + mac->init(key); } catch (Exception e) { - e.printStackTrace(); + e->printStackTrace(); throw new Error("Failed To Initialize Ciphers"); } } @@ -114,44 +114,44 @@ void CloudComm::setSalt() { try { char[] saltTmp = new char[SALT_SIZE]; - random.nextBytes(saltTmp); + random->nextBytes(saltTmp); for (int i = 0; i < SALT_SIZE; i++) { - System.out.println((int)saltTmp[i] & 255); + printf("%d\n", (int)saltTmp[i] & 255); } URL url = new URL(baseurl + "?req=setsalt"); - timer.startTime(); - URLConnection con = url.openConnection(); + timer->startTime(); + URLConnection con = url->openConnection(); HttpURLConnection http = (HttpURLConnection) con; - http.setRequestMethod("POST"); - http.setFixedLengthStreamingMode(saltTmp.length); - http.setDoOutput(true); - http.setConnectTimeout(TIMEOUT_MILLIS); + http->setRequestMethod("POST"); + http->setFixedLengthStreamingMode(saltTmp->length()); + http->setDoOutput(true); + http->setConnectTimeout(TIMEOUT_MILLIS); - http.connect(); + http->connect(); - OutputStream os = http.getOutputStream(); - os.write(saltTmp); - os.flush(); + OutputStream os = http->getOutputStream(); + os->write(saltTmp); + os->flush(); - int responsecode = http.getResponseCode(); + int responsecode = http->getResponseCode(); if (responsecode != HttpURLConnection.HTTP_OK) { // TODO: Remove this print System.out.println(responsecode); throw new Error("Invalid response"); } - timer.endTime(); + timer->endTime(); salt = saltTmp; } catch (Exception e) { // e.printStackTrace(); - timer.endTime(); + timer->endTime(); throw new ServerException("Failed setting salt", ServerException.TypeConnectTimeout); } } @@ -169,18 +169,18 @@ bool CloudComm::getSalt() { } try { - timer.startTime(); - con = url.openConnection(); + timer->startTime(); + con = url->openConnection(); http = (HttpURLConnection) con; - http.setRequestMethod("POST"); - http.setConnectTimeout(TIMEOUT_MILLIS); - http.setReadTimeout(TIMEOUT_MILLIS); + http->setRequestMethod("POST"); + http->setConnectTimeout(TIMEOUT_MILLIS); + http->setReadTimeout(TIMEOUT_MILLIS); - http.connect(); - timer.endTime(); + http->connect(); + timer->endTime(); } catch (SocketTimeoutException e) { - timer.endTime(); + timer->endTime(); throw new ServerException("getSalt failed", ServerException.TypeConnectTimeout); } catch (Exception e) { // e.printStackTrace(); @@ -189,7 +189,7 @@ bool CloudComm::getSalt() { try { - timer.startTime(); + timer->startTime(); int responsecode = http.getResponseCode(); if (responsecode != HttpURLConnection.HTTP_OK) { @@ -198,23 +198,23 @@ bool CloudComm::getSalt() { throw new Error("Invalid response"); } - InputStream is = http.getInputStream(); - if (is.available() > 0) { + InputStream is = http->getInputStream(); + if (is->available() > 0) { DataInputStream dis = new DataInputStream(is); - int salt_length = dis.readInt(); + int salt_length = dis->readInt(); char [] tmp = new char[salt_length]; - dis.readFully(tmp); + dis->readFully(tmp); salt = tmp; - timer.endTime(); + timer->endTime(); return true; } else { - timer.endTime(); + timer->endTime(); return false; } } catch (SocketTimeoutException e) { - timer.endTime(); + timer->endTime(); throw new ServerException("getSalt failed", ServerException.TypeInputTimeout); } catch (Exception e) { @@ -225,21 +225,21 @@ bool CloudComm::getSalt() { Array *CloudComm::createIV(int64_t machineId, int64_t localSequenceNumber) { ByteBuffer buffer = ByteBuffer.allocate(IV_SIZE); - buffer.putLong(machineId); + buffer->putLong(machineId); int64_t localSequenceNumberShifted = localSequenceNumber << 16; - buffer.putLong(localSequenceNumberShifted); - return buffer.array(); + buffer->putLong(localSequenceNumberShifted); + return buffer->array(); } Array *CloudComm::encryptSlotAndPrependIV(Array *rawData, Array *ivBytes) { try { IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding"); - cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + cipher->init(Cipher.ENCRYPT_MODE, key, ivSpec); - char[] encryptedBytes = cipher.doFinal(rawData); + char[] encryptedBytes = cipher->doFinal(rawData); - char[] chars = new char[encryptedBytes.length + IV_SIZE]; + char[] chars = new char[encryptedBytes->length + IV_SIZE]; System.arraycopy(ivBytes, 0, chars, 0, ivBytes.length); System.arraycopy(encryptedBytes, 0, chars, IV_SIZE, encryptedBytes.length); @@ -255,15 +255,15 @@ Array *CloudComm::encryptSlotAndPrependIV(Array *rawData, Array *CloudComm::stripIVAndDecryptSlot(Array *rawData) { try { Array *ivBytes = new char[IV_SIZE]; - Array *encryptedBytes = new char[rawData.length - IV_SIZE]; + Array *encryptedBytes = new char[rawData->length - IV_SIZE]; System.arraycopy(rawData, 0, ivBytes, 0, IV_SIZE); - System.arraycopy(rawData, IV_SIZE, encryptedBytes, 0, encryptedBytes.length); + System.arraycopy(rawData, IV_SIZE, encryptedBytes, 0, encryptedBytes->length); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding"); - cipher.init(Cipher.DECRYPT_MODE, key, ivSpec); - return cipher.doFinal(encryptedBytes); + cipher->init(Cipher.DECRYPT_MODE, key, ivSpec); + return cipher->doFinal(encryptedBytes); } catch (Exception e) { e.printStackTrace(); @@ -290,8 +290,8 @@ Array *CloudComm::putSlot(Slot *slot, int max) { initCrypt(); } - int64_t sequencenumber = slot.getSequenceNumber(); - char[] slotBytes = slot.encode(mac); + int64_t sequencenumber = slot->getSequenceNumber(); + char[] slotBytes = slot->encode(mac); // slotBytes = encryptCipher.doFinal(slotBytes); // char[] iVBytes = slot.getSlotCryptIV(); @@ -301,35 +301,35 @@ Array *CloudComm::putSlot(Slot *slot, int max) { // System.arraycopy(slotBytes, 0, chars, IV_SIZE, slotBytes.length); - char[] chars = encryptSlotAndPrependIV(slotBytes, slot.getSlotCryptIV()); + char[] chars = encryptSlotAndPrependIV(slotBytes, slot->getSlotCryptIV()); url = buildRequest(true, sequencenumber, max); - timer.startTime(); - con = url.openConnection(); + timer->startTime(); + con = url->openConnection(); http = (HttpURLConnection) con; - http.setRequestMethod("POST"); - http.setFixedLengthStreamingMode(chars.length); - http.setDoOutput(true); - http.setConnectTimeout(TIMEOUT_MILLIS); - http.setReadTimeout(TIMEOUT_MILLIS); - http.connect(); + http->setRequestMethod("POST"); + http->setFixedLengthStreamingMode(chars->length); + http->setDoOutput(true); + http->setConnectTimeout(TIMEOUT_MILLIS); + http->setReadTimeout(TIMEOUT_MILLIS); + http->connect(); - OutputStream os = http.getOutputStream(); - os.write(chars); - os.flush(); + OutputStream os = http->getOutputStream(); + os->write(chars); + os->flush(); - timer.endTime(); + timer->endTime(); // System.out.println("Bytes Sent: " + chars.length); } catch (ServerException e) { - timer.endTime(); + timer->endTime(); throw e; } catch (SocketTimeoutException e) { - timer.endTime(); + timer->endTime(); throw new ServerException("putSlot failed", ServerException.TypeConnectTimeout); } catch (Exception e) { @@ -340,32 +340,32 @@ Array *CloudComm::putSlot(Slot *slot, int max) { try { - timer.startTime(); - InputStream is = http.getInputStream(); + timer->startTime(); + InputStream is = http->getInputStream(); DataInputStream dis = new DataInputStream(is); char[] resptype = new char[7]; - dis.readFully(resptype); - timer.endTime(); + dis->readFully(resptype); + timer->endTime(); - if (Arrays.equals(resptype, "getslot".getBytes())) { + if (Arrays->equals(resptype, "getslot"->getBytes())) { return processSlots(dis); - } else if (Arrays.equals(resptype, "putslot".getBytes())) { + } else if (Arrays->equals(resptype, "putslot"->getBytes())) { return NULL; } else throw new Error("Bad response to putslot"); } catch (SocketTimeoutException e) { - timer.endTime(); - throw new ServerException("putSlot failed", ServerException.TypeInputTimeout); + timer->endTime(); + throw new ServerException("putSlot failed", ServerException->TypeInputTimeout); } catch (Exception e) { - // e.printStackTrace(); + // e->printStackTrace(); throw new Error("putSlot failed"); } } /** * Request the server to send all slots with the given - * sequencenumber or newer. + * sequencenumber or newer-> */ Array *CloudComm::getSlots(int64_t sequencenumber) { URL url = NULL; @@ -381,24 +381,24 @@ Array *CloudComm::getSlots(int64_t sequencenumber) { } url = buildRequest(false, sequencenumber, 0); - timer.startTime(); - con = url.openConnection(); + timer->startTime(); + con = url->openConnection(); http = (HttpURLConnection) con; - http.setRequestMethod("POST"); - http.setConnectTimeout(TIMEOUT_MILLIS); - http.setReadTimeout(TIMEOUT_MILLIS); + http->setRequestMethod("POST"); + http->setConnectTimeout(TIMEOUT_MILLIS); + http->setReadTimeout(TIMEOUT_MILLIS); - http.connect(); - timer.endTime(); + http->connect(); + timer->endTime(); } catch (SocketTimeoutException e) { - timer.endTime(); + timer->endTime(); throw new ServerException("getSlots failed", ServerException.TypeConnectTimeout); } catch (ServerException e) { - timer.endTime(); + timer->endTime(); throw e; } catch (Exception e) { @@ -408,20 +408,20 @@ Array *CloudComm::getSlots(int64_t sequencenumber) { try { - timer.startTime(); - InputStream is = http.getInputStream(); + timer->startTime(); + InputStream is = http->getInputStream(); DataInputStream dis = new DataInputStream(is); char[] resptype = new char[7]; - dis.readFully(resptype); - timer.endTime(); + dis->readFully(resptype); + timer->endTime(); if (!Arrays.equals(resptype, "getslot".getBytes())) throw new Error("Bad Response: " + new String(resptype)); return processSlots(dis); } catch (SocketTimeoutException e) { - timer.endTime(); + timer->endTime(); throw new ServerException("getSlots failed", ServerException.TypeInputTimeout); } catch (Exception e) { @@ -435,17 +435,17 @@ Array *CloudComm::getSlots(int64_t sequencenumber) { * server response. Shared by both putSlot and getSlots. */ Array *CloudComm::processSlots(DataInputStream dis) { - int numberofslots = dis.readInt(); + int numberofslots = dis->readInt(); int[] sizesofslots = new int[numberofslots]; Slot[] slots = new Slot[numberofslots]; for (int i = 0; i < numberofslots; i++) - sizesofslots[i] = dis.readInt(); + sizesofslots[i] = dis->readInt(); for (int i = 0; i < numberofslots; i++) { char[] rawData = new char[sizesofslots[i]]; - dis.readFully(rawData); + dis->readFully(rawData); // char[] data = new char[rawData.length - IV_SIZE]; @@ -456,9 +456,9 @@ Array *CloudComm::processSlots(DataInputStream dis) { // data = decryptCipher.doFinal(data); - slots[i] = Slot.decode(table, data, mac); + slots[i] = Slot->decode(table, data, mac); } - dis.close(); + dis->close(); return slots; } @@ -470,58 +470,58 @@ Array *sendLocalData(Array *sendData, int64_t localSequenceNumber, S try { System.out.println("Passing Locally"); - mac.update(sendData); - char[] genmac = mac.doFinal(); - char[] totalData = new char[sendData.length + genmac.length]; + mac->update(sendData); + char[] genmac = mac->doFinal(); + char[] totalData = new char[sendData->length + genmac->length]; System.arraycopy(sendData, 0, totalData, 0, sendData.length); - System.arraycopy(genmac, 0, totalData, sendData.length, genmac.length); + System.arraycopy(genmac, 0, totalData, sendData.length, genmac->length); // Encrypt the data for sending // char[] encryptedData = encryptCipher.doFinal(totalData); // char[] encryptedData = encryptCipher.doFinal(totalData); - char[] iv = createIV(table.getMachineId(), table.getLocalSequenceNumber()); + char[] iv = createIV(table->getMachineId(), table->getLocalSequenceNumber()); char[] encryptedData = encryptSlotAndPrependIV(totalData, iv); // Open a TCP socket connection to a local device Socket socket = new Socket(host, port); - socket.setReuseAddress(true); - DataOutputStream output = new DataOutputStream(socket.getOutputStream()); - DataInputStream input = new DataInputStream(socket.getInputStream()); + socket->setReuseAddress(true); + DataOutputStream output = new DataOutputStream(socket->getOutputStream()); + DataInputStream input = new DataInputStream(socket->getInputStream()); - timer.startTime(); + timer->startTime(); // Send data to output (length of data, the data) - output.writeInt(encryptedData.length); - output.write(encryptedData, 0, encryptedData.length); - output.flush(); + output->writeInt(encryptedData->length); + output->write(encryptedData, 0, encryptedData->length); + output->flush(); - int lengthOfReturnData = input.readInt(); + int lengthOfReturnData = input->readInt(); char[] returnData = new char[lengthOfReturnData]; - input.readFully(returnData); + input->readFully(returnData); - timer.endTime(); + timer->endTime(); - // returnData = decryptCipher.doFinal(returnData); + // returnData = decryptCipher->doFinal(returnData); returnData = stripIVAndDecryptSlot(returnData); - // returnData = decryptCipher.doFinal(returnData); + // returnData = decryptCipher->doFinal(returnData); // We are done with this socket - socket.close(); + socket->close(); - mac.update(returnData, 0, returnData.length - HMAC_SIZE); - char[] realmac = mac.doFinal(); + mac->update(returnData, 0, returnData->length - HMAC_SIZE); + char[] realmac = mac->doFinal(); char[] recmac = new char[HMAC_SIZE]; - System.arraycopy(returnData, returnData.length - realmac.length, recmac, 0, realmac.length); + System->arraycopy(returnData, returnData->length - realmac->length, recmac, 0, realmac->length); - if (!Arrays.equals(recmac, realmac)) + if (!Arrays->equals(recmac, realmac)) throw new Error("Local Error: Invalid HMAC! Potential Attack!"); - char[] returnData2 = new char[lengthOfReturnData - recmac.length]; - System.arraycopy(returnData, 0, returnData2, 0, returnData2.length); + char[] returnData2 = new char[lengthOfReturnData - recmac->length]; + System->arraycopy(returnData, 0, returnData2, 0, returnData2->length); return returnData2; } catch (Exception e) { - e.printStackTrace(); + e->printStackTrace(); // throw new Error("Local comms failure..."); } @@ -536,10 +536,10 @@ void CloudComm::localServerWorkerFunction() { try { // Local server socket inputSocket = new ServerSocket(listeningPort); - inputSocket.setReuseAddress(true); - inputSocket.setSoTimeout(TIMEOUT_MILLIS); + inputSocket->setReuseAddress(true); + inputSocket->setSoTimeout(TIMEOUT_MILLIS); } catch (Exception e) { - e.printStackTrace(); + e->printStackTrace(); throw new Error("Local server setup failure..."); } @@ -547,58 +547,58 @@ void CloudComm::localServerWorkerFunction() { try { // Accept incoming socket - Socket socket = inputSocket.accept(); + Socket socket = inputSocket->accept(); - DataInputStream input = new DataInputStream(socket.getInputStream()); - DataOutputStream output = new DataOutputStream(socket.getOutputStream()); + DataInputStream input = new DataInputStream(socket->getInputStream()); + DataOutputStream output = new DataOutputStream(socket->getOutputStream()); // Get the encrypted data from the server - int dataSize = input.readInt(); + int dataSize = input->readInt(); char[] readData = new char[dataSize]; - input.readFully(readData); + input->readFully(readData); - timer.endTime(); + timer->endTime(); // Decrypt the data - // readData = decryptCipher.doFinal(readData); + // readData = decryptCipher->doFinal(readData); readData = stripIVAndDecryptSlot(readData); - mac.update(readData, 0, readData.length - HMAC_SIZE); - char[] genmac = mac.doFinal(); + mac->update(readData, 0, readData->length - HMAC_SIZE); + char[] genmac = mac->doFinal(); char[] recmac = new char[HMAC_SIZE]; - System.arraycopy(readData, readData.length - recmac.length, recmac, 0, recmac.length); + System->arraycopy(readData, readData->length - recmac->length, recmac, 0, recmac->length); - if (!Arrays.equals(recmac, genmac)) + if (!Arrays->equals(recmac, genmac)) throw new Error("Local Error: Invalid HMAC! Potential Attack!"); - char[] returnData = new char[readData.length - recmac.length]; - System.arraycopy(readData, 0, returnData, 0, returnData.length); + char[] returnData = new char[readData->length - recmac->length]; + System->arraycopy(readData, 0, returnData, 0, returnData->length); // Process the data - // char[] sendData = table.acceptDataFromLocal(readData); - char[] sendData = table.acceptDataFromLocal(returnData); + // char[] sendData = table->acceptDataFromLocal(readData); + char[] sendData = table->acceptDataFromLocal(returnData); - mac.update(sendData); - char[] realmac = mac.doFinal(); - char[] totalData = new char[sendData.length + realmac.length]; - System.arraycopy(sendData, 0, totalData, 0, sendData.length); - System.arraycopy(realmac, 0, totalData, sendData.length, realmac.length); + mac->update(sendData); + char[] realmac = mac->doFinal(); + char[] totalData = new char[sendData->length + realmac->length]; + System->arraycopy(sendData, 0, totalData, 0, sendData->length); + System->arraycopy(realmac, 0, totalData, sendData->length, realmac->length); // Encrypt the data for sending - // char[] encryptedData = encryptCipher.doFinal(totalData); - char[] iv = createIV(table.getMachineId(), table.getLocalSequenceNumber()); + // char[] encryptedData = encryptCipher->doFinal(totalData); + char[] iv = createIV(table->getMachineId(), table->getLocalSequenceNumber()); char[] encryptedData = encryptSlotAndPrependIV(totalData, iv); - timer.startTime(); + timer->startTime(); // Send data to output (length of data, the data) - output.writeInt(encryptedData.length); - output.write(encryptedData, 0, encryptedData.length); - output.flush(); + output->writeInt(encryptedData->length); + output->write(encryptedData, 0, encryptedData->length); + output->flush(); // close the socket - socket.close(); + socket->close(); } catch (Exception e) { } @@ -606,9 +606,9 @@ void CloudComm::localServerWorkerFunction() { if (inputSocket != NULL) { try { - inputSocket.close(); + inputSocket->close(); } catch (Exception e) { - e.printStackTrace(); + e->printStackTrace(); throw new Error("Local server close failure..."); } } @@ -619,9 +619,9 @@ void CloudComm::close() { if (localServerThread != NULL) { try { - localServerThread.join(); + localServerThread->join(); } catch (Exception e) { - e.printStackTrace(); + e->printStackTrace(); throw new Error("Local Server thread join issue..."); } } diff --git a/version2/src/C/CloudComm.h b/version2/src/C/CloudComm.h index 4b958ae..0413ca0 100644 --- a/version2/src/C/CloudComm.h +++ b/version2/src/C/CloudComm.h @@ -62,7 +62,7 @@ public: /** * Constructor for actual use. Takes in the url and password. */ - CloudComm(Table _table, String _baseurl, String _password, int _listeningPort); + CloudComm(Table* _table, IoTString* _baseurl, IoTString* _password, int _listeningPort); /** * Inits all the security stuff @@ -74,7 +74,7 @@ public: * On failure, the server will send slots with newer sequence * numbers. */ - Array *putSlot(Slot slot, int max); + Array *putSlot(Slot* slot, int max); /** * Request the server to send all slots with the given @@ -88,7 +88,7 @@ public: * server response. Shared by both putSlot and getSlots. */ - Array *sendLocalData(Array *sendData, int64_t localSequenceNumber, String host, int port); + Array *sendLocalData(Array *sendData, int64_t localSequenceNumber, IoTString* host, int port); public void close(); }; #endif diff --git a/version2/src/C/TransactionStatus.cc b/version2/src/C/TransactionStatus.cc deleted file mode 100644 index 1daee97..0000000 --- a/version2/src/C/TransactionStatus.cc +++ /dev/null @@ -1,50 +0,0 @@ - -class TransactionStatus { - static final char StatusAborted = 1; - static final char StatusPending = 2; - static final char StatusCommitted = 3; - // static final char StatusRetrying = 4; - static final char StatusSentPartial = 5; - static final char StatusSentFully = 6; - static final char StatusNoEffect = 10; - - char status = 0; - bool applicationReleased = false; - bool wasSentInChain = false; - int64_t transactionSequenceNumber = 0; - int64_t arbitrator = -1; - - - TransactionStatus(char _status, int64_t _arbitrator) { - status = _status; - arbitrator = _arbitrator; - } - - char getStatus() { - return status; - } - - void setStatus(char _status) { - status = _status; - } - - int64_t getTransactionSequenceNumber() { - return transactionSequenceNumber; - } - - void setTransactionSequenceNumber(int64_t _transactionSequenceNumber) { - transactionSequenceNumber = _transactionSequenceNumber; - } - - int64_t getTransactionArbitrator() { - return arbitrator; - } - - void release() { - applicationReleased = true; - } - - bool getReleased() { - return applicationReleased; - } -} diff --git a/version2/src/C/TransactionStatus.h b/version2/src/C/TransactionStatus.h index d153743..b3c696d 100644 --- a/version2/src/C/TransactionStatus.h +++ b/version2/src/C/TransactionStatus.h @@ -1,50 +1,37 @@ +#ifndef TRANSACTIONSTATUS_H +#define TRANSACTIONSTATUS_H -class TransactionStatus { - static final char StatusAborted = 1; - static final char StatusPending = 2; - static final char StatusCommitted = 3; - // static final char StatusRetrying = 4; - static final char StatusSentPartial = 5; - static final char StatusSentFully = 6; - static final char StatusNoEffect = 10; - - private char status = 0; - private bool applicationReleased = false; - private bool wasSentInChain = false; - private int64_t transactionSequenceNumber = 0; - private int64_t arbitrator = -1; - - - public TransactionStatus(char _status, int64_t _arbitrator) { - status = _status; - arbitrator = _arbitrator; - } - - public char getStatus() { - return status; - } - - public void setStatus(char _status) { - status = _status; - } +#define TransactionStatus_StatusAborted 1 +#define TransactionStatus_StatusPending 2 +#define TransactionStatus_StatusCommitted 3 +#define TransactionStatus_StatusRetrying 4 +#define TransactionStatus_StatusSentPartial 5 +#define TransactionStatus_StatusSentFully 6 +#define TransactionStatus_StatusNoEffect 10 - public int64_t getTransactionSequenceNumber() { - return transactionSequenceNumber; - } - - public void setTransactionSequenceNumber(int64_t _transactionSequenceNumber) { - transactionSequenceNumber = _transactionSequenceNumber; - } - - public int64_t getTransactionArbitrator() { - return arbitrator; - } - - public void release() { - applicationReleased = true; - } - - public bool getReleased() { - return applicationReleased; - } -} +class TransactionStatus { + private: + char status; + bool applicationReleased; + bool wasSentInChain; + int64_t transactionSequenceNumber; + int64_t arbitrator; + + public: + TransactionStatus(char _status, int64_t _arbitrator) : + status(_status), + applicationReleased(false), + wasSentInChain(false), + transactionSequenceNumber(0), + arbitrator(_arbitrator) { + } + + char getStatus() { return status; } + void setStatus(char _status) { status = _status; } + int64_t getTransactionSequenceNumber() { return transactionSequenceNumber; } + void setTransactionSequenceNumber(int64_t _transactionSequenceNumber) { transactionSequenceNumber = _transactionSequenceNumber; } + int64_t getTransactionArbitrator() { return arbitrator; } + void release() { applicationReleased = true;} + bool getReleased() { return applicationReleased;} +}; +#endif -- 2.34.1