Changeset 115


Ignore:
Timestamp:
01/03/07 14:12:41 (13 years ago)
Author:
Eoin
Message:

Ip filtering complete, releasing as v 0.2.8

Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • Halite.pnproj

    r113 r115  
    1 <Project name="Halite"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="res" path="res\"><File path="Halite.aps"></File><File path="Halite.ico"></File><File path="Halite.rc"></File><File path="Manifest.xml"></File><File path="resource.h"></File><File path="toolbar.bmp"></File></MagicFolder><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="src" path="src\"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="ini" path="ini\"><File path="BitTConfig.cpp"></File><File path="BitTConfig.hpp"></File><File path="Dialog.hpp"></File><File path="General.hpp"></File><File path="Remote.hpp"></File><File path="Splash.hpp"></File><File path="Window.hpp"></File></MagicFolder><File path="AdvHaliteDialog.cpp"></File><File path="AdvHaliteDialog.hpp"></File><File path="ConfigOptions.cpp"></File><File path="ConfigOptions.hpp"></File><File path="CSSFileDialog.hpp"></File><File path="DdxEx.hpp"></File><File path="DebugDialog.hpp"></File><File path="DropFileTarget.h"></File><File path="GlobalIni.cpp"></File><File path="GlobalIni.hpp"></File><File path="Halite.cpp"></File><File path="Halite.hpp"></File><File path="HaliteDialog.cpp"></File><File path="HaliteDialog.hpp"></File><File path="HaliteListViewCtrl.cpp"></File><File path="HaliteListViewCtrl.hpp"></File><File path="HaliteTabCtrl.hpp"></File><File path="HaliteWindow.cpp"></File><File path="HaliteWindow.hpp"></File><File path="halTorrent.cpp"></File><File path="halTorrent.hpp"></File><File path="halXmlRpc.cpp"></File><File path="halXmlRpc.hpp"></File><File path="NTray.cpp"></File><File path="NTray.hpp"></File><File path="SimpleHtml.h"></File><File path="SplashDialog.hpp"></File><File path="SSFileDialog.hpp"></File><File path="stdAfx.cpp"></File><File path="stdAfx.hpp"></File><File path="ThemeTestDialog.hpp"></File><File path="WinAPIMutex.hpp"></File></MagicFolder><File path="Jamfile"></File></Project> 
     1<Project name="Halite"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="res" path="res\"><File path="Halite.aps"></File><File path="Halite.ico"></File><File path="Halite.rc"></File><File path="Manifest.xml"></File><File path="resource.h"></File><File path="toolbar.bmp"></File></MagicFolder><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="src" path="src\"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="ini" path="ini\"><File path="BitTConfig.cpp"></File><File path="BitTConfig.hpp"></File><File path="Dialog.hpp"></File><File path="General.hpp"></File><File path="Remote.hpp"></File><File path="Splash.hpp"></File><File path="Window.hpp"></File></MagicFolder><File path="AdvHaliteDialog.cpp"></File><File path="AdvHaliteDialog.hpp"></File><File path="ConfigOptions.cpp"></File><File path="ConfigOptions.hpp"></File><File path="CSSFileDialog.hpp"></File><File path="DdxEx.hpp"></File><File path="DebugDialog.hpp"></File><File path="DropFileTarget.h"></File><File path="GlobalIni.cpp"></File><File path="GlobalIni.hpp"></File><File path="Halite.cpp"></File><File path="Halite.hpp"></File><File path="HaliteDialog.cpp"></File><File path="HaliteDialog.hpp"></File><File path="HaliteListViewCtrl.cpp"></File><File path="HaliteListViewCtrl.hpp"></File><File path="HaliteTabCtrl.hpp"></File><File path="HaliteWindow.cpp"></File><File path="HaliteWindow.hpp"></File><File path="halTorrent.cpp"></File><File path="halTorrent.hpp"></File><File path="halXmlRpc.cpp"></File><File path="halXmlRpc.hpp"></File><File path="NTray.cpp"></File><File path="NTray.hpp"></File><File path="ProgressDialog.hpp"></File><File path="SimpleHtml.h"></File><File path="SplashDialog.hpp"></File><File path="SSFileDialog.hpp"></File><File path="stdAfx.cpp"></File><File path="stdAfx.hpp"></File><File path="ThemeTestDialog.hpp"></File><File path="WinAPIMutex.hpp"></File></MagicFolder><File path="Jamfile"></File></Project> 
  • Jamfile

    r113 r115  
    1313        HaliteListViewCtrl.cpp 
    1414        HaliteDialog.cpp 
    15         AdvHaliteDialog.cpp 
     15#       AdvHaliteDialog.cpp 
    1616        ConfigOptions.cpp 
    1717        ini/BitTConfig.cpp 
     
    3333        advapi32 
    3434        gdi32    
    35         uxtheme  
     35#       uxtheme  
    3636        ; 
    3737 
     
    4242        <library>/boost/signals//boost_signals/<link>static 
    4343        <library>/boost/serialization//boost_serialization/<link>static 
     44        <library>/boost/regex//boost_regex/<link>static 
    4445#       <library>/http//http/<link>static 
    4546    <library>/libtorrent//torrent/<link>static 
  • res/Halite.rc

    r114 r115  
    117117// 
    118118 
    119 IDD_CONFIGREMOTE DIALOGEX 0, 0, 242, 94 
     119IDD_CONFIGREMOTE DIALOGEX 0, 0, 283, 94 
    120120STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    121121CAPTION "Remote Control" 
    122122FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    123123BEGIN 
    124     GROUPBOX        "Remote Control Options",IDC_STATIC,6,6,228,30 
     124    GROUPBOX        "Remote Control Options",IDC_STATIC,6,6,271,30 
    125125    CONTROL         "Enable Remote Control",IDC_REMOTECTRL,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,12,18,96,12 
    126     RTEXT           "Port to listen on : ",IDC_STATIC,114,19,66,11 
    127     EDITTEXT        IDC_REMOTEPORT,180,18,42,12,ES_AUTOHSCROLL | WS_DISABLED 
    128     LTEXT           "Disabled",IDC_STATIC,103,47,72,22 
     126    RTEXT           "Port to listen on : ",IDC_STATIC,159,19,66,11,WS_DISABLED 
     127    EDITTEXT        IDC_REMOTEPORT,229,18,42,12,ES_AUTOHSCROLL | WS_DISABLED 
     128    LTEXT           "*** Disabled ***",IDC_STATIC,104,19,59,11 
    129129END 
    130130 
     
    134134FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    135135BEGIN 
    136     GROUPBOX        "Global Options",IDC_STATIC,7,6,269,96 
    137     EDITTEXT        IDC_BC_MAXCONN,96,18,42,12,ES_AUTOHSCROLL 
    138     RTEXT           "Total max connections :",IDC_STATIC,12,20,78,12 
    139     RTEXT           "Total upload slots :",IDC_STATIC,12,33,78,12 
    140     EDITTEXT        IDC_BC_MAXUP,96,31,42,12,ES_AUTOHSCROLL 
    141     RTEXT           "Attempt to  listen on a port number from",IDC_STATIC,14,50,130,12 
    142     RTEXT           "to",IDC_STATIC,204,50,9,10 
    143     EDITTEXT        IDC_BC_PORTFROM,150,48,54,12,ES_AUTOHSCROLL 
    144     EDITTEXT        IDC_BC_PORTTO,216,48,54,12,ES_AUTOHSCROLL 
    145     EDITTEXT        IDC_BC_DOWNRATE,228,18,42,12,ES_AUTOHSCROLL 
    146     RTEXT           "Download Rate (kb/s) :",IDC_STATIC,144,20,78,12 
    147     RTEXT           "Upload Rate (kb/s) :",IDC_STATIC,150,33,72,12 
    148     EDITTEXT        IDC_BC_UPRATE,228,31,42,12,ES_AUTOHSCROLL 
     136    GROUPBOX        "Global Options",IDC_STATIC,6,6,271,93 
     137    EDITTEXT        IDC_BC_MAXCONN,95,18,42,12,ES_AUTOHSCROLL 
     138    RTEXT           "Total max connections :",IDC_STATIC,11,20,78,12 
     139    RTEXT           "Total upload slots :",IDC_STATIC,11,33,78,12 
     140    EDITTEXT        IDC_BC_MAXUP,95,31,42,12,ES_AUTOHSCROLL 
     141    RTEXT           "Attempt to  listen on a port number from",IDC_STATIC,12,50,130,12 
     142    RTEXT           "to",IDC_STATIC,203,50,9,10 
     143    EDITTEXT        IDC_BC_PORTFROM,147,48,54,12,ES_AUTOHSCROLL 
     144    EDITTEXT        IDC_BC_PORTTO,217,48,54,12,ES_AUTOHSCROLL 
     145    EDITTEXT        IDC_BC_DOWNRATE,229,18,42,12,ES_AUTOHSCROLL 
     146    RTEXT           "Download Rate (kb/s) :",IDC_STATIC,145,20,78,12 
     147    RTEXT           "Upload Rate (kb/s) :",IDC_STATIC,151,33,72,12 
     148    EDITTEXT        IDC_BC_UPRATE,229,31,42,12,ES_AUTOHSCROLL 
    149149    CONTROL         "Enable DHT. (Note neither DHT nor PEX will apply to private torrents)",IDC_BC_DHT, 
    150                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,66,252,12 
    151     CONTROL         "Enable IP filtering.",IDC_BC_FILTERCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,80,76,12 
    152     RTEXT           "ipfilter.dat file :",IDC_BC_FILTERSTATIC,90,82,54,12,WS_DISABLED 
    153     EDITTEXT        IDC_BC_FILTEREDIT,150,80,96,12,ES_AUTOHSCROLL 
    154     PUSHBUTTON      "...",IDC_BC_FILTERBTN,252,80,18,12,WS_DISABLED 
    155 END 
    156  
    157 IDD_ABOUT DIALOGEX 0, 0, 242, 115 
     150                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,66,252,12 
     151    CONTROL         "Enable IP filtering.",IDC_BC_FILTERCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,81,76,12 
     152    PUSHBUTTON      "Import ipfilter.dat",IDC_BC_FILTERLOAD,196,80,75,14,WS_DISABLED 
     153    PUSHBUTTON      "Clear IP database",IDC_BC_FILTERCLEAR,115,80,75,14,WS_DISABLED 
     154END 
     155 
     156IDD_ABOUT DIALOGEX 0, 0, 283, 125 
    158157STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    159158CAPTION "About" 
    160159FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    161160BEGIN 
    162     GROUPBOX        "Program Information",IDC_STATIC,5,7,230,101 
    163     LTEXT           "Halite is a BitTorrent client based on the excellent libtorrent library written by Arvid Norberg of Rasterbar Software. The program is written in C++ and is open sourced under a BSD and/or Boost software licence.",IDC_STATIC,12,18,216,33 
    164     LTEXT           "Some important acknowledgements to the authors whose work contributed to Halite; Arvid Norbery for libTorrent, Christopher Kohlhoff for Boost.ASIO and Paul Davey (mattahan) for the icon.",IDC_STATIC,12,56,216,25 
    165     RTEXT           "Alpha release v 0.2.7, Revision 107.",IDC_STATIC,103,96,129,9 
    166 END 
    167  
    168 IDD_HALITEDLG DIALOGEX 0, 0, 318, 73 
     161    GROUPBOX        "Program Information",IDC_STATIC,5,7,271,111 
     162    LTEXT           "Halite is a BitTorrent client based on the excellent libtorrent library written by Arvid Norberg of Rasterbar Software. The program is written in C++ and is open sourced under a MIT and/or Boost software licence.",IDC_STATIC,12,18,257,27 
     163    LTEXT           "This project has only been possible thanks to othes. I'd like to acknowledge some of those people.",IDC_STATIC,12,47,257,18 
     164    RTEXT           "Release v 0.2.8, Revision 107.",IDC_STATIC,145,106,129,9 
     165    LTEXT           "nudone (Nick Pearson) - wtfcody.com / nudsville.com - Designed the Icon.",IDC_STATIC,12,91,257,11 
     166    LTEXT           "Arvid Norberg - www.rasterbar.com - Author of the libtorrent library.",IDC_STATIC,12,68,257,11 
     167    LTEXT           "Christopher Kohlhoff - asio.sourceforge.net - Author of Boost.ASIO.",IDC_STATIC,12,80,257,11 
     168END 
     169 
     170IDD_HALITEDLG DIALOGEX 0, 0, 362, 73 
    169171STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD 
    170172FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    171173BEGIN 
    172     DEFPUSHBUTTON   "Pause",BTNPAUSE,262,3,51,14 
    173     CONTROL         "",TORRENTPROG,"msctls_progress32",WS_BORDER,4,52,309,8 
    174     PUSHBUTTON      "Reannounce",BTNREANNOUNCE,262,19,51,14 
    175     PUSHBUTTON      "Remove",BTNREMOVE,262,35,51,14 
     174    DEFPUSHBUTTON   "Pause",BTNPAUSE,306,3,51,14 
     175    CONTROL         "",TORRENTPROG,"msctls_progress32",WS_BORDER,4,52,353,8 
     176    PUSHBUTTON      "Reannounce",BTNREANNOUNCE,306,19,51,14 
     177    PUSHBUTTON      "Remove",BTNREMOVE,306,35,51,14 
    176178    RTEXT           "Name:",IDC_STATIC,8,3,30,8 
    177179    LTEXT           "N/A",IDC_AVAIL,40,39,36,8,SS_ENDELLIPSIS 
     
    179181    RTEXT           "Time left:",IDC_STATIC,2,39,36,8 
    180182    RTEXT           "Tracker:",IDC_STATIC,8,15,30,8 
    181     LTEXT           "N/A",IDC_STATUS,40,27,136,8,SS_ENDELLIPSIS 
    182     LTEXT           "N/A",IDC_TRACKER,40,15,136,8,SS_PATHELLIPSIS 
    183     LTEXT           "N/A",IDC_NAME,40,3,136,10,SS_ENDELLIPSIS 
    184     CONTROL         "",LISTPEERS,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,4,64,309,6 
    185     EDITTEXT        IDC_EDITTLU,229,36,27,12,ES_AUTOHSCROLL 
    186     EDITTEXT        IDC_EDITTLD,189,36,27,12,ES_AUTOHSCROLL 
    187     EDITTEXT        IDC_EDITNCD,189,12,28,12,ES_AUTOHSCROLL 
    188     EDITTEXT        IDC_EDITNCU,229,12,27,12,ES_AUTOHSCROLL 
    189     RTEXT           "Max connection Limits:",IDC_NC,178,3,73,8 
    190     RTEXT           "Transfer rates (kb/s):",IDC_TL,178,27,70,8 
    191     RTEXT           "T",IDC_NCD,179,15,8,8 
    192     RTEXT           "U",IDC_NCU,218,15,8,8 
    193     RTEXT           "U",IDC_TLU,218,39,8,8 
    194     RTEXT           "D",IDC_TLD,179,39,8,8 
    195     RTEXT           "Completed:",IDC_STATIC,75,39,39,8 
    196     LTEXT           "N/A",IDC_COMPLETE,116,39,59,8,SS_PATHELLIPSIS 
    197     GROUPBOX        "",IDC_DETAILS_GROUP,1,-4,315,77,0,WS_EX_TRANSPARENT 
     183    LTEXT           "N/A",IDC_STATUS,40,27,145,8,SS_ENDELLIPSIS 
     184    LTEXT           "N/A",IDC_TRACKER,40,15,144,8,SS_PATHELLIPSIS 
     185    LTEXT           "N/A",IDC_NAME,40,3,144,10,SS_ENDELLIPSIS 
     186    CONTROL         "",LISTPEERS,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,4,64,353,6 
     187    EDITTEXT        IDC_EDITTLU,267,36,34,12,ES_AUTOHSCROLL 
     188    EDITTEXT        IDC_EDITTLD,216,36,34,12,ES_AUTOHSCROLL 
     189    EDITTEXT        IDC_EDITNCD,216,12,34,12,ES_AUTOHSCROLL 
     190    EDITTEXT        IDC_EDITNCU,267,12,34,12,ES_AUTOHSCROLL 
     191    LTEXT           "Torrent connection limits:",IDC_NC,192,3,82,8 
     192    LTEXT           "Torrent transfer rates (kb/s):",IDC_TL,192,27,97,8 
     193    RTEXT           "Total",IDC_NCD,192,15,18,8 
     194    RTEXT           "Up",IDC_NCU,251,15,12,8 
     195    RTEXT           "Up",IDC_TLU,252,39,11,8 
     196    RTEXT           "Down",IDC_TLD,192,39,20,8 
     197    RTEXT           "Completed:",IDC_STATIC,84,39,39,8 
     198    LTEXT           "N/A",IDC_COMPLETE,125,39,59,8,SS_WORDELLIPSIS 
     199    GROUPBOX        "",IDC_DETAILS_GROUP,1,-4,359,77,0,WS_EX_TRANSPARENT 
    198200END 
    199201 
     
    204206FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    205207BEGIN 
    206     ICON            IDR_APP_ICON,IDC_STATIC,7,10,21,20 
     208    ICON            IDR_APP_ICON,IDC_STATIC,7,10,20,20 
    207209    LTEXT           "It will take the BitTorrent session a moment to shutdown cleanly after which this message will disappear and the program will close.",IDC_STATIC,35,7,149,27 
    208     CONTROL         "Show this message in future.",IDC_SPLASH_MSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,77,35,107,12 
     210    CONTROL         "Show this message in future",IDC_SPLASH_MSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,83,35,101,12 
    209211END 
    210212 
     
    233235END 
    234236 
    235 IDD_CONFIGGENERAL DIALOGEX 0, 0, 242, 90 
     237IDD_CONFIGGENERAL DIALOGEX 0, 0, 283, 90 
    236238STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    237239CAPTION "General" 
     
    240242    CONTROL         "Allow only one instance to run.",IDC_GENERAL_ONEINST, 
    241243                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,16,114,14 
    242     GROUPBOX        "General Settings",IDC_STATIC,7,6,228,77 
    243     CONTROL         "Advanced GUI",IDC_GENERAL_ADVGUI,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,14,29,118,14 
    244     CONTROL         "Minimize to tray.",IDC_GENERAL_TRAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,131,16,98,14 
     244    GROUPBOX        "General Settings",IDC_STATIC,7,6,271,77 
     245    CONTROL         "Advanced GUI",IDC_GENERAL_ADVGUI,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,14,42,118,14 
     246    CONTROL         "Minimize to tray.",IDC_GENERAL_TRAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,29,98,14 
    245247END 
    246248 
     
    268270END 
    269271 
     272IDD_PROGRESS DIALOGEX 0, 0, 191, 46 
     273STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION 
     274EXSTYLE WS_EX_TOOLWINDOW | WS_EX_STATICEDGE 
     275CAPTION "Halite importing IP ranges..." 
     276FONT 8, "MS Shell Dlg", 400, 0, 0x1 
     277BEGIN 
     278    CONTROL         "",IDC_PROG_PROGRESS,"msctls_progress32",WS_BORDER,6,6,180,12 
     279    PUSHBUTTON      "Cancel",IDC_PROG_CANCEL,60,24,66,15 
     280END 
     281 
    270282 
    271283#ifdef APSTUDIO_INVOKED 
     
    313325    BEGIN 
    314326        LEFTMARGIN, 7 
    315         RIGHTMARGIN, 235 
     327        RIGHTMARGIN, 277 
    316328        TOPMARGIN, 7 
    317329        BOTTOMMARGIN, 87 
     
    320332    IDD_CONFIGBIT, DIALOG 
    321333    BEGIN 
     334        LEFTMARGIN, 6 
     335        RIGHTMARGIN, 277 
     336        TOPMARGIN, 7 
     337        BOTTOMMARGIN, 124 
     338    END 
     339 
     340    IDD_ABOUT, DIALOG 
     341    BEGIN 
    322342        LEFTMARGIN, 7 
    323343        RIGHTMARGIN, 276 
    324344        TOPMARGIN, 7 
    325         BOTTOMMARGIN, 124 
    326     END 
    327  
    328     IDD_ABOUT, DIALOG 
    329     BEGIN 
    330         LEFTMARGIN, 7 
    331         RIGHTMARGIN, 235 
    332         TOPMARGIN, 7 
    333         BOTTOMMARGIN, 108 
     345        BOTTOMMARGIN, 118 
     346    END 
     347 
     348    IDD_HALITEDLG, DIALOG 
     349    BEGIN 
     350        RIGHTMARGIN, 361 
    334351    END 
    335352 
     
    353370    BEGIN 
    354371        LEFTMARGIN, 7 
    355         RIGHTMARGIN, 235 
     372        RIGHTMARGIN, 278 
    356373        TOPMARGIN, 7 
    357374        BOTTOMMARGIN, 83 
     
    372389        TOPMARGIN, 3 
    373390        BOTTOMMARGIN, 102 
     391    END 
     392 
     393    IDD_PROGRESS, DIALOG 
     394    BEGIN 
     395        LEFTMARGIN, 7 
     396        RIGHTMARGIN, 184 
     397        TOPMARGIN, 7 
     398        BOTTOMMARGIN, 39 
    374399    END 
    375400END 
     
    412437STRINGTABLE  
    413438BEGIN 
    414     IDPANE_STATUS           "(D-U) 000.00kb/s - 000.00kb/s" 
     439    IDPANE_STATUS           "(D-U) 00.00kb/s - 00.00kb/s" 
    415440    IDPANE_CAPS_INDICATOR   "CAPS" 
    416     IDPANE_DHT              "DHT disabled, 100 nodes tracking 100 torrents." 
     441    IDPANE_DHT              "0 DHT node(s) tracking 0 torrent(s)" 
     442END 
     443 
     444STRINGTABLE  
     445BEGIN 
     446    IDPANE_FILTER           "Filtering 000000 ranges." 
    417447END 
    418448 
  • res/resource.h

    r114 r115  
    1414#define IDPANE_DHT                      111 
    1515#define IDD_CONFIGGENERAL               112 
     16#define IDPANE_FILTER                   112 
    1617#define IDD_ADVHALITEDLG                114 
    1718#define IDI_ICON1                       114 
     
    2021#define IDD_THEMETEST                   115 
    2122#define IDD_DEBUGDIALOG                 116 
     23#define IDD_PROGRESS                    117 
    2224#define IDR_MAINFRAME                   128 
    2325#define LISTPEERS                       1000 
     
    7375#define IDC_RADIO1                      1046 
    7476#define IDC_BC_DHT                      1048 
     77#define IDC_PROG_PROGRESS               1048 
    7578#define IDC_BC_FILTERCHECK              1049 
     79#define IDC_PROG_CANCEL                 1049 
    7680#define IDC_BC_FILTERSTATIC             1050 
     81#define IDC_BC_FILTERSTAT               1050 
    7782#define IDC_BC_FILTEREDIT               1051 
    7883#define IDC_BC_FILTERBTN                1052 
     84#define IDC_BC_FILTERLOAD               1052 
     85#define IDC_BC_FILTERCLEAR              1053 
    7986#define ED_CON                          3000 
    8087#define ID_ABOUT_OPENHALITE             40001 
  • src/CSSFileDialog.hpp

    r88 r115  
     1 
     2#pragma once 
     3 
    14/** 
    25 * @class CSSFileDialog 
  • src/ConfigOptions.cpp

    r70 r115  
    11 
    22#include "ConfigOptions.hpp" 
     3#include "ProgressDialog.hpp" 
    34 
     5void BitTorrentOptions::onFilterImport(UINT, int, HWND hWnd) 
     6{ 
     7        CSSFileDialog dlgOpen(TRUE, NULL, NULL, OFN_HIDEREADONLY, L"eMule ipfilter.dat. (*.dat)|*.dat|", m_hWnd); 
     8         
     9        if (dlgOpen.DoModal() == IDOK)  
     10        { 
     11                ProgressDialog progDlg(L"Importing IP filters...", bind( 
     12                        &halite::BitTorrent::ip_filter_import_dat, &halite::bittorrent(), path(wcstombs(dlgOpen.m_ofn.lpstrFile)), _1, true)); 
     13                progDlg.DoModal(); 
     14        } 
     15}        
     16 
  • src/ConfigOptions.hpp

    r109 r115  
    33  
    44#include "stdAfx.hpp" 
     5#include "Halite.hpp" 
    56#include "DdxEx.hpp" 
     7#include "CSSFileDialog.hpp" 
    68 
    79#include "ini/Window.hpp" 
     
    6163    BEGIN_MSG_MAP(BitTorrentOptions) 
    6264        MSG_WM_INITDIALOG(OnInitDialog) 
    63                 COMMAND_ID_HANDLER_EX(IDC_BC_FILTERBTN, onFilterBtn) 
     65                COMMAND_ID_HANDLER_EX(IDC_BC_FILTERLOAD, onFilterImport) 
     66                COMMAND_ID_HANDLER_EX(IDC_BC_FILTERCLEAR, onFilterClear) 
    6467                COMMAND_ID_HANDLER_EX(IDC_BC_FILTERCHECK, onFilterCheck)         
    6568        CHAIN_MSG_MAP(CPropertyPageImpl<BitTorrentOptions>) 
     
    7578        DDX_CHECK(IDC_BC_DHT, INI().bitTConfig().enableDHT) 
    7679        DDX_CHECK(IDC_BC_FILTERCHECK, INI().bitTConfig().enableIPFilter) 
    77                 DDX_EX_STDWSTRING(IDC_BC_FILTEREDIT, INI().bitTConfig().ipFilterFile); 
    7880    END_DDX_MAP() 
    7981  
    8082    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam) 
    8183        { 
    82                 BOOL retval =  DoDataExchange(false); 
    83                  
    84                 LRESULT result = ::SendMessage(GetDlgItem(IDC_BC_FILTERCHECK), BM_GETCHECK, 0, 0); 
     84                BOOL retval =  DoDataExchange(false);    
     85                 
     86                onFilterCheck(0, 0, GetDlgItem(IDC_BC_FILTERCHECK)); 
     87                 
     88                return retval; 
     89        } 
     90         
     91    int OnApply() 
     92        { 
     93                return DoDataExchange(true); 
     94        } 
     95         
     96        void onFilterCheck(UINT, int, HWND hWnd) 
     97        { 
     98                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0); 
    8599                 
    86100                if (result == BST_CHECKED) 
    87101                { 
    88                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERSTATIC), true); 
    89                         ::EnableWindow(GetDlgItem(IDC_BC_FILTEREDIT), true); 
    90                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERBTN), true); 
     102                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERCLEAR), true); 
     103                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERLOAD), true); 
    91104                } 
    92105                else 
    93106                { 
    94                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERSTATIC), false); 
    95                         ::EnableWindow(GetDlgItem(IDC_BC_FILTEREDIT), false); 
    96                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERBTN), false);             
    97                 } 
    98                  
    99                 return retval; 
    100         } 
    101          
    102     int OnApply() 
    103         { 
    104                 return DoDataExchange(true); 
    105         } 
    106          
    107         void onFilterCheck(UINT, int, HWND hWnd) 
    108         { 
    109                 LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0); 
    110                  
    111                 if (result == BST_CHECKED) 
    112                 { 
    113                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERSTATIC), true); 
    114                         ::EnableWindow(GetDlgItem(IDC_BC_FILTEREDIT), true); 
    115                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERBTN), true); 
    116                 } 
    117                 else 
    118                 { 
    119                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERSTATIC), false); 
    120                         ::EnableWindow(GetDlgItem(IDC_BC_FILTEREDIT), false); 
    121                         ::EnableWindow(GetDlgItem(IDC_BC_FILTERBTN), false);             
     107                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERCLEAR), false); 
     108                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERLOAD), false);            
    122109                } 
    123110        }        
    124111         
    125         void onFilterBtn(UINT, int, HWND hWnd) 
    126         { 
    127                 CSSFileDialog dlgOpen(TRUE, NULL, NULL, OFN_HIDEREADONLY, L"eMule ipfilter.dat. (*.dat)|*.dat|", m_hWnd); 
    128          
    129                 if (dlgOpen.DoModal() == IDOK)  
    130                         SetDlgItemText(IDC_BC_FILTEREDIT, dlgOpen.m_ofn.lpstrFile);      
    131         }        
     112        void onFilterClear(UINT, int, HWND hWnd) 
     113        { 
     114                halite::bittorrent().clearIpFilter(); 
     115        } 
     116         
     117        void onFilterImport(UINT, int, HWND hWnd); 
    132118}; 
    133119 
  • src/HaliteWindow.cpp

    r114 r115  
    1111#include "HaliteListViewCtrl.hpp" 
    1212#include "HaliteDialog.hpp" 
    13 #include "AdvHaliteDialog.hpp" 
     13//#include "AdvHaliteDialog.hpp" 
    1414 
    1515#include "ConfigOptions.hpp" 
     
    5252        UIAddStatusBar(m_hWndStatusBar); 
    5353         
    54         int panes[] = {ID_DEFAULT_PANE, IDPANE_DHT, IDPANE_STATUS}; 
    55         m_StatusBar.SetPanes(panes, 3, false); 
     54        int panes[] = {ID_DEFAULT_PANE, IDPANE_FILTER, IDPANE_DHT, IDPANE_STATUS}; 
     55        m_StatusBar.SetPanes(panes, 4, false); 
    5656         
    5757        // Create the Splitter Control 
     
    7070        mp_dlg->ShowWindow(true); 
    7171         
    72         mp_advDlg.reset(new AdvHaliteDialog(this)); 
    73         mp_advDlg->Create(m_Split.m_hWnd); 
     72//      mp_advDlg.reset(new AdvHaliteDialog(this)); 
     73//      mp_advDlg->Create(m_Split.m_hWnd); 
    7474//      mp_advDlg->ShowWindow(true); 
    7575         
     
    117117        halite::SessionDetail details = halite::bittorrent().getSessionDetails(); 
    118118         
    119         int port = halite::bittorrent().isListeningOn(); 
    120         if (port > -1) 
    121         { 
     119        if (details.port > -1) 
    122120                UISetText(0,  
    123                         (wformat(L"Listening on port %1%") % port ).str().c_str());      
    124         } 
     121                        (wformat(L"Port %1% open") % details.port ).str().c_str());      
    125122        else 
    126                 UISetText(0,L"Halite not listening, try adjusting the port range"); 
    127          
    128         pair<double, double> speed = halite::bittorrent().sessionSpeed(); 
     123                UISetText(0,L"Halite not listening!"); 
     124         
    129125        wstring downloadRates = (wformat(L"(D-U) %1$.2fkb/s - %2$.2fkb/s")  
    130                         % (speed.first/1024)  
    131                         % (speed.second/1024)).str(); 
    132          
    133         UISetText(2, downloadRates.c_str());     
     126                        % (details.speed.first/1024)  
     127                        % (details.speed.second/1024)).str(); 
     128         
     129        UISetText(3, downloadRates.c_str());     
    134130        m_trayIcon.SetTooltipText(downloadRates.c_str()); 
    135131         
    136132        if (details.dht_on) 
    137133        { 
    138                 wstring dht = (wformat(L"DHT enabled, %1% nodes tracking %2% torrents") 
     134                wstring dht = (wformat(L"%1% DHT node(s) tracking %2% torrent(s)") 
    139135                        % details.dht_nodes % details.dht_torrents).str(); 
    140136                         
    141                 UISetText(1, dht.c_str()); 
     137                UISetText(2, dht.c_str()); 
    142138        } 
    143139        else 
    144140        { 
    145                 UISetText(1, L"DHT disabled"); 
     141                UISetText(2, L"DHT disabled"); 
     142        } 
     143         
     144        if (details.ip_filter_on) 
     145        { 
     146                wstring filter = (wformat(L"Filtering %1% range(s)") 
     147                        % details.ip_ranges_filtered).str(); 
     148                 
     149                UISetText(1, filter.c_str()); 
     150        } 
     151        else 
     152        { 
     153                UISetText(1, L"IP filter disabled"); 
    146154        } 
    147155} 
     
    180188        { 
    181189         
    182         // Big changes due here relating to custom savedirectory. 
     190        path saveDirectory(globalModule().exePath().branch_path()/"incoming"); 
     191        CFolderDialog fldDlg ( NULL, _T("Select a directory to save the downloads to. Select cancel to accept default \'%program directory%\\incoming\' location"), 
     192                       BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE ); 
     193  
     194        if (IDOK == fldDlg.DoModal()) 
     195                saveDirectory = path(wcstombs(fldDlg.m_szFolderPath)); 
    183196         
    184197        path file(wcstombs(lpszPath), boost::filesystem::native);        
    185         halite::bittorrent().addTorrent(file, globalModule().exePath().branch_path()/"incoming"); 
     198        halite::bittorrent().addTorrent(file, saveDirectory); 
    186199 
    187200        ui().update(); 
  • src/HaliteWindow.hpp

    r113 r115  
    1010class HaliteListViewCtrl; 
    1111class HaliteDialog; 
    12 class AdvHaliteDialog; 
     12//class AdvHaliteDialog; 
    1313 
    1414class ui_signal : noncopyable 
     
    5656                COMMAND_ID_HANDLER(ID_HELP, OnHelp) 
    5757                COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar) 
     58                 
    5859                COMMAND_ID_HANDLER(ID_TRAY_OPENHALITE, OnTrayOpenHalite) 
     60                COMMAND_ID_HANDLER(ID_TRAY_RESUMEALL, OnResumeAll) 
     61                COMMAND_ID_HANDLER(ID_TRAY_PAUSEALL, OnPauseAll) 
    5962                COMMAND_ID_HANDLER(ID_TRAY_EXIT, OnTrayExit) 
    6063                 
     
    7376        UPDATE_ELEMENT(1, UPDUI_STATUSBAR) 
    7477        UPDATE_ELEMENT(2, UPDUI_STATUSBAR) 
     78        UPDATE_ELEMENT(3, UPDUI_STATUSBAR) 
    7579        END_UPDATE_UI_MAP() 
    7680         
     
    126130        boost::shared_ptr<HaliteListViewCtrl> mp_list; 
    127131        boost::scoped_ptr<HaliteDialog> mp_dlg; 
    128         boost::scoped_ptr<AdvHaliteDialog> mp_advDlg; 
     132//      boost::scoped_ptr<AdvHaliteDialog> mp_advDlg; 
    129133 
    130134        ui_signal ui_; 
  • src/halTorrent.cpp

    r114 r115  
    77#include <iomanip> 
    88#include <map> 
     9#include <algorithm> 
    910 
    1011#include <boost/bind.hpp> 
    1112#include <boost/array.hpp> 
     13#include <boost/regex.hpp> 
     14#include <boost/lambda/lambda.hpp> 
     15#include <boost/archive/text_oarchive.hpp> 
     16#include <boost/archive/text_iarchive.hpp> 
     17#include <boost/archive/binary_oarchive.hpp> 
     18#include <boost/archive/binary_iarchive.hpp> 
    1219#include <boost/archive/xml_oarchive.hpp> 
    1320#include <boost/archive/xml_iarchive.hpp> 
     21#include <boost/serialization/vector.hpp> 
    1422#include <boost/serialization/map.hpp> 
    1523#include <boost/serialization/split_free.hpp> 
     
    2028#include <libtorrent/bencode.hpp> 
    2129#include <libtorrent/session.hpp> 
     30#include <libtorrent/ip_filter.hpp> 
    2231#include <libtorrent/torrent_handle.hpp> 
    2332#include <libtorrent/peer_connection.hpp> 
    2433 
    2534#include "halTorrent.hpp" 
     35 
     36namespace boost { 
     37namespace serialization { 
     38 
     39#define IP_SAVE  3 
     40 
     41template<class Archive, class address_type> 
     42void save(Archive& ar, const address_type& ip, const unsigned int version) 
     43{        
     44#if IP_SAVE == 1 
     45        typename address_type::bytes_type bytes = ip.to_bytes();         
     46        for (typename address_type::bytes_type::iterator i=bytes.begin(); i != bytes.end(); ++i) 
     47                ar & BOOST_SERIALIZATION_NVP(*i); 
     48#elif IP_SAVE == 2 
     49        string dotted = ip.to_string();  
     50        ar & BOOST_SERIALIZATION_NVP(dotted); 
     51#elif IP_SAVE == 3 
     52        unsigned long addr = ip.to_ulong();      
     53        ar & BOOST_SERIALIZATION_NVP(addr); 
     54#endif 
     55} 
     56 
     57template<class Archive, class address_type> 
     58void load(Archive& ar, address_type& ip, const unsigned int version) 
     59{        
     60#if IP_SAVE == 1 
     61        typename address_type::bytes_type bytes;         
     62        for (typename address_type::bytes_type::iterator i=bytes.begin(); i != bytes.end(); ++i) 
     63                ar & BOOST_SERIALIZATION_NVP(*i); 
     64         
     65        ip = address_type(bytes); 
     66#elif IP_SAVE == 2       
     67        string dotted; 
     68        ar & BOOST_SERIALIZATION_NVP(dotted); 
     69         
     70        ip = address_type::from_string(dotted); 
     71#elif IP_SAVE == 3 
     72        unsigned long addr; 
     73        ar & BOOST_SERIALIZATION_NVP(addr); 
     74         
     75        ip = address_type(addr); 
     76//              ::MessageBoxA(0, (format("%1%: %2%")  
     77//                      % ip.to_string() % addr).str().c_str(), "Load ipfilter!", 0); 
     78 
     79#endif 
     80} 
     81 
     82template<class Archive, class address_type> 
     83void serialize(Archive& ar, libtorrent::ip_range<address_type>& addr, const unsigned int version) 
     84{        
     85        ar & BOOST_SERIALIZATION_NVP(addr.first); 
     86        ar & BOOST_SERIALIZATION_NVP(addr.last); 
     87        addr.flags = libtorrent::ip_filter::blocked; 
     88} 
     89 
     90} // namespace serialization 
     91} // namespace boost 
     92 
     93BOOST_SERIALIZATION_SPLIT_FREE(asio::ip::address_v4) 
     94BOOST_SERIALIZATION_SPLIT_FREE(asio::ip::address_v6) 
     95 
     96namespace libtorrent 
     97{ 
     98template<class Addr> 
     99bool operator==(const libtorrent::ip_range<Addr>& lhs, const int flags) 
     100{ 
     101        return (lhs.flags == flags); 
     102} 
     103 
     104std::ostream& operator<<(std::ostream& os, libtorrent::ip_range<asio::ip::address_v4>& ip) 
     105{ 
     106        os << ip.first.to_ulong(); 
     107        os << ip.last.to_ulong(); 
     108         
     109        return os; 
     110} 
     111 
     112} 
    26113 
    27114namespace halite  
     
    260347} 
    261348 
     349template<typename Addr> 
     350void write_range(fs::ofstream& ofs, const lbt::ip_range<Addr>& range) 
     351{  
     352        const typename Addr::bytes_type first = range.first.to_bytes(); 
     353        const typename Addr::bytes_type last = range.last.to_bytes(); 
     354        ofs.write((char*)first.elems, first.size()); 
     355        ofs.write((char*)last.elems, last.size()); 
     356} 
     357 
     358template<typename Addr> 
     359void write_vec_range(fs::ofstream& ofs, const std::vector<lbt::ip_range<Addr> >& vec) 
     360{  
     361        ofs << vec.size(); 
     362         
     363        for (typename std::vector<lbt::ip_range<Addr> >::const_iterator i=vec.begin();  
     364                i != vec.end(); ++i) 
     365        { 
     366                write_range(ofs, *i); 
     367        } 
     368} 
     369 
     370template<typename Addr> 
     371void read_range_to_filter(fs::ifstream& ifs, lbt::ip_filter& ip_filter) 
     372{  
     373        typename Addr::bytes_type first; 
     374        typename Addr::bytes_type last; 
     375        ifs.read((char*)first.elems, first.size()); 
     376        ifs.read((char*)last.elems, last.size());        
     377         
     378        ip_filter.add_rule(Addr(first), Addr(last), 
     379                lbt::ip_filter::blocked); 
     380} 
     381 
    262382class BitTorrent_impl 
    263383{ 
     
    269389                try 
    270390                { 
    271                         boost::filesystem::ofstream ofs(workingDirectory/"Torrents.xml"); 
    272                         boost::archive::xml_oarchive oa(ofs); 
     391                {       fs::ofstream ofs(workingDirectory/"Torrents.xml"); 
     392                        boost::archive::xml_oarchive oxa(ofs); 
    273393                         
    274                         oa << make_nvp("torrents", torrents); 
    275                         return; 
     394                        oxa << make_nvp("torrents", torrents); 
     395                }        
     396                if (dht_on_)  
     397                {        
     398                        halencode(workingDirectory/"DHTState.bin", theSession.dht_state()); 
    276399                } 
    277                 catch(const std::exception&) 
     400                if (ip_filter_changed_) 
     401                {        
     402                        fs::ofstream ofs(workingDirectory/"IPFilter.bin", std::ios::binary); 
     403//                      boost::archive::binary_oarchive oba(ofs); 
     404                         
     405                        lbt::ip_filter::filter_tuple_t vectors = ip_filter_.export_filter();     
     406                         
     407                        std::vector<lbt::ip_range<asio::ip::address_v4> > v4(vectors.get<0>()); 
     408                        std::vector<lbt::ip_range<asio::ip::address_v6> > v6(vectors.get<1>()); 
     409                         
     410                        v4.erase(std::remove(v4.begin(), v4.end(), 0), v4.end()); 
     411                        v6.erase(std::remove(v6.begin(), v6.end(), 0), v6.end()); 
     412 
     413                        write_vec_range(ofs, v4); 
     414//                      write_vec_range(ofs, v6); 
     415                }        
     416                } 
     417                catch(std::exception& e) 
    278418                { 
    279                         return; 
    280                 }        
     419                        ::MessageBox(0, (wformat(L"Save data exception: %1%") % e.what()).str().c_str(), L"Exception", 0); 
     420                } 
    281421        } 
    282422         
     
    285425                theSession(lbt::fingerprint("HL", 0, 2, 0, 8)), 
    286426                workingDirectory(globalModule().exePath().branch_path()), 
     427                ip_filter_on_(false), 
     428                ip_filter_loaded_(false), 
     429                ip_filter_changed_(false), 
     430                ip_filter_count_(0), 
    287431                dht_on_(false) 
    288432        { 
    289                 boost::filesystem::ifstream ifs(workingDirectory/"Torrents.xml"); 
     433        {       fs::ifstream ifs(workingDirectory/"Torrents.xml"); 
    290434                if (ifs) 
    291435                { 
    292                         boost::archive::xml_iarchive ia(ifs); 
    293                          
     436                        boost::archive::xml_iarchive ia(ifs);                    
    294437                        ia >> make_nvp("torrents", torrents); 
    295438                }                
     439        } 
     440                if (exists(workingDirectory/"DHTState.bin")) 
     441                        dht_state_ = haldecode(workingDirectory/"DHTState.bin"); 
    296442        } 
    297443         
     
    303449        const path workingDirectory; 
    304450         
     451        bool ip_filter_on_; 
     452        bool ip_filter_loaded_; 
     453        bool ip_filter_changed_; 
     454        lbt::ip_filter ip_filter_; 
     455        size_t ip_filter_count_; 
     456         
     457        void ip_filter_count(); 
     458        void ip_filter_load(progressCallback fn); 
     459        void ip_filter_import(std::vector<lbt::ip_range<asio::ip::address_v4> >& v4, 
     460                std::vector<lbt::ip_range<asio::ip::address_v6> >& v6); 
     461         
    305462        bool dht_on_; 
    306463        lbt::dht_settings dht_settings_; 
     464        lbt::entry dht_state_; 
    307465}; 
    308466 
     
    322480                bool result = pimpl->theSession.listen_on(range); 
    323481                 
    324 /*              libtorrent::dht_settings settings; 
    325                 settings.service_port = pimpl->theSession.listen_port()+10; 
    326                  
    327                 pimpl->theSession.set_dht_settings(settings); 
    328                 pimpl->theSession.start_dht(); 
    329                  
    330                 pimpl->theSession.add_dht_node(make_pair("192.168.11.12", 6891)); 
    331                 pimpl->theSession.add_dht_node(make_pair("192.168.11.12", 6892)); 
    332                 pimpl->theSession.add_dht_node(make_pair("192.168.11.12", 6893)); 
    333                 pimpl->theSession.add_dht_node(make_pair("192.168.11.12", 6894)); 
    334 */               
    335482                return result;   
    336483        } 
     
    356503void BitTorrent::stopListening() 
    357504{ 
    358 //      pimpl->theSession.stop_dht(); 
     505        ensure_dht_off(); 
    359506        pimpl->theSession.listen_on(make_pair(0, 0)); 
    360507} 
     
    363510{ 
    364511        if (!pimpl->dht_on_) 
    365         { 
    366                 lbt::entry dht_state; 
    367                  
    368                 if (exists(pimpl->workingDirectory/"dht_state.bin")) 
    369                         dht_state = haldecode(pimpl->workingDirectory/"dht_state.bin"); 
    370                  
     512        {                
    371513                try 
    372514                { 
    373                 pimpl->theSession.start_dht(dht_state); 
     515                pimpl->theSession.start_dht(pimpl->dht_state_); 
    374516                pimpl->dht_on_ = true; 
    375517                } 
     
    386528                pimpl->dht_on_ = false; 
    387529        } 
    388 } 
    389  
    390 void BitTorrent::setSessionLimits(int maxConn, int maxUpload) 
    391 {                
    392         pimpl->theSession.set_max_uploads(maxUpload); 
    393         pimpl->theSession.set_max_connections(maxConn); 
    394 } 
    395  
    396 void BitTorrent::setSessionSpeed(float download, float upload) 
    397 { 
    398         int down = (download > 0) ? static_cast<int>(download*1024) : -1; 
    399         pimpl->theSession.set_download_rate_limit(down); 
    400         int up = (upload > 0) ? static_cast<int>(upload*1024) : -1; 
    401         pimpl->theSession.set_upload_rate_limit(up); 
    402530} 
    403531 
     
    418546} 
    419547 
    420 pair<double, double> BitTorrent::sessionSpeed()  
    421 { 
    422         lbt::session_status sStatus = pimpl->theSession.status();                
    423         return pair<double, double>(sStatus.download_rate, sStatus.upload_rate); 
     548void BitTorrent::setSessionLimits(int maxConn, int maxUpload) 
     549{                
     550        pimpl->theSession.set_max_uploads(maxUpload); 
     551        pimpl->theSession.set_max_connections(maxConn); 
     552} 
     553 
     554void BitTorrent::setSessionSpeed(float download, float upload) 
     555{ 
     556        int down = (download > 0) ? static_cast<int>(download*1024) : -1; 
     557        pimpl->theSession.set_download_rate_limit(down); 
     558        int up = (upload > 0) ? static_cast<int>(upload*1024) : -1; 
     559        pimpl->theSession.set_upload_rate_limit(up); 
     560} 
     561 
     562void BitTorrent_impl::ip_filter_count() 
     563{ 
     564        lbt::ip_filter::filter_tuple_t vectors = ip_filter_.export_filter(); 
     565         
     566        vectors.get<0>().erase(std::remove(vectors.get<0>().begin(), vectors.get<0>().end(), 0), 
     567                vectors.get<0>().end()); 
     568        vectors.get<1>().erase(std::remove(vectors.get<1>().begin(), vectors.get<1>().end(), 0), 
     569                vectors.get<1>().end()); 
     570        ip_filter_count_ = vectors.get<0>().size() + vectors.get<1>().size(); 
     571} 
     572 
     573 
     574void BitTorrent_impl::ip_filter_load(progressCallback fn) 
     575{ 
     576        fs::ifstream ifs(workingDirectory/"IPFilter.bin", std::ios::binary); 
     577        if (ifs) 
     578        { 
     579                size_t v4_size; 
     580                ifs >> v4_size; 
     581                 
     582                size_t total = v4_size/100; 
     583                size_t previous = 0; 
     584                                         
     585                for(unsigned i=0; i<v4_size; ++i) 
     586                { 
     587                        if (i-previous > total) 
     588                        { 
     589                                previous = i; 
     590                                if (fn) if (fn(size_t(i/total))) break; 
     591                        } 
     592                         
     593                        read_range_to_filter<asio::ip::address_v4>(ifs, ip_filter_); 
     594                } 
     595        }        
     596} 
     597 
     598void  BitTorrent_impl::ip_filter_import(std::vector<lbt::ip_range<asio::ip::address_v4> >& v4, 
     599        std::vector<lbt::ip_range<asio::ip::address_v6> >& v6) 
     600{ 
     601        for(std::vector<lbt::ip_range<asio::ip::address_v4> >::iterator i=v4.begin(); 
     602                i != v4.end(); ++i) 
     603        { 
     604                ip_filter_.add_rule(i->first, i->last, lbt::ip_filter::blocked); 
     605        } 
     606/*      for(std::vector<lbt::ip_range<asio::ip::address_v6> >::iterator i=v6.begin(); 
     607                i != v6.end(); ++i) 
     608        { 
     609                ip_filter_.add_rule(i->first, i->last, lbt::ip_filter::blocked); 
     610        } 
     611*/       
     612        /* Note here we do not set ip_filter_changed_ */ 
     613} 
     614 
     615void BitTorrent::ensure_ip_filter_on(progressCallback fn) 
     616{ 
     617        if (!pimpl->ip_filter_loaded_) 
     618        { 
     619                pimpl->ip_filter_load(fn); 
     620                pimpl->ip_filter_loaded_ = true; 
     621        } 
     622         
     623        if (!pimpl->ip_filter_on_) 
     624        { 
     625                pimpl->theSession.set_ip_filter(pimpl->ip_filter_); 
     626                pimpl->ip_filter_on_ = true; 
     627                pimpl->ip_filter_count(); 
     628        } 
     629} 
     630 
     631void BitTorrent::ensure_ip_filter_off() 
     632{ 
     633        pimpl->theSession.set_ip_filter(lbt::ip_filter()); 
     634        pimpl->ip_filter_on_ = false; 
     635} 
     636 
     637void BitTorrent::ip_v4_filter_block(asio::ip::address_v4 first, asio::ip::address_v4 last) 
     638{ 
     639        pimpl->ip_filter_.add_rule(first, last, lbt::ip_filter::blocked); 
     640        pimpl->ip_filter_count(); 
     641        pimpl->ip_filter_changed_ = true; 
     642} 
     643 
     644void BitTorrent::ip_v6_filter_block(asio::ip::address_v6 first, asio::ip::address_v6 last) 
     645{ 
     646        pimpl->ip_filter_.add_rule(first, last, lbt::ip_filter::blocked); 
     647        pimpl->ip_filter_count(); 
     648        pimpl->ip_filter_changed_ = true; 
     649} 
     650 
     651size_t BitTorrent::ip_filter_size() 
     652{ 
     653        return pimpl->ip_filter_count_; 
     654} 
     655 
     656void BitTorrent::clearIpFilter() 
     657{ 
     658        pimpl->ip_filter_ = lbt::ip_filter(); 
     659        pimpl->theSession.set_ip_filter(lbt::ip_filter());       
     660        pimpl->ip_filter_changed_ = true; 
     661        pimpl->ip_filter_count(); 
     662} 
     663 
     664void BitTorrent::ip_filter_import_dat(boost::filesystem::path file, progressCallback fn, bool octalFix) 
     665{ 
     666        fs::ifstream ifs(file);  
     667        if (ifs) 
     668        { 
     669                boost::uintmax_t total = fs::file_size(file)/100; 
     670                boost::uintmax_t progress = 0; 
     671                boost::uintmax_t previous = 0; 
     672                 
     673                boost::regex reg("\\s*(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s*-\\s*(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s*.*"); 
     674                boost::regex ip_reg("0*(\\d*)\\.0*(\\d*)\\.0*(\\d*)\\.0*(\\d*)"); 
     675                boost::smatch m; 
     676                 
     677                string ip_address_line;          
     678                while (!std::getline(ifs, ip_address_line).eof()) 
     679                {                
     680                        progress += (ip_address_line.length() + 2); 
     681                        if (progress-previous > total) 
     682                        { 
     683                                previous = progress; 
     684                                if (fn) 
     685                                { 
     686                                        if (fn(size_t(progress/total)))  
     687                                                break; 
     688                                } 
     689                        } 
     690                         
     691                        if (boost::regex_match(ip_address_line, m, reg)) 
     692                        { 
     693                                string first = m[1]; 
     694                                string last = m[2]; 
     695                                 
     696                                if (octalFix) 
     697                                { 
     698                                        if (boost::regex_match(first, m, ip_reg)) 
     699                                        { 
     700                                                first = ((m.length(1) != 0) ? m[1] : string("0")) + "." + 
     701                                                                ((m.length(2) != 0) ? m[2] : string("0")) + "." + 
     702                                                                ((m.length(3) != 0) ? m[3] : string("0")) + "." + 
     703                                                                ((m.length(4) != 0) ? m[4] : string("0")); 
     704                                        }                                        
     705                                        if (boost::regex_match(last, m, ip_reg)) 
     706                                        { 
     707                                                last = ((m.length(1) != 0) ? m[1] : string("0")) + "." + 
     708                                                           ((m.length(2) != 0) ? m[2] : string("0")) + "." + 
     709                                                           ((m.length(3) != 0) ? m[3] : string("0")) + "." + 
     710                                                           ((m.length(4) != 0) ? m[4] : string("0")); 
     711                                        } 
     712                                } 
     713                                 
     714                                try 
     715                                {                        
     716                                pimpl->ip_filter_.add_rule(asio::ip::address_v4::from_string(first), 
     717                                        asio::ip::address_v4::from_string(last), lbt::ip_filter::blocked);       
     718                                } 
     719                                catch(const std::exception& e) 
     720                                { 
     721                                        ::MessageBoxA(0, (format("%1%: %1% %2%") % e.what() % first % last).str().c_str(), "Load ipfilter.dat Exception!", 0); 
     722                                } 
     723                        } 
     724                } 
     725        } 
     726         
     727        pimpl->ip_filter_changed_ = true; 
     728        pimpl->ip_filter_count(); 
    424729} 
    425730 
     
    427732{ 
    428733        SessionDetail details; 
     734         
     735        details.port = pimpl->theSession.is_listening() ? pimpl->theSession.listen_port() : -1; 
    429736         
    430737        lbt::session_status status = pimpl->theSession.status(); 
    431738        lbt::session_settings settings = pimpl->theSession.settings(); 
    432739         
    433         details.sessionSpeed = pair<double, double>(status.download_rate, status.upload_rate); 
     740        details.speed = pair<double, double>(status.download_rate, status.upload_rate); 
    434741         
    435742        details.dht_on = pimpl->dht_on_; 
    436743        details.dht_nodes = status.m_dht_nodes; 
    437744        details.dht_torrents = status.m_dht_torrents; 
     745         
     746        details.ip_filter_on = pimpl->ip_filter_on_; 
     747        details.ip_ranges_filtered = pimpl->ip_filter_count_; 
    438748         
    439749        return details; 
  • src/halTorrent.hpp

    r114 r115  
    55#include <vector> 
    66 
     7#include <boost/function.hpp> 
    78#include <boost/date_time/posix_time/posix_time.hpp> 
    89#include <boost/smart_ptr.hpp> 
     
    1112#include <boost/filesystem/operations.hpp> 
    1213#include <boost/filesystem/fstream.hpp> 
     14 
     15#include <asio/ip/tcp.hpp> 
     16#include <asio/ip/udp.hpp> 
    1317 
    1418using boost::filesystem::path; 
     
    114118struct SessionDetail 
    115119{ 
    116         std::pair<double, double> sessionSpeed; 
     120        int port; 
     121         
     122        std::pair<double, double> speed; 
    117123         
    118124        bool dht_on; 
    119         int dht_nodes; 
    120         int dht_torrents; 
    121 }; 
    122  
     125        size_t dht_nodes; 
     126        size_t dht_torrents; 
     127         
     128        bool ip_filter_on; 
     129        size_t ip_ranges_filtered; 
     130}; 
     131 
     132typedef boost::function<bool (size_t, size_t, size_t)> filterCallback; 
     133typedef boost::function<bool (size_t)> progressCallback; 
    123134class BitTorrent_impl; 
    124135 
     
    134145        void ensure_dht_on(); 
    135146        void ensure_dht_off(); 
     147         
     148        void ensure_ip_filter_on(progressCallback fn); 
     149        void ensure_ip_filter_off(); 
     150        void ip_v4_filter_block(asio::ip::address_v4 first, asio::ip::address_v4 last); 
     151        void ip_v6_filter_block(asio::ip::address_v6 first, asio::ip::address_v6 last); 
     152        void ip_filter_import_dat(boost::filesystem::path file, progressCallback fn, bool octalFix); 
     153        size_t ip_filter_size(); 
     154        void clearIpFilter(); 
    136155         
    137156        void setSessionLimits(int maxConn, int maxUpload); 
     
    139158        void setDhtSettings(int max_peers_reply, int search_branching,  
    140159                int service_port, int max_fail_count); 
    141         std::pair<double, double> sessionSpeed(); 
     160         
    142161        const SessionDetail getSessionDetails(); 
    143162         
  • src/ini/BitTConfig.cpp

    r114 r115  
    66#include "../GlobalIni.hpp" 
    77#include "BitTConfig.hpp" 
     8#include "../ProgressDialog.hpp" 
    89#include "../halTorrent.hpp" 
    910 
    1011void BitTConfig::settingsChanged() 
    1112{ 
     13//      thread settings(bind(&BitTConfig::settingsThread, this)); 
     14        settingsThread(); 
     15} 
     16 
     17void BitTConfig::settingsThread() 
     18{ 
     19        if (INI().bitTConfig().enableIPFilter) 
     20        { 
     21                ProgressDialog progDlg(L"Loading IP filters...", bind( 
     22                        &halite::BitTorrent::ensure_ip_filter_on, &halite::bittorrent(), _1)); 
     23                progDlg.DoModal(); 
     24        } 
     25        else 
     26                halite::bittorrent().ensure_ip_filter_off(); 
     27         
    1228        try 
    1329        { 
  • src/ini/BitTConfig.hpp

    r114 r115  
    4141                        ar & BOOST_SERIALIZATION_NVP(dhtMaxFailCount); 
    4242                        ar & BOOST_SERIALIZATION_NVP(enableIPFilter); 
    43                         ar & BOOST_SERIALIZATION_NVP(ipFilterFile); 
    4443                } 
    4544        } 
     
    5150 
    5251private: 
     52        void settingsThread(); 
     53         
    5354        int maxConnections; 
    5455        int maxUploads; 
     
    6667        int dhtMaxFailCount; 
    6768         
    68         bool enableIPFilter;     
    69         std::wstring ipFilterFile; 
     69        bool enableIPFilter; 
    7070}; 
    7171 
  • src/stdAfx.hpp

    r110 r115  
    88#define VC_EXTRALEAN 
    99 
    10 #define HALITE_GUID L"HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}" 
    11 #define WMU_ARE_YOU_ME_STRING  L"WMU_ARE_YOU_ME_HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}" 
     10#define HALITE_GUID L"HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}dev" 
     11#define WMU_ARE_YOU_ME_STRING  L"WMU_ARE_YOU_ME_HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}dev" 
    1212#define HALITE_SENDING_CMD 68816889 
    1313 
Note: See TracChangeset for help on using the changeset viewer.