/*
 * This file Copyright (C) 2007-2010 Mnemosyne LLC
 *
 * This file is licensed by the GPL version 2. Works owned by the
 * Transmission project are granted a special exemption to clause 2(b)
 * so that the bulk of its code can remain under the MIT license.
 * This exemption does not extend to derived works not owned by
 * the Transmission project.
 *
 * $Id: peer-msgs.h 11599 2010-12-27 19:18:17Z charles $
 */

#ifndef __TRANSMISSION__
#error only libtransmission should #include this header.
#endif

#ifndef TR_PEER_MSGS_H
#define TR_PEER_MSGS_H

#include <inttypes.h>
#include "peer-common.h"

struct tr_torrent;
struct tr_peer;
struct tr_bitfield;

/**
 * @addtogroup peers Peers
 * @{
 */

typedef struct tr_peermsgs tr_peermsgs;

tr_peermsgs* tr_peerMsgsNew( struct tr_torrent    * torrent,
                             struct tr_peer       * peer,
                             tr_peer_callback     * callback,
                             void                 * callback_data );

void         tr_peerMsgsSetChoke( tr_peermsgs *, int doChoke );

int          tr_peerMsgsIsReadingBlock( const tr_peermsgs * msgs, tr_block_index_t block );

void         tr_peerMsgsSetInterested( tr_peermsgs *, int isInterested );

void         tr_peerMsgsHave( tr_peermsgs * msgs,
                              uint32_t      pieceIndex );

void         tr_peerMsgsPulse( tr_peermsgs * msgs );

void         tr_peerMsgsCancel( tr_peermsgs * msgs,
                                tr_block_index_t block );

void         tr_peerMsgsFree( tr_peermsgs* );

size_t       tr_generateAllowedSet( tr_piece_index_t  * setmePieces,
                                    size_t              desiredSetSize,
                                    size_t              pieceCount,
                                    const uint8_t     * infohash,
                                    const tr_address  * addr );


/* @} */
#endif
