summaryrefslogtreecommitdiffstats
path: root/libktorrent/net
diff options
context:
space:
mode:
Diffstat (limited to 'libktorrent/net')
-rw-r--r--libktorrent/net/Makefile.am10
-rw-r--r--libktorrent/net/address.cpp67
-rw-r--r--libktorrent/net/address.h60
-rw-r--r--libktorrent/net/bufferedsocket.cpp217
-rw-r--r--libktorrent/net/bufferedsocket.h150
-rw-r--r--libktorrent/net/circularbuffer.cpp146
-rw-r--r--libktorrent/net/circularbuffer.h89
-rw-r--r--libktorrent/net/downloadthread.cpp137
-rw-r--r--libktorrent/net/downloadthread.h64
-rw-r--r--libktorrent/net/networkthread.cpp165
-rw-r--r--libktorrent/net/networkthread.h113
-rw-r--r--libktorrent/net/portlist.cpp73
-rw-r--r--libktorrent/net/portlist.h103
-rw-r--r--libktorrent/net/socket.cpp326
-rw-r--r--libktorrent/net/socket.h83
-rw-r--r--libktorrent/net/socketgroup.cpp186
-rw-r--r--libktorrent/net/socketgroup.h90
-rw-r--r--libktorrent/net/socketmonitor.cpp173
-rw-r--r--libktorrent/net/socketmonitor.h118
-rw-r--r--libktorrent/net/speed.cpp78
-rw-r--r--libktorrent/net/speed.h51
-rw-r--r--libktorrent/net/uploadthread.cpp91
-rw-r--r--libktorrent/net/uploadthread.h61
23 files changed, 0 insertions, 2651 deletions
diff --git a/libktorrent/net/Makefile.am b/libktorrent/net/Makefile.am
deleted file mode 100644
index e67354c..0000000
--- a/libktorrent/net/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-INCLUDES = -I$(srcdir)/.. -I$(srcdir)/. $(all_includes)
-METASOURCES = AUTO
-libnet_la_LDFLAGS = $(all_libraries)
-noinst_LTLIBRARIES = libnet.la
-noinst_HEADERS = address.h bufferedsocket.h circularbuffer.h downloadthread.h \
- networkthread.h portlist.h socket.h socketmonitor.h speed.h uploadthread.h
-libnet_la_SOURCES = address.cpp bufferedsocket.cpp circularbuffer.cpp \
- downloadthread.cpp networkthread.cpp portlist.cpp socket.cpp socketgroup.cpp \
- socketmonitor.cpp speed.cpp uploadthread.cpp
-KDE_CXXFLAGS = $(USE_EXCEPTIONS) $(USE_RTTI)
diff --git a/libktorrent/net/address.cpp b/libktorrent/net/address.cpp
deleted file mode 100644
index d4877da..0000000
--- a/libktorrent/net/address.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include "address.h"
-
-namespace net
-{
-
- Address::Address() : m_ip(0),m_port(0) {}
-
- Address::Address(const TQString & host,Uint16 port) : m_ip(0),m_port(port)
- {
- struct in_addr a;
- if (inet_aton(host.ascii(),&a))
- m_ip = ntohl(a.s_addr);
- }
-
- Address::Address(const Address & addr) : m_ip(addr.ip()),m_port(addr.port())
- {
- }
-
- Address:: ~Address()
- {}
-
-
- Address & Address::operator = (const Address & a)
- {
- m_ip = a.ip();
- m_port = a.port();
- return *this;
- }
-
-
- bool Address::operator == (const Address & a)
- {
- return m_ip == a.ip() && m_port == a.port();
- }
-
- TQString Address::toString() const
- {
- return TQString("%1.%2.%3.%4")
- .arg((m_ip & 0xFF000000) >> 24)
- .arg((m_ip & 0x00FF0000) >> 16)
- .arg((m_ip & 0x0000FF00) >> 8)
- .arg(m_ip & 0x000000FF);
- }
-
-}
diff --git a/libktorrent/net/address.h b/libktorrent/net/address.h
deleted file mode 100644
index af39380..0000000
--- a/libktorrent/net/address.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETADDRESS_H
-#define NETADDRESS_H
-
-#include <tqstring.h>
-#include <util/constants.h>
-
-namespace net
-{
- using bt::Uint32;
- using bt::Uint16;
-
- /**
- @author Joris Guisson <joris.guisson@gmail.com>
- */
- class Address
- {
- Uint32 m_ip;
- Uint16 m_port;
- public:
- Address();
- Address(const TQString & host,Uint16 port);
- Address(const Address & addr);
- virtual ~Address();
-
-
- Address & operator = (const Address & a);
- bool operator == (const Address & a);
-
- Uint32 ip() const {return m_ip;}
- void setIP(Uint32 ip) {m_ip = ip;}
-
- Uint16 port() const {return m_port;}
- void setPort(Uint16 p) {m_port = p;}
-
- TQString toString() const;
-
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/bufferedsocket.cpp b/libktorrent/net/bufferedsocket.cpp
deleted file mode 100644
index 2165f70..0000000
--- a/libktorrent/net/bufferedsocket.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <util/log.h>
-#include <torrent/globals.h>
-#include "bufferedsocket.h"
-#include "circularbuffer.h"
-#include "speed.h"
-
-using namespace bt;
-
-namespace net
-{
-#define OUTPUT_BUFFER_SIZE 16393
-
- BufferedSocket::BufferedSocket(int fd) : Socket(fd),rdr(0),wrt(0),up_gid(0),down_gid(0)
- {
- bytes_in_output_buffer = 0;
- bytes_sent = 0;
- down_speed = new Speed();
- up_speed = new Speed();
- output_buffer = new Uint8[OUTPUT_BUFFER_SIZE];
- poll_index = -1;
- }
-
- BufferedSocket::BufferedSocket(bool tcp) : Socket(tcp),rdr(0),wrt(0),up_gid(0),down_gid(0)
- {
- bytes_in_output_buffer = 0;
- bytes_sent = 0;
- down_speed = new Speed();
- up_speed = new Speed();
- output_buffer = new Uint8[OUTPUT_BUFFER_SIZE];
- poll_index = -1;
- }
-
-
- BufferedSocket::~BufferedSocket()
- {
- delete [] output_buffer;
- delete up_speed;
- delete down_speed;
- }
-
- void BufferedSocket::setGroupID(Uint32 gid,bool upload)
- {
- if (upload)
- up_gid = gid;
- else
- down_gid = gid;
- }
-
- float BufferedSocket::getDownloadRate() const
- {
- mutex.lock();
- float ret = down_speed->getRate();
- mutex.unlock();
- return ret;
- }
-
- float BufferedSocket::getUploadRate() const
- {
- mutex.lock();
- float ret = up_speed->getRate();
- mutex.unlock();
- return ret;
- }
-
- static Uint8 input_buffer[OUTPUT_BUFFER_SIZE];
-
- Uint32 BufferedSocket::readBuffered(Uint32 max_bytes_to_read,bt::TimeStamp now)
- {
- Uint32 br = 0;
- bool no_limit = (max_bytes_to_read == 0);
-
- if (bytesAvailable() == 0)
- {
- close();
- return 0;
- }
-
- while ((br < max_bytes_to_read || no_limit) && bytesAvailable() > 0)
- {
- Uint32 tr = bytesAvailable();
- if (tr > OUTPUT_BUFFER_SIZE)
- tr = OUTPUT_BUFFER_SIZE;
- if (!no_limit && tr + br > max_bytes_to_read)
- tr = max_bytes_to_read - br;
-
- int ret = Socket::recv(input_buffer,tr);
- if (ret != 0)
- {
- mutex.lock();
- down_speed->onData(ret,now);
- mutex.unlock();
- if (rdr)
- rdr->onDataReady(input_buffer,ret);
- br += ret;
- }
- else
- {
- // connection closed, so just return the number of bytes read
- return br;
- }
- }
- return br;
- }
-
- Uint32 BufferedSocket::sendOutputBuffer(Uint32 max,bt::TimeStamp now)
- {
- if (bytes_in_output_buffer == 0)
- return 0;
-
- if (max == 0 || bytes_in_output_buffer <= max)
- {
- // try to send everything
- Uint32 bw = bytes_in_output_buffer;
- Uint32 off = bytes_sent;
- Uint32 ret = Socket::send(output_buffer + off,bw);
- if (ret > 0)
- {
- mutex.lock();
- up_speed->onData(ret,now);
- mutex.unlock();
- bytes_in_output_buffer -= ret;
- bytes_sent += ret;
- if (bytes_sent == bytes_in_output_buffer)
- bytes_in_output_buffer = bytes_sent = 0;
- return ret;
- }
- else
- {
- return 0;
- }
- }
- else
- {
- Uint32 bw = max;
- Uint32 off = bytes_sent;
- Uint32 ret = Socket::send(output_buffer + off,bw);
- if (ret > 0)
- {
- mutex.lock();
- up_speed->onData(ret,now);
- mutex.unlock();
- bytes_in_output_buffer -= ret;
- bytes_sent += ret;
- return ret;
- }
- else
- {
- return 0;
- }
- }
- }
-
- Uint32 BufferedSocket::writeBuffered(Uint32 max,bt::TimeStamp now)
- {
- if (!wrt)
- return 0;
-
- Uint32 bw = 0;
- bool no_limit = max == 0;
- if (bytes_in_output_buffer > 0)
- {
- Uint32 ret = sendOutputBuffer(max,now);
- if (bytes_in_output_buffer > 0)
- {
- // haven't sent it fully so return
- return ret;
- }
-
- bw += ret;
- }
-
- // run as long as we do not hit the limit and we can send everything
- while ((no_limit || bw < max) && bytes_in_output_buffer == 0)
- {
- // fill output buffer
- bytes_in_output_buffer = wrt->onReadyToWrite(output_buffer,OUTPUT_BUFFER_SIZE);
- bytes_sent = 0;
- if (bytes_in_output_buffer > 0)
- {
- // try to send
- bw += sendOutputBuffer(max - bw,now);
- }
- else
- {
- // no bytes available in output buffer so break
- break;
- }
- }
-
- return bw;
- }
-
- void BufferedSocket::updateSpeeds(bt::TimeStamp now)
- {
- up_speed->update(now);
- down_speed->update(now);
- }
-}
diff --git a/libktorrent/net/bufferedsocket.h b/libktorrent/net/bufferedsocket.h
deleted file mode 100644
index 2e594df..0000000
--- a/libktorrent/net/bufferedsocket.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETBUFFEREDSOCKET_H
-#define NETBUFFEREDSOCKET_H
-
-#include <tqmutex.h>
-#include <net/socket.h>
-
-namespace net
-{
- using bt::Uint8;
- using bt::Uint32;
-
- class Speed;
-
- class SocketReader
- {
- public:
- SocketReader() {}
- virtual ~SocketReader() {}
-
- /**
- * Function which will be called whenever data has been read from the socket.
- * This data should be dealt with, otherwise it will be discarded.
- * @param buf The buffer
- * @param size The size of the buffer
- */
- virtual void onDataReady(Uint8* buf,Uint32 size) = 0;
- };
-
- class SocketWriter
- {
- public:
- SocketWriter() {}
- virtual ~SocketWriter() {}
-
- /**
- * The socket is ready to write, the writer is asked to provide the data.
- * The data will be fully sent, before another request is done.
- * @param data The data
- * @param max_to_write The maximum number of bytes to put in the buffer
- * @param The number of bytes placed in the buffer
- */
- virtual Uint32 onReadyToWrite(Uint8* data,Uint32 max_to_write) = 0;
-
- /// Check if data is ready to write
- virtual bool hasBytesToWrite() const = 0;
-
- };
-
- /**
- * @author Joris Guisson <joris.guisson@gmail.com>
- *
- * Extends the Socket class with
- */
- class BufferedSocket : public Socket
- {
- mutable TQMutex mutex;
- SocketReader* rdr;
- SocketWriter* wrt;
- Uint8* output_buffer;
- Uint32 bytes_in_output_buffer; // bytes in the output buffer
- Uint32 bytes_sent; // bytes written of the output buffer
- Speed* down_speed;
- Speed* up_speed;
- int poll_index;
-
- Uint32 up_gid;
- Uint32 down_gid; // group id which this torrent belongs to, group 0 means the default group
-
- public:
- BufferedSocket(int fd);
- BufferedSocket(bool tcp);
- virtual ~BufferedSocket();
-
- /**
- * Set the group ID of the socket
- * @param gid THe ID (0 is default group)
- * @param upload Wether this is an upload group or a download group
- */
- void setGroupID(Uint32 gid,bool upload);
-
- /// Get the download group ID
- Uint32 downloadGroupID() const {return down_gid;}
-
- /// Get the upload group ID
- Uint32 uploadGroupID() const {return up_gid;}
-
- void setReader(SocketReader* r) {rdr = r;}
- void setWriter(SocketWriter* r) {wrt = r;}
-
- /**
- * Reads data from the socket to the buffer.
- * @param max_bytes_to_read Maximum number of bytes to read (0 is no limit)
- * @param now Current time stamp
- * @return The number of bytes read
- */
- Uint32 readBuffered(Uint32 max_bytes_to_read,bt::TimeStamp now);
-
- /**
- * Writes data from the buffer to the socket.
- * @param max The maximum number of bytes to send over the socket (0 = no limit)
- * * @param now Current time stamp
- * @return The number of bytes written
- */
- Uint32 writeBuffered(Uint32 max,bt::TimeStamp now);
-
- /// See if the socket has something ready to write
- bool bytesReadyToWrite() const
- {
- return bytes_in_output_buffer > 0 || (!wrt ? false : wrt->hasBytesToWrite());
- }
-
-
- /// Get the current download rate
- float getDownloadRate() const;
-
- /// Get the current download rate
- float getUploadRate() const;
-
- /// Update up and down speed
- void updateSpeeds(bt::TimeStamp now);
-
- int getPollIndex() const {return poll_index;}
- void setPollIndex(int pi) {poll_index = pi;}
-
- private:
- Uint32 sendOutputBuffer(Uint32 max,bt::TimeStamp now);
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/circularbuffer.cpp b/libktorrent/net/circularbuffer.cpp
deleted file mode 100644
index abce80a..0000000
--- a/libktorrent/net/circularbuffer.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <util/log.h>
-#include <torrent/globals.h>
-#include "circularbuffer.h"
-#include "bufferedsocket.h"
-
-using namespace bt;
-
-namespace net
-{
-
- CircularBuffer::CircularBuffer(Uint32 max_size) : buf(0),max_size(max_size),first(0),size(0)
- {
- buf = new Uint8[max_size];
- }
-
-
- CircularBuffer::~CircularBuffer()
- {
- delete [] buf;
- }
-
- Uint32 CircularBuffer::freeSpace() const
- {
- return max_size - size;
- }
-
- Uint32 CircularBuffer::write(const Uint8* data,Uint32 dsize)
- {
- if (size == max_size)
- return 0;
-
- mutex.lock();
- Uint32 wp = (first + size) % max_size;
- Uint32 j = 0;
- while (size < max_size && (dsize == 0 || j < dsize))
- {
- buf[wp] = data[j];
- j++;
- wp = (wp + 1) % max_size;
- size++;
- }
-
- mutex.unlock();
- return j;
- }
-
- Uint32 CircularBuffer::read(Uint8* data,Uint32 max_to_read)
- {
- if (!size)
- return 0;
-
- mutex.lock();
- Uint32 j = 0;
- while (size > 0 && j < max_to_read)
- {
- data[j] = buf[first];
- j++;
- first = (first + 1) % max_size;
- size--;
- }
- mutex.unlock();
- return j;
- }
-
- Uint32 CircularBuffer::send(BufferedSocket* s,Uint32 max)
- {
- if (!size)
- return 0;
-
- Uint32 ret = 0;
- mutex.lock();
-
- if (first + size <= max_size)
- {
- Uint32 ts = size;
- if (max > 0 && size > max)
- ts = max;
- ret = s->send(buf + first,ts);
- first += ret;
- size -= ret;
- }
- else if (max > 0) // if there is a limit
- {
- // write from first to the end of the buffer
- Uint32 to_send = max_size - first;
- if (to_send > max)
- to_send = max;
-
- ret = s->send(buf + first,to_send);
-
- // update first, wrap around if necessary
- first = (first + ret) % max_size;
- size -= ret; // ret bytes less in the buffer
- max -= ret; // decrease limit
-
- if (max > 0 && ret == to_send && size > 0)
- {
- // we have sent everything so we can send more
- to_send = size > max ? max : size;
- Uint32 ret2 = s->send(buf,to_send);
-
- ret += ret2;
- first += ret2;
- size -= ret2;
- }
- }
- else // no limit
- {
- Uint32 to_send = max_size - first;
- ret = s->send(buf + first,to_send);
- // update first, wrap around if necessary
- first = (first + ret) % max_size;
- size -= ret; // ret bytes less in the buffer
- if (ret == to_send && size > 0)
- {
- // we have sent everything so we can send more
- Uint32 ret2 = s->send(buf,size);
- ret += ret2;
- first += ret2;
- size -= ret2;
- }
- }
- mutex.unlock();
- return ret;
- }
-
-}
diff --git a/libktorrent/net/circularbuffer.h b/libktorrent/net/circularbuffer.h
deleted file mode 100644
index 6d45723..0000000
--- a/libktorrent/net/circularbuffer.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETCIRCULARBUFFER_H
-#define NETCIRCULARBUFFER_H
-
-#include <tqmutex.h>
-#include <util/constants.h>
-
-namespace net
-{
- using bt::Uint8;
- using bt::Uint32;
-
- class BufferedSocket;
-
- /**
- * @author Joris Guisson <joris.guisson@gmail.com>
- *
- * Simple circular buffer, to simulate a queue.
- * Writes happen at the end, reads at the beginning.
- * The buffer is protected by a mutex.
- */
- class CircularBuffer
- {
- Uint8* buf;
- Uint32 max_size;
- Uint32 first; // index of first byte in the buffer
- Uint32 size; // number of bytes in use
- mutable TQMutex mutex;
- public:
- /**
- * Create the buffer.
- * @param max_size Maximum size of the buffer.
- */
- CircularBuffer(Uint32 max_size);
- virtual ~CircularBuffer();
-
- /// How much capacity does the buffer have
- Uint32 capacity() const {return max_size;}
-
- /// How much free space is there
- Uint32 freeSpace() const;
-
-
- /**
- * Write a bunch of data at the back of the buffer.
- * @param data Data to write
- * @param size How many bytes to write
- * @return The number of bytes written in the buffer
- */
- Uint32 write(const Uint8* data,Uint32 size);
-
- /**
- * Read from the buffer.
- * @param data Buffer to store read data
- * @param max_to_read Maximum amount of bytes to read
- * @return The number of bytes read
- */
- Uint32 read(Uint8* data,Uint32 max_to_read);
-
- /**
- * Send the data in the buffer over the socket
- * @param s THe socket
- * @param max Maximum bytes to send
- * @return The number of bytes written
- */
- Uint32 send(BufferedSocket* s,Uint32 max);
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/downloadthread.cpp b/libktorrent/net/downloadthread.cpp
deleted file mode 100644
index ae0f0b9..0000000
--- a/libktorrent/net/downloadthread.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <math.h>
-#include <sys/poll.h>
-#include <util/functions.h>
-#include "socketgroup.h"
-#include "downloadthread.h"
-#include "socketmonitor.h"
-#include "bufferedsocket.h"
-
-using namespace bt;
-
-namespace net
-{
- Uint32 DownloadThread::dcap = 0;
- Uint32 DownloadThread::sleep_time = 3;
-
- DownloadThread::DownloadThread(SocketMonitor* sm) : NetworkThread(sm)
- {
- }
-
-
- DownloadThread::~DownloadThread()
- {}
-
- void DownloadThread::update()
- {
- sm->lock();
- int num = fillPollVector();
- sm->unlock();
-
- int timeout = 10;
- if (poll(&fd_vec[0],num,timeout) > 0)
- {
- sm->lock();
- TimeStamp now = bt::Now();
- Uint32 num_ready = 0;
- SocketMonitor::Itr itr = sm->begin();
- while (itr != sm->end())
- {
- BufferedSocket* s = *itr;
- int pi = s->getPollIndex();
- if (pi >= 0 && s->ok() && fd_vec[pi].revents & POLLIN)
- {
- // add to the correct group
- Uint32 gid = s->downloadGroupID();
- SocketGroup* g = groups.find(gid);
- if (!g)
- g = groups.find(0);
-
- g->add(s);
- num_ready++;
- }
- itr++;
- }
-
- if (num_ready > 0)
- doGroups(num_ready,now,dcap);
- prev_run_time = now;
- sm->unlock();
- }
-
- if (dcap > 0 || groups.count() > 0)
- msleep(sleep_time);
- }
-
- int DownloadThread::fillPollVector()
- {
- TimeStamp ts = bt::Now();
- int i = 0;
-
- // fill the poll vector with all sockets
- SocketMonitor::Itr itr = sm->begin();
- while (itr != sm->end())
- {
- BufferedSocket* s = *itr;
- if (s && s->ok() && s->fd() > 0)
- {
- if (fd_vec.size() <= i)
- {
- // expand pollfd vector if necessary
- struct pollfd pfd;
- pfd.fd = s->fd();
- pfd.revents = 0;
- pfd.events = POLLIN;
- fd_vec.push_back(pfd);
- }
- else
- {
- // use existing slot
- struct pollfd & pfd = fd_vec[i];
- pfd.fd = s->fd();
- pfd.revents = 0;
- pfd.events = POLLIN;
- }
- s->setPollIndex(i);
- i++;
- s->updateSpeeds(ts);
- }
- else
- {
- s->setPollIndex(-1);
- }
- itr++;
- }
-
- return i;
- }
-
- void DownloadThread::setSleepTime(Uint32 stime)
- {
- if (stime >= 1 && stime <= 10)
- sleep_time = stime;
- }
-
- bool DownloadThread::doGroup(SocketGroup* g,Uint32 & allowance,bt::TimeStamp now)
- {
- return g->download(allowance,now);
- }
-}
diff --git a/libktorrent/net/downloadthread.h b/libktorrent/net/downloadthread.h
deleted file mode 100644
index 08e9e46..0000000
--- a/libktorrent/net/downloadthread.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETDOWNLOADTHREAD_H
-#define NETDOWNLOADTHREAD_H
-
-#include <vector>
-#include "networkthread.h"
-
-struct pollfd;
-
-namespace net
-{
-
- /**
- * @author Joris Guisson <joris.guisson@gmail.com>
- *
- * Thread which processes incoming data
- */
- class DownloadThread : public NetworkThread
- {
- static bt::Uint32 dcap;
- static bt::Uint32 sleep_time;
-
- std::vector<struct pollfd> fd_vec;
-
- public:
- DownloadThread(SocketMonitor* sm);
- virtual ~DownloadThread();
-
-
- /// Set the download cap
- static void setCap(bt::Uint32 cap) {dcap = cap;}
-
- /// Set the sleep time when using download caps
- static void setSleepTime(bt::Uint32 stime);
- private:
- int fillPollVector();
-
- virtual void update();
- virtual bool doGroup(SocketGroup* g,Uint32 & allowance,bt::TimeStamp now);
-
-// void processIncomingData(bt::TimeStamp now);
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/networkthread.cpp b/libktorrent/net/networkthread.cpp
deleted file mode 100644
index 40791c9..0000000
--- a/libktorrent/net/networkthread.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <math.h>
-#include <util/functions.h>
-#include <util/log.h>
-#include "socketgroup.h"
-#include "socketmonitor.h"
-#include "networkthread.h"
-
-using namespace bt;
-
-namespace net
-{
-
- NetworkThread::NetworkThread(SocketMonitor* sm)
- : sm(sm),running(false)
- {
- groups.setAutoDelete(true);
- groups.insert(0,new SocketGroup(0));
- }
-
-
- NetworkThread::~NetworkThread()
- {}
-
- void NetworkThread::run()
- {
- running = true;
- prev_run_time = bt::Now();
- while (running)
- update();
- }
-
- void NetworkThread::addGroup(Uint32 gid,Uint32 limit)
- {
- // if group already exists, just change the limit
- SocketGroup* g = groups.find(gid);
- if (g)
- {
- g->setLimit(limit);
- }
- else
- {
- g = new SocketGroup(limit);
- groups.insert(gid,g);
- }
- }
-
- void NetworkThread::removeGroup(Uint32 gid)
- {
- // make sure the 0 group is never erased
- if (gid != 0)
- groups.erase(gid);
- }
-
- void NetworkThread::setGroupLimit(Uint32 gid,Uint32 limit)
- {
- SocketGroup* g = groups.find(gid);
- if (g)
- {
- g->setLimit(limit);
- }
- }
-
- Uint32 NetworkThread::doGroupsLimited(Uint32 num_ready,bt::TimeStamp now,Uint32 & allowance)
- {
- Uint32 num_still_ready = 0;
-
- // this is one pass over all the groups
- bt::PtrMap<Uint32,SocketGroup>::iterator itr = groups.begin();
- while (itr != groups.end() && allowance > 0)
- {
- SocketGroup* g = itr->second;
- if (g->numSockets() > 0)
- {
- Uint32 group_allowance = (Uint32)ceil(((double)g->numSockets() / num_ready) * allowance);
-
- // lets not do to much and make sure we don't pass 0 to the socket group (0 is unlimited)
- if (group_allowance > allowance || group_allowance == 0)
- group_allowance = allowance;
-
- Uint32 ga = group_allowance;
-
- if (!doGroup(g,ga,now))
- g->clear(); // group is done, so clear it
- else
- num_still_ready += g->numSockets(); // keep track of the number of sockets which are still ready
-
- Uint32 done = group_allowance - ga;
- if (allowance >= done)
- allowance -= done;
- else
- allowance = 0;
- }
- itr++;
- }
-
- return num_still_ready > 0;
- }
-
- void NetworkThread::doGroups(Uint32 num_ready,bt::TimeStamp now,bt::Uint32 limit)
- {
- if (limit == 0)
- {
- Uint32 allowance = 0;
- bt::PtrMap<Uint32,SocketGroup>::iterator itr = groups.begin();
- while (itr != groups.end())
- {
- SocketGroup* g = itr->second;
- if (g->numSockets() > 0)
- {
- g->calcAllowance(now);
- doGroup(g,allowance,now);
- g->clear();
- }
- itr++;
- }
- }
- else
- {
- // calculate group allowance for each group
- bt::PtrMap<Uint32,SocketGroup>::iterator itr = groups.begin();
- while (itr != groups.end())
- {
- SocketGroup* g = itr->second;
- g->calcAllowance(now);
- itr++;
- }
-
- Uint32 allowance = (Uint32)ceil(1.02 * limit * (now - prev_run_time) * 0.001);
-
- while (allowance > 0 && num_ready > 0)
- {
- // loop until nobody is ready anymore or the allowance is up
- num_ready = doGroupsLimited(num_ready,now,allowance);
- }
-
- // make sure all groups are cleared
- itr = groups.begin();
- while (itr != groups.end())
- {
- SocketGroup* g = itr->second;
- g->clear();
- itr++;
- }
- }
- }
-}
diff --git a/libktorrent/net/networkthread.h b/libktorrent/net/networkthread.h
deleted file mode 100644
index d31ae3e..0000000
--- a/libktorrent/net/networkthread.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETNETWORKTHREAD_H
-#define NETNETWORKTHREAD_H
-
-#include <tqthread.h>
-#include <util/constants.h>
-#include <util/ptrmap.h>
-
-using bt::Uint32;
-
-namespace net
-{
- class SocketMonitor;
- class SocketGroup;
- class BufferedSocket;
-
- /**
- @author Joris Guisson <joris.guisson@gmail.com>
-
- Base class for the 2 networking threads. Handles the socket groups.
- */
- class NetworkThread : public TQThread
- {
- protected:
- SocketMonitor* sm;
- bool running;
- bt::PtrMap<Uint32,SocketGroup> groups;
- bt::TimeStamp prev_run_time;
-
- public:
- NetworkThread(SocketMonitor* sm);
- virtual ~NetworkThread();
-
-
- /**
- * Add a new group with a given limit
- * @param gid The group ID (cannot be 0, 0 is the default group)
- * @param limit The limit in bytes per sec
- */
- void addGroup(Uint32 gid,Uint32 limit);
-
- /**
- * Remove a group
- * @param gid The group ID
- */
- void removeGroup(Uint32 gid);
-
- /**
- * Set the limit for a group
- * @param gid The group ID
- * @param limit The limit
- */
- void setGroupLimit(Uint32 gid,Uint32 limit);
-
- /**
- * The main function of the thread
- */
- void run();
-
- /**
- * Subclasses must implement this function
- */
- virtual void update() = 0;
-
- /**
- * Do one SocketGroup
- * @param g The group
- * @param allowance The groups allowance
- * @param now The current time
- * @return true if the group can go again
- */
- virtual bool doGroup(SocketGroup* g,Uint32 & allowance,bt::TimeStamp now) = 0;
-
- /// Stop before the next update
- void stop() {running = false;}
-
- /// Is the thread running
- bool isRunning() const {return running;}
-
- protected:
- /**
- * Go over all groups and do them
- * @param num_ready The number of ready sockets
- * @param now The current time
- * @param limit The global limit in bytes per sec
- */
- void doGroups(Uint32 num_ready,bt::TimeStamp now,bt::Uint32 limit);
-
- private:
- Uint32 doGroupsLimited(Uint32 num_ready,bt::TimeStamp now,Uint32 & allowance);
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/portlist.cpp b/libktorrent/net/portlist.cpp
deleted file mode 100644
index 56076ed..0000000
--- a/libktorrent/net/portlist.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include "portlist.h"
-
-namespace net
-{
- Port::Port() : number(0),proto(TCP),forward(false)
- {
- }
-
- Port::Port(bt::Uint16 number,Protocol proto,bool forward)
- : number(number),proto(proto),forward(forward)
- {
- }
-
- Port::Port(const Port & p) : number(p.number),proto(p.proto),forward(p.forward)
- {
- }
-
- bool Port::operator == (const Port & p) const
- {
- return number == p.number && proto == p.proto;
- }
-
- PortList::PortList() : lst(0)
- {}
-
-
- PortList::~PortList()
- {}
-
-
- void PortList::addNewPort(bt::Uint16 number,Protocol proto,bool forward)
- {
- Port p = Port(number,proto,forward);
- append(p);
- if (lst)
- lst->portAdded(p);
- }
-
-
- void PortList::removePort(bt::Uint16 number,Protocol proto)
- {
- PortList::iterator itr = find(Port(number,proto,false));
- if (itr == end())
- return;
-
- if (lst)
- lst->portRemoved(*itr);
-
- erase(itr);
- }
-
-
-
-}
diff --git a/libktorrent/net/portlist.h b/libktorrent/net/portlist.h
deleted file mode 100644
index c1a6e99..0000000
--- a/libktorrent/net/portlist.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETPORTLIST_H
-#define NETPORTLIST_H
-
-#include <tqvaluelist.h>
-#include <util/constants.h>
-
-namespace net
-{
- enum Protocol
- {
- TCP,
- UDP
- };
-
- struct Port
- {
- bt::Uint16 number;
- Protocol proto;
- bool forward;
-
- Port();
- Port(bt::Uint16 number,Protocol proto,bool forward);
- Port(const Port & p);
-
- bool operator == (const Port & p) const;
- };
-
- /**
- * Listener class for the PortList.
- */
- class PortListener
- {
- public:
- /**
- * A port has been added.
- * @param port The port
- */
- virtual void portAdded(const Port & port) = 0;
-
- /**
- * A port has been removed
- * @param port The port
- */
- virtual void portRemoved(const Port & port) = 0;
- };
-
- /**
- * @author Joris Guisson <joris.guisson@gmail.com>
- *
- * List of ports which are currently being used.
- *
- */
- class PortList : public TQValueList<Port>
- {
- PortListener* lst;
- public:
- PortList();
- virtual ~PortList();
-
- /**
- * When a port is in use, this function needs to be called.
- * @param number Port number
- * @param proto Protocol
- * @param forward Wether or not it needs to be forwarded
- */
- void addNewPort(bt::Uint16 number,Protocol proto,bool forward);
-
- /**
- * Needs to be called when a port is not being using anymore.
- * @param number Port number
- * @param proto Protocol
- */
- void removePort(bt::Uint16 number,Protocol proto);
-
- /**
- * Set the port listener.
- * @param pl Port listener
- */
- void setListener(PortListener* pl) {lst = pl;}
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/socket.cpp b/libktorrent/net/socket.cpp
deleted file mode 100644
index e1e67ea..0000000
--- a/libktorrent/net/socket.cpp
+++ /dev/null
@@ -1,326 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-
-#include <tqglobal.h>
-
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <errno.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <arpa/inet.h>
-
-#if defined(Q_OS_LINUX) && !defined(__FreeBSD_kernel__)
-#include <asm/ioctls.h>
-#endif
-
-#ifdef Q_OS_SOLARIS
-#include <sys/filio.h>
-#endif
-
-#ifndef MSG_NOSIGNAL
-#define MSG_NOTQT_SIGNAL 0
-#endif
-
-#include <unistd.h>
-#include <fcntl.h>
-
-#include <torrent/globals.h>
-#include <util/log.h>
-#include "socket.h"
-
-using namespace bt;
-
-namespace net
-{
-
- Socket::Socket(int fd) : m_fd(fd),m_state(IDLE)
- {
-#if defined(Q_OS_MACX) || defined(Q_OS_DARWIN) || (defined(Q_OS_FREEBSD) && !defined(__DragonFly__) && __FreeBSD_version < 600020)
- int val = 1;
- if (setsockopt(m_fd,SOL_SOCKET,SO_NOSIGPIPE,&val,sizeof(int)) < 0)
- {
- Out(SYS_CON|LOG_NOTICE) << TQString("Failed to set the NOSIGPIPE option : %1").arg(strerror(errno)) << endl;
- }
-#endif
- cacheAddress();
- }
-
- Socket::Socket(bool tcp) : m_fd(-1),m_state(IDLE)
- {
- int fd = socket(PF_INET,tcp ? SOCK_STREAM : SOCK_DGRAM,0);
- if (fd < 0)
- {
- Out(SYS_GEN|LOG_IMPORTANT) << TQString("Cannot create socket : %1").arg(strerror(errno)) << endl;
- }
- m_fd = fd;
-#if defined(Q_OS_MACX) || defined(Q_OS_DARWIN) || (defined(Q_OS_FREEBSD) && !defined(__DragonFly__) && __FreeBSD_version < 600020)
- int val = 1;
- if (setsockopt(m_fd,SOL_SOCKET,SO_NOSIGPIPE,&val,sizeof(int)) < 0)
- {
- Out(SYS_CON|LOG_NOTICE) << TQString("Failed to set the NOSIGPIPE option : %1").arg(strerror(errno)) << endl;
- }
-#endif
- }
-
- Socket::~Socket()
- {
- if (m_fd >= 0)
- {
- shutdown(m_fd, SHUT_RDWR);
- ::close(m_fd);
- }
- }
-
- void Socket::close()
- {
- if (m_fd >= 0)
- {
- shutdown(m_fd, SHUT_RDWR);
- ::close(m_fd);
- m_fd = -1;
- m_state = CLOSED;
- }
- }
-
- void Socket::setNonBlocking()
- {
- fcntl(m_fd, F_SETFL, O_NONBLOCK);
- }
-
- bool Socket::connectTo(const Address & a)
- {
- struct sockaddr_in addr;
- memset(&addr,0,sizeof(struct sockaddr_in));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(a.port());
- addr.sin_addr.s_addr = htonl(a.ip());
-
- if (::connect(m_fd,(struct sockaddr*)&addr,sizeof(struct sockaddr)) < 0)
- {
- if (errno == EINPROGRESS)
- {
- // Out(SYS_CON|LOG_DEBUG) << "Socket is connecting" << endl;
- m_state = CONNECTING;
- return false;
- }
- else
- {
- Out(SYS_CON|LOG_NOTICE) << TQString("Cannot connect to host %1:%2 : %3")
- .arg(a.toString()).arg(a.port()).arg(strerror(errno)) << endl;
- return false;
- }
- }
- m_state = CONNECTED;
- cacheAddress();
- return true;
- }
-
- bool Socket::bind(Uint16 port,bool also_listen)
- {
- struct sockaddr_in addr;
- memset(&addr,0,sizeof(struct sockaddr_in));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(port);
-
- if (::bind(m_fd,(struct sockaddr*)&addr,sizeof(struct sockaddr)) < 0)
- {
- Out(SYS_CON|LOG_IMPORTANT) << TQString("Cannot bind to port %1 : %2").arg(port).arg(strerror(errno)) << endl;
- return false;
- }
-
- if (also_listen && listen(m_fd,5) < 0)
- {
- Out(SYS_CON|LOG_IMPORTANT) << TQString("Cannot listen to port %1 : %2").arg(port).arg(strerror(errno)) << endl;
- return false;
- }
-
- int val = 1;
- if (setsockopt(m_fd,SOL_SOCKET,SO_REUSEADDR,&val,sizeof(int)) < 0)
- {
- Out(SYS_CON|LOG_NOTICE) << TQString("Failed to set the reuseaddr option : %1").arg(strerror(errno)) << endl;
- }
- m_state = BOUND;
- return true;
- }
-
- int Socket::send(const bt::Uint8* buf,int len)
- {
- int ret = ::send(m_fd,buf,len,MSG_NOSIGNAL);
- if (ret < 0)
- {
- if (errno != EAGAIN && errno != EWOULDBLOCK)
- {
- // Out(SYS_CON|LOG_DEBUG) << "Send error : " << TQString(strerror(errno)) << endl;
- close();
- }
- return 0;
- }
- return ret;
- }
-
- int Socket::recv(bt::Uint8* buf,int max_len)
- {
- int ret = ::recv(m_fd,buf,max_len,0);
- if (ret < 0)
- {
- if (errno != EAGAIN && errno != EWOULDBLOCK)
- {
- // Out(SYS_CON|LOG_DEBUG) << "Receive error : " << TQString(strerror(errno)) << endl;
- close();
- }
- return 0;
- }
- else if (ret == 0)
- {
- // connection closed
- close();
- return 0;
- }
- return ret;
- }
-
- int Socket::sendTo(const bt::Uint8* buf,int len,const Address & a)
- {
- struct sockaddr_in addr;
- memset(&addr,0,sizeof(struct sockaddr_in));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(a.port());
- addr.sin_addr.s_addr = htonl(a.ip());
-
- int ns = 0;
- while (ns < len)
- {
- int left = len - ns;
- int ret = ::sendto(m_fd,(char*)buf + ns,left,0,(struct sockaddr*)&addr,sizeof(struct sockaddr));
- if (ret < 0)
- {
- Out(SYS_CON|LOG_DEBUG) << "Send error : " << TQString(strerror(errno)) << endl;
- return 0;
- }
-
- ns += ret;
- }
- return ns;
- }
-
- int Socket::recvFrom(bt::Uint8* buf,int max_len,Address & a)
- {
- struct sockaddr_in addr;
- memset(&addr,0,sizeof(struct sockaddr_in));
- socklen_t sl = sizeof(struct sockaddr);
-
- int ret = ::recvfrom(m_fd,buf,max_len,0,(struct sockaddr*)&addr,&sl);
- if (ret < 0)
- {
- Out(SYS_CON|LOG_DEBUG) << "Receive error : " << TQString(strerror(errno)) << endl;
- return 0;
- }
-
- a.setPort(ntohs(addr.sin_port));
- a.setIP(ntohl(addr.sin_addr.s_addr));
- return ret;
- }
-
- int Socket::accept(Address & a)
- {
- struct sockaddr_in addr;
- memset(&addr,0,sizeof(struct sockaddr_in));
- socklen_t slen = sizeof(struct sockaddr_in);
-
- int sfd = ::accept(m_fd,(struct sockaddr*)&addr,&slen);
- if (sfd < 0)
- {
- Out(SYS_CON|LOG_DEBUG) << "Accept error : " << TQString(strerror(errno)) << endl;
- return -1;
- }
-
- a.setPort(ntohs(addr.sin_port));
- a.setIP(ntohl(addr.sin_addr.s_addr));
-
- Out(SYS_CON|LOG_DEBUG) << "Accepted connection from " << TQString(inet_ntoa(addr.sin_addr)) << endl;
- return sfd;
- }
-
- bool Socket::setTOS(unsigned char type_of_service)
- {
-#if defined(Q_OS_MACX) || defined(Q_OS_DARWIN) || (defined(Q_OS_FREEBSD) && __FreeBSD_version < 600020) || defined(Q_OS_NETBSD) || defined(Q_OS_OPENBSD) || defined(Q_OS_BSD4)
- unsigned int c = type_of_service;
-#else
- unsigned char c = type_of_service;
-#endif
- if (setsockopt(m_fd,IPPROTO_IP,IP_TOS,&c,sizeof(c)) < 0)
- {
- Out(SYS_CON|LOG_NOTICE) << TQString("Failed to set TOS to %1 : %2")
- .arg(type_of_service).arg(strerror(errno)) << endl;
- return false;
- }
- return true;
- }
-
- Uint32 Socket::bytesAvailable() const
- {
- int ret = 0;
- if (ioctl(m_fd,FIONREAD,&ret) < 0)
- return 0;
-
- return ret;
- }
-
- bool Socket::connectSuccesFull()
- {
- if (m_state != CONNECTING)
- return false;
-
- int err = 0;
- socklen_t len = sizeof(int);
- if (getsockopt(m_fd,SOL_SOCKET,SO_ERROR,&err,&len) < 0)
- return false;
-
- if (err == 0)
- {
- m_state = CONNECTED;
- cacheAddress();
- }
-
- return err == 0;
- }
-
- void Socket::cacheAddress()
- {
- struct sockaddr_in raddr;
- socklen_t slen = sizeof(struct sockaddr_in);
- if (getpeername(m_fd,(struct sockaddr*)&raddr,&slen) == 0)
- addr = Address(inet_ntoa(raddr.sin_addr),ntohs(raddr.sin_port));
- }
-
- /*
- void Socket::setReadBufferSize(int rbs)
- {
- if (setsockopt(m_fd, SOL_SOCKET, SO_RCVBUF, (char *)&rbs,sizeof(int)) < 0)
- {
- Out(SYS_CON|LOG_DEBUG) << "Failed to set read buffer size " << endl;
- }
- }
- */
-}
diff --git a/libktorrent/net/socket.h b/libktorrent/net/socket.h
deleted file mode 100644
index db8953b..0000000
--- a/libktorrent/net/socket.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETSOCKET_H
-#define NETSOCKET_H
-
-#include <util/constants.h>
-#include "address.h"
-
-namespace net
-{
-
- /**
- @author Joris Guisson <joris.guisson@gmail.com>
- */
- class Socket
- {
- public:
- enum State
- {
- IDLE,
- CONNECTING,
- CONNECTED,
- BOUND,
- CLOSED
- };
-
- Socket(int fd);
- Socket(bool tcp);
- virtual ~Socket();
-
- void setNonBlocking();
- bool connectTo(const Address & addr);
- /// See if a connectTo was succesfull in non blocking mode
- bool connectSuccesFull();
- bool bind(Uint16 port,bool also_listen);
- int send(const bt::Uint8* buf,int len);
- int recv(bt::Uint8* buf,int max_len);
- int sendTo(const bt::Uint8* buf,int size,const Address & addr);
- int recvFrom(bt::Uint8* buf,int max_size,Address & addr);
- int accept(Address & a);
- bool ok() const {return m_fd >= 0;}
- int fd() const {return m_fd;}
- bool setTOS(unsigned char type_of_service);
- const Address & getPeerName() const {return addr;}
- void close();
- State state() const {return m_state;}
-
- /**
- * Set the size of the TCP read buffer.
- * @param rbs
- */
-// void setReadBufferSize(Uint32 rbs);
-
- Uint32 bytesAvailable() const;
- private:
- void cacheAddress();
-
- private:
- int m_fd;
- State m_state;
- Address addr;
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/socketgroup.cpp b/libktorrent/net/socketgroup.cpp
deleted file mode 100644
index 8c9c5e7..0000000
--- a/libktorrent/net/socketgroup.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <math.h>
-#include <util/log.h>
-#include <util/functions.h>
-#include "socketgroup.h"
-#include "bufferedsocket.h"
-
-using namespace bt;
-
-namespace net
-{
-
- SocketGroup::SocketGroup(Uint32 limit) : limit(limit)
- {
- prev_run_time = bt::GetCurrentTime();
- group_allowance = 0;
- }
-
-
- SocketGroup::~SocketGroup()
- {}
-
- void SocketGroup::processUnlimited(bool up,bt::TimeStamp now)
- {
- std::list<BufferedSocket*>::iterator i = sockets.begin();
- while (i != sockets.end())
- {
- BufferedSocket* s = *i;
- if (s)
- {
- if (up)
- s->writeBuffered(0,now);
- else
- s->readBuffered(0,now);
- }
- i++;
- }
- }
-
- bool SocketGroup::processLimited(bool up,bt::TimeStamp now,Uint32 & allowance)
- {
- Uint32 bslot = allowance / sockets.size() + 1;
-
- std::list<BufferedSocket*>::iterator itr = sockets.begin();
-
- // while we can send and there are sockets left to send
- while (sockets.size() > 0 && allowance > 0)
- {
- Uint32 as = bslot;
- if (as > allowance)
- as = allowance;
-
- BufferedSocket* s = *itr;
- if (s)
- {
- Uint32 ret = 0;
- if (up)
- ret = s->writeBuffered(as,now);
- else
- ret = s->readBuffered(as,now);
-
- // if this socket did what it was supposed to do,
- // it can have another go if stuff is leftover
- // if it doesn't, we erase it from the list
- if (ret != as)
- itr = sockets.erase(itr);
- else
- itr++;
-
- if (ret > allowance)
- allowance = 0;
- else
- allowance -= ret;
- }
- else
- {
- // 0 pointer so just erase
- itr = sockets.erase(itr);
- }
-
- // wrap around if necessary
- if (itr == sockets.end())
- itr = sockets.begin();
- }
-
- return sockets.size() > 0;
- }
-
- bool SocketGroup::download(Uint32 & global_allowance,bt::TimeStamp now)
- {
- return process(false,now,global_allowance);
- }
-
- bool SocketGroup::upload(Uint32 & global_allowance,bt::TimeStamp now)
- {
- return process(true,now,global_allowance);
- }
-
- void SocketGroup::calcAllowance(bt::TimeStamp now)
- {
- if (limit > 0)
- group_allowance = (Uint32)ceil(1.02 * limit * (now - prev_run_time) * 0.001);
- else
- group_allowance = 0;
- prev_run_time = now;
- }
-
- bool SocketGroup::process(bool up,bt::TimeStamp now,Uint32 & global_allowance)
- {
- if (limit > 0)
- {
- bool ret = false;
- if (global_allowance == 0)
- {
- Uint32 p = group_allowance;
- ret = processLimited(up,now,p);
- group_allowance = p;
- }
- else if (global_allowance <= group_allowance)
- {
- Uint32 tmp = global_allowance;
- ret = processLimited(up,now,tmp);
-
- Uint32 done = (global_allowance - tmp);
- if (group_allowance < done)
- group_allowance = 0;
- else
- group_allowance -= done;
-
- global_allowance = tmp;
- }
- else
- {
- Uint32 p = group_allowance;
- ret = processLimited(up,now,p);
-
- Uint32 done = (group_allowance - p);
- if (global_allowance < done)
- global_allowance = 0;
- else
- global_allowance -= done;
-
- group_allowance = p;
- }
-
- // if group allowance is used up, this group can no longer do anything
- if (group_allowance == 0)
- {
- clear();
- return false;
- }
- else
- return ret;
- }
- else if (global_allowance > 0)
- {
- return processLimited(up,now,global_allowance);
- }
- else
- {
- processUnlimited(up,now);
- return false;
- }
- }
-
-
-
-}
diff --git a/libktorrent/net/socketgroup.h b/libktorrent/net/socketgroup.h
deleted file mode 100644
index ba08029..0000000
--- a/libktorrent/net/socketgroup.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETSOCKETGROUP_H
-#define NETSOCKETGROUP_H
-
-#include <list>
-#include <util/constants.h>
-
-namespace net
-{
- using bt::Uint32;
-
- class BufferedSocket;
-
- /**
- @author Joris Guisson <joris.guisson@gmail.com>
- */
- class SocketGroup
- {
- Uint32 limit;
- std::list<BufferedSocket*> sockets;
- bt::TimeStamp prev_run_time;
- Uint32 group_allowance;
- public:
- SocketGroup(Uint32 limit);
- virtual ~SocketGroup();
-
- /// Clear the lists of sockets
- void clear() {sockets.clear();}
-
- /// Add a socket for processing
- void add(BufferedSocket* s) {sockets.push_back(s);}
-
- /**
- Process all the sockets in the vector for download.
- @param global_allowance How much the group can do, this will be updated, 0 means no limit
- @param now Current time
- @return true if we can download more data, false otherwise
- */
- bool download(Uint32 & global_allowance,bt::TimeStamp now);
-
- /**
- Process all the sockets in the vector for upload
- @param global_allowance How much the group can do, this will be updated, 0 means no limit
- @param now Current time
- @return true if we can upload more data, false otherwise
- */
- bool upload(Uint32 & global_allowance,bt::TimeStamp now);
-
- /**
- * Set the group limit in bytes per sec
- * @param lim The limit
- */
- void setLimit(Uint32 lim) {limit = lim;}
-
- /// Get the number of sockets
- Uint32 numSockets() const {return sockets.size();}
-
- /**
- * Calculate the allowance for this group
- * @param now Current timestamp
- */
- void calcAllowance(bt::TimeStamp now);
- private:
- void processUnlimited(bool up,bt::TimeStamp now);
- bool processLimited(bool up,bt::TimeStamp now,Uint32 & allowance);
- bool process(bool up,bt::TimeStamp now,Uint32 & global_allowance);
- };
-
-
-}
-
-#endif
diff --git a/libktorrent/net/socketmonitor.cpp b/libktorrent/net/socketmonitor.cpp
deleted file mode 100644
index 123536a..0000000
--- a/libktorrent/net/socketmonitor.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <math.h>
-#include <unistd.h>
-#include <util/functions.h>
-#include <util/log.h>
-#include <torrent/globals.h>
-#include "socketmonitor.h"
-#include "bufferedsocket.h"
-#include "uploadthread.h"
-#include "downloadthread.h"
-
-using namespace bt;
-
-namespace net
-{
- SocketMonitor SocketMonitor::self;
-
- SocketMonitor::SocketMonitor() : ut(0),dt(0),next_group_id(1)
- {
- dt = new DownloadThread(this);
- ut = new UploadThread(this);
- }
-
-
- SocketMonitor::~SocketMonitor()
- {
- if (ut && ut->isRunning())
- {
- ut->stop();
- ut->signalDataReady(); // kick it in the nuts, if the thread is waiting for data
- if (!ut->wait(250))
- {
- ut->terminate();
- ut->wait();
- }
- }
-
-
- if (dt && dt->isRunning())
- {
- dt->stop();
- if (!dt->wait(250))
- {
- dt->terminate();
- dt->wait();
- }
- }
-
- delete ut;
- delete dt;
- }
-
- void SocketMonitor::lock()
- {
- mutex.lock();
- }
-
- void SocketMonitor::unlock()
- {
- mutex.unlock();
- }
-
- void SocketMonitor::setDownloadCap(Uint32 bytes_per_sec)
- {
- DownloadThread::setCap(bytes_per_sec);
- }
-
- void SocketMonitor::setUploadCap(Uint32 bytes_per_sec)
- {
- UploadThread::setCap(bytes_per_sec);
- }
-
- void SocketMonitor::setSleepTime(Uint32 sleep_time)
- {
- DownloadThread::setSleepTime(sleep_time);
- UploadThread::setSleepTime(sleep_time);
- }
-
- void SocketMonitor::add(BufferedSocket* sock)
- {
- TQMutexLocker lock(&mutex);
-
- bool start_threads = smap.count() == 0;
- smap.append(sock);
-
- if (start_threads)
- {
- Out(SYS_CON|LOG_DEBUG) << "Starting socketmonitor threads" << endl;
-
- if (!dt->isRunning())
- dt->start(TQThread::IdlePriority);
- if (!ut->isRunning())
- ut->start(TQThread::IdlePriority);
- }
- }
-
- void SocketMonitor::remove(BufferedSocket* sock)
- {
- TQMutexLocker lock(&mutex);
- if (smap.count() == 0)
- return;
-
- smap.remove(sock);
- if (smap.count() == 0)
- {
- Out(SYS_CON|LOG_DEBUG) << "Stopping socketmonitor threads" << endl;
- if (dt && dt->isRunning())
- dt->stop();
- if (ut && ut->isRunning())
- {
- ut->stop();
- ut->signalDataReady();
- }
- }
- }
-
- void SocketMonitor::signalPacketReady()
- {
- if (ut)
- ut->signalDataReady();
- }
-
- Uint32 SocketMonitor::newGroup(GroupType type,Uint32 limit)
- {
- lock();
- Uint32 gid = next_group_id++;
- if (type == UPLOAD_GROUP)
- ut->addGroup(gid,limit);
- else
- dt->addGroup(gid,limit);
- unlock();
- return gid;
- }
-
- void SocketMonitor::setGroupLimit(GroupType type,Uint32 gid,Uint32 limit)
- {
- lock();
- if (type == UPLOAD_GROUP)
- ut->setGroupLimit(gid,limit);
- else
- dt->setGroupLimit(gid,limit);
- unlock();
- }
-
- void SocketMonitor::removeGroup(GroupType type,Uint32 gid)
- {
- lock();
- if (type == UPLOAD_GROUP)
- ut->removeGroup(gid);
- else
- dt->removeGroup(gid);
- unlock();
- }
-
-}
diff --git a/libktorrent/net/socketmonitor.h b/libktorrent/net/socketmonitor.h
deleted file mode 100644
index 6fc63c1..0000000
--- a/libktorrent/net/socketmonitor.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETSOCKETMONITOR_H
-#define NETSOCKETMONITOR_H
-
-
-#include <tqmutex.h>
-#include <tqptrlist.h>
-#include <util/constants.h>
-
-
-namespace net
-{
- using bt::Uint32;
-
- class BufferedSocket;
- class UploadThread;
- class DownloadThread;
-
- /**
- * @author Joris Guisson <joris.guisson@gmail.com>
- *
- * Monitors all sockets for upload and download traffic.
- * It uses two threads to do this.
- */
- class SocketMonitor
- {
- static SocketMonitor self;
-
- TQMutex mutex;
- UploadThread* ut;
- DownloadThread* dt;
- TQPtrList<BufferedSocket> smap;
- Uint32 next_group_id;
-
- SocketMonitor();
- public:
- virtual ~SocketMonitor();
-
- /// Add a new socket, will start the threads if necessary
- void add(BufferedSocket* sock);
-
- /// Remove a socket, will stop threads if no more sockets are left
- void remove(BufferedSocket* sock);
-
- enum GroupType
- {
- UPLOAD_GROUP,
- DOWNLOAD_GROUP
- };
-
-
- /**
- * Creata a new upload or download group
- * @param type Wether it is an upload or download group
- * @param limit Limit of group in bytes/s
- * @return The group ID
- */
- Uint32 newGroup(GroupType type,Uint32 limit);
-
- /**
- * Change the group limit
- * @param type The group type
- * @param gid The group id
- * @param limit The limit
- */
- void setGroupLimit(GroupType type,Uint32 gid,Uint32 limit);
-
- /**
- * Remove a group
- * @param type The group type
- * @param gid The group id
- */
- void removeGroup(GroupType type,Uint32 gid);
-
- typedef TQPtrList<BufferedSocket>::iterator Itr;
-
- /// Get the begin of the list of sockets
- Itr begin() {return smap.begin();}
-
- /// Get the end of the list of sockets
- Itr end() {return smap.end();}
-
- /// lock the monitor
- void lock();
-
- /// unlock the monitor
- void unlock();
-
- /// Tell upload thread a packet is ready
- void signalPacketReady();
-
- static void setDownloadCap(Uint32 bytes_per_sec);
- static void setUploadCap(Uint32 bytes_per_sec);
- static void setSleepTime(Uint32 sleep_time);
- static SocketMonitor & instance() {return self;}
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/speed.cpp b/libktorrent/net/speed.cpp
deleted file mode 100644
index 35fde9d..0000000
--- a/libktorrent/net/speed.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <util/log.h>
-#include <util/timer.h>
-#include <util/functions.h>
-#include "speed.h"
-
-using namespace bt;
-
-namespace net
-{
- const Uint64 SPEED_INTERVAL = 5000;
-
- Speed::Speed() : rate(0),bytes(0)
- {}
-
-
- Speed::~Speed()
- {}
-
- void Speed::onData(Uint32 b,bt::TimeStamp ts)
- {
- dlrate.append(tqMakePair(b,ts));
- bytes += b;
- }
-
- void Speed::update(bt::TimeStamp now)
- {
- TQValueList<TQPair<Uint32,TimeStamp> >::iterator i = dlrate.begin();
- while (i != dlrate.end())
- {
- TQPair<Uint32,TimeStamp> & p = *i;
- if (now - p.second > SPEED_INTERVAL || now < p.second)
- {
- if (bytes >= p.first) // make sure we don't wrap around
- bytes -= p.first; // subtract bytes
- else
- bytes = 0;
- i = dlrate.erase(i);
- }
- else
- {
- // seeing that newer entries are appended, they are in the list chronologically
- // so once we hit an entry which is in the interval, we can just break out of the loop
- // because all following entries will be in the interval
- break;
- }
- }
-
- if (bytes == 0)
- {
- rate = 0;
- }
- else
- {
- // Out() << "bytes = " << bytes << " d = " << d << endl;
- rate = (float) bytes / (float)(SPEED_INTERVAL * 0.001);
- }
- }
-
-}
diff --git a/libktorrent/net/speed.h b/libktorrent/net/speed.h
deleted file mode 100644
index a9ea561..0000000
--- a/libktorrent/net/speed.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETSPEED_H
-#define NETSPEED_H
-
-#include <tqpair.h>
-#include <tqvaluelist.h>
-#include <util/constants.h>
-
-namespace net
-{
-
- /**
- @author Joris Guisson <joris.guisson@gmail.com>
-
- Measures the download and upload speed.
- */
- class Speed
- {
- float rate;
- bt::Uint32 bytes;
- TQValueList<TQPair<bt::Uint32,bt::TimeStamp> > dlrate;
- public:
- Speed();
- virtual ~Speed();
-
- void onData(bt::Uint32 bytes,bt::TimeStamp ts);
- void update(bt::TimeStamp now);
- float getRate() const {return rate;}
- };
-
-}
-
-#endif
diff --git a/libktorrent/net/uploadthread.cpp b/libktorrent/net/uploadthread.cpp
deleted file mode 100644
index 0023cf6..0000000
--- a/libktorrent/net/uploadthread.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#include <math.h>
-#include <util/functions.h>
-#include "uploadthread.h"
-#include "socketmonitor.h"
-#include "bufferedsocket.h"
-#include "socketgroup.h"
-
-using namespace bt;
-
-namespace net
-{
- Uint32 UploadThread::ucap = 0;
- Uint32 UploadThread::sleep_time = 3;
-
- UploadThread::UploadThread(SocketMonitor* sm) : NetworkThread(sm)
- {}
-
-
- UploadThread::~UploadThread()
- {}
-
-
- void UploadThread::update()
- {
- sm->lock();
- bt::TimeStamp now = bt::Now();
-
- Uint32 num_ready = 0;
- // loop over all sockets and see which ones have data ready
- SocketMonitor::Itr itr = sm->begin();
- while (itr != sm->end())
- {
- BufferedSocket* s = *itr;
- if (s && s->ok() && s->bytesReadyToWrite())
- {
- SocketGroup* g = groups.find(s->uploadGroupID());
- if (!g)
- g = groups.find(0);
-
- g->add(s);
- num_ready++;
- }
- itr++;
- }
-
- if (num_ready > 0)
- doGroups(num_ready,now,ucap);
- prev_run_time = now;
- sm->unlock();
-
- if (num_ready == 0) // nobody was ready so go to sleep
- data_ready.wait();
- else
- msleep(sleep_time);
- }
-
- void UploadThread::signalDataReady()
- {
- data_ready.wakeOne();
- }
-
- void UploadThread::setSleepTime(Uint32 stime)
- {
- if (stime >= 1 && stime <= 10)
- sleep_time = stime;
- }
-
- bool UploadThread::doGroup(SocketGroup* g,Uint32 & allowance,bt::TimeStamp now)
- {
- return g->upload(allowance,now);
- }
-}
diff --git a/libktorrent/net/uploadthread.h b/libktorrent/net/uploadthread.h
deleted file mode 100644
index b273846..0000000
--- a/libktorrent/net/uploadthread.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2005 by Joris Guisson *
- * joris.guisson@gmail.com *
- * *
- * This program 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 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program 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 this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-#ifndef NETUPLOADTHREAD_H
-#define NETUPLOADTHREAD_H
-
-
-
-#include <tqwaitcondition.h>
-#include "networkthread.h"
-
-namespace net
-{
- class SocketMonitor;
- class BufferedSocket;
-
- /**
- @author Joris Guisson <joris.guisson@gmail.com>
- */
- class UploadThread : public NetworkThread
- {
- static bt::Uint32 ucap;
- static bt::Uint32 sleep_time;
-
- TQWaitCondition data_ready;
- public:
- UploadThread(SocketMonitor* sm);
- virtual ~UploadThread();
-
- /// Wake up thread, data is ready to be sent
- void signalDataReady();
-
- /// Set the upload cap
- static void setCap(bt::Uint32 uc) {ucap = uc;}
-
- /// Set the sleep time when using upload caps
- static void setSleepTime(bt::Uint32 stime);
- private:
- virtual void update();
- virtual bool doGroup(SocketGroup* g,Uint32 & allowance,bt::TimeStamp now);
- };
-
-}
-
-#endif