/*
This file is part of TALER
(C) 2016-2023 Taler Systems SA
TALER is free software; you can redistribute it and/or
modify it under the terms of the GNU 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 bank-lib/fakebank_common_lp.h
* @brief long-polling support for fakebank
* @author Christian Grothoff
*/
#ifndef FAKEBANK_COMMON_LP_H
#define FAKEBANK_COMMON_LP_H
#include "taler_fakebank_lib.h"
/**
* Trigger the @a lp. Frees associated resources, except the entry of @a lp in
* the timeout heap. Must be called while the ``big lock`` is held.
*
* @param[in] lp long poller to trigger
*/
void
TALER_FAKEBANK_lp_trigger_ (struct LongPoller *lp);
/**
* Trigger long pollers that might have been waiting
* for @a t.
*
* @param h fakebank handle
* @param t transaction to notify on
*/
void
TALER_FAKEBANK_notify_transaction_ (
struct TALER_FAKEBANK_Handle *h,
struct Transaction *t);
/**
* Notify long pollers that a @a wo was updated.
* Must be called with the "big_lock" still held.
*
* @param h fakebank handle
* @param wo withdraw operation that finished
*/
void
TALER_FAKEBANK_notify_withdrawal_ (
struct TALER_FAKEBANK_Handle *h,
const struct WithdrawalOperation *wo);
/**
* Start long-polling for @a connection and @a acc
* for transfers in @a dir. Must be called with the
* "big lock" held.
*
* @param[in,out] h fakebank handle
* @param[in,out] connection to suspend
* @param[in,out] acc account affected
* @param lp_timeout how long to suspend
* @param dir direction of transfers to watch for
* @param wo withdraw operation to watch, only
* if @a dir is #LP_WITHDRAW
*/
void
TALER_FAKEBANK_start_lp_ (
struct TALER_FAKEBANK_Handle *h,
struct MHD_Connection *connection,
struct Account *acc,
struct GNUNET_TIME_Relative lp_timeout,
enum LongPollType dir,
const struct WithdrawalOperation *wo);
/**
* Main routine of a thread that is run to wake up connections that have hit
* their timeout. Runs until in_shutdown is set to true. Must be send signals
* via lp_event on shutdown and/or whenever the heap changes to an earlier
* timeout.
*
* @param cls a `struct TALER_FAKEBANK_Handle *`
* @return NULL
*/
void *
TALER_FAKEBANK_lp_expiration_thread_ (void *cls);
#endif