From 0ce08318a0545cd23514afe747ce395bd1c2a644 Mon Sep 17 00:00:00 2001 From: Abhishek Sinha Date: Tue, 17 Mar 2020 22:47:31 +0530 Subject: [PATCH] changed architecture, updated deposit withdraw logic --- .gitignore | 7 + supernode/Makefile | 3 - supernode/index.html | 308 +- supernode/server/chatRoomWSS | Bin 0 -> 172088 bytes .../chatRoomWSServer.c} | 43 +- examples.mk => supernode/server/examples.mk | 0 mongoose.c => supernode/server/mongoose.c | 775 +- mongoose.h => supernode/server/mongoose.h | 67 +- .../web}/cash_payments_handler.html | 10 +- supernode/server/web/supernode1.html | 30264 ++++++++++++++++ supernode/server/web/supernode2.html | 30232 +++++++++++++++ supernode/server/web/supernode3.html | 30264 ++++++++++++++++ supernode/server/web/supernode4.html | 30264 ++++++++++++++++ supernode/server/web/supernode5.html | 30264 ++++++++++++++++ supernode/server/web/supernode6.html | 30264 ++++++++++++++++ supernode/websocket_chat | Bin 247384 -> 0 bytes 16 files changed, 182358 insertions(+), 407 deletions(-) delete mode 100644 supernode/Makefile create mode 100755 supernode/server/chatRoomWSS rename supernode/{websocket_chat.c => server/chatRoomWSServer.c} (60%) rename examples.mk => supernode/server/examples.mk (100%) rename mongoose.c => supernode/server/mongoose.c (96%) rename mongoose.h => supernode/server/mongoose.h (98%) rename supernode/{ => server/web}/cash_payments_handler.html (99%) create mode 100644 supernode/server/web/supernode1.html create mode 100644 supernode/server/web/supernode2.html create mode 100644 supernode/server/web/supernode3.html create mode 100644 supernode/server/web/supernode4.html create mode 100644 supernode/server/web/supernode5.html create mode 100644 supernode/server/web/supernode6.html delete mode 100755 supernode/websocket_chat diff --git a/.gitignore b/.gitignore index 0409579..7a80e88 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,10 @@ supernode/websocket_chat supernode/cash_payments_handler2.html .vscode/ 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 \ No newline at end of file diff --git a/supernode/Makefile b/supernode/Makefile deleted file mode 100644 index 2fbb694..0000000 --- a/supernode/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROG = websocket_chat -MODULE_CFLAGS = -DMG_ENABLE_FILESYSTEM=1 -include ../examples.mk diff --git a/supernode/index.html b/supernode/index.html index eaa8993..7fe5245 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -15421,11 +15421,6 @@ localbitcoinplusplus.master_configurations.tradableAsset2.includes( params.currency ) && - typeof localbitcoinplusplus.master_configurations - .validTradingAmount !== "undefined" && - localbitcoinplusplus.master_configurations.validTradingAmount.includes( - parseFloat(params.depositing_amount) - ) && typeof params.trader_flo_address == "string" && params.trader_flo_address.length > 0 ) { @@ -15460,14 +15455,15 @@ params.id = helper_functions.unique_id(); params.status = 1; - params.btc_address = - generate_btc_keys_for_requester.address; + params.btc_address = generate_btc_keys_for_requester.address; - params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash( - params.depositing_amount, - params.currency, - params.product - ); + // params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash( + // params.depositing_amount, + // params.currency, + // params.product + // ); + + params.bitcoinToBePaid = Number(params.depositing_amount); let receivedTradeInfo = { ...params }; @@ -15496,26 +15492,16 @@ JSON.stringify(receivedTradeInfo) ); - receivedTradeInfo[ - "depositDataHash" - ] = receivedTradeInfoHash; - receivedTradeInfo[ - "order_validator_sign" - ] = RM_WALLET.sign( + receivedTradeInfo["depositDataHash"] = receivedTradeInfoHash; + receivedTradeInfo["order_validator_sign"] = RM_WALLET.sign( receivedTradeInfoHash, - localbitcoinplusplus.wallets - .MY_SUPERNODE_PRIVATE_KEY + localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY ); - receivedTradeInfo[ - "order_validator_public_key" - ] = su_data.myLocalFLOPublicKey; + receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey; try { - const this_btc_pvt_key = - generate_btc_keys_for_requester.privateKeyWIF; - const this_btc_tx_key = Crypto.util.randomBytes( - 64 - ); + const this_btc_pvt_key = generate_btc_keys_for_requester.privateKeyWIF; + const this_btc_tx_key = Crypto.util.randomBytes(64); const this_btc_pvt_key_shamirs_secret = RM_WALLET.createShamirsSecretShares( this_btc_pvt_key, 10, @@ -15663,11 +15649,6 @@ localbitcoinplusplus.master_configurations.tradableAsset2.includes( params.currency ) && - typeof localbitcoinplusplus.master_configurations - .validTradingAmount !== "undefined" && - localbitcoinplusplus.master_configurations.validTradingAmount.includes( - parseFloat(params.depositing_amount) - ) && typeof params.trader_flo_address == "string" && params.trader_flo_address.length > 0 && typeof params.user_upi == "string" && @@ -15976,15 +15957,6 @@ 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 ( trade_margin.remaining_fiat_credit <= 0 || params.withdrawing_amount <= 0 || @@ -17024,11 +16996,6 @@ localbitcoinplusplus.master_configurations.tradableAsset2.includes( params.currency ) && - typeof localbitcoinplusplus.master_configurations - .validTradingAmount !== "undefined" && - localbitcoinplusplus.master_configurations.validTradingAmount.includes( - parseFloat(params.depositing_amount) - ) && typeof params.trader_flo_address == "string" && params.trader_flo_address.length > 0 ) { @@ -17066,11 +17033,13 @@ params.btc_address = generate_btc_keys_for_requester.address; - params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash( - params.depositing_amount, - params.currency, - params.product - ); + // params.bitcoinToBePaid = RM_TRADE.calculateCryptoEquivalentOfCash( + // params.depositing_amount, + // params.currency, + // params.product + // ); + + params.bitcoinToBePaid = Number(params.depositing_amount); let receivedTradeInfo = { ...params }; @@ -17099,18 +17068,12 @@ JSON.stringify(receivedTradeInfo) ); - receivedTradeInfo[ - "depositDataHash" - ] = receivedTradeInfoHash; - receivedTradeInfo[ - "order_validator_sign" - ] = RM_WALLET.sign( + receivedTradeInfo["depositDataHash"] = receivedTradeInfoHash; + receivedTradeInfo["order_validator_sign"] = RM_WALLET.sign( receivedTradeInfoHash, - localbitcoinplusplus.wallets - .MY_SUPERNODE_PRIVATE_KEY + localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY ); - receivedTradeInfo["order_validator_public_key"] = - su_data.myLocalFLOPublicKey; + receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey; try { const this_btc_pvt_key = @@ -19111,14 +19074,6 @@ err_msg = "User address required."; showMessage(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) { err_msg = "Error: Invalid UPI id."; showMessage(err_msg); @@ -20289,7 +20244,61 @@ return `${+new Date()}_${Math.random() .toString(36) .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) + } + }, }; @@ -21521,7 +21530,7 @@ resp.withdrawer_data.trader_flo_address ); } - readDB("localbitcoinUser", "00-01").then(function(user) { + readDB("localbitcoinUser", "00-01").then(async function(user) { if ( typeof user == "object" && user.myLocalFLOAddress == resp.data.trader_flo_address @@ -21529,7 +21538,7 @@ let counterTraderAccountAddress = `Please pay the amount to following address: ${resp.msg}`; showMessage(counterTraderAccountAddress); - modalWindow(counterTraderAccountAddress); + modalWindow(counterTraderAccountAddress); } }); } @@ -26726,14 +26735,15 @@ ); } - let old_data_with_values = Object.values(old_data).filter(f=>f.length>0); - if(Object.values(old_data_with_values).length) { - localbitcoinplusplus.actions.sync_backup_supernode_from_backup_supernode( - localbitcoinplusplus.wallets.my_local_flo_address, - res_obj.globalParams.senderFloId, - primarySupernodeOfThisUser - ); - } + // Issue: Causes request loop + // let old_data_with_values = Object.values(old_data).filter(f=>f.length>0); + // if(Object.values(old_data_with_values).length) { + // localbitcoinplusplus.actions.sync_backup_supernode_from_backup_supernode( + // localbitcoinplusplus.wallets.my_local_flo_address, + // res_obj.globalParams.senderFloId, + // primarySupernodeOfThisUser + // ); + // } }); } @@ -29446,24 +29456,24 @@ tradeAmountSelect.id = "trade_amount_select"; asset_box.appendChild(tradeAmountSelect); - let currencySelect = document.createElement("select"); - currencySelect.id = `withdraw_fiat_currency`; - asset_box.appendChild(currencySelect); - if ( - typeof localbitcoinplusplus.master_configurations.tradableAsset2 !== - "undefined" && - localbitcoinplusplus.master_configurations.tradableAsset2.length > 0 - ) { - let fiatList = localbitcoinplusplus.master_configurations.tradableAsset2; - let fiatListArray = JSON.parse(JSON.stringify(fiatList)); - fiatListArray.unshift("Select Fiat Currency (for exchange rates)"); - for (var i = 0; i < fiatListArray.length; i++) { - var option = document.createElement("option"); - option.value = fiatListArray[i]; - option.text = fiatListArray[i]; - currencySelect.appendChild(option); - } - } + // let currencySelect = document.createElement("select"); + // currencySelect.id = `withdraw_fiat_currency`; + // asset_box.appendChild(currencySelect); + // if ( + // typeof localbitcoinplusplus.master_configurations.tradableAsset2 !== + // "undefined" && + // localbitcoinplusplus.master_configurations.tradableAsset2.length > 0 + // ) { + // let fiatList = localbitcoinplusplus.master_configurations.tradableAsset2; + // let fiatListArray = JSON.parse(JSON.stringify(fiatList)); + // fiatListArray.unshift("Select Fiat Currency (for exchange rates)"); + // for (var i = 0; i < fiatListArray.length; i++) { + // var option = document.createElement("option"); + // option.value = fiatListArray[i]; + // option.text = fiatListArray[i]; + // currencySelect.appendChild(option); + // } + // } // Create a deposit and withdraw button let depositAssetButton = document.createElement("button"); @@ -29480,7 +29490,8 @@ depositAssetButton.addEventListener("click", function() { let asset_type = assetTypeInput.value; let tradeAmount = parseFloat(tradeAmountSelect.value); - let fiatCurrency = currencySelect.value; + //let fiatCurrency = currencySelect.value; + let fiatCurrency = "INR"; if ( typeof userFLOaddress == undefined || userFLOaddress.trim().length < 1 @@ -29521,7 +29532,8 @@ } let tradeAmount = parseFloat(tradeAmountSelect.value); - let fiatCurrency = currencySelect.value; + //let fiatCurrency = currencySelect.value; + let fiatCurrency = "INR"; if ( typeof userFLOaddress == undefined || @@ -29804,47 +29816,47 @@ } } - const receiving_amount_currency_input = document.createElement( - "select" - ); - receiving_amount_currency_input.id = "receiving_amount_currency_input"; - broadcast_tx_ui.appendChild(receiving_amount_currency_input); + // const receiving_amount_currency_input = document.createElement( + // "select" + // ); + // receiving_amount_currency_input.id = "receiving_amount_currency_input"; + // broadcast_tx_ui.appendChild(receiving_amount_currency_input); - if ( - typeof localbitcoinplusplus.master_configurations.tradableAsset2 !== - "undefined" - ) { - let receiving_amount_currency_inputArray = JSON.parse( - JSON.stringify( - localbitcoinplusplus.master_configurations.tradableAsset2 - ) - ).filter( - asset => - !localbitcoinplusplus.master_configurations.tradableAsset1.includes( - asset - ) - ); + // if ( + // typeof localbitcoinplusplus.master_configurations.tradableAsset2 !== + // "undefined" + // ) { + // let receiving_amount_currency_inputArray = JSON.parse( + // JSON.stringify( + // localbitcoinplusplus.master_configurations.tradableAsset2 + // ) + // ).filter( + // asset => + // !localbitcoinplusplus.master_configurations.tradableAsset1.includes( + // asset + // ) + // ); - receiving_amount_currency_inputArray.unshift("Select Fiat"); - for ( - var i = 0; - i < receiving_amount_currency_inputArray.length; - i++ - ) { - var option = document.createElement("option"); - option.value = receiving_amount_currency_inputArray[i]; - option.text = receiving_amount_currency_inputArray[i]; - receiving_amount_currency_input.appendChild(option); - } - } + // receiving_amount_currency_inputArray.unshift("Select Fiat"); + // for ( + // var i = 0; + // i < receiving_amount_currency_inputArray.length; + // i++ + // ) { + // var option = document.createElement("option"); + // option.value = receiving_amount_currency_inputArray[i]; + // option.text = receiving_amount_currency_inputArray[i]; + // receiving_amount_currency_input.appendChild(option); + // } + // } const utxo_addr_input = document.createElement("input"); 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"); 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"); receiver_address_input.type = "text"; @@ -29854,9 +29866,9 @@ receiving_crypto_amount_input.type = "text"; receiving_crypto_amount_input.placeholder = `Amount to Send`; - const change_adress_input = document.createElement("input"); - change_adress_input.type = "text"; - change_adress_input.placeholder = `Change Address`; + // const change_adress_input = document.createElement("input"); + // change_adress_input.type = "text"; + // change_adress_input.placeholder = `Change Address`; const tx_send_button = document.createElement("button"); 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(receiver_address_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); let err_msg; @@ -29893,11 +29905,11 @@ showMessage(err_msg); throw new Error(err_msg); } - if (change_adress_input.value.length < 1) { - err_msg = "Empty Change Address."; - showMessage(err_msg); - throw new Error(err_msg); - } + // if (change_adress_input.value.length < 1) { + // err_msg = "Empty Change Address."; + // showMessage(err_msg); + // throw new Error(err_msg); + // } const RM_TRADE = new localbitcoinplusplus.trade(); RM_TRADE.sendTransaction( @@ -29906,7 +29918,7 @@ utxo_addr_wif_input.value, receiver_address_input.value, receiving_crypto_amount_input.value, - change_adress_input.value, + utxo_addr_input.value, async function(res) { console.log(res); if (typeof res == "object") { @@ -29991,6 +30003,7 @@ let explorer; let decimal = 100000000; + let crypto_diff = localbitcoinplusplus.master_configurations.btcTradeMargin; switch (trader_deposits.product) { case "BTC": explorer = localbitcoinplusplus.server.btc_mainnet; @@ -30001,10 +30014,12 @@ case "FLO": explorer = localbitcoinplusplus.server.flo_mainnet; decimal = 1; + crypto_diff = Number(localbitcoinplusplus.master_configurations.btcTradeMargin/decimal); break; case "FLO_TEST": explorer = localbitcoinplusplus.server.flo_testnet; decimal = 1; + crypto_diff = Number(localbitcoinplusplus.master_configurations.btcTradeMargin/decimal); break; default: break; @@ -30019,13 +30034,12 @@ /************************ Case of dispute *****************/ if ( - trader_deposits.bitcoinToBePaid - balance > - localbitcoinplusplus.master_configurations.btcTradeMargin + trader_deposits.bitcoinToBePaid - balance > crypto_diff ) { console.log( trader_deposits.bitcoinToBePaid, balance, - localbitcoinplusplus.master_configurations.btcTradeMargin + crypto_diff ); console.warn("User sent less cryptos"); diff --git a/supernode/server/chatRoomWSS b/supernode/server/chatRoomWSS new file mode 100755 index 0000000000000000000000000000000000000000..f344d4349539edaed1809df3ce6d6e4770d90d88 GIT binary patch literal 172088 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 W(Y`q8Ec_!|RQ&pRbgiEq{{I6N=(O_y literal 0 HcmV?d00001 diff --git a/supernode/websocket_chat.c b/supernode/server/chatRoomWSServer.c similarity index 60% rename from supernode/websocket_chat.c rename to supernode/server/chatRoomWSServer.c index f6c9caf..0fbac56 100644 --- a/supernode/websocket_chat.c +++ b/supernode/server/chatRoomWSServer.c @@ -6,7 +6,7 @@ #include "mongoose.h" 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 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) { struct mg_connection *c; - char buf[25000]; - 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. */ + printf("(Broadcast) \t[%d]\n", (int)msg.len); 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. */ - 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) { case MG_EV_WEBSOCKET_HANDSHAKE_DONE: { /* New websocket connection. Tell everybody. */ - broadcast(nc, mg_mk_str("++ joined")); break; } case MG_EV_WEBSOCKET_FRAME: { struct websocket_message *wm = (struct websocket_message *) ev_data; /* New websocket message. Tell everybody. */ - struct mg_str d = {(char *) wm->data, wm->size}; //This is the data received data inside *ev_data - broadcast(nc, d); //Action when data is received + struct mg_str d = {(char *) wm->data, wm->size}; + 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; } 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: { /* Disconnect. Tell everybody. */ if (is_websocket(nc)) { - broadcast(nc, mg_mk_str("-- left")); + //broadcast(nc, mg_mk_str("-- left")); } break; } @@ -72,10 +81,10 @@ int main(void) { 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); - s_http_server_opts.document_root = "."; // Serve current directory - s_http_server_opts.enable_directory_listing = "yes"; + s_http_server_opts.document_root = "web"; // Serve current directory + s_http_server_opts.enable_directory_listing = "no"; printf("Started on port %s\n", s_http_port); while (s_signal_received == 0) { @@ -84,4 +93,4 @@ int main(void) { mg_mgr_free(&mgr); return 0; -} \ No newline at end of file +} diff --git a/examples.mk b/supernode/server/examples.mk similarity index 100% rename from examples.mk rename to supernode/server/examples.mk diff --git a/mongoose.c b/supernode/server/mongoose.c similarity index 96% rename from mongoose.c rename to supernode/server/mongoose.c index d117564..a566fbc 100644 --- a/mongoose.c +++ b/supernode/server/mongoose.c @@ -38,7 +38,9 @@ /* Amalgamated: #include "mg_http.h" */ /* Amalgamated: #include "mg_net.h" */ +#ifndef MG_CTL_MSG_MESSAGE_SIZE #define MG_CTL_MSG_MESSAGE_SIZE 8192 +#endif /* internals that need to be accessible in unit tests */ MG_INTERNAL struct mg_connection *mg_do_connect(struct mg_connection *nc, @@ -460,6 +462,10 @@ int cs_base64_decode(const unsigned char *s, int len, char *dst, int *dec_len) { #define CS_ENABLE_DEBUG 0 #endif +#ifndef CS_LOG_PREFIX_LEN +#define CS_LOG_PREFIX_LEN 24 +#endif + #ifndef CS_LOG_ENABLE_TS_DIFF #define CS_LOG_ENABLE_TS_DIFF 0 #endif @@ -490,51 +496,28 @@ enum cs_log_level { void cs_log_set_level(enum cs_log_level level); /* - * Set log filter. NULL (a default) logs everything. - * Otherwise, function name and file name will be tested against the given - * pattern, and only matching messages will be printed. + * A comma-separated set of prefix=level. + * prefix is matched against the log prefix exactly as printed, including line + * number, but partial match is ok. Check stops on first matching entry. + * If nothing matches, default level is used. * - * For the pattern syntax, refer to `mg_match_prefix()` in `str_util.h`. + * Examples: + * main.c:=4 - everything from main C at verbose debug level. + * mongoose.c=1,mjs.c=1,=4 - everything at verbose debug except mg_* and mjs_* * - * Example: - * ```c - * void foo(void) { - * LOG(LL_INFO, ("hello from foo")); - * } - * - * void bar(void) { - * LOG(LL_INFO, ("hello from bar")); - * } - * - * void test(void) { - * cs_log_set_filter(NULL); - * foo(); - * bar(); - * - * cs_log_set_filter("f*"); - * foo(); - * bar(); // Will NOT print anything - * - * cs_log_set_filter("bar"); - * foo(); // Will NOT print anything - * bar(); - * } - * ``` */ -void cs_log_set_filter(const char *pattern); +void cs_log_set_file_level(const char *file_level); /* - * Helper function which prints message prefix with the given `level`, function - * name `func` and `filename`. If message should be printed (accordingly to the - * current log level and filter), prints the prefix and returns 1, otherwise - * returns 0. + * Helper function which prints message prefix with the given `level`. + * If message should be printed (according to the current log level + * and filter), prints the prefix and returns 1, otherwise returns 0. * * Clients should typically just use `LOG()` macro. */ -int cs_log_print_prefix(enum cs_log_level level, const char *func, - const char *filename); +int cs_log_print_prefix(enum cs_log_level level, const char *fname, int line); -extern enum cs_log_level cs_log_threshold; +extern enum cs_log_level cs_log_level; #if CS_ENABLE_STDIO @@ -559,9 +542,11 @@ void cs_log_printf(const char *fmt, ...) PRINTF_LIKE(1, 2); * LOG(LL_DEBUG, ("my debug message: %d", 123)); * ``` */ -#define LOG(l, x) \ - do { \ - if (cs_log_print_prefix(l, __func__, __FILE__)) cs_log_printf x; \ +#define LOG(l, x) \ + do { \ + if (cs_log_print_prefix(l, __FILE__, __LINE__)) { \ + cs_log_printf x; \ + } \ } while (0) #else @@ -624,7 +609,7 @@ void cs_log_printf(const char *fmt, ...) PRINTF_LIKE(1, 2); /* Amalgamated: #include "common/cs_time.h" */ /* Amalgamated: #include "common/str_util.h" */ -enum cs_log_level cs_log_threshold WEAK = +enum cs_log_level cs_log_level WEAK = #if CS_ENABLE_DEBUG LL_VERBOSE_DEBUG; #else @@ -632,10 +617,9 @@ enum cs_log_level cs_log_threshold WEAK = #endif #if CS_ENABLE_STDIO -static char *s_filter_pattern = NULL; -static size_t s_filter_pattern_len; +static char *s_file_level = NULL; -void cs_log_set_filter(const char *pattern) WEAK; +void cs_log_set_file_level(const char *file_level) WEAK; FILE *cs_log_file WEAK = NULL; @@ -645,34 +629,62 @@ double cs_log_ts WEAK; enum cs_log_level cs_log_cur_msg_level WEAK = LL_NONE; -void cs_log_set_filter(const char *pattern) { - free(s_filter_pattern); - if (pattern != NULL) { - s_filter_pattern = strdup(pattern); - s_filter_pattern_len = strlen(pattern); +void cs_log_set_file_level(const char *file_level) { + char *fl = s_file_level; + if (file_level != NULL) { + s_file_level = strdup(file_level); } else { - s_filter_pattern = NULL; - s_filter_pattern_len = 0; + s_file_level = NULL; } + free(fl); } -int cs_log_print_prefix(enum cs_log_level, const char *, const char *) WEAK; -int cs_log_print_prefix(enum cs_log_level level, const char *func, - const char *filename) { - char prefix[21]; +int cs_log_print_prefix(enum cs_log_level level, const char *file, int ln) WEAK; +int cs_log_print_prefix(enum cs_log_level level, const char *file, int ln) { + char prefix[CS_LOG_PREFIX_LEN], *q; + const char *p; + size_t fl = 0, ll = 0, pl = 0; - if (level > cs_log_threshold) return 0; - if (s_filter_pattern != NULL && - mg_match_prefix(s_filter_pattern, s_filter_pattern_len, func) == 0 && - mg_match_prefix(s_filter_pattern, s_filter_pattern_len, filename) == 0) { - return 0; + if (level > cs_log_level && s_file_level == NULL) return 0; + + p = file + strlen(file); + + while (p != file) { + const char c = *(p - 1); + if (c == '/' || c == '\\') break; + p--; + fl++; + } + + ll = (ln < 10000 ? (ln < 1000 ? (ln < 100 ? (ln < 10 ? 1 : 2) : 3) : 4) : 5); + if (fl > (sizeof(prefix) - ll - 2)) fl = (sizeof(prefix) - ll - 2); + + pl = fl + 1 + ll; + memcpy(prefix, p, fl); + q = prefix + pl; + memset(q, ' ', sizeof(prefix) - pl); + do { + *(--q) = '0' + (ln % 10); + ln /= 10; + } while (ln > 0); + *(--q) = ':'; + + if (s_file_level != NULL) { + enum cs_log_level pll = cs_log_level; + struct mg_str fl = mg_mk_str(s_file_level), ps = MG_MK_STR_N(prefix, pl); + struct mg_str k, v; + while ((fl = mg_next_comma_list_entry_n(fl, &k, &v)).p != NULL) { + bool yes = !(!mg_str_starts_with(ps, k) || v.len == 0); + if (!yes) continue; + pll = (enum cs_log_level)(*v.p - '0'); + break; + } + if (level > pll) return 0; } - strncpy(prefix, func, 20); - prefix[20] = '\0'; if (cs_log_file == NULL) cs_log_file = stderr; cs_log_cur_msg_level = level; - fprintf(cs_log_file, "%-20s ", prefix); + fwrite(prefix, 1, sizeof(prefix), cs_log_file); #if CS_LOG_ENABLE_TS_DIFF { double now = cs_time(); @@ -701,15 +713,15 @@ void cs_log_set_file(FILE *file) { #else -void cs_log_set_filter(const char *pattern) { - (void) pattern; +void cs_log_set_file_level(const char *file_level) { + (void) file_level; } #endif /* CS_ENABLE_STDIO */ void cs_log_set_level(enum cs_log_level level) WEAK; void cs_log_set_level(enum cs_log_level level) { - cs_log_threshold = level; + cs_log_level = level; #if CS_LOG_ENABLE_TS_DIFF && CS_ENABLE_STDIO cs_log_ts = cs_time(); #endif @@ -1612,6 +1624,22 @@ size_t mbuf_append(struct mbuf *a, const void *buf, size_t len) { return mbuf_insert(a, a->len, buf, len); } +size_t mbuf_append_and_free(struct mbuf *a, void *buf, size_t len) WEAK; +size_t mbuf_append_and_free(struct mbuf *a, void *data, size_t len) { + size_t ret; + /* Optimization: if the buffer is currently empty, + * take over the user-provided buffer. */ + if (a->len == 0) { + if (a->buf != NULL) free(a->buf); + a->buf = (char *) data; + a->len = a->size = len; + return len; + } + ret = mbuf_insert(a, a->len, data, len); + free(data); + return ret; +} + void mbuf_remove(struct mbuf *mb, size_t n) WEAK; void mbuf_remove(struct mbuf *mb, size_t n) { if (n > 0 && n <= mb->len) { @@ -1620,6 +1648,17 @@ void mbuf_remove(struct mbuf *mb, size_t n) { } } +void mbuf_clear(struct mbuf *mb) WEAK; +void mbuf_clear(struct mbuf *mb) { + mb->len = 0; +} + +void mbuf_move(struct mbuf *from, struct mbuf *to) WEAK; +void mbuf_move(struct mbuf *from, struct mbuf *to) { + memcpy(to, from, sizeof(*to)); + memset(from, 0, sizeof(*from)); +} + #endif /* EXCLUDE_COMMON */ #ifdef MG_MODULE_LINES #line 1 "common/mg_str.c" @@ -1645,6 +1684,7 @@ void mbuf_remove(struct mbuf *mb, size_t n) { /* Amalgamated: #include "common/mg_str.h" */ /* Amalgamated: #include "common/platform.h" */ +#include #include #include @@ -1744,6 +1784,14 @@ int mg_strncmp(const struct mg_str str1, const struct mg_str str2, size_t n) { return mg_strcmp(s1, s2); } +void mg_strfree(struct mg_str *s) WEAK; +void mg_strfree(struct mg_str *s) { + char *sp = (char *) s->p; + s->p = NULL; + s->len = 0; + if (sp != NULL) free(sp); +} + const char *mg_strstr(const struct mg_str haystack, const struct mg_str needle) WEAK; const char *mg_strstr(const struct mg_str haystack, @@ -1769,6 +1817,13 @@ struct mg_str mg_strstrip(struct mg_str s) { } return s; } + +int mg_str_starts_with(struct mg_str s, struct mg_str prefix) WEAK; +int mg_str_starts_with(struct mg_str s, struct mg_str prefix) { + const struct mg_str sp = MG_MK_STR_N(s.p, prefix.len); + if (s.len < prefix.len) return 0; + return (mg_strcmp(sp, prefix) == 0); +} #ifdef MG_MODULE_LINES #line 1 "common/str_util.c" #endif @@ -2408,6 +2463,7 @@ MG_INTERNAL void mg_call(struct mg_connection *nc, (nc->flags & _MG_CALLBACK_MODIFIABLE_FLAGS_MASK); } } + if (ev != MG_EV_POLL) nc->mgr->num_calls++; if (ev != MG_EV_POLL) { DBG(("%p after %s flags=0x%lx rmbl=%d smbl=%d", nc, ev_handler == nc->handler ? "user" : "proto", nc->flags, @@ -2436,8 +2492,16 @@ MG_INTERNAL size_t recv_avail_size(struct mg_connection *conn, size_t max) { static int mg_do_recv(struct mg_connection *nc); int mg_if_poll(struct mg_connection *nc, double now) { - if ((nc->flags & MG_F_CLOSE_IMMEDIATELY) || - (nc->send_mbuf.len == 0 && (nc->flags & MG_F_SEND_AND_CLOSE))) { + if (nc->flags & MG_F_CLOSE_IMMEDIATELY) { + mg_close_conn(nc); + return 0; + } else if (nc->flags & MG_F_SEND_AND_CLOSE) { + if (nc->send_mbuf.len == 0) { + nc->flags |= MG_F_CLOSE_IMMEDIATELY; + mg_close_conn(nc); + return 0; + } + } else if (nc->flags & MG_F_RECV_AND_CLOSE) { mg_close_conn(nc); return 0; } @@ -2480,6 +2544,13 @@ void mg_destroy_conn(struct mg_connection *conn, int destroy_if) { } void mg_close_conn(struct mg_connection *conn) { + /* See if there's any remaining data to deliver. Skip if user completely + * throttled the connection there will be no progress anyway. */ + if (conn->sock != INVALID_SOCKET && mg_do_recv(conn) == -2) { + /* Receive is throttled, wait. */ + conn->flags |= MG_F_RECV_AND_CLOSE; + return; + } #if MG_ENABLE_SSL if (conn->flags & MG_F_SSL_HANDSHAKE_DONE) { mg_ssl_if_conn_close_notify(conn); @@ -2570,6 +2641,7 @@ void mg_mgr_free(struct mg_mgr *m) { for (conn = m->active_connections; conn != NULL; conn = tmp_conn) { tmp_conn = conn->next; + conn->flags |= MG_F_CLOSE_IMMEDIATELY; mg_close_conn(conn); } @@ -2585,19 +2657,14 @@ void mg_mgr_free(struct mg_mgr *m) { MG_FREE((char *) m->nameserver); } -time_t mg_mgr_poll(struct mg_mgr *m, int timeout_ms) { - int i; - time_t now = 0; /* oh GCC, seriously ? */ - - if (m->num_ifaces == 0) { - LOG(LL_ERROR, ("cannot poll: no interfaces")); - return 0; - } +int mg_mgr_poll(struct mg_mgr *m, int timeout_ms) { + int i, num_calls_before = m->num_calls; for (i = 0; i < m->num_ifaces; i++) { - now = m->ifaces[i]->vtable->poll(m->ifaces[i], timeout_ms); + m->ifaces[i]->vtable->poll(m->ifaces[i], timeout_ms); } - return now; + + return (m->num_calls - num_calls_before); } int mg_vprintf(struct mg_connection *nc, const char *fmt, va_list ap) { @@ -2801,7 +2868,6 @@ MG_INTERNAL void mg_ssl_handshake(struct mg_connection *nc) { enum mg_ssl_if_result res; if (nc->flags & MG_F_SSL_HANDSHAKE_DONE) return; res = mg_ssl_if_handshake(nc); - LOG(LL_DEBUG, ("%p %d res %d", nc, server_side, res)); if (res == MG_SSL_OK) { nc->flags |= MG_F_SSL_HANDSHAKE_DONE; @@ -2879,18 +2945,23 @@ static int mg_do_recv(struct mg_connection *nc) { ((nc->flags & MG_F_LISTENING) && !(nc->flags & MG_F_UDP))) { return -1; } - len = recv_avail_size(nc, len); - if (len == 0) return -2; - if (nc->recv_mbuf.size < nc->recv_mbuf.len + len) { - mbuf_resize(&nc->recv_mbuf, nc->recv_mbuf.len + len); - } - buf = nc->recv_mbuf.buf + nc->recv_mbuf.len; - len = nc->recv_mbuf.size - nc->recv_mbuf.len; - if (nc->flags & MG_F_UDP) { - res = mg_recv_udp(nc, buf, len); - } else { - res = mg_recv_tcp(nc, buf, len); - } + do { + len = recv_avail_size(nc, len); + if (len == 0) { + res = -2; + break; + } + if (nc->recv_mbuf.size < nc->recv_mbuf.len + len) { + mbuf_resize(&nc->recv_mbuf, nc->recv_mbuf.len + len); + } + buf = nc->recv_mbuf.buf + nc->recv_mbuf.len; + len = nc->recv_mbuf.size - nc->recv_mbuf.len; + if (nc->flags & MG_F_UDP) { + res = mg_recv_udp(nc, buf, len); + } else { + res = mg_recv_tcp(nc, buf, len); + } + } while (res > 0 && !(nc->flags & (MG_F_CLOSE_IMMEDIATELY | MG_F_UDP))); return res; } @@ -2932,10 +3003,12 @@ static int mg_recv_tcp(struct mg_connection *nc, char *buf, size_t len) { mg_hexdump_connection(nc, nc->mgr->hexdump_file, buf, n, MG_EV_RECV); } #endif + mbuf_trim(&nc->recv_mbuf); mg_call(nc, NULL, nc->user_data, MG_EV_RECV, &n); } else if (n < 0) { nc->flags |= MG_F_CLOSE_IMMEDIATELY; } + mbuf_trim(&nc->recv_mbuf); return n; } @@ -3005,7 +3078,9 @@ static int mg_recv_udp(struct mg_connection *nc, char *buf, size_t len) { mg_hexdump_connection(nc, nc->mgr->hexdump_file, buf, n, MG_EV_RECV); } #endif - mg_call(nc, NULL, nc->user_data, MG_EV_RECV, &n); + if (n != 0) { + mg_call(nc, NULL, nc->user_data, MG_EV_RECV, &n); + } } out: @@ -3047,7 +3122,7 @@ void mg_if_can_send_cb(struct mg_connection *nc) { } } else #endif - { + if (len > 0) { if (nc->flags & MG_F_UDP) { n = nc->iface->vtable->udp_send(nc, buf, len); } else { @@ -3585,6 +3660,162 @@ struct mg_iface *mg_find_iface(struct mg_mgr *mgr, } return NULL; } + +double mg_mgr_min_timer(const struct mg_mgr *mgr) { + double min_timer = 0; + struct mg_connection *nc; + for (nc = mgr->active_connections; nc != NULL; nc = nc->next) { + if (nc->ev_timer_time <= 0) continue; + if (min_timer == 0 || nc->ev_timer_time < min_timer) { + min_timer = nc->ev_timer_time; + } + } + return min_timer; +} +#ifdef MG_MODULE_LINES +#line 1 "mongoose/src/mg_net_if_null.c" +#endif +/* + * Copyright (c) 2018 Cesanta Software Limited + * All rights reserved + * + * This software is dual-licensed: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. For the terms of this + * license, see . + * + * You are free to use this software under the terms of the GNU General + * Public License, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * Alternatively, you can license this software under a commercial + * license, as set out in . + */ + +static void mg_null_if_connect_tcp(struct mg_connection *c, + const union socket_address *sa) { + c->flags |= MG_F_CLOSE_IMMEDIATELY; + (void) sa; +} + +static void mg_null_if_connect_udp(struct mg_connection *c) { + c->flags |= MG_F_CLOSE_IMMEDIATELY; +} + +static int mg_null_if_listen_tcp(struct mg_connection *c, + union socket_address *sa) { + (void) c; + (void) sa; + return -1; +} + +static int mg_null_if_listen_udp(struct mg_connection *c, + union socket_address *sa) { + (void) c; + (void) sa; + return -1; +} + +static int mg_null_if_tcp_send(struct mg_connection *c, const void *buf, + size_t len) { + (void) c; + (void) buf; + (void) len; + return -1; +} + +static int mg_null_if_udp_send(struct mg_connection *c, const void *buf, + size_t len) { + (void) c; + (void) buf; + (void) len; + return -1; +} + +int mg_null_if_tcp_recv(struct mg_connection *c, void *buf, size_t len) { + (void) c; + (void) buf; + (void) len; + return -1; +} + +int mg_null_if_udp_recv(struct mg_connection *c, void *buf, size_t len, + union socket_address *sa, size_t *sa_len) { + (void) c; + (void) buf; + (void) len; + (void) sa; + (void) sa_len; + return -1; +} + +static int mg_null_if_create_conn(struct mg_connection *c) { + (void) c; + return 1; +} + +static void mg_null_if_destroy_conn(struct mg_connection *c) { + (void) c; +} + +static void mg_null_if_sock_set(struct mg_connection *c, sock_t sock) { + (void) c; + (void) sock; +} + +static void mg_null_if_init(struct mg_iface *iface) { + (void) iface; +} + +static void mg_null_if_free(struct mg_iface *iface) { + (void) iface; +} + +static void mg_null_if_add_conn(struct mg_connection *c) { + c->sock = INVALID_SOCKET; + c->flags |= MG_F_CLOSE_IMMEDIATELY; +} + +static void mg_null_if_remove_conn(struct mg_connection *c) { + (void) c; +} + +static time_t mg_null_if_poll(struct mg_iface *iface, int timeout_ms) { + struct mg_mgr *mgr = iface->mgr; + struct mg_connection *nc, *tmp; + double now = mg_time(); + /* We basically just run timers and poll. */ + for (nc = mgr->active_connections; nc != NULL; nc = tmp) { + tmp = nc->next; + mg_if_poll(nc, now); + } + (void) timeout_ms; + return (time_t) now; +} + +static void mg_null_if_get_conn_addr(struct mg_connection *c, int remote, + union socket_address *sa) { + (void) c; + (void) remote; + (void) sa; +} + +#define MG_NULL_IFACE_VTABLE \ + { \ + mg_null_if_init, mg_null_if_free, mg_null_if_add_conn, \ + mg_null_if_remove_conn, mg_null_if_poll, mg_null_if_listen_tcp, \ + mg_null_if_listen_udp, mg_null_if_connect_tcp, mg_null_if_connect_udp, \ + mg_null_if_tcp_send, mg_null_if_udp_send, mg_null_if_tcp_recv, \ + mg_null_if_udp_recv, mg_null_if_create_conn, mg_null_if_destroy_conn, \ + mg_null_if_sock_set, mg_null_if_get_conn_addr, \ + } + +const struct mg_iface_vtable mg_null_iface_vtable = MG_NULL_IFACE_VTABLE; + +#if MG_NET_IF == MG_NET_IF_NULL +const struct mg_iface_vtable mg_default_iface_vtable = MG_NULL_IFACE_VTABLE; +#endif /* MG_NET_IF == MG_NET_IF_NULL */ #ifdef MG_MODULE_LINES #line 1 "mongoose/src/mg_net_if_socket.c" #endif @@ -4847,6 +5078,8 @@ static void mg_ssl_mbed_log(void *ctx, int level, const char *file, int line, } /* mbedTLS passes strings with \n at the end, strip it. */ LOG(cs_level, ("%p %.*s", ctx, (int) (strlen(str) - 1), str)); + (void) ctx; + (void) str; (void) file; (void) line; (void) cs_level; @@ -5036,9 +5269,9 @@ static void mg_ssl_if_mbed_free_certs_and_keys(struct mg_ssl_if_ctx *ctx) { if (ctx->ca_cert != NULL) { mbedtls_ssl_conf_ca_chain(ctx->conf, NULL, NULL); #ifdef MBEDTLS_X509_CA_CHAIN_ON_DISK - if (ctx->ca_cert->ca_chain_file != NULL) { - MG_FREE((void *) ctx->ca_cert->ca_chain_file); - ctx->ca_cert->ca_chain_file = NULL; + if (ctx->conf->ca_chain_file != NULL) { + MG_FREE((void *) ctx->conf->ca_chain_file); + ctx->conf->ca_chain_file = NULL; } #endif mbedtls_x509_crt_free(ctx->ca_cert); @@ -5145,15 +5378,13 @@ static enum mg_ssl_if_result mg_use_ca_cert(struct mg_ssl_if_ctx *ctx, mbedtls_x509_crt_init(ctx->ca_cert); #ifdef MBEDTLS_X509_CA_CHAIN_ON_DISK ca_cert = strdup(ca_cert); - if (mbedtls_x509_crt_set_ca_chain_file(ctx->ca_cert, ca_cert) != 0) { - return MG_SSL_ERROR; - } + mbedtls_ssl_conf_ca_chain_file(ctx->conf, ca_cert, NULL); #else if (mbedtls_x509_crt_parse_file(ctx->ca_cert, ca_cert) != 0) { return MG_SSL_ERROR; } -#endif mbedtls_ssl_conf_ca_chain(ctx->conf, ctx->ca_cert, NULL); +#endif mbedtls_ssl_conf_authmode(ctx->conf, MBEDTLS_SSL_VERIFY_REQUIRED); return MG_SSL_OK; } @@ -5731,6 +5962,7 @@ struct mg_http_multipart_stream { void *user_data; enum mg_http_multipart_stream_state state; int processing_part; + int data_avail; }; struct mg_reverse_proxy_data { @@ -6155,6 +6387,10 @@ static size_t mg_http_parse_chunk(char *buf, size_t len, char **chunk_data, n *= 16; n += (s[i] >= '0' && s[i] <= '9') ? s[i] - '0' : tolower(s[i]) - 'a' + 10; i++; + if (i > 6) { + /* Chunk size is unreasonable. */ + return 0; + } } /* Skip new line */ @@ -6345,9 +6581,9 @@ void mg_http_handler(struct mg_connection *nc, int ev, if (io->len > 0 && (req_len = mg_parse_http(io->buf, io->len, hm, is_req)) > 0) { /* - * For HTTP messages without Content-Length, always send HTTP message - * before MG_EV_CLOSE message. - */ + * For HTTP messages without Content-Length, always send HTTP message + * before MG_EV_CLOSE message. + */ int ev2 = is_req ? MG_EV_HTTP_REQUEST : MG_EV_HTTP_REPLY; hm->message.len = io->len; hm->body.len = io->buf + io->len - hm->body.p; @@ -6355,6 +6591,9 @@ void mg_http_handler(struct mg_connection *nc, int ev, mg_http_call_endpoint_handler(nc, ev2, hm); } pd->rcvd = 0; + if (pd->endpoint_handler != NULL && pd->endpoint_handler != nc->handler) { + mg_call(nc, pd->endpoint_handler, nc->user_data, ev, NULL); + } } #if MG_ENABLE_FILESYSTEM @@ -6365,17 +6604,24 @@ void mg_http_handler(struct mg_connection *nc, int ev, mg_call(nc, nc->handler, nc->user_data, ev, ev_data); +#if MG_ENABLE_HTTP_STREAMING_MULTIPART + if (pd->mp_stream.boundary != NULL && + (ev == MG_EV_RECV || ev == MG_EV_POLL)) { + if (ev == MG_EV_RECV) { + pd->rcvd += *(int *) ev_data; + mg_http_multipart_continue(nc); + } else if (pd->mp_stream.data_avail) { + /* Try re-delivering the data. */ + mg_http_multipart_continue(nc); + } + return; + } +#endif /* MG_ENABLE_HTTP_STREAMING_MULTIPART */ + if (ev == MG_EV_RECV) { struct mg_str *s; pd->rcvd += *(int *) ev_data; -#if MG_ENABLE_HTTP_STREAMING_MULTIPART - if (pd->mp_stream.boundary != NULL) { - mg_http_multipart_continue(nc); - return; - } -#endif /* MG_ENABLE_HTTP_STREAMING_MULTIPART */ - again: req_len = mg_parse_http(io->buf, io->len, hm, is_req); @@ -6403,16 +6649,23 @@ void mg_http_handler(struct mg_connection *nc, int ev, /* Do nothing, request is not yet fully buffered */ } #if MG_ENABLE_HTTP_WEBSOCKET - else if (nc->listener == NULL && - mg_get_http_header(hm, "Sec-WebSocket-Accept")) { + else if (nc->listener == NULL && (nc->flags & MG_F_IS_WEBSOCKET)) { /* We're websocket client, got handshake response from server. */ - /* TODO(lsm): check the validity of accept Sec-WebSocket-Accept */ - mbuf_remove(io, req_len); - nc->proto_handler = mg_ws_handler; - nc->flags |= MG_F_IS_WEBSOCKET; - mg_call(nc, nc->handler, nc->user_data, MG_EV_WEBSOCKET_HANDSHAKE_DONE, - NULL); - mg_ws_handler(nc, MG_EV_RECV, ev_data MG_UD_ARG(user_data)); + DBG(("%p WebSocket upgrade code %d", nc, hm->resp_code)); + if (hm->resp_code == 101 && + mg_get_http_header(hm, "Sec-WebSocket-Accept")) { + /* TODO(lsm): check the validity of accept Sec-WebSocket-Accept */ + mg_call(nc, nc->handler, nc->user_data, MG_EV_WEBSOCKET_HANDSHAKE_DONE, + hm); + mbuf_remove(io, req_len); + nc->proto_handler = mg_ws_handler; + mg_ws_handler(nc, MG_EV_RECV, ev_data MG_UD_ARG(user_data)); + } else { + mg_call(nc, nc->handler, nc->user_data, MG_EV_WEBSOCKET_HANDSHAKE_DONE, + hm); + nc->flags |= MG_F_CLOSE_IMMEDIATELY; + mbuf_remove(io, req_len); + } } else if (nc->listener != NULL && (vec = mg_get_http_header(hm, "Sec-WebSocket-Key")) != NULL) { struct mg_http_endpoint *ep; @@ -6443,7 +6696,7 @@ void mg_http_handler(struct mg_connection *nc, int ev, mg_ws_handshake(nc, vec, hm); } mg_call(nc, nc->handler, nc->user_data, MG_EV_WEBSOCKET_HANDSHAKE_DONE, - NULL); + hm); mg_ws_handler(nc, MG_EV_RECV, ev_data MG_UD_ARG(user_data)); } } @@ -6460,6 +6713,7 @@ void mg_http_handler(struct mg_connection *nc, int ev, } } else { /* We did receive all HTTP body. */ + int request_done = 1; int trigger_ev = nc->listener ? MG_EV_HTTP_REQUEST : MG_EV_HTTP_REPLY; char addr[32]; mg_sock_addr_to_str(&nc->sa, addr, sizeof(addr), @@ -6471,8 +6725,28 @@ void mg_http_handler(struct mg_connection *nc, int ev, mg_http_call_endpoint_handler(nc, trigger_ev, hm); mbuf_remove(io, hm->message.len); pd->rcvd -= hm->message.len; - if (io->len > 0) { - goto again; +#if MG_ENABLE_FILESYSTEM + /* We don't have a generic mechanism of communicating that we are done + * responding to a request (should probably add one). But if we are + * serving + * a file, we are definitely not done. */ + if (pd->file.fp != NULL) request_done = 0; +#endif +#if MG_ENABLE_HTTP_CGI + /* If this is a CGI request, we are not done either. */ + if (pd->cgi.cgi_nc != NULL) request_done = 0; +#endif + if (request_done) { + /* This request is done but we may receive another on this connection. + */ + mg_http_conn_destructor(pd); + nc->proto_data = NULL; + if (io->len > 0) { + /* We already have data for the next one, restart parsing. */ + pd = mg_http_get_proto_data(nc); + pd->rcvd = io->len; + goto again; + } } } } @@ -6549,8 +6823,9 @@ exit_mp: #define CONTENT_DISPOSITION "Content-Disposition: " -static void mg_http_multipart_call_handler(struct mg_connection *c, int ev, - const char *data, size_t data_len) { +static size_t mg_http_multipart_call_handler(struct mg_connection *c, int ev, + const char *data, + size_t data_len) { struct mg_http_multipart_part mp; struct mg_http_proto_data *pd = mg_http_get_proto_data(c); memset(&mp, 0, sizeof(mp)); @@ -6560,8 +6835,11 @@ static void mg_http_multipart_call_handler(struct mg_connection *c, int ev, mp.user_data = pd->mp_stream.user_data; mp.data.p = data; mp.data.len = data_len; + mp.num_data_consumed = data_len; mg_call(c, pd->endpoint_handler, c->user_data, ev, &mp); pd->mp_stream.user_data = mp.user_data; + pd->mp_stream.data_avail = (mp.num_data_consumed != data_len); + return mp.num_data_consumed; } static int mg_http_multipart_finalize(struct mg_connection *c) { @@ -6699,19 +6977,25 @@ static int mg_http_multipart_continue_wait_for_chunk(struct mg_connection *c) { boundary = c_strnstr(io->buf, pd->mp_stream.boundary, io->len); if (boundary == NULL) { - int data_size = (io->len - (pd->mp_stream.boundary_len + 6)); - if (data_size > 0) { - mg_http_multipart_call_handler(c, MG_EV_HTTP_PART_DATA, io->buf, - data_size); - mbuf_remove(io, data_size); + int data_len = (io->len - (pd->mp_stream.boundary_len + 6)); + if (data_len > 0) { + size_t consumed = mg_http_multipart_call_handler( + c, MG_EV_HTTP_PART_DATA, io->buf, (size_t) data_len); + mbuf_remove(io, consumed); } return 0; } else if (boundary != NULL) { - int data_size = (boundary - io->buf - 4); - mg_http_multipart_call_handler(c, MG_EV_HTTP_PART_DATA, io->buf, data_size); - mbuf_remove(io, (boundary - io->buf)); - pd->mp_stream.state = MPS_WAITING_FOR_BOUNDARY; - return 1; + size_t data_len = ((size_t)(boundary - io->buf) - 4); + size_t consumed = mg_http_multipart_call_handler(c, MG_EV_HTTP_PART_DATA, + io->buf, data_len); + mbuf_remove(io, consumed); + if (consumed == data_len) { + mbuf_remove(io, 4); + pd->mp_stream.state = MPS_WAITING_FOR_BOUNDARY; + return 1; + } else { + return 0; + } } else { return 0; } @@ -7489,7 +7773,7 @@ int mg_check_digest_auth(struct mg_str method, struct mg_str uri, struct mg_str nc, struct mg_str nonce, struct mg_str auth_domain, FILE *fp) { char buf[128], f_user[sizeof(buf)], f_ha1[sizeof(buf)], f_domain[sizeof(buf)]; - char expected_response[33]; + char exp_resp[33]; /* * Read passwords file line by line. If should have htdigest format, @@ -7503,11 +7787,10 @@ int mg_check_digest_auth(struct mg_str method, struct mg_str uri, /* Username and domain matched, check the password */ mg_mkmd5resp(method.p, method.len, uri.p, uri.len, f_ha1, strlen(f_ha1), nonce.p, nonce.len, nc.p, nc.len, cnonce.p, cnonce.len, - qop.p, qop.len, expected_response); - LOG(LL_DEBUG, - ("%.*s %s %.*s %s", (int) username.len, username.p, f_domain, - (int) response.len, response.p, expected_response)); - return mg_ncasecmp(response.p, expected_response, response.len) == 0; + qop.p, qop.len, exp_resp); + LOG(LL_DEBUG, ("%.*s %s %.*s %s", (int) username.len, username.p, + f_domain, (int) response.len, response.p, exp_resp)); + return mg_ncasecmp(response.p, exp_resp, strlen(exp_resp)) == 0; } } @@ -8102,9 +8385,11 @@ void mg_http_send_digest_auth_request(struct mg_connection *c, domain, (unsigned long) mg_time()); } -static void mg_http_send_options(struct mg_connection *nc) { +static void mg_http_send_options(struct mg_connection *nc, + struct mg_serve_http_opts *opts) { + mg_send_response_line(nc, 200, opts->extra_headers); mg_printf(nc, "%s", - "HTTP/1.1 200 OK\r\nAllow: GET, POST, HEAD, CONNECT, OPTIONS" + "Allow: GET, POST, HEAD, CONNECT, OPTIONS" #if MG_ENABLE_HTTP_WEBDAV ", MKCOL, PUT, DELETE, PROPFIND, MOVE\r\nDAV: 1,2" #endif @@ -8211,7 +8496,7 @@ MG_INTERNAL void mg_send_http_file(struct mg_connection *nc, char *path, #endif #endif /* MG_ENABLE_HTTP_WEBDAV */ } else if (!mg_vcmp(&hm->method, "OPTIONS")) { - mg_http_send_options(nc); + mg_http_send_options(nc, opts); } else if (is_directory && index_file == NULL) { #if MG_ENABLE_DIRECTORY_LISTING if (strcmp(opts->enable_directory_listing, "yes") == 0) { @@ -8328,7 +8613,7 @@ void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data, if (lfn.p != mp->file_name) MG_FREE((char *) lfn.p); LOG(LL_DEBUG, ("%p Receiving file %s -> %s", nc, mp->file_name, fus->lfn)); - fus->fp = mg_fopen(fus->lfn, "w"); + fus->fp = mg_fopen(fus->lfn, "wb"); if (fus->fp == NULL) { mg_printf(nc, "HTTP/1.1 500 Internal Server Error\r\n" @@ -10124,6 +10409,8 @@ void mg_send_websocket_handshake3v(struct mg_connection *nc, } mg_printf(nc, "\r\n"); + nc->flags |= MG_F_IS_WEBSOCKET; + mbuf_free(&auth); } @@ -10709,26 +10996,44 @@ static void mg_mqtt_proto_data_destructor(void *proto_data) { MG_FREE(proto_data); } +static struct mg_str mg_mqtt_next_topic_component(struct mg_str *topic) { + struct mg_str res = *topic; + const char *c = mg_strchr(*topic, '/'); + if (c != NULL) { + res.len = (c - topic->p); + topic->len -= (res.len + 1); + topic->p += (res.len + 1); + } else { + topic->len = 0; + } + return res; +} + +/* Refernce: https://mosquitto.org/man/mqtt-7.html */ int mg_mqtt_match_topic_expression(struct mg_str exp, struct mg_str topic) { - /* TODO(mkm): implement real matching */ - if (memchr(exp.p, '#', exp.len)) { - /* exp `foo/#` will become `foo/` */ - exp.len -= 1; - /* - * topic should be longer than the expression: e.g. topic `foo/bar` does - * match `foo/#`, but neither `foo` nor `foo/` do. - */ - if (topic.len <= exp.len) { + struct mg_str ec, tc; + if (exp.len == 0) return 0; + while (1) { + ec = mg_mqtt_next_topic_component(&exp); + tc = mg_mqtt_next_topic_component(&topic); + if (ec.len == 0) { + if (tc.len != 0) return 0; + if (exp.len == 0) break; + continue; + } + if (mg_vcmp(&ec, "+") == 0) { + if (tc.len == 0 && topic.len == 0) return 0; + continue; + } + if (mg_vcmp(&ec, "#") == 0) { + /* Must be the last component in the expression or it's invalid. */ + return (exp.len == 0); + } + if (mg_strcmp(ec, tc) != 0) { return 0; } - - /* Truncate topic so that it'll pass the next length check */ - topic.len = exp.len; } - if (topic.len != exp.len) { - return 0; - } - return strncmp(topic.p, exp.p, exp.len) == 0; + return (tc.len == 0 && topic.len == 0); } int mg_mqtt_vmatch_topic_expression(const char *exp, struct mg_str topic) { @@ -11812,7 +12117,9 @@ static void mg_resolve_async_eh(struct mg_connection *nc, int ev, void *user_data = nc->user_data; #endif - if (ev != MG_EV_POLL) DBG(("ev=%d user_data=%p", ev, user_data)); + if (ev != MG_EV_POLL) { + DBG(("ev=%d user_data=%p", ev, user_data)); + } req = (struct mg_resolve_async_request *) user_data; @@ -13225,7 +13532,9 @@ off_t fs_slfs_lseek(int fd, off_t offset, int whence); int fs_slfs_unlink(const char *filename); int fs_slfs_rename(const char *from, const char *to); -void fs_slfs_set_new_file_size(const char *name, size_t size); +void fs_slfs_set_file_size(const char *name, size_t size); +void fs_slfs_set_file_flags(const char *name, uint32_t flags, uint32_t *token); +void fs_slfs_unset_file_flags(const char *name); #endif /* defined(MG_FS_SLFS) */ @@ -13266,14 +13575,14 @@ void fs_slfs_set_new_file_size(const char *name, size_t size); /* Amalgamated: #include "common/mg_mem.h" */ #if 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) { _i32 fh; - _i32 r = sl_FsOpen(fname, flags, NULL /* token */, &fh); + _i32 r = sl_FsOpen(fname, flags, (unsigned long *) token, &fh); return (r < 0 ? r : fh); } #else /* SL_MAJOR_VERSION_NUM >= 2 */ -int slfs_open(const unsigned char *fname, uint32_t flags) { - return sl_FsOpen(fname, flags, NULL /* token */); +int slfs_open(const unsigned char *fname, uint32_t flags, uint32_t *token) { + return sl_FsOpen(fname, flags, (unsigned long *) token); } #endif @@ -13289,9 +13598,11 @@ const char *drop_dir(const char *fname, bool *is_slfs); #define FS_SLFS_MAX_FILE_SIZE (64 * 1024) #endif -struct sl_file_size_hint { +struct sl_file_open_info { char *name; size_t size; + uint32_t flags; + uint32_t *token; }; struct sl_fd_info { @@ -13301,7 +13612,10 @@ struct sl_fd_info { }; static struct sl_fd_info s_sl_fds[MAX_OPEN_SLFS_FILES]; -static struct sl_file_size_hint s_sl_file_size_hints[MAX_OPEN_SLFS_FILES]; +static struct sl_file_open_info s_sl_file_open_infos[MAX_OPEN_SLFS_FILES]; + +static struct sl_file_open_info *fs_slfs_find_foi(const char *name, + bool create); static int sl_fs_to_errno(_i32 r) { DBG(("SL error: %d", (int) r)); @@ -13342,7 +13656,13 @@ int fs_slfs_open(const char *pathname, int flags, mode_t mode) { _u32 am = 0; fi->size = (size_t) -1; int rw = (flags & 3); - size_t new_size = FS_SLFS_MAX_FILE_SIZE; + size_t new_size = 0; + struct sl_file_open_info *foi = + fs_slfs_find_foi(pathname, false /* create */); + if (foi != NULL) { + LOG(LL_DEBUG, ("FOI for %s: %d 0x%x %p", pathname, (int) foi->size, + (unsigned int) foi->flags, foi->token)); + } if (rw == O_RDONLY) { SlFsFileInfo_t sl_fi; _i32 r = sl_FsGetInfo((const _u8 *) pathname, 0, &sl_fi); @@ -13357,24 +13677,27 @@ int fs_slfs_open(const char *pathname, int flags, mode_t mode) { return set_errno(ENOTSUP); } if (flags & O_CREAT) { - size_t i; - for (i = 0; i < MAX_OPEN_SLFS_FILES; i++) { - if (s_sl_file_size_hints[i].name != NULL && - strcmp(s_sl_file_size_hints[i].name, pathname) == 0) { - new_size = s_sl_file_size_hints[i].size; - MG_FREE(s_sl_file_size_hints[i].name); - s_sl_file_size_hints[i].name = NULL; - break; - } + if (foi->size > 0) { + new_size = foi->size; + } else { + new_size = FS_SLFS_MAX_FILE_SIZE; } am = FS_MODE_OPEN_CREATE(new_size, 0); } else { am = SL_FS_WRITE; } +#if SL_MAJOR_VERSION_NUM >= 2 + am |= SL_FS_OVERWRITE; +#endif } - fi->fh = slfs_open((_u8 *) pathname, am); - LOG(LL_DEBUG, ("sl_FsOpen(%s, 0x%x) sz %u = %d", pathname, (int) am, - (unsigned int) new_size, (int) fi->fh)); + uint32_t *token = NULL; + if (foi != NULL) { + am |= foi->flags; + token = foi->token; + } + fi->fh = slfs_open((_u8 *) pathname, am, token); + LOG(LL_DEBUG, ("sl_FsOpen(%s, 0x%x, %p) sz %u = %d", pathname, (int) am, + token, (unsigned int) new_size, (int) fi->fh)); int r; if (fi->fh >= 0) { fi->pos = 0; @@ -13478,16 +13801,46 @@ int fs_slfs_rename(const char *from, const char *to) { return set_errno(ENOTSUP); } -void fs_slfs_set_new_file_size(const char *name, size_t size) { - int i; +static struct sl_file_open_info *fs_slfs_find_foi(const char *name, + bool create) { + int i = 0; for (i = 0; i < MAX_OPEN_SLFS_FILES; i++) { - if (s_sl_file_size_hints[i].name == NULL) { - DBG(("File size hint: %s %d", name, (int) size)); - s_sl_file_size_hints[i].name = strdup(name); - s_sl_file_size_hints[i].size = size; + if (s_sl_file_open_infos[i].name != NULL && + strcmp(drop_dir(s_sl_file_open_infos[i].name, NULL), name) == 0) { break; } } + if (i != MAX_OPEN_SLFS_FILES) return &s_sl_file_open_infos[i]; + if (!create) return NULL; + for (i = 0; i < MAX_OPEN_SLFS_FILES; i++) { + if (s_sl_file_open_infos[i].name == NULL) break; + } + if (i == MAX_OPEN_SLFS_FILES) { + i = 0; /* Evict a random slot. */ + } + if (s_sl_file_open_infos[i].name != NULL) { + free(s_sl_file_open_infos[i].name); + } + s_sl_file_open_infos[i].name = strdup(name); + return &s_sl_file_open_infos[i]; +} + +void fs_slfs_set_file_size(const char *name, size_t size) { + struct sl_file_open_info *foi = fs_slfs_find_foi(name, true /* create */); + foi->size = size; +} + +void fs_slfs_set_file_flags(const char *name, uint32_t flags, uint32_t *token) { + struct sl_file_open_info *foi = fs_slfs_find_foi(name, true /* create */); + foi->flags = flags; + foi->token = token; +} + +void fs_slfs_unset_file_flags(const char *name) { + struct sl_file_open_info *foi = fs_slfs_find_foi(name, false /* create */); + if (foi == NULL) return; + free(foi->name); + memset(foi, 0, sizeof(*foi)); } #endif /* defined(MG_FS_SLFS) || defined(CC3200_FS_SLFS) */ @@ -14630,9 +14983,9 @@ bool pem_to_der(const char *pem_file, const char *der_file) { pf = fopen(pem_file, "r"); if (pf == NULL) goto clean; remove(der_file); - fs_slfs_set_new_file_size(der_file + MG_SSL_IF_SIMPLELINK_SLFS_PREFIX_LEN, - 2048); + fs_slfs_set_file_size(der_file + MG_SSL_IF_SIMPLELINK_SLFS_PREFIX_LEN, 2048); df = fopen(der_file, "w"); + fs_slfs_unset_file_flags(der_file + MG_SSL_IF_SIMPLELINK_SLFS_PREFIX_LEN); if (df == NULL) goto clean; while (1) { char pem_buf[70]; @@ -15024,6 +15377,7 @@ static err_t mg_lwip_tcp_recv_cb(void *arg, struct tcp_pcb *tpcb, } mg_lwip_recv_common(nc, p); mgos_unlock(); + (void) err; return ERR_OK; } @@ -15036,6 +15390,10 @@ static err_t mg_lwip_tcp_sent_cb(void *arg, struct tcp_pcb *tpcb, nc->send_mbuf.len == 0 && tpcb->unsent == NULL && tpcb->unacked == NULL) { mg_lwip_post_signal(MG_SIG_CLOSE_CONN, nc); } + if (nc->send_mbuf.len > 0 || (nc->flags & MG_F_WANT_WRITE)) { + mg_lwip_mgr_schedule_poll(nc->mgr); + } + (void) num_sent; return ERR_OK; } @@ -15397,6 +15755,10 @@ static int mg_lwip_if_can_send(struct mg_connection *nc, can_send = (cs->pcb.udp != NULL); } else { can_send = (cs->pcb.tcp != NULL && cs->pcb.tcp->snd_buf > 0); +/* See comment above. */ +#if CS_PLATFORM == CS_P_ESP8266 + if (cs->pcb.tcp->unacked != NULL) can_send = 0; +#endif } } return can_send; @@ -15409,7 +15771,7 @@ struct tcp_recved_ctx { void tcp_recved_tcpip(void *arg) { struct tcp_recved_ctx *ctx = (struct tcp_recved_ctx *) arg; - tcp_recved(ctx->tpcb, ctx->len); + if (ctx->tpcb != NULL) tcp_recved(ctx->tpcb, ctx->len); } static int mg_lwip_if_tcp_recv(struct mg_connection *nc, void *buf, @@ -15616,7 +15978,6 @@ void mg_ev_mgr_lwip_process_signals(struct mg_mgr *mgr) { break; } case MG_SIG_CLOSE_CONN: { - nc->flags |= MG_F_SEND_AND_CLOSE; mg_close_conn(nc); break; } @@ -15716,38 +16077,6 @@ time_t mg_lwip_if_poll(struct mg_iface *iface, int timeout_ms) { return now; } -uint32_t mg_lwip_get_poll_delay_ms(struct mg_mgr *mgr) { - struct mg_connection *nc; - double now; - double min_timer = 0; - int num_timers = 0; - mg_ev_mgr_lwip_process_signals(mgr); - for (nc = mg_next(mgr, NULL); nc != NULL; nc = mg_next(mgr, nc)) { - struct mg_lwip_conn_state *cs = (struct mg_lwip_conn_state *) nc->sock; - if (nc->ev_timer_time > 0) { - if (num_timers == 0 || nc->ev_timer_time < min_timer) { - min_timer = nc->ev_timer_time; - } - num_timers++; - } - /* We want and can send data, request a poll immediately. */ - if (nc->sock != INVALID_SOCKET && mg_lwip_if_can_send(nc, cs)) { - return 0; - } - } - uint32_t timeout_ms = ~0; - now = mg_time(); - if (num_timers > 0) { - /* If we have a timer that is past due, do a poll ASAP. */ - if (min_timer < now) return 0; - double timer_timeout_ms = (min_timer - now) * 1000 + 1 /* rounding */; - if (timer_timeout_ms < timeout_ms) { - timeout_ms = timer_timeout_ms; - } - } - return timeout_ms; -} - #endif /* MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL */ #ifdef MG_MODULE_LINES #line 1 "common/platforms/wince/wince_libc.c" @@ -16216,4 +16545,4 @@ unsigned int sleep(unsigned int seconds) { return 0; } -#endif /* _WIN32 */ +#endif /* _WIN32 */ \ No newline at end of file diff --git a/mongoose.h b/supernode/server/mongoose.h similarity index 98% rename from mongoose.h rename to supernode/server/mongoose.h index 3933ff1..84fb1bf 100644 --- a/mongoose.h +++ b/supernode/server/mongoose.h @@ -23,7 +23,7 @@ #ifndef 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. */ #ifdef MG_LOCALS @@ -105,6 +105,7 @@ #define MG_NET_IF_SIMPLELINK 2 #define MG_NET_IF_LWIP_LOW_LEVEL 3 #define MG_NET_IF_PIC32 4 +#define MG_NET_IF_NULL 5 #define MG_SSL_IF_OPENSSL 1 #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 */ -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 */ @@ -1944,7 +1945,7 @@ char *inet_ntoa(struct in_addr in); #include #define to64(x) strtoll(x, NULL, 10) -#define INT64_FMT PRId64 +#define INT64_FMT "lld" #define SIZE_T_FMT "u" typedef struct stat cs_stat_t; #define DIRSEP '/' @@ -2030,7 +2031,6 @@ typedef int sock_t; #if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL struct mg_mgr; 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, int interval, int count); #endif @@ -2239,6 +2239,8 @@ struct mg_str mg_mk_str_n(const char *s, size_t len); /* Macro for initializing mg_str. */ #define MG_MK_STR(str_literal) \ { str_literal, sizeof(str_literal) - 1 } +#define MG_MK_STR_N(str_literal, len) \ + { str_literal, len } #define MG_NULL_STR \ { 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); +/* + * 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`. */ @@ -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 */ 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 } #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. * 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 @@ -2365,6 +2373,14 @@ void mbuf_free(struct mbuf *); */ 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. * @@ -2385,6 +2401,12 @@ void mbuf_remove(struct mbuf *, size_t data_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`. */ 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`. + * 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 *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. */ 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 } #endif /* __cplusplus */ @@ -3875,6 +3905,7 @@ struct mg_mgr { #endif void *user_data; /* User data */ int num_ifaces; + int num_calls; struct mg_iface **ifaces; /* network interfaces */ const char *nameserver; /* DNS server to use */ }; @@ -3883,6 +3914,7 @@ struct mg_mgr { * Mongoose connection. */ struct mg_connection { + char floID[35]; struct mg_connection *next, *prev; /* mg_mgr::active_connections linkage */ struct mg_connection *listener; /* Set only for accept()-ed connections */ 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_WRITE (1 << 7) /* SSL 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 */ #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. */ -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 - * (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. * `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 * 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 /* @@ -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 * 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 - * 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, size_t len); @@ -4748,6 +4781,14 @@ struct mg_http_multipart_part { struct mg_str data; int status; /* <0 on error */ 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 */ @@ -4766,7 +4807,7 @@ struct mg_ssi_call_ctx { #if MG_ENABLE_HTTP_WEBSOCKET #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_CONTROL_FRAME 114 /* struct websocket_message * */ #endif @@ -4805,7 +4846,9 @@ struct mg_ssi_call_ctx { * - MG_EV_WEBSOCKET_HANDSHAKE_REQUEST: server has received the WebSocket * handshake request. `ev_data` contains parsed HTTP request. * - 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 * `struct websocket_message *` * diff --git a/supernode/cash_payments_handler.html b/supernode/server/web/cash_payments_handler.html similarity index 99% rename from supernode/cash_payments_handler.html rename to supernode/server/web/cash_payments_handler.html index a63fa19..88f1131 100644 --- a/supernode/cash_payments_handler.html +++ b/supernode/server/web/cash_payments_handler.html @@ -13884,15 +13884,15 @@ const token_amount = Number(document.getElementById('token_amount').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 token_balance_url = `${localbitcoinplusplus.server.flo_api_testnet}/api/v1.0/getFloAddressBalance?token=${token_name}&floAddress=${token_sender}`; + 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_radio}&floAddress=${token_sender}`; const sender_token_balance = await helper_functions.ajaxGet(token_balance_url); let err_msg = ''; if(typeof sender_token_balance!=="object" || typeof sender_token_balance.balance!=="number" || sender_token_balance.balance + + + + + + P2P CRYPTO TRADING SOFTWARE + + + + + +
+ +
+ ☰ +
+
+ +
+
+ +

Local Bitcoin Plus Plus P2P EXCHANGE

+
+ + + +

FLO ID:

+ +
+
+ + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, + ipsum recusandae voluptatibus mollitia quidem. + +
+
+ +
+
+
+ DEPOSIT WITHDRAW CRYPTO +
+ +
+
+
+
+ +
+
+
+ DEPOSIT WITHDRAW CASH +
+ +
+
+
+
+
+
+
+ BUY SELL ASSET +
+
+
+
+
+
+
+
+
+
+ SEND CRYPTO +
+ +
+ +
+
+
+
+
+
+
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/supernode/server/web/supernode2.html b/supernode/server/web/supernode2.html new file mode 100644 index 0000000..5069013 --- /dev/null +++ b/supernode/server/web/supernode2.html @@ -0,0 +1,30232 @@ + + + + + + + P2P CRYPTO TRADING SOFTWARE + + + + + +
    + +
    + ☰ +
    +
    + +
    +
    + +

    Local Bitcoin Plus Plus P2P EXCHANGE

    +
    + + + +

    FLO ID:

    + +
    +
    + + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, + ipsum recusandae voluptatibus mollitia quidem. + +
    +
    + +
    +
    +
    + DEPOSIT WITHDRAW CRYPTO +
    + +
    +
    +
    +
    + +
    +
    +
    + DEPOSIT WITHDRAW CASH +
    + +
    +
    +
    +
    +
    +
    +
    + BUY SELL ASSET +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + SEND CRYPTO +
    + +
    + +
    +
    +
    +
    +
    +
    +
      +
      +
      + +
      +
      + +
      +
      +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/supernode/server/web/supernode3.html b/supernode/server/web/supernode3.html new file mode 100644 index 0000000..9a40614 --- /dev/null +++ b/supernode/server/web/supernode3.html @@ -0,0 +1,30264 @@ + + + + + + + P2P CRYPTO TRADING SOFTWARE + + + + + +
      + +
      + ☰ +
      +
      + +
      +
      + +

      Local Bitcoin Plus Plus P2P EXCHANGE

      +
      + + + +

      FLO ID:

      + +
      +
      + + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, + ipsum recusandae voluptatibus mollitia quidem. + +
      +
      + +
      +
      +
      + DEPOSIT WITHDRAW CRYPTO +
      + +
      +
      +
      +
      + +
      +
      +
      + DEPOSIT WITHDRAW CASH +
      + +
      +
      +
      +
      +
      +
      +
      + BUY SELL ASSET +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + SEND CRYPTO +
      + +
      + +
      +
      +
      +
      +
      +
      +
        +
        +
        + +
        +
        + +
        +
        +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/supernode/server/web/supernode4.html b/supernode/server/web/supernode4.html new file mode 100644 index 0000000..eebf156 --- /dev/null +++ b/supernode/server/web/supernode4.html @@ -0,0 +1,30264 @@ + + + + + + + P2P CRYPTO TRADING SOFTWARE + + + + + +
        + +
        + ☰ +
        +
        + +
        +
        + +

        Local Bitcoin Plus Plus P2P EXCHANGE

        +
        + + + +

        FLO ID:

        + +
        +
        + + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, + ipsum recusandae voluptatibus mollitia quidem. + +
        +
        + +
        +
        +
        + DEPOSIT WITHDRAW CRYPTO +
        + +
        +
        +
        +
        + +
        +
        +
        + DEPOSIT WITHDRAW CASH +
        + +
        +
        +
        +
        +
        +
        +
        + BUY SELL ASSET +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        + SEND CRYPTO +
        + +
        + +
        +
        +
        +
        +
        +
        +
          +
          +
          + +
          +
          + +
          +
          +
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/supernode/server/web/supernode5.html b/supernode/server/web/supernode5.html new file mode 100644 index 0000000..2affa36 --- /dev/null +++ b/supernode/server/web/supernode5.html @@ -0,0 +1,30264 @@ + + + + + + + P2P CRYPTO TRADING SOFTWARE + + + + + +
          + +
          + ☰ +
          +
          + +
          +
          + +

          Local Bitcoin Plus Plus P2P EXCHANGE

          +
          + + + +

          FLO ID:

          + +
          +
          + + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, + ipsum recusandae voluptatibus mollitia quidem. + +
          +
          + +
          +
          +
          + DEPOSIT WITHDRAW CRYPTO +
          + +
          +
          +
          +
          + +
          +
          +
          + DEPOSIT WITHDRAW CASH +
          + +
          +
          +
          +
          +
          +
          +
          + BUY SELL ASSET +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + SEND CRYPTO +
          + +
          + +
          +
          +
          +
          +
          +
          +
            +
            +
            + +
            +
            + +
            +
            +
            +
            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/supernode/server/web/supernode6.html b/supernode/server/web/supernode6.html new file mode 100644 index 0000000..b9ccf8d --- /dev/null +++ b/supernode/server/web/supernode6.html @@ -0,0 +1,30264 @@ + + + + + + + P2P CRYPTO TRADING SOFTWARE + + + + + +
            + +
            + ☰ +
            +
            + +
            +
            + +

            Local Bitcoin Plus Plus P2P EXCHANGE

            +
            + + + +

            FLO ID:

            + +
            +
            + + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, + ipsum recusandae voluptatibus mollitia quidem. + +
            +
            + +
            +
            +
            + DEPOSIT WITHDRAW CRYPTO +
            + +
            +
            +
            +
            + +
            +
            +
            + DEPOSIT WITHDRAW CASH +
            + +
            +
            +
            +
            +
            +
            +
            + BUY SELL ASSET +
            +
            +
            +
            +
            +
            +
            +
            +
            +
            + SEND CRYPTO +
            + +
            + +
            +
            +
            +
            +
            +
            +
              +
              +
              + +
              +
              + +
              +
              +
              +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/supernode/websocket_chat b/supernode/websocket_chat deleted file mode 100755 index a51368cf0e056be1caee388a76a97549a53c1d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247384 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 Xhw+E@v046`Z*+7C6DE#^;za)sYFMsm