Annotation of sbbs/src/sbbs3/ctrl/loginattemptsformunit.cpp, revision 1.1.1.1

1.1       root        1: /* Synchronet Control Panel (GUI Borland C++ Builder Project for Win32) */
                      2: 
                      3: /* $Id: LoginAttemptsFormUnit.cpp,v 1.3 2011/09/14 04:25:01 rswindell Exp $ */
                      4: 
                      5: /****************************************************************************
                      6:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
                      7:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
                      8:  *                                                                                                                                                     *
                      9:  * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html         *
                     10:  *                                                                                                                                                     *
                     11:  * This program is free software; you can redistribute it and/or                       *
                     12:  * modify it under the terms of the GNU General Public License                         *
                     13:  * as published by the Free Software Foundation; either version 2                      *
                     14:  * of the License, or (at your option) any later version.                                      *
                     15:  * See the GNU General Public License for more details: gpl.txt or                     *
                     16:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
                     17:  *                                                                                                                                                     *
                     18:  * Anonymous FTP access to the most recent released source is available at     *
                     19:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
                     20:  *                                                                                                                                                     *
                     21:  * Anonymous CVS access to the development source and modification history     *
                     22:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
                     23:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
                     24:  *     (just hit return, no password is necessary)                                                     *
                     25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
                     26:  *                                                                                                                                                     *
                     27:  * For Synchronet coding style and modification guidelines, see                                *
                     28:  * http://www.synchro.net/source.html                                                                          *
                     29:  *                                                                                                                                                     *
                     30:  * You are encouraged to submit any modifications (preferably in Unix diff     *
                     31:  * format) via e-mail to [email protected]                                                                      *
                     32:  *                                                                                                                                                     *
                     33:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
                     34:  ****************************************************************************/
                     35: //---------------------------------------------------------------------------
                     36: 
                     37: #include "sbbs.h"
                     38: #include <vcl.h>
                     39: #include <vcl/Clipbrd.hpp>
                     40: #pragma hdrstop
                     41: 
                     42: #include "LoginAttemptsFormUnit.h"
                     43: #include "MainFormUnit.h"
                     44: #include "userdat.h"
                     45: //---------------------------------------------------------------------------
                     46: #pragma package(smart_init)
                     47: #pragma resource "*.dfm"
                     48: TLoginAttemptsForm *LoginAttemptsForm;
                     49: extern link_list_t login_attempt_list;
                     50: 
                     51: //---------------------------------------------------------------------------
                     52: __fastcall TLoginAttemptsForm::TLoginAttemptsForm(TComponent* Owner)
                     53:     : TForm(Owner)
                     54: {
                     55: }
                     56: //---------------------------------------------------------------------------
                     57: void __fastcall TLoginAttemptsForm::FillListView(TObject *Sender)
                     58: {
                     59:     char                str[128];
                     60:     TListItem*          Item;
                     61:     list_node_t*        node;
                     62:     struct tm                  tm;
                     63:     login_attempt_t*    attempt;
                     64: 
                     65:     Screen->Cursor=crAppStart;
                     66: 
                     67:     listLock(&login_attempt_list);
                     68: 
                     69:     ListView->AllocBy=listCountNodes(&login_attempt_list);
                     70: 
                     71:     ListView->Items->BeginUpdate();
                     72: 
                     73:     for(node=login_attempt_list.first; node!=NULL; node=node->next) {
                     74:         attempt=(login_attempt_t*)node->data;
                     75:         if(attempt==NULL)
                     76:             continue;
                     77:         Item=ListView->Items->Add();
                     78:         Item->Caption=AnsiString(attempt->count-attempt->dupes);
                     79:         Item->Data=(void*)attempt->time;
                     80:         Item->SubItems->Add(attempt->dupes);        
                     81:         Item->SubItems->Add(inet_ntoa(attempt->addr));
                     82:         Item->SubItems->Add(attempt->prot);
                     83:         Item->SubItems->Add(attempt->user);
                     84:         Item->SubItems->Add(attempt->pass);
                     85:         localtime_r(&attempt->time,&tm);
                     86:         sprintf(str,"%u/%u %02u:%02u:%02u"
                     87:             ,tm.tm_mon+1,tm.tm_mday,tm.tm_hour,tm.tm_min,tm.tm_sec);
                     88:         Item->SubItems->Add(str);
                     89:     }
                     90:     ListView->AlphaSort();
                     91:     ListView->Items->EndUpdate();
                     92: 
                     93:     listUnlock(&login_attempt_list);
                     94:     Screen->Cursor=crDefault;
                     95: }
                     96: //---------------------------------------------------------------------------
                     97: void __fastcall TLoginAttemptsForm::FormShow(TObject *Sender)
                     98: {
                     99:     ColumnToSort=0;
                    100:     SortBackwards=true;
                    101:     FillListView(Sender);
                    102: }
                    103: 
                    104: //---------------------------------------------------------------------------
                    105: void __fastcall TLoginAttemptsForm::FormClose(TObject *Sender,
                    106:       TCloseAction &Action)
                    107: {
                    108:     ListView->Items->BeginUpdate();
                    109:     ListView->Items->Clear();
                    110:     ListView->Items->EndUpdate();
                    111: }
                    112: //---------------------------------------------------------------------------
                    113: void __fastcall TLoginAttemptsForm::ListViewColumnClick(TObject *Sender,
                    114:       TListColumn *Column)
                    115: {
                    116:     if(Column->Index == ColumnToSort)
                    117:         SortBackwards=!SortBackwards;
                    118:     else
                    119:         SortBackwards=false;
                    120:     ColumnToSort = Column->Index;
                    121:     ((TCustomListView *)Sender)->AlphaSort();
                    122: }
                    123: //---------------------------------------------------------------------------
                    124: void __fastcall TLoginAttemptsForm::ListViewCompare(TObject *Sender,
                    125:       TListItem *Item1, TListItem *Item2, int Data, int &Compare)
                    126: {
                    127:     /* Decimal compare */
                    128:     if (ColumnToSort < 2 || ColumnToSort == 6) {
                    129:         int num1, num2;
                    130:         if(ColumnToSort==6) { /* Date */
                    131:             num1=(ulong)Item1->Data;
                    132:             num2=(ulong)Item2->Data;
                    133:         } else if(ColumnToSort==0) {
                    134:             num1=Item1->Caption.ToIntDef(0);
                    135:             num2=Item2->Caption.ToIntDef(0);
                    136:         } else {
                    137:             int ix = ColumnToSort - 1;
                    138:             num1=Item1->SubItems->Strings[ix].ToIntDef(0);
                    139:             num2=Item2->SubItems->Strings[ix].ToIntDef(0);
                    140:         }
                    141:         if(SortBackwards)
                    142:             Compare=(num2-num1);
                    143:         else
                    144:             Compare=(num1-num2);
                    145:     } else {
                    146:         int ix = ColumnToSort - 1;
                    147:         if(SortBackwards)
                    148:             Compare = CompareText(Item2->SubItems->Strings[ix]
                    149:                 ,Item1->SubItems->Strings[ix]);
                    150:         else
                    151:             Compare = CompareText(Item1->SubItems->Strings[ix]
                    152:                 ,Item2->SubItems->Strings[ix]);
                    153:     }
                    154: 
                    155: }
                    156: //---------------------------------------------------------------------------
                    157: static AnsiString ListItemString(TListItem* item)
                    158: {
                    159:     AnsiString str = item->Caption;
                    160:     int i;
                    161: 
                    162:     for(i=0;i<item->SubItems->Count;i++)
                    163:         str += "\t" + item->SubItems->Strings[i];
                    164: 
                    165:     return str + "\r\n";
                    166: }
                    167: //---------------------------------------------------------------------------
                    168: void __fastcall TLoginAttemptsForm::CopyPopupClick(TObject *Sender)
                    169: {
                    170:     if(ListView->Selected==NULL)
                    171:         return;
                    172:     Clipboard()->SetTextBuf(ListItemString(ListView->Selected).c_str());
                    173: }
                    174: //---------------------------------------------------------------------------
                    175: 
                    176: void __fastcall TLoginAttemptsForm::CopyAllPopupClick(TObject *Sender)
                    177: {
                    178:     AnsiString buf;
                    179:     int i;
                    180: 
                    181:     for(i=0;i<ListView->Items->Count;i++)
                    182:         buf += ListItemString(ListView->Items->Item[i]);
                    183: 
                    184:     Clipboard()->SetTextBuf(buf.c_str());
                    185: }
                    186: //---------------------------------------------------------------------------
                    187: 
                    188: void __fastcall TLoginAttemptsForm::RefreshPopupClick(TObject *Sender)
                    189: {
                    190:     ListView->Items->BeginUpdate();
                    191:     ListView->Items->Clear();
                    192:     ListView->Items->EndUpdate();    
                    193:     FillListView(Sender);
                    194: }
                    195: //---------------------------------------------------------------------------
                    196: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.