亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? peerwireclient.h

?? 基于QT4圖形庫的BT下載客戶端源碼
?? H
字號:
/****************************************************************************
**
** Copyright (C) 2004-2006 Trolltech ASA. All rights reserved.
**
** This file is part of the example classes of the Qt Toolkit.
**
** Licensees holding a valid Qt License Agreement may use this file in
** accordance with the rights, responsibilities and obligations
** contained therein.  Please consult your licensing agreement or
** contact sales@trolltech.com if any conditions of this licensing
** agreement are not clear to you.
**
** Further information about Qt licensing is available at:
** http://www.trolltech.com/products/qt/licensing.html or by
** contacting info@trolltech.com.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/

#ifndef PEERWIRECLIENT_H
#define PEERWIRECLIENT_H

class QHostAddress;
class QTimerEvent;
class TorrentPeer;

#include <QBitArray>
#include <QList>
#include <QTcpSocket>

struct TorrentBlock
{
    inline TorrentBlock(int p, int o, int l)
        : pieceIndex(p), offset(o), length(l)
    {
    }
    inline bool operator==(const TorrentBlock &other) const
    {
        return pieceIndex == other.pieceIndex
                && offset == other.offset
                && length == other.length;
    }
    
    int pieceIndex;
    int offset;
    int length;
};

class PeerWireClient : public QTcpSocket
{
    Q_OBJECT

public:
    enum PeerWireStateFlag {
        ChokingPeer = 0x1,
        InterestedInPeer = 0x2,
        ChokedByPeer = 0x4,
        PeerIsInterested = 0x8
    };
    Q_DECLARE_FLAGS(PeerWireState, PeerWireStateFlag)

    PeerWireClient(const QByteArray &peerId, QObject *parent = 0);
    void initialize(const QByteArray &infoHash, int pieceCount);

    void setPeer(TorrentPeer *peer);
    TorrentPeer *peer() const;

    // State
    inline PeerWireState peerWireState() const { return pwState; }
    QBitArray availablePieces() const;
    QList<TorrentBlock> incomingBlocks() const;

    // Protocol
    void chokePeer();
    void unchokePeer();
    void sendInterested();
    void sendKeepAlive();
    void sendNotInterested();
    void sendPieceNotification(int piece);
    void sendPieceList(const QBitArray &bitField);
    void requestBlock(int piece, int offset, int length);
    void cancelRequest(int piece, int offset, int length);
    void sendBlock(int piece, int offset, const QByteArray &data);

    // Rate control
    qint64 writeToSocket(qint64 bytes);
    qint64 readFromSocket(qint64 bytes);
    qint64 downloadSpeed() const;
    qint64 uploadSpeed() const;

    bool canTransferMore() const;
    qint64 bytesAvailable() const { return incomingBuffer.size() + QTcpSocket::bytesAvailable(); }
    qint64 socketBytesAvailable() const { return socket.bytesAvailable(); }
    qint64 socketBytesToWrite() const { return socket.bytesToWrite(); }

    void setReadBufferSize(int size);

signals:
    void infoHashReceived(const QByteArray &infoHash);
    void readyToTransfer();

    void choked();
    void unchoked();
    void interested();
    void notInterested();

    void piecesAvailable(const QBitArray &pieces);
    void blockRequested(int pieceIndex, int begin, int length);
    void blockReceived(int pieceIndex, int begin, const QByteArray &data);

    void bytesReceived(qint64 size);

protected slots:
    void connectToHostImplementation(const QString &hostName,
                                     quint16 port, OpenMode openMode = ReadWrite);
    void diconnectFromHostImplementation();

protected:
    void timerEvent(QTimerEvent *event);

    qint64 readData(char *data, qint64 maxlen);
    qint64 readLineData(char *data, qint64 maxlen);
    qint64 writeData(const char *data, qint64 len);

private slots:
    void sendHandShake();
    void processIncomingData();
    void socketStateChanged(QAbstractSocket::SocketState state);

private:
    // Data waiting to be read/written
    QByteArray incomingBuffer;
    QByteArray outgoingBuffer;

    struct BlockInfo {
        int pieceIndex;
        int offset;
        int length;
        QByteArray block;
    };
    QList<BlockInfo> pendingBlocks;
    int pendingBlockSizes;
    QList<TorrentBlock> incoming;

    enum PacketType {
        ChokePacket = 0,
        UnchokePacket = 1,
        InterestedPacket = 2,
        NotInterestedPacket = 3,
        HavePacket = 4,
        BitFieldPacket = 5,
        RequestPacket = 6,
        PiecePacket = 7,
        CancelPacket = 8
    };

    // State
    PeerWireState pwState;
    bool receivedHandShake;
    bool gotPeerId;
    bool sentHandShake;
    int nextPacketLength;

    // Upload/download speed records
    qint64 uploadSpeedData[8];
    qint64 downloadSpeedData[8];
    int transferSpeedTimer;

    // Timeout handling
    int timeoutTimer;
    int pendingRequestTimer;
    bool invalidateTimeout;
    int keepAliveTimer;

    // Checksum, peer ID and set of available pieces
    QByteArray infoHash;
    QByteArray peerIdString;
    QBitArray peerPieces;
    TorrentPeer *torrentPeer;

    QTcpSocket socket;
};

Q_DECLARE_OPERATORS_FOR_FLAGS(PeerWireClient::PeerWireState)

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合资源网| 亚洲精选在线视频| 欧美日韩久久一区| 91免费版在线看| 91免费精品国自产拍在线不卡| 高清不卡在线观看| 成人激情av网| 国产很黄免费观看久久| 国产iv一区二区三区| 成人综合婷婷国产精品久久| 豆国产96在线|亚洲| 26uuu精品一区二区在线观看| 一级日本不卡的影视| 91污在线观看| 北条麻妃国产九九精品视频| 不卡的av在线播放| 91在线视频免费观看| 色94色欧美sute亚洲13| 欧美电影一区二区| 精品国产污网站| 国产精品另类一区| 亚洲精品精品亚洲| 日韩av在线免费观看不卡| 久久机这里只有精品| 成人夜色视频网站在线观看| 91在线视频免费91| 在线不卡欧美精品一区二区三区| 精品久久五月天| 中文字幕制服丝袜一区二区三区 | www国产成人免费观看视频 深夜成人网 | 91麻豆蜜桃一区二区三区| 在线中文字幕一区| 欧美xxxxxxxxx| 亚洲四区在线观看| 久久精品国产亚洲一区二区三区 | eeuss影院一区二区三区| 欧美影院精品一区| 26uuu国产一区二区三区| 一区二区三区在线播| 九九视频精品免费| 欧美在线你懂得| 国产午夜精品在线观看| 亚洲国产一区二区三区| 福利一区二区在线观看| 欧美高清视频不卡网| 一区精品在线播放| 久久精品国产亚洲5555| 在线观看免费亚洲| 久久精品免视看| 视频一区二区欧美| 99国产精品视频免费观看| 欧美岛国在线观看| 亚洲一级二级三级| 99国产欧美久久久精品| 久久久久久久久久久久久女国产乱| 一区二区三区成人在线视频| 国产一区二区三区最好精华液| 在线观看日韩av先锋影音电影院| 国产欧美精品一区二区色综合| 丝袜a∨在线一区二区三区不卡 | av在线播放成人| 精品国产免费一区二区三区四区| 一区二区三区中文字幕| 粉嫩蜜臀av国产精品网站| 日韩精品一区二区三区swag| 亚洲妇熟xx妇色黄| 日本韩国一区二区三区| 国产精品无圣光一区二区| 国产一区在线不卡| 欧美一区二区不卡视频| 亚洲高清视频在线| 91传媒视频在线播放| 亚洲免费电影在线| 一本久道中文字幕精品亚洲嫩| 中文字幕一区在线观看| 懂色av一区二区在线播放| 精品国产乱码久久| 国产一本一道久久香蕉| www国产精品av| 国产一区二区三区不卡在线观看| 日韩久久精品一区| 久久成人综合网| 日韩精品一区二区三区三区免费 | 久久久99精品免费观看| 久久国产夜色精品鲁鲁99| 欧美国产成人精品| 久久99精品视频| 亚洲精品一区在线观看| 国产在线播精品第三| 久久精品夜色噜噜亚洲aⅴ| 国产精品自拍av| 欧美韩日一区二区三区| 99riav久久精品riav| 亚洲尤物视频在线| 欧美精品久久一区二区三区| 日日夜夜精品视频免费| 欧美videossexotv100| 国产美女视频91| 亚洲视频综合在线| 欧美日韩精品系列| 国产一区二区三区香蕉| 中文在线资源观看网站视频免费不卡| 成人av综合一区| 欧美精品一卡两卡| 亚洲精选视频免费看| 欧美日韩在线免费视频| 天天影视涩香欲综合网| 欧美精品一区二区三区蜜臀| 不卡一区二区三区四区| 舔着乳尖日韩一区| 亚洲国产精品高清| 欧美美女网站色| 成人精品一区二区三区四区| 一区二区不卡在线视频 午夜欧美不卡在| 欧美性大战久久久| 国产精品1区2区| 亚洲国产欧美在线| 国产天堂亚洲国产碰碰| 欧美午夜在线一二页| 国产凹凸在线观看一区二区| 亚洲福利电影网| 国产精品久久久久四虎| 91精品国产美女浴室洗澡无遮挡| 风间由美性色一区二区三区| 婷婷综合在线观看| 中文字幕一区二区三区乱码在线| 欧美一区二区三区四区视频 | 欧美午夜影院一区| 国产**成人网毛片九色 | 日韩精品一区国产麻豆| 99re视频精品| 国产福利一区二区三区在线视频| 亚洲一区在线观看免费观看电影高清 | 国产a级毛片一区| 午夜精品免费在线| 亚洲精品欧美二区三区中文字幕| 久久―日本道色综合久久| 欧美精品在线观看一区二区| 97se狠狠狠综合亚洲狠狠| 国产高清视频一区| 久久精品国产久精国产| 亚洲18色成人| 亚洲一区二区在线免费看| 国产精品国产自产拍在线| 26uuu精品一区二区三区四区在线| 欧美美女黄视频| 欧美日韩在线电影| 欧美色图在线观看| 色婷婷av一区二区三区gif| gogogo免费视频观看亚洲一| 成人精品一区二区三区四区| 国产精品一二三在| 国产电影一区二区三区| 国产精品综合二区| 粉嫩一区二区三区在线看| 国产一区二区美女诱惑| 国产中文字幕一区| 国产一区激情在线| 国产精品一二三| 不卡影院免费观看| 一本到三区不卡视频| 色综合久久中文字幕| 欧美午夜不卡在线观看免费| 欧美日韩大陆一区二区| 91精品综合久久久久久| 日韩精品一区二| 久久久久久久久久久久久女国产乱 | 亚洲欧美电影院| 亚洲人成伊人成综合网小说| 亚洲资源在线观看| 日韩国产高清影视| 国产综合久久久久影院| 成人免费电影视频| 日本丶国产丶欧美色综合| 欧美美女一区二区| 久久久久久久综合狠狠综合| 国产精品久久久久一区二区三区 | 亚洲一区二区三区四区在线观看| 亚洲成人精品在线观看| 日韩制服丝袜先锋影音| 国产一区日韩二区欧美三区| 成人免费不卡视频| 欧美日韩一卡二卡三卡| 久久综合狠狠综合久久综合88 | 欧美丰满少妇xxxxx高潮对白 | 欧美www视频| 久久久久久99精品| 亚洲另类春色国产| 久久精品噜噜噜成人av农村| 成人在线视频首页| 欧美日韩精品一区二区三区蜜桃| 日韩欧美在线123| 国产精品久久久久永久免费观看| 亚洲午夜精品网| 国产乱码一区二区三区| 欧美在线高清视频| 久久综合99re88久久爱| 夜夜爽夜夜爽精品视频| 国产精品一区一区| 欧美乱妇一区二区三区不卡视频|