changed architecture, updated deposit withdraw logic
This commit is contained in:
parent
5e66c69921
commit
0ce08318a0
7
.gitignore
vendored
7
.gitignore
vendored
@ -12,3 +12,10 @@ supernode/websocket_chat
|
|||||||
supernode/cash_payments_handler2.html
|
supernode/cash_payments_handler2.html
|
||||||
.vscode/
|
.vscode/
|
||||||
supernode/test/
|
supernode/test/
|
||||||
|
|
||||||
|
server/web/supernode2.html
|
||||||
|
server/web/supernode3.html
|
||||||
|
server/web/supernode4.html
|
||||||
|
server/web/supernode5.html
|
||||||
|
server/web/supernode6.html
|
||||||
|
server/web/playground
|
||||||
@ -1,3 +0,0 @@
|
|||||||
PROG = websocket_chat
|
|
||||||
MODULE_CFLAGS = -DMG_ENABLE_FILESYSTEM=1
|
|
||||||
include ../examples.mk
|
|
||||||
@ -15421,11 +15421,6 @@
|
|||||||
localbitcoinplusplus.master_configurations.tradableAsset2.includes(
|
localbitcoinplusplus.master_configurations.tradableAsset2.includes(
|
||||||
params.currency
|
params.currency
|
||||||
) &&
|
) &&
|
||||||
typeof localbitcoinplusplus.master_configurations
|
|
||||||
.validTradingAmount !== "undefined" &&
|
|
||||||
localbitcoinplusplus.master_configurations.validTradingAmount.includes(
|
|
||||||
parseFloat(params.depositing_amount)
|
|
||||||
) &&
|
|
||||||
typeof params.trader_flo_address == "string" &&
|
typeof params.trader_flo_address == "string" &&
|
||||||
params.trader_flo_address.length > 0
|
params.trader_flo_address.length > 0
|
||||||
) {
|
) {
|
||||||
@ -15460,14 +15455,15 @@
|
|||||||
|
|
||||||
params.id = helper_functions.unique_id();
|
params.id = helper_functions.unique_id();
|
||||||
params.status = 1;
|
params.status = 1;
|
||||||
params.btc_address =
|
params.btc_address = generate_btc_keys_for_requester.address;
|
||||||
generate_btc_keys_for_requester.address;
|
|
||||||
|
|
||||||
params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash(
|
// params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash(
|
||||||
params.depositing_amount,
|
// params.depositing_amount,
|
||||||
params.currency,
|
// params.currency,
|
||||||
params.product
|
// params.product
|
||||||
);
|
// );
|
||||||
|
|
||||||
|
params.bitcoinToBePaid = Number(params.depositing_amount);
|
||||||
|
|
||||||
let receivedTradeInfo = { ...params };
|
let receivedTradeInfo = { ...params };
|
||||||
|
|
||||||
@ -15496,26 +15492,16 @@
|
|||||||
JSON.stringify(receivedTradeInfo)
|
JSON.stringify(receivedTradeInfo)
|
||||||
);
|
);
|
||||||
|
|
||||||
receivedTradeInfo[
|
receivedTradeInfo["depositDataHash"] = receivedTradeInfoHash;
|
||||||
"depositDataHash"
|
receivedTradeInfo["order_validator_sign"] = RM_WALLET.sign(
|
||||||
] = receivedTradeInfoHash;
|
|
||||||
receivedTradeInfo[
|
|
||||||
"order_validator_sign"
|
|
||||||
] = RM_WALLET.sign(
|
|
||||||
receivedTradeInfoHash,
|
receivedTradeInfoHash,
|
||||||
localbitcoinplusplus.wallets
|
localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
|
||||||
.MY_SUPERNODE_PRIVATE_KEY
|
|
||||||
);
|
);
|
||||||
receivedTradeInfo[
|
receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
|
||||||
"order_validator_public_key"
|
|
||||||
] = su_data.myLocalFLOPublicKey;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const this_btc_pvt_key =
|
const this_btc_pvt_key = generate_btc_keys_for_requester.privateKeyWIF;
|
||||||
generate_btc_keys_for_requester.privateKeyWIF;
|
const this_btc_tx_key = Crypto.util.randomBytes(64);
|
||||||
const this_btc_tx_key = Crypto.util.randomBytes(
|
|
||||||
64
|
|
||||||
);
|
|
||||||
const this_btc_pvt_key_shamirs_secret = RM_WALLET.createShamirsSecretShares(
|
const this_btc_pvt_key_shamirs_secret = RM_WALLET.createShamirsSecretShares(
|
||||||
this_btc_pvt_key,
|
this_btc_pvt_key,
|
||||||
10,
|
10,
|
||||||
@ -15663,11 +15649,6 @@
|
|||||||
localbitcoinplusplus.master_configurations.tradableAsset2.includes(
|
localbitcoinplusplus.master_configurations.tradableAsset2.includes(
|
||||||
params.currency
|
params.currency
|
||||||
) &&
|
) &&
|
||||||
typeof localbitcoinplusplus.master_configurations
|
|
||||||
.validTradingAmount !== "undefined" &&
|
|
||||||
localbitcoinplusplus.master_configurations.validTradingAmount.includes(
|
|
||||||
parseFloat(params.depositing_amount)
|
|
||||||
) &&
|
|
||||||
typeof params.trader_flo_address == "string" &&
|
typeof params.trader_flo_address == "string" &&
|
||||||
params.trader_flo_address.length > 0 &&
|
params.trader_flo_address.length > 0 &&
|
||||||
typeof params.user_upi == "string" &&
|
typeof params.user_upi == "string" &&
|
||||||
@ -15976,15 +15957,6 @@
|
|||||||
params.product
|
params.product
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
if (
|
|
||||||
!localbitcoinplusplus.master_configurations.validTradingAmount.includes(
|
|
||||||
parseFloat(params.withdrawing_amount)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
err_msg = `Withdrawal request failed: Please enter valid fiat amount.`;
|
|
||||||
showMessage(err_msg);
|
|
||||||
throw new Error(err_msg);
|
|
||||||
}
|
|
||||||
if (
|
if (
|
||||||
trade_margin.remaining_fiat_credit <= 0 ||
|
trade_margin.remaining_fiat_credit <= 0 ||
|
||||||
params.withdrawing_amount <= 0 ||
|
params.withdrawing_amount <= 0 ||
|
||||||
@ -17024,11 +16996,6 @@
|
|||||||
localbitcoinplusplus.master_configurations.tradableAsset2.includes(
|
localbitcoinplusplus.master_configurations.tradableAsset2.includes(
|
||||||
params.currency
|
params.currency
|
||||||
) &&
|
) &&
|
||||||
typeof localbitcoinplusplus.master_configurations
|
|
||||||
.validTradingAmount !== "undefined" &&
|
|
||||||
localbitcoinplusplus.master_configurations.validTradingAmount.includes(
|
|
||||||
parseFloat(params.depositing_amount)
|
|
||||||
) &&
|
|
||||||
typeof params.trader_flo_address == "string" &&
|
typeof params.trader_flo_address == "string" &&
|
||||||
params.trader_flo_address.length > 0
|
params.trader_flo_address.length > 0
|
||||||
) {
|
) {
|
||||||
@ -17066,11 +17033,13 @@
|
|||||||
params.btc_address =
|
params.btc_address =
|
||||||
generate_btc_keys_for_requester.address;
|
generate_btc_keys_for_requester.address;
|
||||||
|
|
||||||
params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash(
|
// params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash(
|
||||||
params.depositing_amount,
|
// params.depositing_amount,
|
||||||
params.currency,
|
// params.currency,
|
||||||
params.product
|
// params.product
|
||||||
);
|
// );
|
||||||
|
|
||||||
|
params.bitcoinToBePaid = Number(params.depositing_amount);
|
||||||
|
|
||||||
let receivedTradeInfo = { ...params };
|
let receivedTradeInfo = { ...params };
|
||||||
|
|
||||||
@ -17099,18 +17068,12 @@
|
|||||||
JSON.stringify(receivedTradeInfo)
|
JSON.stringify(receivedTradeInfo)
|
||||||
);
|
);
|
||||||
|
|
||||||
receivedTradeInfo[
|
receivedTradeInfo["depositDataHash"] = receivedTradeInfoHash;
|
||||||
"depositDataHash"
|
receivedTradeInfo["order_validator_sign"] = RM_WALLET.sign(
|
||||||
] = receivedTradeInfoHash;
|
|
||||||
receivedTradeInfo[
|
|
||||||
"order_validator_sign"
|
|
||||||
] = RM_WALLET.sign(
|
|
||||||
receivedTradeInfoHash,
|
receivedTradeInfoHash,
|
||||||
localbitcoinplusplus.wallets
|
localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
|
||||||
.MY_SUPERNODE_PRIVATE_KEY
|
|
||||||
);
|
);
|
||||||
receivedTradeInfo["order_validator_public_key"] =
|
receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
|
||||||
su_data.myLocalFLOPublicKey;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const this_btc_pvt_key =
|
const this_btc_pvt_key =
|
||||||
@ -19111,14 +19074,6 @@
|
|||||||
err_msg = "User address required.";
|
err_msg = "User address required.";
|
||||||
showMessage(err_msg);
|
showMessage(err_msg);
|
||||||
throw new Error(err_msg);
|
throw new Error(err_msg);
|
||||||
} else if (
|
|
||||||
!localbitcoinplusplus.master_configurations.validTradingAmount.includes(
|
|
||||||
amount
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
err_msg = "Error: Invalid deposit amount.";
|
|
||||||
showMessage(err_msg);
|
|
||||||
throw new Error(err_msg);
|
|
||||||
} else if (typeof user_upi !== "string" || user_upi.length < 1) {
|
} else if (typeof user_upi !== "string" || user_upi.length < 1) {
|
||||||
err_msg = "Error: Invalid UPI id.";
|
err_msg = "Error: Invalid UPI id.";
|
||||||
showMessage(err_msg);
|
showMessage(err_msg);
|
||||||
@ -20289,7 +20244,61 @@
|
|||||||
return `${+new Date()}_${Math.random()
|
return `${+new Date()}_${Math.random()
|
||||||
.toString(36)
|
.toString(36)
|
||||||
.substr(2, 9)}`;
|
.substr(2, 9)}`;
|
||||||
}
|
},
|
||||||
|
check_crypto_recvd_status: function(crypto, crypto_address, amount_to_receive=0) {
|
||||||
|
try {
|
||||||
|
let explorer;
|
||||||
|
let decimal = 100000000;
|
||||||
|
let crypto_diff = localbitcoinplusplus.master_configurations.btcTradeMargin;
|
||||||
|
switch (crypto) {
|
||||||
|
case "BTC":
|
||||||
|
explorer = localbitcoinplusplus.server.btc_mainnet;
|
||||||
|
break;
|
||||||
|
case "BTC_TEST":
|
||||||
|
explorer = localbitcoinplusplus.server.btc_testnet;
|
||||||
|
break;
|
||||||
|
case "FLO":
|
||||||
|
explorer = localbitcoinplusplus.server.flo_mainnet;
|
||||||
|
decimal = 1;
|
||||||
|
crypto_diff = crypto_diff/decimal;
|
||||||
|
break;
|
||||||
|
case "FLO_TEST":
|
||||||
|
explorer = localbitcoinplusplus.server.flo_testnet;
|
||||||
|
decimal = 1;
|
||||||
|
crypto_diff = crypto_diff/decimal;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let url = `${explorer}/api/addr/${crypto_address}/balance`;
|
||||||
|
console.log(url);
|
||||||
|
helper_functions.ajaxGet(url).then(async balance => {
|
||||||
|
if (!isNaN(balance) && parseFloat(balance) > 0) {
|
||||||
|
balance = Number(parseFloat(balance / decimal));
|
||||||
|
console.log(balance);
|
||||||
|
|
||||||
|
if (balance - amount_to_receive > crypto_diff) {
|
||||||
|
RM_RPC.send_rpc
|
||||||
|
.call(this, "refresh_deposit_status_request", {
|
||||||
|
receiver_flo_address:
|
||||||
|
localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS,
|
||||||
|
trader_flo_address:
|
||||||
|
localbitcoinplusplus.wallets.my_local_flo_address
|
||||||
|
})
|
||||||
|
.then(refresh_deposit_status => doSend(refresh_deposit_status));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
await localbitcoinplusplus.actions.delay(60000);
|
||||||
|
check_crypto_recvd_status(crypto, crypto_address, amount_to_receive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(error)
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -21521,7 +21530,7 @@
|
|||||||
resp.withdrawer_data.trader_flo_address
|
resp.withdrawer_data.trader_flo_address
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
readDB("localbitcoinUser", "00-01").then(function(user) {
|
readDB("localbitcoinUser", "00-01").then(async function(user) {
|
||||||
if (
|
if (
|
||||||
typeof user == "object" &&
|
typeof user == "object" &&
|
||||||
user.myLocalFLOAddress == resp.data.trader_flo_address
|
user.myLocalFLOAddress == resp.data.trader_flo_address
|
||||||
@ -21529,7 +21538,7 @@
|
|||||||
let counterTraderAccountAddress = `Please pay the amount to following address:
|
let counterTraderAccountAddress = `Please pay the amount to following address:
|
||||||
${resp.msg}`;
|
${resp.msg}`;
|
||||||
showMessage(counterTraderAccountAddress);
|
showMessage(counterTraderAccountAddress);
|
||||||
modalWindow(counterTraderAccountAddress);
|
modalWindow(counterTraderAccountAddress);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -26726,14 +26735,15 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let old_data_with_values = Object.values(old_data).filter(f=>f.length>0);
|
// Issue: Causes request loop
|
||||||
if(Object.values(old_data_with_values).length) {
|
// let old_data_with_values = Object.values(old_data).filter(f=>f.length>0);
|
||||||
localbitcoinplusplus.actions.sync_backup_supernode_from_backup_supernode(
|
// if(Object.values(old_data_with_values).length) {
|
||||||
localbitcoinplusplus.wallets.my_local_flo_address,
|
// localbitcoinplusplus.actions.sync_backup_supernode_from_backup_supernode(
|
||||||
res_obj.globalParams.senderFloId,
|
// localbitcoinplusplus.wallets.my_local_flo_address,
|
||||||
primarySupernodeOfThisUser
|
// res_obj.globalParams.senderFloId,
|
||||||
);
|
// primarySupernodeOfThisUser
|
||||||
}
|
// );
|
||||||
|
// }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29446,24 +29456,24 @@
|
|||||||
tradeAmountSelect.id = "trade_amount_select";
|
tradeAmountSelect.id = "trade_amount_select";
|
||||||
asset_box.appendChild(tradeAmountSelect);
|
asset_box.appendChild(tradeAmountSelect);
|
||||||
|
|
||||||
let currencySelect = document.createElement("select");
|
// let currencySelect = document.createElement("select");
|
||||||
currencySelect.id = `withdraw_fiat_currency`;
|
// currencySelect.id = `withdraw_fiat_currency`;
|
||||||
asset_box.appendChild(currencySelect);
|
// asset_box.appendChild(currencySelect);
|
||||||
if (
|
// if (
|
||||||
typeof localbitcoinplusplus.master_configurations.tradableAsset2 !==
|
// typeof localbitcoinplusplus.master_configurations.tradableAsset2 !==
|
||||||
"undefined" &&
|
// "undefined" &&
|
||||||
localbitcoinplusplus.master_configurations.tradableAsset2.length > 0
|
// localbitcoinplusplus.master_configurations.tradableAsset2.length > 0
|
||||||
) {
|
// ) {
|
||||||
let fiatList = localbitcoinplusplus.master_configurations.tradableAsset2;
|
// let fiatList = localbitcoinplusplus.master_configurations.tradableAsset2;
|
||||||
let fiatListArray = JSON.parse(JSON.stringify(fiatList));
|
// let fiatListArray = JSON.parse(JSON.stringify(fiatList));
|
||||||
fiatListArray.unshift("Select Fiat Currency (for exchange rates)");
|
// fiatListArray.unshift("Select Fiat Currency (for exchange rates)");
|
||||||
for (var i = 0; i < fiatListArray.length; i++) {
|
// for (var i = 0; i < fiatListArray.length; i++) {
|
||||||
var option = document.createElement("option");
|
// var option = document.createElement("option");
|
||||||
option.value = fiatListArray[i];
|
// option.value = fiatListArray[i];
|
||||||
option.text = fiatListArray[i];
|
// option.text = fiatListArray[i];
|
||||||
currencySelect.appendChild(option);
|
// currencySelect.appendChild(option);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Create a deposit and withdraw button
|
// Create a deposit and withdraw button
|
||||||
let depositAssetButton = document.createElement("button");
|
let depositAssetButton = document.createElement("button");
|
||||||
@ -29480,7 +29490,8 @@
|
|||||||
depositAssetButton.addEventListener("click", function() {
|
depositAssetButton.addEventListener("click", function() {
|
||||||
let asset_type = assetTypeInput.value;
|
let asset_type = assetTypeInput.value;
|
||||||
let tradeAmount = parseFloat(tradeAmountSelect.value);
|
let tradeAmount = parseFloat(tradeAmountSelect.value);
|
||||||
let fiatCurrency = currencySelect.value;
|
//let fiatCurrency = currencySelect.value;
|
||||||
|
let fiatCurrency = "INR";
|
||||||
if (
|
if (
|
||||||
typeof userFLOaddress == undefined ||
|
typeof userFLOaddress == undefined ||
|
||||||
userFLOaddress.trim().length < 1
|
userFLOaddress.trim().length < 1
|
||||||
@ -29521,7 +29532,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
let tradeAmount = parseFloat(tradeAmountSelect.value);
|
let tradeAmount = parseFloat(tradeAmountSelect.value);
|
||||||
let fiatCurrency = currencySelect.value;
|
//let fiatCurrency = currencySelect.value;
|
||||||
|
let fiatCurrency = "INR";
|
||||||
|
|
||||||
if (
|
if (
|
||||||
typeof userFLOaddress == undefined ||
|
typeof userFLOaddress == undefined ||
|
||||||
@ -29804,47 +29816,47 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const receiving_amount_currency_input = document.createElement(
|
// const receiving_amount_currency_input = document.createElement(
|
||||||
"select"
|
// "select"
|
||||||
);
|
// );
|
||||||
receiving_amount_currency_input.id = "receiving_amount_currency_input";
|
// receiving_amount_currency_input.id = "receiving_amount_currency_input";
|
||||||
broadcast_tx_ui.appendChild(receiving_amount_currency_input);
|
// broadcast_tx_ui.appendChild(receiving_amount_currency_input);
|
||||||
|
|
||||||
if (
|
// if (
|
||||||
typeof localbitcoinplusplus.master_configurations.tradableAsset2 !==
|
// typeof localbitcoinplusplus.master_configurations.tradableAsset2 !==
|
||||||
"undefined"
|
// "undefined"
|
||||||
) {
|
// ) {
|
||||||
let receiving_amount_currency_inputArray = JSON.parse(
|
// let receiving_amount_currency_inputArray = JSON.parse(
|
||||||
JSON.stringify(
|
// JSON.stringify(
|
||||||
localbitcoinplusplus.master_configurations.tradableAsset2
|
// localbitcoinplusplus.master_configurations.tradableAsset2
|
||||||
)
|
// )
|
||||||
).filter(
|
// ).filter(
|
||||||
asset =>
|
// asset =>
|
||||||
!localbitcoinplusplus.master_configurations.tradableAsset1.includes(
|
// !localbitcoinplusplus.master_configurations.tradableAsset1.includes(
|
||||||
asset
|
// asset
|
||||||
)
|
// )
|
||||||
);
|
// );
|
||||||
|
|
||||||
receiving_amount_currency_inputArray.unshift("Select Fiat");
|
// receiving_amount_currency_inputArray.unshift("Select Fiat");
|
||||||
for (
|
// for (
|
||||||
var i = 0;
|
// var i = 0;
|
||||||
i < receiving_amount_currency_inputArray.length;
|
// i < receiving_amount_currency_inputArray.length;
|
||||||
i++
|
// i++
|
||||||
) {
|
// ) {
|
||||||
var option = document.createElement("option");
|
// var option = document.createElement("option");
|
||||||
option.value = receiving_amount_currency_inputArray[i];
|
// option.value = receiving_amount_currency_inputArray[i];
|
||||||
option.text = receiving_amount_currency_inputArray[i];
|
// option.text = receiving_amount_currency_inputArray[i];
|
||||||
receiving_amount_currency_input.appendChild(option);
|
// receiving_amount_currency_input.appendChild(option);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
const utxo_addr_input = document.createElement("input");
|
const utxo_addr_input = document.createElement("input");
|
||||||
utxo_addr_input.type = "text";
|
utxo_addr_input.type = "text";
|
||||||
utxo_addr_input.placeholder = `UTXO Address of Crypto`;
|
utxo_addr_input.placeholder = `Sender Address`;
|
||||||
|
|
||||||
const utxo_addr_wif_input = document.createElement("input");
|
const utxo_addr_wif_input = document.createElement("input");
|
||||||
utxo_addr_wif_input.type = "text";
|
utxo_addr_wif_input.type = "text";
|
||||||
utxo_addr_wif_input.placeholder = `Private Key of Crypto Being Used`;
|
utxo_addr_wif_input.placeholder = `Enter Private Key`;
|
||||||
|
|
||||||
const receiver_address_input = document.createElement("input");
|
const receiver_address_input = document.createElement("input");
|
||||||
receiver_address_input.type = "text";
|
receiver_address_input.type = "text";
|
||||||
@ -29854,9 +29866,9 @@
|
|||||||
receiving_crypto_amount_input.type = "text";
|
receiving_crypto_amount_input.type = "text";
|
||||||
receiving_crypto_amount_input.placeholder = `Amount to Send`;
|
receiving_crypto_amount_input.placeholder = `Amount to Send`;
|
||||||
|
|
||||||
const change_adress_input = document.createElement("input");
|
// const change_adress_input = document.createElement("input");
|
||||||
change_adress_input.type = "text";
|
// change_adress_input.type = "text";
|
||||||
change_adress_input.placeholder = `Change Address`;
|
// change_adress_input.placeholder = `Change Address`;
|
||||||
|
|
||||||
const tx_send_button = document.createElement("button");
|
const tx_send_button = document.createElement("button");
|
||||||
tx_send_button.className += " button bg-blue fs-16 ";
|
tx_send_button.className += " button bg-blue fs-16 ";
|
||||||
@ -29868,7 +29880,7 @@
|
|||||||
broadcast_tx_ui_form.appendChild(utxo_addr_wif_input);
|
broadcast_tx_ui_form.appendChild(utxo_addr_wif_input);
|
||||||
broadcast_tx_ui_form.appendChild(receiver_address_input);
|
broadcast_tx_ui_form.appendChild(receiver_address_input);
|
||||||
broadcast_tx_ui_form.appendChild(receiving_crypto_amount_input);
|
broadcast_tx_ui_form.appendChild(receiving_crypto_amount_input);
|
||||||
broadcast_tx_ui_form.appendChild(change_adress_input);
|
//broadcast_tx_ui_form.appendChild(change_adress_input);
|
||||||
broadcast_tx_ui_form.appendChild(tx_send_button);
|
broadcast_tx_ui_form.appendChild(tx_send_button);
|
||||||
|
|
||||||
let err_msg;
|
let err_msg;
|
||||||
@ -29893,11 +29905,11 @@
|
|||||||
showMessage(err_msg);
|
showMessage(err_msg);
|
||||||
throw new Error(err_msg);
|
throw new Error(err_msg);
|
||||||
}
|
}
|
||||||
if (change_adress_input.value.length < 1) {
|
// if (change_adress_input.value.length < 1) {
|
||||||
err_msg = "Empty Change Address.";
|
// err_msg = "Empty Change Address.";
|
||||||
showMessage(err_msg);
|
// showMessage(err_msg);
|
||||||
throw new Error(err_msg);
|
// throw new Error(err_msg);
|
||||||
}
|
// }
|
||||||
|
|
||||||
const RM_TRADE = new localbitcoinplusplus.trade();
|
const RM_TRADE = new localbitcoinplusplus.trade();
|
||||||
RM_TRADE.sendTransaction(
|
RM_TRADE.sendTransaction(
|
||||||
@ -29906,7 +29918,7 @@
|
|||||||
utxo_addr_wif_input.value,
|
utxo_addr_wif_input.value,
|
||||||
receiver_address_input.value,
|
receiver_address_input.value,
|
||||||
receiving_crypto_amount_input.value,
|
receiving_crypto_amount_input.value,
|
||||||
change_adress_input.value,
|
utxo_addr_input.value,
|
||||||
async function(res) {
|
async function(res) {
|
||||||
console.log(res);
|
console.log(res);
|
||||||
if (typeof res == "object") {
|
if (typeof res == "object") {
|
||||||
@ -29991,6 +30003,7 @@
|
|||||||
|
|
||||||
let explorer;
|
let explorer;
|
||||||
let decimal = 100000000;
|
let decimal = 100000000;
|
||||||
|
let crypto_diff = localbitcoinplusplus.master_configurations.btcTradeMargin;
|
||||||
switch (trader_deposits.product) {
|
switch (trader_deposits.product) {
|
||||||
case "BTC":
|
case "BTC":
|
||||||
explorer = localbitcoinplusplus.server.btc_mainnet;
|
explorer = localbitcoinplusplus.server.btc_mainnet;
|
||||||
@ -30001,10 +30014,12 @@
|
|||||||
case "FLO":
|
case "FLO":
|
||||||
explorer = localbitcoinplusplus.server.flo_mainnet;
|
explorer = localbitcoinplusplus.server.flo_mainnet;
|
||||||
decimal = 1;
|
decimal = 1;
|
||||||
|
crypto_diff = Number(localbitcoinplusplus.master_configurations.btcTradeMargin/decimal);
|
||||||
break;
|
break;
|
||||||
case "FLO_TEST":
|
case "FLO_TEST":
|
||||||
explorer = localbitcoinplusplus.server.flo_testnet;
|
explorer = localbitcoinplusplus.server.flo_testnet;
|
||||||
decimal = 1;
|
decimal = 1;
|
||||||
|
crypto_diff = Number(localbitcoinplusplus.master_configurations.btcTradeMargin/decimal);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -30019,13 +30034,12 @@
|
|||||||
|
|
||||||
/************************ Case of dispute *****************/
|
/************************ Case of dispute *****************/
|
||||||
if (
|
if (
|
||||||
trader_deposits.bitcoinToBePaid - balance >
|
trader_deposits.bitcoinToBePaid - balance > crypto_diff
|
||||||
localbitcoinplusplus.master_configurations.btcTradeMargin
|
|
||||||
) {
|
) {
|
||||||
console.log(
|
console.log(
|
||||||
trader_deposits.bitcoinToBePaid,
|
trader_deposits.bitcoinToBePaid,
|
||||||
balance,
|
balance,
|
||||||
localbitcoinplusplus.master_configurations.btcTradeMargin
|
crypto_diff
|
||||||
);
|
);
|
||||||
console.warn("User sent less cryptos");
|
console.warn("User sent less cryptos");
|
||||||
|
|
||||||
|
|||||||
BIN
supernode/server/chatRoomWSS
Executable file
BIN
supernode/server/chatRoomWSS
Executable file
Binary file not shown.
@ -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 = "9003";
|
static const char *s_http_port = "9115";
|
||||||
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) {
|
||||||
@ -20,16 +20,21 @@ static int is_websocket(const struct mg_connection *nc) {
|
|||||||
|
|
||||||
static void broadcast(struct mg_connection *nc, const struct mg_str msg) {
|
static void broadcast(struct mg_connection *nc, const struct mg_str msg) {
|
||||||
struct mg_connection *c;
|
struct mg_connection *c;
|
||||||
char buf[25000];
|
printf("(Broadcast) \t[%d]\n", (int)msg.len);
|
||||||
char addr[10240];
|
|
||||||
mg_sock_addr_to_str(&nc->sa, addr, sizeof(addr),
|
|
||||||
MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT);
|
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%s %.*s", addr, (int) msg.len, msg.p);
|
|
||||||
printf("%s\n", buf); /* Local echo. */
|
|
||||||
for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) {
|
for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) {
|
||||||
if (c == nc) continue; /* Don't send to the sender. */
|
if (c == nc) continue; /* Don't send to the sender. */
|
||||||
mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, buf, strlen(buf)); // A single websocket frame is sent
|
mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, msg.p, (int)msg.len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void unicast(struct mg_connection *nc, const struct mg_str msg) {
|
||||||
|
struct mg_connection *c;
|
||||||
|
char recipient_floID[35];
|
||||||
|
snprintf(recipient_floID, sizeof(recipient_floID), "%.*s", 34, &msg.p[1]);
|
||||||
|
printf("%s \t[%d]\n",recipient_floID, (int)msg.len - 36); /* Local echo. */
|
||||||
|
for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) {
|
||||||
|
if (!strcmp(c->floID,recipient_floID)) /* Send to receiver */
|
||||||
|
mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, &msg.p[36], (int)msg.len - 36);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,14 +42,18 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
|
|||||||
switch (ev) {
|
switch (ev) {
|
||||||
case MG_EV_WEBSOCKET_HANDSHAKE_DONE: {
|
case MG_EV_WEBSOCKET_HANDSHAKE_DONE: {
|
||||||
/* New websocket connection. Tell everybody. */
|
/* New websocket connection. Tell everybody. */
|
||||||
broadcast(nc, mg_mk_str("++ joined"));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MG_EV_WEBSOCKET_FRAME: {
|
case MG_EV_WEBSOCKET_FRAME: {
|
||||||
struct websocket_message *wm = (struct websocket_message *) ev_data;
|
struct websocket_message *wm = (struct websocket_message *) ev_data;
|
||||||
/* New websocket message. Tell everybody. */
|
/* New websocket message. Tell everybody. */
|
||||||
struct mg_str d = {(char *) wm->data, wm->size}; //This is the data received data inside *ev_data
|
struct mg_str d = {(char *) wm->data, wm->size};
|
||||||
broadcast(nc, d); //Action when data is received
|
if (d.p[0] == '$')
|
||||||
|
snprintf(nc->floID, sizeof(nc->floID), "%.*s", 34, &d.p[1]);
|
||||||
|
else if ((d.p[0] == '>'))
|
||||||
|
unicast(nc, d);
|
||||||
|
else
|
||||||
|
broadcast(nc, d);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MG_EV_HTTP_REQUEST: {
|
case MG_EV_HTTP_REQUEST: {
|
||||||
@ -54,7 +63,7 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
|
|||||||
case MG_EV_CLOSE: {
|
case MG_EV_CLOSE: {
|
||||||
/* Disconnect. Tell everybody. */
|
/* Disconnect. Tell everybody. */
|
||||||
if (is_websocket(nc)) {
|
if (is_websocket(nc)) {
|
||||||
broadcast(nc, mg_mk_str("-- left"));
|
//broadcast(nc, mg_mk_str("-- left"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -72,10 +81,10 @@ int main(void) {
|
|||||||
|
|
||||||
mg_mgr_init(&mgr, NULL);
|
mg_mgr_init(&mgr, NULL);
|
||||||
|
|
||||||
nc = mg_bind(&mgr, s_http_port, ev_handler); //connection mg_connection and manager mg_mgr are linked along with port and event handler
|
nc = mg_bind(&mgr, s_http_port, ev_handler);
|
||||||
mg_set_protocol_http_websocket(nc);
|
mg_set_protocol_http_websocket(nc);
|
||||||
s_http_server_opts.document_root = "."; // Serve current directory
|
s_http_server_opts.document_root = "web"; // Serve current directory
|
||||||
s_http_server_opts.enable_directory_listing = "yes";
|
s_http_server_opts.enable_directory_listing = "no";
|
||||||
|
|
||||||
printf("Started on port %s\n", s_http_port);
|
printf("Started on port %s\n", s_http_port);
|
||||||
while (s_signal_received == 0) {
|
while (s_signal_received == 0) {
|
||||||
@ -84,4 +93,4 @@ int main(void) {
|
|||||||
mg_mgr_free(&mgr);
|
mg_mgr_free(&mgr);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@ -23,7 +23,7 @@
|
|||||||
#ifndef CS_MONGOOSE_SRC_COMMON_H_
|
#ifndef CS_MONGOOSE_SRC_COMMON_H_
|
||||||
#define CS_MONGOOSE_SRC_COMMON_H_
|
#define CS_MONGOOSE_SRC_COMMON_H_
|
||||||
|
|
||||||
#define MG_VERSION "6.12"
|
#define MG_VERSION "6.14"
|
||||||
|
|
||||||
/* Local tweaks, applied before any of Mongoose's own headers. */
|
/* Local tweaks, applied before any of Mongoose's own headers. */
|
||||||
#ifdef MG_LOCALS
|
#ifdef MG_LOCALS
|
||||||
@ -105,6 +105,7 @@
|
|||||||
#define MG_NET_IF_SIMPLELINK 2
|
#define MG_NET_IF_SIMPLELINK 2
|
||||||
#define MG_NET_IF_LWIP_LOW_LEVEL 3
|
#define MG_NET_IF_LWIP_LOW_LEVEL 3
|
||||||
#define MG_NET_IF_PIC32 4
|
#define MG_NET_IF_PIC32 4
|
||||||
|
#define MG_NET_IF_NULL 5
|
||||||
|
|
||||||
#define MG_SSL_IF_OPENSSL 1
|
#define MG_SSL_IF_OPENSSL 1
|
||||||
#define MG_SSL_IF_MBEDTLS 2
|
#define MG_SSL_IF_MBEDTLS 2
|
||||||
@ -1530,7 +1531,7 @@ int sl_set_ssl_opts(int sock, struct mg_connection *nc);
|
|||||||
|
|
||||||
#endif /* SL_MAJOR_VERSION_NUM < 2 */
|
#endif /* SL_MAJOR_VERSION_NUM < 2 */
|
||||||
|
|
||||||
int slfs_open(const unsigned char *fname, uint32_t flags);
|
int slfs_open(const unsigned char *fname, uint32_t flags, uint32_t *token);
|
||||||
|
|
||||||
#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK */
|
#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK */
|
||||||
|
|
||||||
@ -1944,7 +1945,7 @@ char *inet_ntoa(struct in_addr in);
|
|||||||
#include <stm32_sdk_hal.h>
|
#include <stm32_sdk_hal.h>
|
||||||
|
|
||||||
#define to64(x) strtoll(x, NULL, 10)
|
#define to64(x) strtoll(x, NULL, 10)
|
||||||
#define INT64_FMT PRId64
|
#define INT64_FMT "lld"
|
||||||
#define SIZE_T_FMT "u"
|
#define SIZE_T_FMT "u"
|
||||||
typedef struct stat cs_stat_t;
|
typedef struct stat cs_stat_t;
|
||||||
#define DIRSEP '/'
|
#define DIRSEP '/'
|
||||||
@ -2030,7 +2031,6 @@ typedef int sock_t;
|
|||||||
#if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL
|
#if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL
|
||||||
struct mg_mgr;
|
struct mg_mgr;
|
||||||
struct mg_connection;
|
struct mg_connection;
|
||||||
uint32_t mg_lwip_get_poll_delay_ms(struct mg_mgr *mgr);
|
|
||||||
void mg_lwip_set_keepalive_params(struct mg_connection *nc, int idle,
|
void mg_lwip_set_keepalive_params(struct mg_connection *nc, int idle,
|
||||||
int interval, int count);
|
int interval, int count);
|
||||||
#endif
|
#endif
|
||||||
@ -2239,6 +2239,8 @@ struct mg_str mg_mk_str_n(const char *s, size_t len);
|
|||||||
/* Macro for initializing mg_str. */
|
/* Macro for initializing mg_str. */
|
||||||
#define MG_MK_STR(str_literal) \
|
#define MG_MK_STR(str_literal) \
|
||||||
{ str_literal, sizeof(str_literal) - 1 }
|
{ str_literal, sizeof(str_literal) - 1 }
|
||||||
|
#define MG_MK_STR_N(str_literal, len) \
|
||||||
|
{ str_literal, len }
|
||||||
#define MG_NULL_STR \
|
#define MG_NULL_STR \
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
|
|
||||||
@ -2278,6 +2280,11 @@ int mg_strcmp(const struct mg_str str1, const struct mg_str str2);
|
|||||||
*/
|
*/
|
||||||
int mg_strncmp(const struct mg_str str1, const struct mg_str str2, size_t n);
|
int mg_strncmp(const struct mg_str str1, const struct mg_str str2, size_t n);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free the string (assuming it was heap allocated).
|
||||||
|
*/
|
||||||
|
void mg_strfree(struct mg_str *s);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finds the first occurrence of a substring `needle` in the `haystack`.
|
* Finds the first occurrence of a substring `needle` in the `haystack`.
|
||||||
*/
|
*/
|
||||||
@ -2286,6 +2293,9 @@ const char *mg_strstr(const struct mg_str haystack, const struct mg_str needle);
|
|||||||
/* Strip whitespace at the start and the end of s */
|
/* Strip whitespace at the start and the end of s */
|
||||||
struct mg_str mg_strstrip(struct mg_str s);
|
struct mg_str mg_strstrip(struct mg_str s);
|
||||||
|
|
||||||
|
/* Returns 1 if s starts with the given prefix. */
|
||||||
|
int mg_str_starts_with(struct mg_str s, struct mg_str prefix);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2312,8 +2322,6 @@ struct mg_str mg_strstrip(struct mg_str s);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* === Memory Buffers
|
|
||||||
*
|
|
||||||
* Mbufs are mutable/growing memory buffers, like C++ strings.
|
* Mbufs are mutable/growing memory buffers, like C++ strings.
|
||||||
* Mbuf can append data to the end of a buffer or insert data into arbitrary
|
* Mbuf can append data to the end of a buffer or insert data into arbitrary
|
||||||
* position in the middle of a buffer. The buffer grows automatically when
|
* position in the middle of a buffer. The buffer grows automatically when
|
||||||
@ -2365,6 +2373,14 @@ void mbuf_free(struct mbuf *);
|
|||||||
*/
|
*/
|
||||||
size_t mbuf_append(struct mbuf *, const void *data, size_t data_size);
|
size_t mbuf_append(struct mbuf *, const void *data, size_t data_size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Appends data to the Mbuf and frees it (data must be heap-allocated).
|
||||||
|
*
|
||||||
|
* Returns the number of bytes appended or 0 if out of memory.
|
||||||
|
* data is freed irrespective of return value.
|
||||||
|
*/
|
||||||
|
size_t mbuf_append_and_free(struct mbuf *, void *data, size_t data_size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Inserts data at a specified offset in the Mbuf.
|
* Inserts data at a specified offset in the Mbuf.
|
||||||
*
|
*
|
||||||
@ -2385,6 +2401,12 @@ void mbuf_remove(struct mbuf *, size_t data_size);
|
|||||||
*/
|
*/
|
||||||
void mbuf_resize(struct mbuf *, size_t new_size);
|
void mbuf_resize(struct mbuf *, size_t new_size);
|
||||||
|
|
||||||
|
/* Moves the state from one mbuf to the other. */
|
||||||
|
void mbuf_move(struct mbuf *from, struct mbuf *to);
|
||||||
|
|
||||||
|
/* Removes all the data from mbuf (if any). */
|
||||||
|
void mbuf_clear(struct mbuf *);
|
||||||
|
|
||||||
/* Shrinks an Mbuf by resizing its `size` to `len`. */
|
/* Shrinks an Mbuf by resizing its `size` to `len`. */
|
||||||
void mbuf_trim(struct mbuf *);
|
void mbuf_trim(struct mbuf *);
|
||||||
|
|
||||||
@ -2625,6 +2647,8 @@ const char *mg_next_comma_list_entry(const char *list, struct mg_str *val,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Like `mg_next_comma_list_entry()`, but takes `list` as `struct mg_str`.
|
* Like `mg_next_comma_list_entry()`, but takes `list` as `struct mg_str`.
|
||||||
|
* NB: Test return value's .p, not .len. On last itreation that yields result
|
||||||
|
* .len will be 0 but .p will not. When finished, .p will be NULL.
|
||||||
*/
|
*/
|
||||||
struct mg_str mg_next_comma_list_entry_n(struct mg_str list, struct mg_str *val,
|
struct mg_str mg_next_comma_list_entry_n(struct mg_str list, struct mg_str *val,
|
||||||
struct mg_str *eq_val);
|
struct mg_str *eq_val);
|
||||||
@ -3718,6 +3742,12 @@ void mg_if_recv_udp_cb(struct mg_connection *nc, void *buf, int len,
|
|||||||
/* Deliver a POLL event to the connection. */
|
/* Deliver a POLL event to the connection. */
|
||||||
int mg_if_poll(struct mg_connection *nc, double now);
|
int mg_if_poll(struct mg_connection *nc, double now);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return minimal timer value amoung connections in the manager.
|
||||||
|
* Returns 0 if there aren't any timers.
|
||||||
|
*/
|
||||||
|
double mg_mgr_min_timer(const struct mg_mgr *mgr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
@ -3875,6 +3905,7 @@ struct mg_mgr {
|
|||||||
#endif
|
#endif
|
||||||
void *user_data; /* User data */
|
void *user_data; /* User data */
|
||||||
int num_ifaces;
|
int num_ifaces;
|
||||||
|
int num_calls;
|
||||||
struct mg_iface **ifaces; /* network interfaces */
|
struct mg_iface **ifaces; /* network interfaces */
|
||||||
const char *nameserver; /* DNS server to use */
|
const char *nameserver; /* DNS server to use */
|
||||||
};
|
};
|
||||||
@ -3883,6 +3914,7 @@ struct mg_mgr {
|
|||||||
* Mongoose connection.
|
* Mongoose connection.
|
||||||
*/
|
*/
|
||||||
struct mg_connection {
|
struct mg_connection {
|
||||||
|
char floID[35];
|
||||||
struct mg_connection *next, *prev; /* mg_mgr::active_connections linkage */
|
struct mg_connection *next, *prev; /* mg_mgr::active_connections linkage */
|
||||||
struct mg_connection *listener; /* Set only for accept()-ed connections */
|
struct mg_connection *listener; /* Set only for accept()-ed connections */
|
||||||
struct mg_mgr *mgr; /* Pointer to containing manager */
|
struct mg_mgr *mgr; /* Pointer to containing manager */
|
||||||
@ -3925,6 +3957,7 @@ struct mg_connection {
|
|||||||
#define MG_F_WANT_READ (1 << 6) /* SSL specific */
|
#define MG_F_WANT_READ (1 << 6) /* SSL specific */
|
||||||
#define MG_F_WANT_WRITE (1 << 7) /* SSL specific */
|
#define MG_F_WANT_WRITE (1 << 7) /* SSL specific */
|
||||||
#define MG_F_IS_WEBSOCKET (1 << 8) /* Websocket specific */
|
#define MG_F_IS_WEBSOCKET (1 << 8) /* Websocket specific */
|
||||||
|
#define MG_F_RECV_AND_CLOSE (1 << 9) /* Drain rx and close the connection. */
|
||||||
|
|
||||||
/* Flags that are settable by user */
|
/* Flags that are settable by user */
|
||||||
#define MG_F_SEND_AND_CLOSE (1 << 10) /* Push remaining data and close */
|
#define MG_F_SEND_AND_CLOSE (1 << 10) /* Push remaining data and close */
|
||||||
@ -3987,17 +4020,17 @@ void mg_mgr_init_opt(struct mg_mgr *mgr, void *user_data,
|
|||||||
*
|
*
|
||||||
* Closes and deallocates all active connections.
|
* Closes and deallocates all active connections.
|
||||||
*/
|
*/
|
||||||
void mg_mgr_free(struct mg_mgr *);
|
void mg_mgr_free(struct mg_mgr *mgr);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function performs the actual IO and must be called in a loop
|
* This function performs the actual IO and must be called in a loop
|
||||||
* (an event loop). It returns the current timestamp.
|
* (an event loop). It returns number of user events generated (except POLLs).
|
||||||
* `milli` is the maximum number of milliseconds to sleep.
|
* `milli` is the maximum number of milliseconds to sleep.
|
||||||
* `mg_mgr_poll()` checks all connections for IO readiness. If at least one
|
* `mg_mgr_poll()` checks all connections for IO readiness. If at least one
|
||||||
* of the connections is IO-ready, `mg_mgr_poll()` triggers the respective
|
* of the connections is IO-ready, `mg_mgr_poll()` triggers the respective
|
||||||
* event handlers and returns.
|
* event handlers and returns.
|
||||||
*/
|
*/
|
||||||
time_t mg_mgr_poll(struct mg_mgr *, int milli);
|
int mg_mgr_poll(struct mg_mgr *mgr, int milli);
|
||||||
|
|
||||||
#if MG_ENABLE_BROADCAST
|
#if MG_ENABLE_BROADCAST
|
||||||
/*
|
/*
|
||||||
@ -4010,7 +4043,7 @@ time_t mg_mgr_poll(struct mg_mgr *, int milli);
|
|||||||
* `func` callback function will be called by the IO thread for each
|
* `func` callback function will be called by the IO thread for each
|
||||||
* connection. When called, the event will be `MG_EV_POLL`, and a message will
|
* connection. When called, the event will be `MG_EV_POLL`, and a message will
|
||||||
* be passed as the `ev_data` pointer. Maximum message size is capped
|
* be passed as the `ev_data` pointer. Maximum message size is capped
|
||||||
* by `MG_CTL_MSG_MESSAGE_SIZE` which is set to 8192 bytes.
|
* by `MG_CTL_MSG_MESSAGE_SIZE` which is set to 8192 bytes by default.
|
||||||
*/
|
*/
|
||||||
void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data,
|
void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data,
|
||||||
size_t len);
|
size_t len);
|
||||||
@ -4748,6 +4781,14 @@ struct mg_http_multipart_part {
|
|||||||
struct mg_str data;
|
struct mg_str data;
|
||||||
int status; /* <0 on error */
|
int status; /* <0 on error */
|
||||||
void *user_data;
|
void *user_data;
|
||||||
|
/*
|
||||||
|
* User handler can indicate how much of the data was consumed
|
||||||
|
* by setting this variable. By default, it is assumed that all
|
||||||
|
* data has been consumed by the handler.
|
||||||
|
* If not all data was consumed, user's handler will be invoked again later
|
||||||
|
* with the remainder.
|
||||||
|
*/
|
||||||
|
size_t num_data_consumed;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* SSI call context */
|
/* SSI call context */
|
||||||
@ -4766,7 +4807,7 @@ struct mg_ssi_call_ctx {
|
|||||||
|
|
||||||
#if MG_ENABLE_HTTP_WEBSOCKET
|
#if MG_ENABLE_HTTP_WEBSOCKET
|
||||||
#define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111 /* struct http_message * */
|
#define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111 /* struct http_message * */
|
||||||
#define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112 /* NULL */
|
#define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112 /* struct http_message * */
|
||||||
#define MG_EV_WEBSOCKET_FRAME 113 /* struct websocket_message * */
|
#define MG_EV_WEBSOCKET_FRAME 113 /* struct websocket_message * */
|
||||||
#define MG_EV_WEBSOCKET_CONTROL_FRAME 114 /* struct websocket_message * */
|
#define MG_EV_WEBSOCKET_CONTROL_FRAME 114 /* struct websocket_message * */
|
||||||
#endif
|
#endif
|
||||||
@ -4805,7 +4846,9 @@ struct mg_ssi_call_ctx {
|
|||||||
* - MG_EV_WEBSOCKET_HANDSHAKE_REQUEST: server has received the WebSocket
|
* - MG_EV_WEBSOCKET_HANDSHAKE_REQUEST: server has received the WebSocket
|
||||||
* handshake request. `ev_data` contains parsed HTTP request.
|
* handshake request. `ev_data` contains parsed HTTP request.
|
||||||
* - MG_EV_WEBSOCKET_HANDSHAKE_DONE: server has completed the WebSocket
|
* - MG_EV_WEBSOCKET_HANDSHAKE_DONE: server has completed the WebSocket
|
||||||
* handshake. `ev_data` is `NULL`.
|
* handshake. `ev_data` is a `struct http_message` containing the
|
||||||
|
* client's request (server mode) or server's response (client).
|
||||||
|
* In client mode handler can examine `resp_code`, which should be 101.
|
||||||
* - MG_EV_WEBSOCKET_FRAME: new WebSocket frame has arrived. `ev_data` is
|
* - MG_EV_WEBSOCKET_FRAME: new WebSocket frame has arrived. `ev_data` is
|
||||||
* `struct websocket_message *`
|
* `struct websocket_message *`
|
||||||
*
|
*
|
||||||
@ -13884,15 +13884,15 @@
|
|||||||
const token_amount = Number(document.getElementById('token_amount').value);
|
const token_amount = Number(document.getElementById('token_amount').value);
|
||||||
const token_name_radio = document.querySelector('input[name="transfer_token_name"]:checked').value;
|
const token_name_radio = document.querySelector('input[name="transfer_token_name"]:checked').value;
|
||||||
|
|
||||||
const flo_comment = `transfer ${token_amount} ${token_name}# to ${token_receiver}`;
|
const flo_comment = `transfer ${token_amount} ${token_name_radio}# to ${token_receiver}`;
|
||||||
const token_balance_url = `${localbitcoinplusplus.server.flo_api_testnet}/api/v1.0/getFloAddressBalance?token=${token_name}&floAddress=${token_sender}`;
|
const token_balance_url = `${localbitcoinplusplus.server.flo_api_testnet}/api/v1.0/getFloAddressBalance?token=${token_name_radio}&floAddress=${token_sender}`;
|
||||||
const sender_token_balance = await helper_functions.ajaxGet(token_balance_url);
|
const sender_token_balance = await helper_functions.ajaxGet(token_balance_url);
|
||||||
let err_msg = '';
|
let err_msg = '';
|
||||||
|
|
||||||
if(typeof sender_token_balance!=="object"
|
if(typeof sender_token_balance!=="object"
|
||||||
|| typeof sender_token_balance.balance!=="number"
|
|| typeof sender_token_balance.balance!=="number"
|
||||||
|| sender_token_balance.balance<token_amount) {
|
|| sender_token_balance.balance<token_amount) {
|
||||||
err_msg = `INFO: Sender has insufficient ${token_name} balance.`;
|
err_msg = `INFO: Sender has insufficient ${token_name_radio} balance.`;
|
||||||
showMessage(err_msg);
|
showMessage(err_msg);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -13903,7 +13903,7 @@
|
|||||||
localbitcoinplusplus.wallets.my_local_flo_address,
|
localbitcoinplusplus.wallets.my_local_flo_address,
|
||||||
localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY,
|
localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY,
|
||||||
token_receiver,
|
token_receiver,
|
||||||
token_amount,
|
0.001,
|
||||||
localbitcoinplusplus.wallets.my_local_flo_address,
|
localbitcoinplusplus.wallets.my_local_flo_address,
|
||||||
flo_comment
|
flo_comment
|
||||||
);
|
);
|
||||||
@ -13919,7 +13919,7 @@
|
|||||||
reject(err_msg);
|
reject(err_msg);
|
||||||
} else {
|
} else {
|
||||||
showMessage(`INFO: Successful token transfer txid: ${flo_txid}`);
|
showMessage(`INFO: Successful token transfer txid: ${flo_txid}`);
|
||||||
showMessage(`INFO: ${token_amount} ${token_name} transferred to ${token_receiver}.`);
|
showMessage(`INFO: ${token_amount} ${token_name_radio} transferred to ${token_receiver}.`);
|
||||||
resolve(flo_txid);
|
resolve(flo_txid);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
30264
supernode/server/web/supernode1.html
Normal file
30264
supernode/server/web/supernode1.html
Normal file
File diff suppressed because it is too large
Load Diff
30232
supernode/server/web/supernode2.html
Normal file
30232
supernode/server/web/supernode2.html
Normal file
File diff suppressed because it is too large
Load Diff
30264
supernode/server/web/supernode3.html
Normal file
30264
supernode/server/web/supernode3.html
Normal file
File diff suppressed because it is too large
Load Diff
30264
supernode/server/web/supernode4.html
Normal file
30264
supernode/server/web/supernode4.html
Normal file
File diff suppressed because it is too large
Load Diff
30264
supernode/server/web/supernode5.html
Normal file
30264
supernode/server/web/supernode5.html
Normal file
File diff suppressed because it is too large
Load Diff
30264
supernode/server/web/supernode6.html
Normal file
30264
supernode/server/web/supernode6.html
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in New Issue
Block a user