/* This file is part of TALER (C) 2018--2019 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. TALER is distributed in the hope that it will be useful, 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. You should have received a copy of the GNU General Public License along with TALER; see the file COPYING. If not, see */ /** * @file backend/taler-merchant-httpd_tip-reserve-helper.h * @brief helper functions to check the status of a tipping reserve * @author Christian Grothoff */ #ifndef TALER_MERCHANT_HTTPD_TIP_RESERVE_HELPER_H #define TALER_MERCHANT_HTTPD_TIP_RESERVE_HELPER_H #include #include #include #include "taler-merchant-httpd.h" #include "taler-merchant-httpd_mhd.h" #include "taler-merchant-httpd_exchanges.h" #include "taler-merchant-httpd_tip-reserve-helper.h" /** * Context with input, output and internal state for * #TMH_check_tip_reserve() and #TMH_check_tip_reserve_cleanup(). */ struct TMH_CheckTipReserve { /** * Input: MHD connection we should resume when finished */ struct MHD_Connection *connection; /** * Input: private key of the reserve. */ struct TALER_ReservePrivateKeyP reserve_priv; /** * Output: Set to delay after which the reserve will expire if idle. */ struct GNUNET_TIME_Relative idle_reserve_expiration_time; /** * Internal: exchange find operation. */ struct TMH_EXCHANGES_FindOperation *fo; /** * Internal: reserve status operation. */ struct TALER_EXCHANGE_ReservesGetHandle *rsh; /** * Internal: DLL for resumption on shutdown. */ struct TMH_CheckTipReserve *next; /** * Internal: DLL for resumption on shutdown. */ struct TMH_CheckTipReserve *prev; /** * Output: response object to return (on error only) */ struct MHD_Response *response; /** * Output: Total amount deposited into the reserve. */ struct TALER_Amount amount_deposited; /** * Output: total tip amount requested. */ struct TALER_Amount amount_withdrawn; /** * Input: total amount authorized. */ struct TALER_Amount amount_authorized; /** * Output: set to the time when the reserve will expire */ struct GNUNET_TIME_Absolute reserve_expiration; /** * Output: HTTP status code to return (on error only) */ unsigned int response_code; /** * Input: Set to #GNUNET_NO if no tips were authorized yet. * Used to know that @e amount_authorized is not yet initialized * and in that case the helper will set it to zero (once we know * the currency). */ int none_authorized; /** * Internal: Is the @e connection currently suspended? * #GNUNET_NO if the @e connection was not suspended, * #GNUNET_YES if the @e connection was suspended, * #GNUNET_SYSERR if @e connection was resumed to as * part of #MH_force_pc_resume during shutdown. */ int suspended; }; /** * Check the status of the given reserve at the given exchange. * Suspends the MHD connection while this is happening and resumes * processing once we know the reserve status (or once an error * code has been determined). * * @param[in,out] ctr context for checking the reserve status * @param tip_exchange the URL of the exchange to query */ void TMH_check_tip_reserve (struct TMH_CheckTipReserve *ctr, const char *tip_exchange); /** * Clean up any state that might be left in @a ctr. * * @param[in] context to clean up */ void TMH_check_tip_reserve_cleanup (struct TMH_CheckTipReserve *ctr); /** * Force all tip reserve helper contexts to be resumed as we are about to shut * down MHD. */ void MH_force_trh_resume (void); #endif