work on public interface implementation
This commit is contained in:
parent
f64f620b07
commit
a19b226167
92
brandt.c
92
brandt.c
@ -49,6 +49,94 @@ BRANDT_init (struct GNUNET_CRYPTO_EccDlogContext *dlogctx)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
start_auction (void *arg)
|
||||
{
|
||||
struct BRANDT_Auction *ad = (struct BRANDT_Auction *)arg;
|
||||
|
||||
/* \todo: broadcast start message to all participants */
|
||||
}
|
||||
|
||||
|
||||
struct BRANDT_Auction *
|
||||
BRANDT_new (BRANDT_CbBroadcast broadcast,
|
||||
BRANDT_CbResult result,
|
||||
void *auction_closure,
|
||||
void **auction_data,
|
||||
size_t *auction_data_len,
|
||||
struct GNUNET_TIME_Absolute time_start,
|
||||
struct GNUNET_TIME_Relative time_round,
|
||||
uint16_t num_prices,
|
||||
uint16_t m,
|
||||
int outcome_public)
|
||||
{
|
||||
struct BRANDT_Auction *ret;
|
||||
|
||||
ret = GNUNET_new (struct BRANDT_Auction);
|
||||
|
||||
ret->time_start = time_start;
|
||||
ret->time_round = time_round;
|
||||
|
||||
ret->k = num_prices;
|
||||
ret->m = m;
|
||||
ret->outcome_public = outcome_public;
|
||||
|
||||
/* we are the seller */
|
||||
ret->seller_mode = 1;
|
||||
|
||||
/* interface with application */
|
||||
ret->closure = auction_closure;
|
||||
ret->bcast = broadcast;
|
||||
ret->result = result;
|
||||
|
||||
ret->cur_round = msg_join;
|
||||
ret->round_progress = gcry_mpi_new (256);
|
||||
|
||||
/* \todo: store returned task somewhere to cancel it on shutdown */
|
||||
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining (time_start),
|
||||
&start_auction,
|
||||
ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
struct BRANDT_Auction *
|
||||
BRANDT_join (BRANDT_CbBroadcast broadcast,
|
||||
BRANDT_CbUnicast unicast,
|
||||
BRANDT_CbResult result,
|
||||
void *auction_closure,
|
||||
const void *auction_data,
|
||||
size_t auction_data_len)
|
||||
{
|
||||
struct BRANDT_Auction *ret;
|
||||
struct BRANDT_DescrP *desc = (struct BRANDT_DescrP *)auction_data;
|
||||
|
||||
ret = GNUNET_new (struct BRANDT_Auction);
|
||||
|
||||
ret->time_start = GNUNET_TIME_absolute_ntoh(desc->time_start);
|
||||
ret->time_round = GNUNET_TIME_relative_ntoh(desc->time_round);
|
||||
|
||||
ret->k = ntohs(desc->k);
|
||||
ret->m = ntohs(desc->m);
|
||||
ret->outcome_public = ntohs(desc->outcome_public);
|
||||
|
||||
/* we are the seller */
|
||||
ret->seller_mode = 0;
|
||||
|
||||
/* interface with application */
|
||||
ret->closure = auction_closure;
|
||||
ret->bcast = broadcast;
|
||||
ret->ucast = unicast;
|
||||
ret->result = result;
|
||||
|
||||
ret->cur_round = msg_join;
|
||||
ret->round_progress = gcry_mpi_new (256);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
advance_round (struct BRANDT_Auction *auction, enum auction_type atype, enum outcome_type outcome)
|
||||
{
|
||||
@ -95,8 +183,8 @@ BRANDT_got_message (struct BRANDT_Auction *auction,
|
||||
enum outcome_type outcome;
|
||||
enum rounds round = auction->cur_round;
|
||||
|
||||
atype = auction->desc->m > 0 ? auction_mPlusFirstPrice : auction_firstPrice;
|
||||
outcome = auction->desc->outcome_public ? outcome_public : outcome_private;
|
||||
atype = auction->m > 0 ? auction_mPlusFirstPrice : auction_firstPrice;
|
||||
outcome = auction->outcome_public ? outcome_public : outcome_private;
|
||||
|
||||
/** \todo: cache out of order messages */
|
||||
|
||||
|
15
brandt.h
15
brandt.h
@ -97,20 +97,21 @@ BRANDT_init (struct GNUNET_CRYPTO_EccDlogContext *dlogctx);
|
||||
* @param[in] unicast Pointer to the unicast callback function
|
||||
* @param[in] result Pointer to the result callback function
|
||||
* @param[in] auction_closure Closure pointer representing the auction. This
|
||||
* will not be touched by libbrandt. It is only passed to the callbacks.
|
||||
* @param[in] auction_data The auction information data a an opaque data
|
||||
* structure. It will be parsed and checked by BRANDT_join().
|
||||
* will not be touched by libbrandt itself. It is only passed to the callbacks.
|
||||
* @param[in] auction_data The auction information data published by the seller.
|
||||
* This is an opaque data structure. It will be parsed and checked by
|
||||
* BRANDT_join().
|
||||
* @param[in] auction_data_len The length in bytes of the @a auction_data
|
||||
* structure.
|
||||
* @return A pointer, which should only be remembered and passed to
|
||||
* libbrandt functions when the client needs to refer to this auction. This is a
|
||||
* black-box pointer, do NOT access/change it or the data it points to!
|
||||
* black-box pointer, do NOT dereference/change it or the data it points to!
|
||||
*/
|
||||
struct BRANDT_Auction *
|
||||
BRANDT_join (BRANDT_CbBroadcast broadcast,
|
||||
BRANDT_CbUnicast unicast,
|
||||
BRANDT_CbResult result,
|
||||
const void *auction_closure,
|
||||
void *auction_closure,
|
||||
const void *auction_data,
|
||||
size_t auction_data_len);
|
||||
/* \todo: where do I specify my bid? */
|
||||
@ -149,7 +150,7 @@ BRANDT_join (BRANDT_CbBroadcast broadcast,
|
||||
* winner and the seller.
|
||||
* @return A pointer, which should only be remembered and passed to
|
||||
* libbrandt functions when the client needs to refer to this auction. This is a
|
||||
* black-box pointer, do NOT access/change it or the data it points to!
|
||||
* black-box pointer, do NOT dereference/change it or the data it points to!
|
||||
*/
|
||||
struct BRANDT_Auction *
|
||||
BRANDT_new (BRANDT_CbBroadcast broadcast,
|
||||
@ -157,6 +158,8 @@ BRANDT_new (BRANDT_CbBroadcast broadcast,
|
||||
void *auction_closure,
|
||||
void **auction_data,
|
||||
size_t *auction_data_len,
|
||||
struct GNUNET_TIME_Absolute time_start,
|
||||
struct GNUNET_TIME_Relative time_round,
|
||||
uint16_t num_prices,
|
||||
uint16_t m,
|
||||
int outcome_public);
|
||||
|
47
internals.h
47
internals.h
@ -29,6 +29,7 @@
|
||||
|
||||
|
||||
enum rounds {
|
||||
msg_join,
|
||||
msg_init,
|
||||
msg_bid,
|
||||
msg_outcome,
|
||||
@ -51,15 +52,47 @@ enum outcome_type {
|
||||
};
|
||||
|
||||
|
||||
GNUNET_NETWORK_STRUCT_BEGIN
|
||||
|
||||
/**
|
||||
* This struct describes an auction and has to be followed by #description_len
|
||||
* bytes of arbitrary data where the description of the item to be sold is
|
||||
* stored.
|
||||
* stored. All fields are stored in network byte order.
|
||||
*
|
||||
* \todo: align to a multiple of 64bit */
|
||||
struct BRANDT_DescrP {
|
||||
/** Starting time of the auction. Bidders have to join the auction via
|
||||
* BRANDT_join until this time */
|
||||
struct GNUNET_TIME_AbsoluteNBO time_start;
|
||||
|
||||
/** The maximum duration the participants have to complete each round. */
|
||||
struct GNUNET_TIME_RelativeNBO time_round;
|
||||
|
||||
/** The length of the description in bytes directly following this struct */
|
||||
uint32_t description_len;
|
||||
uint32_t description_len GNUNET_PACKED;
|
||||
|
||||
/** The amount of possible prices */
|
||||
uint16_t k GNUNET_PACKED;
|
||||
|
||||
/** Auction type. 0 means first price Auction, >= 0 means M+1st price
|
||||
* auction with an amount of m items being sold. */
|
||||
uint16_t m GNUNET_PACKED;
|
||||
|
||||
/** Outcome type. 0 means private outcome, everything else means public
|
||||
* outcome. */
|
||||
uint16_t outcome_public GNUNET_PACKED;
|
||||
};
|
||||
|
||||
GNUNET_NETWORK_STRUCT_END
|
||||
|
||||
|
||||
struct BRANDT_Auction {
|
||||
/** Starting time of the auction. Bidders have to join the auction via
|
||||
* BRANDT_join until this time */
|
||||
struct GNUNET_TIME_Absolute time_start;
|
||||
|
||||
/** The maximum duration the participants have to complete each round. */
|
||||
struct GNUNET_TIME_Relative time_round;
|
||||
|
||||
/** Auction type. 0 means first price Auction, >= 0 means M+1st price
|
||||
* auction with an amount of m items being sold. */
|
||||
@ -69,16 +102,6 @@ struct BRANDT_DescrP {
|
||||
* outcome. */
|
||||
uint16_t outcome_public;
|
||||
|
||||
/** The amount of possible prices */
|
||||
uint16_t price_range;
|
||||
|
||||
/** \todo: time */
|
||||
};
|
||||
|
||||
|
||||
struct BRANDT_Auction {
|
||||
struct BRANDT_DescrP *desc; /** pointer to the auction information */
|
||||
|
||||
void *closure; /** auction closure given by the user */
|
||||
|
||||
BRANDT_CbBroadcast bcast; /** broadcast callback */
|
||||
|
Loading…
Reference in New Issue
Block a user