Logo
~Apps~
~Projects~
~Contact~


Peer Class Reference

Status of an on- or offline peer. More...

#include <Peer.h>

Collaboration diagram for Peer:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 Peer (ISocketHandler &, const std::string &hash, const std::string &ip, const std::string &id, port_t port)
 ~Peer ()
const std::string & GetIP ()
const std::string & GetID ()
port_t GetPort ()
void SetPort (port_t x)
ISocketHandler & Handler () const
unsigned char * GetBitmap ()
size_t GetBitmapSize ()
bool IsChoked ()
void SetChoked (bool x=true)
bool IsInterested ()
void SetInterested (bool x=true)
time_t GetChokeTime ()
const std::string & GetHash ()
bool Connected ()
pSocketPeerSocket ()
bool IsSet (size_t nr)
void set (size_t nr)
request_vRequests ()
size_t GotSlice (size_t piece, size_t offset)
void RefreshRequests ()
bool Tried ()
void SetTried (bool x=true)
bool Failed ()
void SetFailed (bool x=true)
size_t GetSet ()
size_t Score (bitmap_t *)
void RequestAvailable ()
void RemoveRequests ()

Private Member Functions

 Peer (const Peer &s)
Peeroperator= (const Peer &)

Private Attributes

ISocketHandler & m_handler
std::string m_hash
std::string m_ip
std::string m_id
port_t m_port
bitmap_tm_bitmap
size_t m_bitmap_size
bool m_choke
bool m_interested
time_t m_t_choke
request_v m_requests
bool m_tried
bool m_failed

Detailed Description

Status of an on- or offline peer.

Definition at line 40 of file Peer.h.


Constructor & Destructor Documentation

Peer::Peer ( ISocketHandler &  ,
const std::string &  hash,
const std::string &  ip,
const std::string &  id,
port_t  port 
)

Definition at line 42 of file Peer.cpp.

References DEB, GetBitmapSize(), Handler(), m_bitmap, and m_bitmap_size.

00043 :m_handler(h)
00044 ,m_hash(hash)
00045 ,m_ip(ip)
00046 ,m_id(id)
00047 ,m_port(port)
00048 ,m_bitmap(NULL)
00049 ,m_bitmap_size(0)
00050 ,m_choke(true)
00051 ,m_interested(false)
00052 ,m_t_choke(0)
00053 ,m_tried(false)
00054 ,m_failed(false)
00055 {
00056 DEB(    printf("%s:%d\n", ip.c_str(), port);)
00057         Session *sess = static_cast<PeerHandler&>(Handler()).GetSession(hash);
00058         if (sess)
00059         {
00060                 size_t n = sess -> GetNumberOfPieces();
00061                 m_bitmap = new bitmap_t(n);
00062                 m_bitmap_size = m_bitmap -> GetBitmapSize();
00063         }
00064 }

Peer::~Peer (  ) 

Definition at line 67 of file Peer.cpp.

References m_bitmap, and m_requests.

00068 {
00069         if (m_bitmap)
00070                 delete m_bitmap;
00071         while (m_requests.size())
00072         {
00073                 request_v::iterator it = m_requests.begin();
00074                 Request *r = *it;
00075                 delete r;
00076                 m_requests.erase(it);
00077         }
00078 }

Peer::Peer ( const Peer s  )  [inline, private]

Definition at line 98 of file Peer.h.

00098 : m_handler(s.Handler()) {} // copy constructor


Member Function Documentation

const std::string& Peer::GetIP (  )  [inline]

Definition at line 46 of file Peer.h.

References m_ip.

00046 { return m_ip; }

const std::string& Peer::GetID (  )  [inline]

Definition at line 47 of file Peer.h.

References m_id.

00047 { return m_id; }

port_t Peer::GetPort (  )  [inline]

Definition at line 48 of file Peer.h.

References m_port.

00048 { return m_port; }

void Peer::SetPort ( port_t  x  )  [inline]

Definition at line 49 of file Peer.h.

References m_port.

00049 { m_port = x; }

ISocketHandler& Peer::Handler (  )  const [inline]

Definition at line 51 of file Peer.h.

References m_handler.

