diff --git a/supernode/index.html b/supernode/index.html
index 9404cb8..5e51c3a 100644
--- a/supernode/index.html
+++ b/supernode/index.html
@@ -14950,7 +14950,8 @@
wsUri = await localbitcoinplusplus.kademlia.getSupernodeSeed(idbData.myLocalFLOAddress);
if (localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(idbData.myLocalFLOPublicKey)) {
- if (wsUri[0].trader_flo_address !== idbData.myLocalFLOAddress) {
+ const getClosestSuList = await readAllDB('closestSupernodesTable');
+ if (wsUri[0].trader_flo_address !== idbData.myLocalFLOAddress || getClosestSuList.length < 3) {
showMessage(`INFO: Invalid connection. Refreshing the closest supernode list in DB.`);
wsUri = await localbitcoinplusplus.kademlia.updateClosestSupernodeSeeds(idbData.myLocalFLOAddress);
}
@@ -15033,8 +15034,9 @@
var res_pos = response.indexOf('{');
if (res_pos >= 0) {
let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId");
+ let isRequestToLinkOthersIp = response.search("link_Others_Local_IP_To_Their_Flo_Id");
let incoming_msg_local_ip = ``;
- if (isRequestToLinkIp>=0) {
+ if (isRequestToLinkIp>=0 || isRequestToLinkOthersIp>=0) {
let index_of_ip = response.indexOf(' ');
if (incoming_msg_local_ip>=0) {
incoming_msg_local_ip = response.substr(0, index_of_ip);
@@ -15434,11 +15436,17 @@
readAllDB('kBucketStore')
.then(myKBData=>{
myKBData.receiver_flo_address = sender;
- myKBData.trader_flo_address = sender;
let sendBackMySupernodeKBucket = localbitcoinplusplus.rpc.prototype
.send_rpc
.call(this, "SupernodesKBucketDataResponse", myKBData);
- doSend(sendBackMySupernodeKBucket);
+
+ localbitcoinplusplus.kademlia.determineClosestSupernode(sender)
+ .then(my_closest_su=>{
+ console.log(sendBackMySupernodeKBucket);
+
+ sendBackMySupernodeKBucket.globalParams.primarySupernode = my_closest_su[0].data.id;
+ return sendBackMySupernodeKBucket;
+ }).then((sendBackMySupernodeKBucket)=>doSend(sendBackMySupernodeKBucket));
})
}
);
@@ -15692,8 +15700,9 @@
if (res_pos >= 0) {
// Link Temporary IP Address to FLO ID
let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId");
+ let isRequestToLinkOthersIp = response.search("link_Others_Local_IP_To_Their_Flo_Id");
let incoming_msg_local_ip = ``;
- if (isRequestToLinkIp>=0) {
+ if (isRequestToLinkIp>=0 || isRequestToLinkOthersIp>=0) {
let index_of_ip = response.indexOf(' ');
if (index_of_ip>=0) {
incoming_msg_local_ip = response.substr(0, index_of_ip);
@@ -15709,7 +15718,7 @@
if (!isIncomingMessageValid) return;
- if(typeof res_obj.globalParams.senderFloId !=="string" && res_obj.globalParams.senderFloId.length<1)
+ if(typeof res_obj.globalParams.senderFloId !=="string")
throw new Error(`WARNING: The request did not contain sender FLO Id. Request Aborted.`);
// Check if request is from primary user or backup user
@@ -15725,7 +15734,7 @@
if ((typeof get_requester_supernode[0] !== "object"
|| typeof get_requester_supernode[0].data.id !=="string") &&
typeof res_obj.globalParams.primarySupernode !=="string") {
- console.log("NEED TO ADD PRIMARY SU IN BELOW METHOD: ");
+ console.log("******NEED TO ADD PRIMARY SU IN BELOW METHOD******: ");
console.log(res_obj);
}
@@ -16366,11 +16375,11 @@
break;
case "update_external_file_request":
- RM_RPC.filter_legit_requests(res_obj.params[0].user_flo_address, is_valid_request => {
+ RM_RPC.filter_legit_requests(res_obj.params[0].trader_flo_address, is_valid_request => {
if (is_valid_request !== true) return false;
let update_script_request = res_obj.params[0];
- if (typeof update_script_request.user_flo_address !== "string") throw new Error(
+ if (typeof update_script_request.trader_flo_address !== "string") throw new Error(
"Unknown user");
let server_pubkey = localbitcoinplusplus.wallets.my_local_flo_public_key;
@@ -16387,13 +16396,13 @@
.MY_SUPERNODE_PRIVATE_KEY);
response_from_sever = RM_RPC.send_rpc
.call(this, "update_external_file_server_response", {
- trader_flo_address: update_script_request.user_flo_address,
+ trader_flo_address: update_script_request.trader_flo_address,
file_updated: file_details,
server_sign: server_sign,
server_pubkey: server_pubkey,
filename: update_script_request.file_to_update,
- trader_flo_address: update_script_request.user_flo_address,
- receiver_flo_address: update_script_request.user_flo_address
+ trader_flo_address: update_script_request.trader_flo_address,
+ receiver_flo_address: update_script_request.trader_flo_address
});
doSend(response_from_sever);
}
@@ -16407,13 +16416,13 @@
.MY_SUPERNODE_PRIVATE_KEY);
response_from_sever = RM_RPC.send_rpc
.call(this, "update_external_file_server_response", {
- trader_flo_address: update_script_request.user_flo_address,
+ trader_flo_address: update_script_request.trader_flo_address,
file_updated: file_details,
server_sign: server_sign,
server_pubkey: server_pubkey,
filename: "UPDATE_ALL_FILES",
- receiver_flo_address: update_script_request.user_flo_address,
- trader_flo_address: update_script_request.user_flo_address,
+ receiver_flo_address: update_script_request.trader_flo_address,
+ trader_flo_address: update_script_request.trader_flo_address,
});
doSend(response_from_sever);
}
@@ -16459,7 +16468,8 @@
case "addNewKbucketNode":
try {
let mss = '';
- localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.senderFloId)
+ let tid = res_obj.params[0].trader_flo_address || res_obj.globalParams.senderFloId;
+ localbitcoinplusplus.kademlia.determineClosestSupernode(tid)
.then(async my_closest_su=>{
const newKbucketObjectObj = res_obj.params[0];
@@ -16681,15 +16691,16 @@
let isItANodeLeavingMessage = response.search(`\\-- left`);
if(isItANodeLeavingMessage >= 0) {
- //reactor.dispatchEvent('fireNodeGoodByeEvent', response);
+ reactor.dispatchEvent('fireNodeGoodByeEvent', response);
}
var res_pos = response.indexOf('{');
if (res_pos >= 0) {
// Link Temporary IP Address to FLO ID
let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId");
+ let isRequestToLinkOthersIp = response.search("link_Others_Local_IP_To_Their_Flo_Id");
let incoming_msg_local_ip = ``;
- if (isRequestToLinkIp>=0) {
+ if (isRequestToLinkIp>=0 || isRequestToLinkOthersIp>=0) {
let index_of_ip = response.indexOf(' ');
if (index_of_ip>=0) {
incoming_msg_local_ip = response.substr(0, index_of_ip);
@@ -17467,11 +17478,11 @@
break;
case "update_external_file_request":
- RM_RPC.filter_legit_requests(res_obj.params[0].user_flo_address, is_valid_request => {
+ RM_RPC.filter_legit_requests(res_obj.params[0].trader_flo_address, is_valid_request => {
if (is_valid_request !== true) return false;
let update_script_request = res_obj.params[0];
- if (typeof update_script_request.user_flo_address !== "string") throw new Error(
+ if (typeof update_script_request.trader_flo_address !== "string") throw new Error(
"Unknown user");
let server_pubkey = localbitcoinplusplus.wallets.my_local_flo_public_key;
@@ -17502,12 +17513,12 @@
.MY_SUPERNODE_PRIVATE_KEY);
response_from_sever = RM_RPC.send_rpc
.call(this, "update_external_file_server_response", {
- trader_flo_address: update_script_request.user_flo_address,
+ trader_flo_address: update_script_request.trader_flo_address,
file_updated: file_details,
server_sign: server_sign,
server_pubkey: server_pubkey,
filename: update_script_request.file_to_update,
- receiver_flo_address: update_script_request.user_flo_address
+ receiver_flo_address: update_script_request.trader_flo_address
});
doSend(response_from_sever);
}
@@ -17521,12 +17532,12 @@
.MY_SUPERNODE_PRIVATE_KEY);
response_from_sever = RM_RPC.send_rpc
.call(this, "update_external_file_server_response", {
- trader_flo_address: update_script_request.user_flo_address,
+ trader_flo_address: update_script_request.trader_flo_address,
file_updated: file_details,
server_sign: server_sign,
server_pubkey: server_pubkey,
filename: "UPDATE_ALL_FILES",
- receiver_flo_address: update_script_request.user_flo_address,
+ receiver_flo_address: update_script_request.trader_flo_address,
});
doSend(response_from_sever);
}
@@ -17586,7 +17597,8 @@
case "addNewKbucketNode":
try {
let mss = '';
- localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.senderFloId)
+ let tid = res_obj.params[0].trader_flo_address || res_obj.globalParams.senderFloId;
+ localbitcoinplusplus.kademlia.determineClosestSupernode(tid)
.then(async my_closest_su=>{
const newKbucketObjectObj = res_obj.params[0];
@@ -18791,7 +18803,7 @@
let update_external_file = RM_RPC
.send_rpc
.call(this, "update_external_file_request", {
- user_flo_address: user_flo_address,
+ trader_flo_address: user_flo_address,
file_to_update: filename,
receiver_flo_address: localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS,
});
@@ -18871,14 +18883,12 @@
if(typeof userKBData == "undefined") {
userKBData = await localbitcoinplusplus.kademlia
.addNewUserNodeInKbucketAndDB("FLO_TEST", MY_LOCAL_FLO_ADDRESS, {id:MY_LOCAL_FLO_ADDRESS}, KB=KBucket);
- // 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
.send_rpc
.call(this, "addNewKbucketNode", {
- newKbucketNode: userKBData
+ newKbucketNode: userKBData,
+ trader_flo_address: MY_LOCAL_FLO_ADDRESS
});
console.log(addNewKNode);
@@ -19546,7 +19556,7 @@
"link_My_Local_IP_To_My_Flo_Id", {
"JOB": "linkMyLocalIPToMyFloId",
requesters_pub_key: localbitcoinplusplus.wallets.my_local_flo_public_key,
- requesters_flo_address: localbitcoinplusplus.wallets.my_local_flo_address
+ trader_flo_address: localbitcoinplusplus.wallets.my_local_flo_address
});
doSend(request);
}
@@ -19556,7 +19566,7 @@
"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
+ trader_flo_address: localbitcoinplusplus.wallets.my_local_flo_address
});
doSend(request);
}
@@ -19603,7 +19613,7 @@
reactor.registerEvent('getNeighborSupernodesItsVectorClockStatusForADeadSupernodeDB');
reactor.addEventListener('getNeighborSupernodesItsVectorClockStatusForADeadSupernodeDB', async function(leaving_supernode_flo_id) {
let getNextClosestSuObj = await localbitcoinplusplus.kademlia.determineClosestSupernode(leaving_supernode_flo_id, 3);
- let nextBackupSupernode = getNextClosestSuObj[0].data.id;
+ let nextBackupSupernode = getNextClosestSuObj[1].data.id;
if (typeof nextBackupSupernode !== "string") {
let msg = `WARNING: Failed to determine next closest backup supernode for ${leaving_supernode_flo_id}.`;
@@ -19611,21 +19621,25 @@
throw new Error(msg);
}
+ const RM_RPC = new localbitcoinplusplus.rpc;
+
if (nextBackupSupernode == localbitcoinplusplus.wallets.my_local_flo_address) {
- getNextClosestSuObj.map(nextSu=>{
- let nextSuConn = localbitcoinplusplus.backupWS.nextSu;
- if(typeof nextSuConn !== "string") {
- let msg = `WARNING: Failed to open a backup WS connection with Supernode ${nextSu}.`;
- showMessage(msg);
- throw new Error(msg);
- }
- let server_response = RM_RPC
- .send_rpc
- .call(this, "getNeighborSupernodesItsVectorClockStatusForADeadSupernodeDBReq", {
- leaving_supernode_flo_id:leaving_supernode_flo_id
- });
- server_response.globalParams.primarySupernode = nextBackupSupernode;
- nextSuConn.ws_connection.send(server_response);
+ getNextClosestSuObj.map((nextSu, i)=>{
+ if((i>0) && (nextSu.data.id !==localbitcoinplusplus.wallets.my_local_flo_address)) {
+ let nextSuConn = localbitcoinplusplus.backupWS[nextSu.data.id];
+ if(typeof nextSuConn !== "object") {
+ let msg = `WARNING: Failed to open a backup WS connection with Supernode ${nextSu}.`;
+ showMessage(msg);
+ throw new Error(msg);
+ }
+ let server_response = RM_RPC
+ .send_rpc
+ .call(this, "getNeighborSupernodesItsVectorClockStatusForADeadSupernodeDBReq", {
+ leaving_supernode_flo_id:leaving_supernode_flo_id
+ });
+ server_response.globalParams.primarySupernode = leaving_supernode_flo_id;
+ nextSuConn.ws_connection.send(server_response);
+ }
});
}
});