X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=blobdiff_plain;f=src%2Flimit-connect.cpp;h=3fb013941ab427865345cf7f6782d0904643398f;hp=4af597e899ec43bf8aecde71a65a1c651e3b1b36;hb=d62e0baee8ee3cccced41746ef09fc3e01f401d5;hpb=d1010e2fab0026b538230f67293bd5d4724c0913 diff --git a/src/limit-connect.cpp b/src/limit-connect.cpp index 4af597e..3fb0139 100644 --- a/src/limit-connect.cpp +++ b/src/limit-connect.cpp @@ -1,5 +1,5 @@ /* This file is part of the yazpp toolkit. - * Copyright (C) 1998-2011 Index Data and Mike Taylor + * Copyright (C) Index Data and Mike Taylor * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -37,13 +37,17 @@ using namespace yazpp_1; +struct LimitConnect::Rep { + int m_period; + Peer *m_peers; + Peer **lookup(const char *peername); +}; + struct LimitConnect::Peer { - friend class LimitConnect; - Peer(int sz, const char *peername); ~Peer(); void add_connect(); - + char *m_peername; TimeStat m_bw; Peer *m_next; @@ -51,19 +55,21 @@ struct LimitConnect::Peer { LimitConnect::LimitConnect() { - m_period = 60; - m_peers = 0; + m_p = new Rep; + m_p->m_period = 60; + m_p->m_peers = 0; } LimitConnect::~LimitConnect() { cleanup(true); + delete m_p; } void LimitConnect::set_period(int sec) { - m_period = sec; + m_p->m_period = sec; } LimitConnect::Peer::Peer(int sz, const char *peername) : m_bw(sz) @@ -82,7 +88,7 @@ void LimitConnect::Peer::add_connect() m_bw.add_bytes(1); } -LimitConnect::Peer **LimitConnect::lookup(const char *peername) +LimitConnect::Peer **LimitConnect::Rep::lookup(const char *peername) { Peer **p = &m_peers; while (*p) @@ -96,15 +102,15 @@ LimitConnect::Peer **LimitConnect::lookup(const char *peername) void LimitConnect::add_connect(const char *peername) { - Peer **p = lookup(peername); + Peer **p = m_p->lookup(peername); if (!*p) - *p = new Peer(m_period, peername); + *p = new Peer(m_p->m_period, peername); (*p)->add_connect(); } int LimitConnect::get_total(const char *peername) { - Peer **p = lookup(peername); + Peer **p = m_p->lookup(peername); if (!*p) return 0; return (*p)->m_bw.get_total(); @@ -112,7 +118,7 @@ int LimitConnect::get_total(const char *peername) void LimitConnect::cleanup(bool all) { - Peer **p = &m_peers; + Peer **p = &m_p->m_peers; while (*p) { Peer *tp = *p;