linked temporary ip of nodes to flo ids

This commit is contained in:
Abhishek Sinha 2019-04-08 14:39:21 +05:30
parent 9b57c5f787
commit a322b23094
2 changed files with 117 additions and 20 deletions

View File

@ -13691,13 +13691,13 @@
async handle_backup_server_messages(evt) { async handle_backup_server_messages(evt) {
var response = evt.data; var response = evt.data;
console.log('backup response: '+response); console.log('backup response: '+response);
// let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId");
// if (isRequestToLinkIp>=0) {
// linkIpToFloId(response);
// return;
// }
let isItANodeLeavingMessage = response.search(`\\-- left`);
if(isItANodeLeavingMessage >= 0) {
reactor.dispatchEvent('fireNodeGoodByeEvent', response);
}
var res_pos = response.indexOf('{'); var res_pos = response.indexOf('{');
if (res_pos >= 0) { if (res_pos >= 0) {
let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId"); let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId");
@ -14075,6 +14075,25 @@
updateinDB('ipTable', { updateinDB('ipTable', {
'flo_public_key': req_params.requesters_pub_key, 'flo_public_key': req_params.requesters_pub_key,
'temporary_ip': incoming_msg_local_ip 'temporary_ip': incoming_msg_local_ip
}).then((ipRes)=>{
reactor.dispatchEvent('fireNodeWelcomeBackEvent', ipRes);
}).finally(()=>{
linkBackOthersLocalIPToTheirFloId();
});
}
break;
case "link_Others_Local_IP_To_Their_Flo_Id":
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
const req_params = res_obj.params[0];
if(typeof req_params.requesters_pub_key !== "string") return;
let flo_addr_for_pubkey = bitjs.FLO_TEST.pubkey2address(req_params.requesters_pub_key);
if(typeof flo_addr_for_pubkey !== "string") return;
if(flo_addr_for_pubkey !== res_obj.globalParams.senderFloId) return;
updateinDB('ipTable', {
'flo_public_key': req_params.requesters_pub_key,
'temporary_ip': incoming_msg_local_ip
}).then((ipRes)=>{
reactor.dispatchEvent('fireNodeWelcomeBackEvent', ipRes);
}); });
} }
break; break;
@ -14270,19 +14289,33 @@
async function onMessage(evt) { async function onMessage(evt) {
var response = evt.data; var response = evt.data;
// If the message is about leaving of a node determine its FLO Id
// and fire respective events
let isItANodeLeavingMessage = response.search(`\\-- left`);
if(isItANodeLeavingMessage >= 0) {
reactor.dispatchEvent('fireNodeGoodByeEvent', response);
}
// let isItANodeJoiningMessage = response.search(`\\++ joined`);
// if(isItANodeJoiningMessage >= 0) {
// reactor.dispatchEvent('fireNodeWelcomeBackEvent', response);
// }
var res_pos = response.indexOf('{'); var res_pos = response.indexOf('{');
if (res_pos >= 0) { if (res_pos >= 0) {
// Link Temporary IP Address to FLO ID
let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId"); let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId");
let incoming_msg_local_ip = ``; let incoming_msg_local_ip = ``;
if (isRequestToLinkIp>=0) { if (isRequestToLinkIp>=0) {
let index_of_ip = response.indexOf(' '); let index_of_ip = response.indexOf(' ');
if (incoming_msg_local_ip>=0) { if (index_of_ip>=0) {
incoming_msg_local_ip = response.substr(0, index_of_ip); incoming_msg_local_ip = response.substr(0, index_of_ip);
} }
} }
var res = response.substr(res_pos); var res = response.substr(res_pos);
try { try {
var res_obj = JSON.parse(res); var res_obj = JSON.parse(res);
@ -14850,7 +14883,7 @@
} }
return false; return false;
} }
break; break;
case "add_user_public_data": case "add_user_public_data":
let supernode_flo_public_key = localbitcoinplusplus.wallets.my_local_flo_public_key; let supernode_flo_public_key = localbitcoinplusplus.wallets.my_local_flo_public_key;
@ -15052,6 +15085,24 @@
break; break;
case "link_My_Local_IP_To_My_Flo_Id": case "link_My_Local_IP_To_My_Flo_Id":
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
const req_params = res_obj.params[0];
if(typeof req_params.requesters_pub_key !== "string") return;
let flo_addr_for_pubkey = bitjs.FLO_TEST.pubkey2address(req_params.requesters_pub_key);
if(typeof flo_addr_for_pubkey !== "string") return;
if(flo_addr_for_pubkey !== res_obj.globalParams.senderFloId) return;
updateinDB('ipTable', {
'flo_public_key': req_params.requesters_pub_key,
'temporary_ip': incoming_msg_local_ip
}).then((ipRes)=>{
reactor.dispatchEvent('fireNodeWelcomeBackEvent', ipRes);
}).finally(()=>{
linkBackOthersLocalIPToTheirFloId();
});
}
break;
case "link_Others_Local_IP_To_Their_Flo_Id":
if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") { if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") {
const req_params = res_obj.params[0]; const req_params = res_obj.params[0];
if(typeof req_params.requesters_pub_key !== "string") return; if(typeof req_params.requesters_pub_key !== "string") return;
@ -15061,6 +15112,8 @@
updateinDB('ipTable', { updateinDB('ipTable', {
'flo_public_key': req_params.requesters_pub_key, 'flo_public_key': req_params.requesters_pub_key,
'temporary_ip': incoming_msg_local_ip 'temporary_ip': incoming_msg_local_ip
}).then((ipRes)=>{
reactor.dispatchEvent('fireNodeWelcomeBackEvent', ipRes);
}); });
} }
break; break;
@ -15417,7 +15470,7 @@
var db; var db;
const DBName = "localbitcoinDB"; const DBName = "localbitcoinDB";
const request = window.indexedDB.open(DBName, 2); const request = window.indexedDB.open(DBName, 3);
request.onerror = function (event) { request.onerror = function (event) {
//https://stackoverflow.com/questions/13972385/invalidstateerror-while-opening-indexeddb-in-firefox //https://stackoverflow.com/questions/13972385/invalidstateerror-while-opening-indexeddb-in-firefox
@ -15592,6 +15645,9 @@
var objectStore = db.createObjectStore("ipTable", { var objectStore = db.createObjectStore("ipTable", {
keyPath: 'flo_public_key' keyPath: 'flo_public_key'
}); });
objectStore.createIndex('temporary_ip', 'temporary_ip', {
unique: false
});
} }
} }
@ -16196,11 +16252,13 @@
if (!localbitcoinplusplus.master_configurations.supernodesPubKeys if (!localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
let kbuck = localbitcoinplusplus.kademlia.floIdToKbucketId("FLO_TEST", MY_LOCAL_FLO_ADDRESS); let kbuck = localbitcoinplusplus.kademlia.floIdToKbucketId("FLO_TEST", MY_LOCAL_FLO_ADDRESS);
readDB('kBucketStore', kbuck).then(userKBData=>{ readDB('kBucketStore', kbuck).then(async userKBData=>{
if(typeof userKBData == "undefined") { if(typeof userKBData == "undefined") {
msf = `WARNING: Failed to determine KBucket Id and hence failed to send Kbucket Id to Supernode.` userKBData = await localbitcoinplusplus.kademlia
showMessage(msf) .addNewUserNodeInKbucketAndDB("FLO_TEST", MY_LOCAL_FLO_ADDRESS, {id:MY_LOCAL_FLO_ADDRESS}, KB=KBucket);
throw new Error(msf) // msf = `WARNING: Failed to determine KBucket Id and hence failed to send Kbucket Id to Supernode.`
// showMessage(msf)
// throw new Error(msf)
}; };
let addNewKNode = localbitcoinplusplus.rpc.prototype let addNewKNode = localbitcoinplusplus.rpc.prototype
.send_rpc .send_rpc
@ -16864,7 +16922,7 @@
requesters_pub_key: localbitcoinplusplus.wallets.my_local_flo_public_key, requesters_pub_key: localbitcoinplusplus.wallets.my_local_flo_public_key,
trader_flo_address: localbitcoinplusplus.wallets.my_local_flo_address trader_flo_address: localbitcoinplusplus.wallets.my_local_flo_address
}); });
doSend(send_backup_request); doSend(send_backup_request);
} }
function linkMyLocalIPToMyFloId() { function linkMyLocalIPToMyFloId() {
@ -16877,9 +16935,15 @@
}); });
doSend(request); doSend(request);
} }
function linkBackOthersLocalIPToTheirFloId() {
function linkIpToFloId(params) { const RM_RPC = new localbitcoinplusplus.rpc;
console.log(params); let request = RM_RPC.send_rpc.call(this,
"link_Others_Local_IP_To_Their_Flo_Id", {
"JOB": "linkBackOthersLocalIPToTheirFloId",
requesters_pub_key: localbitcoinplusplus.wallets.my_local_flo_public_key,
requesters_flo_address: localbitcoinplusplus.wallets.my_local_flo_address
});
doSend(request);
} }
</script> </script>
@ -16889,6 +16953,39 @@
reactor.registerEvent('primary_supernode_down'); reactor.registerEvent('primary_supernode_down');
reactor.registerEvent('backup_supernode_up'); reactor.registerEvent('backup_supernode_up');
reactor.registerEvent('backup_supernode_down'); reactor.registerEvent('backup_supernode_down');
reactor.registerEvent('fireNodeWelcomeBackEvent');
reactor.addEventListener('fireNodeWelcomeBackEvent', function(evt) {
let getFLOId = bitjs.FLO_TEST.pubkey2address(evt.flo_public_key);
if(localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(evt.flo_public_key)) {
msg = `INFO: Supernode ${getFLOId} joined.`;
} else {
msg = `INFO: User node ${getFLOId} joined.`;
}
showMessage(msg);
})
reactor.registerEvent('fireNodeGoodByeEvent');
reactor.addEventListener('fireNodeGoodByeEvent', function(evt_msg) {
console.log(evt_msg);
let i = evt_msg.indexOf(' ')
let temp_ip = evt_msg.substr(0, i)
console.log(temp_ip);
readDBbyIndex('ipTable', 'temporary_ip', temp_ip).then((op)=>{
console.log(op);
if(op.length < 1 || typeof op[0].temporary_ip !== 'string') return;
let getFLOId = bitjs.FLO_TEST.pubkey2address(op[0].flo_public_key);
if(localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(op[0].flo_public_key)) {
msg = `INFO: Supernode ${getFLOId} left.`;
} else {
msg = `INFO: User node ${getFLOId} left.`;
}
showMessage(msg);
});
})
</script> </script>
</body> </body>

View File

@ -6,7 +6,7 @@
#include "mongoose.h" #include "mongoose.h"
static sig_atomic_t s_signal_received = 0; static sig_atomic_t s_signal_received = 0;
static const char *s_http_port = "9001"; static const char *s_http_port = "9003";
static struct mg_serve_http_opts s_http_server_opts; static struct mg_serve_http_opts s_http_server_opts;
static void signal_handler(int sig_num) { static void signal_handler(int sig_num) {