Referenced by Connected(), GotSlice(), Peer(), PeerSocket(), RemoveRequests(), and RequestAvailable().

00051 { return m_handler; }

unsigned char* Peer::GetBitmap (  )  [inline]

Definition at line 52 of file Peer.h.

References m_bitmap.

00052 { return m_bitmap ? m_bitmap -> GetBitmap() : NULL; }

size_t Peer::GetBitmapSize (  )  [inline]

Definition at line 53 of file Peer.h.

References m_bitmap_size.

Referenced by Peer().

00053 { return m_bitmap_size; }

bool Peer::IsChoked (  )  [inline]

choke status from remote end

Definition at line 56 of file Peer.h.

References m_choke.

00056 { return m_choke; }

void Peer::SetChoked ( bool  x = true  )  [inline]

Definition at line 57 of file Peer.h.

References m_choke, and m_t_choke.

00057 { m_choke = x; if (x) m_t_choke = time(NULL); }

bool Peer::IsInterested (  )  [inline]

interest status from remote end

Definition at line 59 of file Peer.h.

References m_interested.

00059 { return m_interested; }

void Peer::SetInterested ( bool  x = true  )  [inline]

Definition at line 60 of file Peer.h.

References m_interested.

00060 { m_interested = x; }

time_t Peer::GetChokeTime (  )  [inline]

Definition at line 61 of file Peer.h.

References m_t_choke.

00061 { return m_t_choke; }

const std::string& Peer::GetHash (  )  [inline]

Definition at line 63 of file Peer.h.

References m_hash.

00063 { return m_hash; }

bool Peer::Connected (  ) 

Definition at line 81 of file Peer.cpp.

References Handler(), and PeerSocket().

00082 {
00083         pSocket *p = PeerSocket();
00084         return p ? static_cast<PeerHandler&>(Handler()).Connected(this) && p -> CTS() : false;
00085 }

pSocket * Peer::PeerSocket (  ) 

Definition at line 88 of file Peer.cpp.

References Handler().

Referenced by Connected().

00089 {
00090         return static_cast<PeerHandler&>(Handler()).PeerSocket(this);
00091 }

bool Peer::IsSet ( size_t  nr  )  [inline]

Definition at line 68 of file Peer.h.

References m_bitmap.

Referenced by Score().

00068 { return m_bitmap ? m_bitmap -> IsSet(nr) : false; }

void Peer::set ( size_t  nr  ) 

Definition at line 94 of file Peer.cpp.

References m_bitmap.

00095 {
00096         if (m_bitmap)
00097                 m_bitmap -> set(piece);
00098 }

request_v& Peer::Requests (  )  [inline]

Definition at line 71 of file Peer.h.

References m_requests.

00071 { return m_requests; }

size_t Peer::GotSlice ( size_t  piece,
size_t  offset 
)

Definition at line 101 of file Peer.cpp.

References Handler(), m_hash, m_requests, and SLICE.

00102 {
00103         for (request_v::iterator it = m_requests.begin(); it != m_requests.end(); it++)
00104         {
00105                 Request *r = *it;
00106                 if (r -> GetPiece() == piece && r -> GetOffset() == offset)
00107                 {
00108                         size_t l = r -> GetLength();
00109                         delete r;
00110                         m_requests.erase(it);
00111                         // TODO: reset request timeout here
00112                         return l;
00113                 }
00114         }
00115         // slice was not in request queue, get slice length from incomplete piece list
00116         Session *sess = static_cast<PeerHandler&>(Handler()).GetSession(m_hash);
00117         if (!sess)
00118                 return 0;
00119         Piece *p = sess -> GetIncomplete(piece);
00120         if (p)
00121                 return MIN(SLICE, p -> PieceLength() - offset);
00122         return 0;
00123 }

void Peer::RefreshRequests (  ) 

Definition at line 126 of file Peer.cpp.

References m_requests.

00127 {
00128         for (request_v::iterator it = m_requests.begin(); it != m_requests.end(); it++)
00129         {
00130                 Request *r = *it;
00131                 r -> ResetAge();
00132         }
00133 }

bool Peer::Tried (  )  [inline]

Definition at line 77 of file Peer.h.

References m_tried.

00077 { return m_tried; }

