void TreeNode::updateID(std::string parentID, int count){ // this is only called after an insert. The tree on which this is called is a sub-tree of someone else. // this tree might be a free hanging leaf or a whole tree // in any case, the logic is the same: whatever is before the first ":" is replaced by parentID + count. There is no need to treat leaves separately // Examples: // a tree with a leaf 0:1:=7 is added to a tree 0:2 at position 3. ---> 0:2:3:1:=7 // --- a rootleaf 0:=7 is added to the same tree and position. ---> 0:2:3:=7 std::string newID; std::string currentID = getNodeID(); int index = currentID.find(":"); std::string tailID; if (index == -1) { tailID = ""; } else { tailID = currentID.substr(index); } newID = parentID + ":" + convertIntToStr(count) + tailID; // DEBUG("Setting new ID: " << newID); setNodeID(newID); for (unsigned int i = 0; i < getNumChildren(); i++) { getChild(i)->updateID(parentID, count); } }
std::string TreeNode::findIDForNode(const std::string& parent, int childno, shared_ptr<NodeContent> node) { NodeContentType type = node->getType(); std::string value; if (type == NodeContentType::leaf) { return findIDForNode(parent, childno, type, convertIntToStr(node->getLeafValue())); } else { return findIDForNode(parent, childno, type); } }
/* Build a JSON message to query a block hash */ char* constructGetBlockHashJSONMsg(int blockHeight) { char* blockHeightStr = convertIntToStr(blockHeight); int len = strlen(blockHeightStr); char* preMsg = "{\"jsonrpc\":1.0,\"id\":\"req\",\"method\":\"getblockhash\",\"params\":[%s]}"; char* msg = (char*)malloc((62+len+1)*sizeof(char)); sprintf(msg,preMsg,blockHeightStr); free(blockHeightStr); return msg; }
std::string TreeNode::findIDForNode(const std::string& parent, int childno, NodeContentType type, const std::string& value) { if (type == NodeContentType::nil) { return ""; } if (type == NodeContentType::leaf) { if (parent == "") { return ":=" + value; } else { return parent + ":" + convertIntToStr(childno) + ":=" + value; } } if (type == NodeContentType::inner) { return parent + ":" + convertIntToStr(childno); } return ""; }
std::string TreeNode::initNodeID(shared_ptr<NodeContent> node) { switch (node->getType()) { case NodeContentType::nil: return ""; break; case NodeContentType::leaf: return "0:=" + convertIntToStr(node->getLeafValue()); break; case NodeContentType::inner: return "0"; break; default: return ""; //should never reach here } }
int writeToDisk(char* data, int blockID) { struct stat st = {0}; if (stat("blocks", &st) == -1) mkdir("blocks", 0700); char* num = convertIntToStr(blockID); char* preFileName = "./blocks/block_%s.txt"; char* fileName = (char*)malloc(sizeof(char)*(19+strlen(num)+1)); sprintf(fileName,preFileName,num); free(num); FILE *f = fopen(fileName, "w"); if (fileName!=NULL) free(fileName); if (f == NULL) return -1; /* Error opening file */ fprintf(f, "%s", data); fclose(f); return 0; }
/* Build a HTTP POST request suitable for bitcoind */ char* buildRequest(char* body, char* host,char* username, char* password, int closeConnection) { int bodyLen = strlen(body); char* bodyLenStr = convertIntToStr(bodyLen); int bodyLenStrSize = strlen(bodyLenStr); char* initialLine = "POST / HTTP/1.1\r\n"; char* preHostLine = "Host: %s\r\n"; char* hostLine = (char*)malloc(sizeof(char)*(9+strlen(host))); sprintf(hostLine,preHostLine,host); char* connectionLine = "Connection: close\r\n"; char* preAuthorizationLine = "Authorization: Basic %s\r\n"; char* credentials = (char*)malloc(sizeof(char)*(strlen(username)+strlen(password)+2)); sprintf(credentials,"%s:%s",username,password); char* basicAuthBase64Cred = base64Encode(credentials); char* authorizationLine = (char*)malloc(sizeof(char)*(24+strlen(basicAuthBase64Cred))); sprintf(authorizationLine,preAuthorizationLine,basicAuthBase64Cred); char* contentTypeLine = "Content-Type: text/plain\r\n"; char* preContentLengthLine = "Content-Length: %s\r\n"; char* contentLengthLine = (char*)malloc(sizeof(char)*(19+bodyLenStrSize)); sprintf(contentLengthLine,preContentLengthLine,bodyLenStr); char* res; char* preRes; if (closeConnection==1) { res = (char*)malloc(sizeof(char)*(strlen(initialLine)+strlen(hostLine)+strlen(connectionLine)+strlen(authorizationLine)+strlen(contentTypeLine)+strlen(contentLengthLine)+bodyLen+1+2)); preRes = "%s%s%s%s%s%s\r\n%s"; sprintf(res,preRes,initialLine,hostLine,connectionLine,authorizationLine,contentTypeLine,contentLengthLine,body); } else { res = (char*)malloc(sizeof(char)*(strlen(initialLine)+strlen(hostLine)+strlen(authorizationLine)+strlen(contentTypeLine)+strlen(contentLengthLine)+bodyLen+1+2)); preRes = "%s%s%s%s%s\r\n%s"; sprintf(res,preRes,initialLine,hostLine,authorizationLine,contentTypeLine,contentLengthLine,body); } free(bodyLenStr); free(hostLine); free(credentials); free(basicAuthBase64Cred); free(authorizationLine); free(contentLengthLine); return res; }
int testObtainCoveredFrags() { int errors = 0; std::string base = "testObtainCoveredFrags: "; vector<int> atts; atts.push_back(7); atts.push_back(8); atts.push_back(2); atts.push_back(4); atts.push_back(1); atts.push_back(3); vector<int> attFragIndices; vector<int> keyFragIndices; vector<std::string> coveredShareIDs; std::string expr = op_OR + "(1, " + op_AND + "(2,3,4), " + op_AND + "(2,5), " + op_AND + "(4,5))"; shared_ptr<BLAccessPolicy> policy = make_shared<BLAccessPolicy>(expr, 5); vector<std::string> verifShareIDs; verifShareIDs.push_back("1:1"); verifShareIDs.push_back("2:2"); verifShareIDs.push_back("2:3"); verifShareIDs.push_back("2:4"); verifShareIDs.push_back("3:2"); verifShareIDs.push_back("4:4"); vector<int> verifKeyFragIDs; verifKeyFragIDs.push_back(0); verifKeyFragIDs.push_back(1); verifKeyFragIDs.push_back(2); verifKeyFragIDs.push_back(3); verifKeyFragIDs.push_back(4); verifKeyFragIDs.push_back(6); vector<int> verifAttFragIDs; verifAttFragIDs.push_back(4); verifAttFragIDs.push_back(2); verifAttFragIDs.push_back(5); verifAttFragIDs.push_back(3); verifAttFragIDs.push_back(2); verifAttFragIDs.push_back(3); policy->obtainCoveredFrags(atts, attFragIndices, keyFragIndices, coveredShareIDs); test_diagnosis(base + "number of covered IDs", coveredShareIDs.size() == 6, errors); for (unsigned int i = 0; i < coveredShareIDs.size(); i++) { test_diagnosis(base + "coveredID " + convertIntToStr(i), coveredShareIDs[i] == verifShareIDs[i], errors); } test_diagnosis(base + "number of keyFragIndices", keyFragIndices.size() == 6, errors); for (unsigned int i = 0; i < keyFragIndices.size(); i++) { test_diagnosis(base + "keyFragIndex " + convertIntToStr(i), keyFragIndices[i] == verifKeyFragIDs[i], errors); } test_diagnosis(base + "number of attFragIndices", attFragIndices.size() == 6, errors); for (unsigned int i = 0; i < attFragIndices.size(); i++) { test_diagnosis(base + "attFragIndex " + convertIntToStr(i), attFragIndices[i] == verifAttFragIDs[i], errors); } return errors; }
string scannar::consoleMessage(int getMsg) { convertIntToStr(); switch(getMsg){ case 0: return "It works fine.\nBuilt"; break; case 1: return (err->scannarError()+lineNo); case 2: return (err->unknownType()+lineNo); case 3: return (err->invalidType()+lineNo); case 4: return (err->uninitialisedVar()+lineNo); case 5: return (err->invalidInitialisation()+lineNo); case 6: return (err->closeQuotesNotFound()+lineNo); case 7: return (err->invalidIdentifierName()+lineNo); case 8: return (err->invalidCharacter()+lineNo); case 9: return (err->invalidEscapeSeq()+lineNo); case 10: return (err->missingBegin()+"1"); case 11: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->multipleBegin()+lineNo); case 12: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidAfterEnd()+lineNo); case 13: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->endNotFound()+lineNo); case 14: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidElse()+lineNo); case 15: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->extraEndFor()+lineNo); case 16: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->extraEndWhile()+lineNo); case 17: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->extraEndIf()+lineNo); case 18: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->EOFError()+lineNo); case 19: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->incorrectEnd()+lineNo); case 20: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->extraBracket()+lineNo); case 21: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->openBracketNotFound()+lineNo); case 22: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidOpenBracket()+lineNo); case 23: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->unidentifiedBrackets()+lineNo); case 24: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->identifierNotFound()+lineNo); case 25: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidAssignment()+lineNo); case 26: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->multipleDeclaration()+lineNo); case 27: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidOperator()+lineNo); case 28: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidOperatorForString()+lineNo); case 29: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->missingSemiColon()+lineNo); case 30: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidCommand()+lineNo); case 31: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->uselessCommand()+lineNo); case 32: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidRead()+lineNo); case 33: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->multipleEnd()+lineNo); case 34: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->missingEquals()+lineNo); case 35: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->uninitAndUndeclaredVars()+lineNo); case 36: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidCharOp()+lineNo); case 37: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidParserChar()+lineNo); case 38: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->closeBracketErr()+lineNo); case 39: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->endWhile()+lineNo); case 40: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->endFor()+lineNo); case 41: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->endIf()+lineNo); case 42: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidLogicalOp()+lineNo); case 43: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->extraCloseBrackets()+lineNo); case 44: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->endLitOrVar()+lineNo); case 45: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidLoopVar()+lineNo); case 46: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidSemicolon()+lineNo); case 47: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->incrementNotFound()+lineNo); case 48: lineNumber=parse->getLineNumber(); convertIntToStr(); return (err->invalidCOPUsage()+lineNo); default : convertIntToStr(); return "An error occured at "+lineNo; } }