void Peer::SetTried ( bool  x = true  )  [inline]

Definition at line 78 of file Peer.h.

References m_tried.

00078 { m_tried = x; }

bool Peer::Failed (  )  [inline]

Definition at line 79 of file Peer.h.

References m_failed.

00079 { return m_failed; }

void Peer::SetFailed ( bool  x = true  )  [inline]

Definition at line 80 of file Peer.h.

References m_failed.

00080 { m_failed = x; }

size_t Peer::GetSet (  )  [inline]

number of set bits

Definition at line 83 of file Peer.h.

References m_bitmap.

00083 { return m_bitmap ? m_bitmap -> GetSet() : 0; }

size_t Peer::Score ( bitmap_t  ) 

Peer score. Calculate for each piece: Peer have: YES We have: NO Score: +1 Peer have: NO We have: YES Score: +1 Peer have: YES We have: YES Score: 0 Peer have: NO We have: NO Score: 0

Definition at line 136 of file Peer.cpp.

References IsSet(), and m_bitmap.

00137 {
00138         if (!bitmap || !m_bitmap)
00139                 return 0;
00140         size_t q = 0;
00141         for (size_t i = 0; i < bitmap -> GetNumberOfPieces(); i++)
00142         {
00143                 if (bitmap -> IsSet(i) != m_bitmap -> IsSet(i))
00144                         q++;
00145         }
00146         return q;
00147 }

void Peer::RequestAvailable (  ) 

Definition at line 150 of file Peer.cpp.

References Handler(), and m_hash.

00151 {
00152         Session *sess = static_cast<PeerHandler&>(Handler()).GetSession(m_hash);
00153         if (!sess)
00154                 return;
00155         sess -> RequestAvailable(this);
00156 }

void Peer::RemoveRequests (  ) 

Definition at line 159 of file Peer.cpp.

References Handler(), and m_hash.

00160 {
00161         Session *sess = static_cast<PeerHandler&>(Handler()).GetSession(m_hash);
00162         if (!sess)
00163                 return;
00164         sess -> RemoveRequests(this);
00165 }

Peer& Peer::operator= ( const Peer  )  [inline, private]

Definition at line 99 of file Peer.h.

00099 { return *this; } // assignment operator


Member Data Documentation

ISocketHandler& Peer::m_handler [private]

Definition at line 101 of file Peer.h.

Referenced by Handler().

std::string Peer::m_hash [private]

Definition at line 102 of file Peer.h.

Referenced by GetHash(), GotSlice(), RemoveRequests(), and RequestAvailable().

std::string Peer::m_ip [private]

Definition at line 103 of file Peer.h.

Referenced by GetIP().

std::string Peer::m_id [private]

Definition at line 104 of file Peer.h.

Referenced by GetID().

port_t Peer::m_port [private]

Definition at line 105 of file Peer.h.

Referenced by GetPort(), and SetPort().

Definition at line 106 of file Peer.h.

Referenced by GetBitmap(), GetSet(), IsSet(), Peer(), Score(), set(), and ~Peer().

size_t Peer::m_bitmap_size [private]

Definition at line 107 of file Peer.h.

Referenced by GetBitmapSize(), and Peer().

bool Peer::m_choke [private]

Definition at line 108 of file Peer.h.

Referenced by IsChoked(), and SetChoked().

bool Peer::m_interested [private]

Definition at line 109 of file Peer.h.

Referenced by IsInterested(), and SetInterested().

time_t Peer::m_t_choke [private]

Definition at line 110 of file Peer.h.

Referenced by GetChokeTime(), and SetChoked().

Definition at line 111 of file Peer.h.

Referenced by GotSlice(), RefreshRequests(), Requests(), and ~Peer().

bool Peer::m_tried [private]

Definition at line 112 of file Peer.h.

Referenced by SetTried(), and Tried().

bool Peer::m_failed [private]

Definition at line 113 of file Peer.h.

Referenced by Failed(), and SetFailed().


The documentation for this class was generated from the following files:
Page, code, and content Copyright (C) 2006 by Anders Hedström
Generated on Mon Aug 29 20:21:47 2005 for C++ Sockets by  doxygen 1.4.4