summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2006-10-13 19:13:18 (UTC)
committer Michael Krelin <hacker@klever.net>2006-10-13 19:13:18 (UTC)
commit325e7fc43721df3efaa8539190fada6e6e3aa8fa (patch) (unidiff)
treeec03bf74e17eb497e0fcd31b521192b0b14bd83e
parent577427e68ef10a4d2b75d28e42b22952ae3bcf23 (diff)
downloadpumpkin-325e7fc43721df3efaa8539190fada6e6e3aa8fa.zip
pumpkin-325e7fc43721df3efaa8539190fada6e6e3aa8fa.tar.gz
pumpkin-325e7fc43721df3efaa8539190fada6e6e3aa8fa.tar.bz2
Enabled logging of outgoing errors, added reject with explicit error message
when file is too large for the block size set. git-svn-id: http://svn.klever.net/kin/pumpkin/trunk@192 fe716a7a-6dde-0310-88d9-d003556173a8
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--PumpKINDlg.cpp7
-rw-r--r--pumpkin.rc5
-rw-r--r--resource.h2
3 files changed, 10 insertions, 4 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index 2a01918..bb15211 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -733,96 +733,101 @@ CFileException e;
733 return FALSE; 733 return FALSE;
734 } 734 }
735 Deny(&e); 735 Deny(&e);
736 return TRUE; 736 return TRUE;
737 } 737 }
738 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION 738 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION
739 if(hostName){ 739 if(hostName){
740 m_HostName=hostName; 740 m_HostName=hostName;
741 741
742 CString tmp; 742 CString tmp;
743 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName); 743 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName);
744 m_Daddy->LogLine(tmp); 744 m_Daddy->LogLine(tmp);
745 745
746 CString inAddr = hostName; 746 CString inAddr = hostName;
747 int at = inAddr.Find('@'); 747 int at = inAddr.Find('@');
748 if(at>=0) 748 if(at>=0)
749 inAddr=inAddr.Mid(at+1); 749 inAddr=inAddr.Mid(at+1);
750 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){ 750 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){
751 ASSERT(!m_wndResolver); 751 ASSERT(!m_wndResolver);
752 m_wndResolver = new CResolver(this); 752 m_wndResolver = new CResolver(this);
753 ASSERT(m_wndResolver); 753 ASSERT(m_wndResolver);
754 return m_wndResolver->Resolve(); 754 return m_wndResolver->Resolve();
755 } 755 }
756 else 756 else
757 OnHostKnown(); 757 OnHostKnown();
758 }else{ 758 }else{
759 tftp::tftpOptions o; 759 tftp::tftpOptions o;
760 CString v; 760 CString v;
761 if(m_Options.Lookup(tftpoBSize,v)){ 761 if(m_Options.Lookup(tftpoBSize,v)){
762 m__blkSize=atoi(v); 762 m__blkSize=atoi(v);
763 if(m__blkSize){ 763 if(m__blkSize){
764 m_blkSize=m__blkSize; 764 m_blkSize=m__blkSize;
765 v.Format("%u",m_blkSize); 765 v.Format("%u",m_blkSize);
766 o[tftpoBSize]=v; 766 o[tftpoBSize]=v;
767 } 767 }
768 } 768 }
769 if(m_Options.Lookup(tftpoTSize,v)){ 769 if(m_Options.Lookup(tftpoTSize,v)){
770 v.Format("%lu",m_xferSize); 770 v.Format("%lu",m_xferSize);
771 o[tftpoTSize]=v; 771 o[tftpoTSize]=v;
772 } 772 }
773 if(m_Options.Lookup(tftpoTOut,v)){ 773 if(m_Options.Lookup(tftpoTOut,v)){
774 m__timeOut=atoi(v); 774 m__timeOut=atoi(v);
775 if(m__timeOut){ 775 if(m__timeOut){
776 m_timeOut=m__timeOut; 776 m_timeOut=m__timeOut;
777 v.Format("%u",m_timeOut); 777 v.Format("%u",m_timeOut);
778 o[tftpoTOut]=v; 778 o[tftpoTOut]=v;
779 } 779 }
780 } 780 }
781 // XXX: see if we can enforce our preference regarding block size here.
782 if(m_xferSize >= (m_blkSize<<16)) {
783 Deny(tftp::errUndefined,IDS_TFTP_ERROR_TOOBIG);
784 return TRUE;
785 }
781 state = stateXfer; 786 state = stateXfer;
782 m_ACK=0; 787 m_ACK=0;
783 if(o.GetCount()){ 788 if(o.GetCount()){
784 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o)); 789 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o));
785 ASSERT(p); 790 ASSERT(p);
786 p->SetOpcode(tftp::opOACK); 791 p->SetOpcode(tftp::opOACK);
787 p->data.m_OACK.Set(&o); 792 p->data.m_OACK.Set(&o);
788 PostTFTP(p,TRUE); 793 PostTFTP(p,TRUE);
789 }else 794 }else
790 DoXfer(); 795 DoXfer();
791 } 796 }
792 return TRUE; 797 return TRUE;
793} 798}
794 799
795CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 800CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
796 : CXferSocket(daddy,fileName,type,sin) 801 : CXferSocket(daddy,fileName,type,sin)
797{ 802{
798 m_ACK=0; 803 m_ACK=0;
799 m_LastSlack=0; 804 m_LastSlack=0;
800} 805}
801 806
802UINT tftp::tftpERROR::tftpSize(LPCTSTR msg) 807UINT tftp::tftpERROR::tftpSize(LPCTSTR msg)
803{ 808{
804 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1; 809 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1;
805} 810}
806 811
807tftp* tftp::Allocate(UINT tftpSize) 812tftp* tftp::Allocate(UINT tftpSize)
808{ 813{
809 ASSERT(tftpSize); 814 ASSERT(tftpSize);
810tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize]; 815tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize];
811 ASSERT(rv); 816 ASSERT(rv);
812 rv->length=tftpSize; 817 rv->length=tftpSize;
813 return rv; 818 return rv;
814} 819}
815 820
816void tftp::errSet(UINT code,LPCTSTR msg) 821void tftp::errSet(UINT code,LPCTSTR msg)
817{ 822{
818 ASSERT(this); 823 ASSERT(this);
819 ASSERT(length>=data.m_ERROR.tftpSize(msg)); 824 ASSERT(length>=data.m_ERROR.tftpSize(msg));
820 strcpy((char*)data.m_ERROR.data,msg); 825 strcpy((char*)data.m_ERROR.data,msg);
821 data.m_ERROR.SetCode(code); 826 data.m_ERROR.SetCode(code);
822} 827}
823 828
824void CXferSocket::PostTFTP(tftp* p,BOOL retryable) 829void CXferSocket::PostTFTP(tftp* p,BOOL retryable)
825{ 830{
826 ASSERT(p); 831 ASSERT(p);
827 m_Queue.AddTail(p); 832 m_Queue.AddTail(p);
828 DoSelect(); 833 DoSelect();
@@ -833,101 +838,99 @@ void CXferSocket::PostTFTP(tftp* p,BOOL retryable)
833 SetTry(); 838 SetTry();
834 } 839 }
835 ResetTimeout(); 840 ResetTimeout();
836} 841}
837 842
838void CXferSocket::Deny(UINT errCode,UINT errID) 843void CXferSocket::Deny(UINT errCode,UINT errID)
839{ 844{
840 PostError(errCode,errID); 845 PostError(errCode,errID);
841 state=stateDeny; 846 state=stateDeny;
842} 847}
843 848
844void CRRQSocket::DoXfer() 849void CRRQSocket::DoXfer()
845{ 850{
846tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize)); 851tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize));
847 ASSERT(p); 852 ASSERT(p);
848 p->SetOpcode(tftp::opDATA); 853 p->SetOpcode(tftp::opDATA);
849 TRY{ 854 TRY{
850 m_File.Seek(m_ACK*m_blkSize,CFile::begin); 855 m_File.Seek(m_ACK*m_blkSize,CFile::begin);
851 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize); 856 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize);
852 p->data.m_DATA.SetBlock(m_ACK+1); 857 p->data.m_DATA.SetBlock(m_ACK+1);
853 p->length=p->length-m_blkSize+bytes; 858 p->length=p->length-m_blkSize+bytes;
854 m_LastSlack = m_blkSize-bytes; 859 m_LastSlack = m_blkSize-bytes;
855 PostTFTP(p); 860 PostTFTP(p);
856 if(bytes<m_blkSize){ 861 if(bytes<m_blkSize){
857 state=stateClosing; m_ACKtoClose = m_ACK+1; 862 state=stateClosing; m_ACKtoClose = m_ACK+1;
858 } 863 }
859 }CATCH(CFileException,e){ 864 }CATCH(CFileException,e){
860 Deny(e); 865 Deny(e);
861 }END_CATCH 866 }END_CATCH
862} 867}
863 868
864UINT tftp::tftpDATA::tftpSize(UINT blkSize) 869UINT tftp::tftpDATA::tftpSize(UINT blkSize)
865{ 870{
866 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA) 871 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA)
867 -sizeof(BYTE)+blkSize; 872 -sizeof(BYTE)+blkSize;
868} 873}
869 874
870void CXferSocket::Deny(CFileException* e) 875void CXferSocket::Deny(CFileException* e)
871{ 876{
872 PostError(e); 877 PostError(e);
873 state=stateDeny; 878 state=stateDeny;
874} 879}
875 880
876void CXferSocket::PostError(UINT errCode,UINT errID) 881void CXferSocket::PostError(UINT errCode,UINT errID)
877{ 882{
878CString msg; 883CString msg;
879 msg.LoadString(errID); 884 msg.LoadString(errID);
880 ASSERT(m_Daddy); 885 ASSERT(m_Daddy);
881 /*// ***
882CString tmp; 886CString tmp;
883 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg); 887 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg);
884 m_Daddy->LogLine(tmp); 888 m_Daddy->LogLine(tmp);
885 */
886tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg)); 889tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg));
887err->SetOpcode(tftp::opERROR); 890err->SetOpcode(tftp::opERROR);
888 err->errSet(errCode,msg); 891 err->errSet(errCode,msg);
889 PostTFTP(err); 892 PostTFTP(err);
890} 893}
891 894
892void CXferSocket::PostError(CFileException* e) 895void CXferSocket::PostError(CFileException* e)
893{ 896{
894UINT eCode; 897UINT eCode;
895UINT eMsgID; 898UINT eMsgID;
896 switch(e->m_cause){ 899 switch(e->m_cause){
897 case CFileException::fileNotFound: 900 case CFileException::fileNotFound:
898 eCode=tftp::errNotFound; 901 eCode=tftp::errNotFound;
899 eMsgID=IDS_TFTP_ERROR_NOTFOUND; 902 eMsgID=IDS_TFTP_ERROR_NOTFOUND;
900 break; 903 break;
901 case CFileException::accessDenied: 904 case CFileException::accessDenied:
902 eCode=tftp::errAccessViolation; 905 eCode=tftp::errAccessViolation;
903 eMsgID=IDS_TFTP_ERROR_ACCESS; 906 eMsgID=IDS_TFTP_ERROR_ACCESS;
904 break; 907 break;
905 case CFileException::directoryFull: 908 case CFileException::directoryFull:
906 eCode=tftp::errDiskFull; 909 eCode=tftp::errDiskFull;
907 eMsgID=IDS_TFTP_ERROR_DIRFULL; 910 eMsgID=IDS_TFTP_ERROR_DIRFULL;
908 break; 911 break;
909 case CFileException::sharingViolation: 912 case CFileException::sharingViolation:
910 eCode=tftp::errAccessViolation; 913 eCode=tftp::errAccessViolation;
911 eMsgID=IDS_TFTP_ERROR_SHARING; 914 eMsgID=IDS_TFTP_ERROR_SHARING;
912 break; 915 break;
913 case CFileException::diskFull: 916 case CFileException::diskFull:
914 eCode=tftp::errDiskFull; 917 eCode=tftp::errDiskFull;
915 eMsgID=IDS_TFTP_ERROR_DISKFULL; 918 eMsgID=IDS_TFTP_ERROR_DISKFULL;
916 break; 919 break;
917 default: 920 default:
918 eCode=tftp::errUndefined; 921 eCode=tftp::errUndefined;
919 eMsgID=IDS_TFTP_ERROR_UNDEFINED; 922 eMsgID=IDS_TFTP_ERROR_UNDEFINED;
920 break; 923 break;
921 } 924 }
922 PostError(eCode,eMsgID); 925 PostError(eCode,eMsgID);
923} 926}
924 927
925ULONG CRRQSocket::GetACK(void) 928ULONG CRRQSocket::GetACK(void)
926{ 929{
927 return (m_ACK*m_blkSize)-m_LastSlack; 930 return (m_ACK*m_blkSize)-m_LastSlack;
928} 931}
929 932
930BOOL CRRQSocket::OnTFTP(tftp* p) 933BOOL CRRQSocket::OnTFTP(tftp* p)
931{ 934{
932BOOL rv = TRUE; 935BOOL rv = TRUE;
933 switch(p->Opcode()){ 936 switch(p->Opcode()){
diff --git a/pumpkin.rc b/pumpkin.rc
index 5ce2438..adca112 100644
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -52,97 +52,97 @@ BEGIN
52 "#endif\r\n" 52 "#endif\r\n"
53 "#include ""res\\PumpKIN.rc2"" // non-Microsoft Visual C++ edited resources\r\n" 53 "#include ""res\\PumpKIN.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
54 "#include ""afxres.rc"" // Standard components\r\n" 54 "#include ""afxres.rc"" // Standard components\r\n"
55 "#endif\0" 55 "#endif\0"
56END 56END
57 57
58#endif // APSTUDIO_INVOKED 58#endif // APSTUDIO_INVOKED
59 59
60 60
61///////////////////////////////////////////////////////////////////////////// 61/////////////////////////////////////////////////////////////////////////////
62// 62//
63// Icon 63// Icon
64// 64//
65 65
66// Icon with lowest ID value placed first to ensure application icon 66// Icon with lowest ID value placed first to ensure application icon
67// remains consistent on all systems. 67// remains consistent on all systems.
68IDI_RRQ ICON DISCARDABLE "res\\wrq.ico" 68IDI_RRQ ICON DISCARDABLE "res\\wrq.ico"
69IDI_WRQ ICON DISCARDABLE "res\\rrq.ico" 69IDI_WRQ ICON DISCARDABLE "res\\rrq.ico"
70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico" 70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico"
71IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico" 71IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico"
72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico" 72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico"
73IDI_UP ICON DISCARDABLE "res\\up.ico" 73IDI_UP ICON DISCARDABLE "res\\up.ico"
74IDI_DOWN ICON DISCARDABLE "res\\down.ico" 74IDI_DOWN ICON DISCARDABLE "res\\down.ico"
75IDI_REMOVE ICON DISCARDABLE "res\\remove.ico" 75IDI_REMOVE ICON DISCARDABLE "res\\remove.ico"
76 76
77///////////////////////////////////////////////////////////////////////////// 77/////////////////////////////////////////////////////////////////////////////
78// 78//
79// Dialog 79// Dialog
80// 80//
81 81
82IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 74 82IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 74
83STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 83STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
84CAPTION "About PumpKIN" 84CAPTION "About PumpKIN"
85FONT 8, "MS Sans Serif" 85FONT 8, "MS Sans Serif"
86BEGIN 86BEGIN
87 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20 87 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20
88 LTEXT "PumpKIN, Version 2.7.1",IDC_STATIC,40,15,119,8, 88 LTEXT "PumpKIN, Version 2.7.1",IDC_STATIC,40,15,119,8,
89 SS_NOPREFIX 89 SS_NOPREFIX
90 LTEXT "Copyright © 1997-2006 Klever Group",IDC_STATIC,40,30, 90 LTEXT "Copyright © 1997-2006 Klever Group",IDC_STATIC,40,30,
91 170,8 91 170,8
92 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP 92 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
93 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14 93 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14
94END 94END
95 95
96IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 193 96IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 193
97STYLE DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME 97STYLE DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
98EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW 98EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW
99CAPTION " PumpKIN" 99CAPTION " PumpKIN"
100FONT 8, "MS Sans Serif" 100FONT 8, "MS Sans Serif", 0, 0, 0x1
101BEGIN 101BEGIN
102 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT | 102 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT |
103 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108, 103 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108,
104 WS_EX_DLGMODALFRAME 104 WS_EX_DLGMODALFRAME
105 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY, 105 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY,
106 WS_EX_CLIENTEDGE 106 WS_EX_CLIENTEDGE
107 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY, 107 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY,
108 WS_EX_CLIENTEDGE 108 WS_EX_CLIENTEDGE
109 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY, 109 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY,
110 WS_EX_CLIENTEDGE 110 WS_EX_CLIENTEDGE
111 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY, 111 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY,
112 WS_EX_CLIENTEDGE 112 WS_EX_CLIENTEDGE
113 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 113 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
114 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 114 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
115 LISTBOX IDC_LOG,7,115,348,64,LBS_USETABSTOPS | 115 LISTBOX IDC_LOG,7,115,348,64,LBS_USETABSTOPS |
116 LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_VSCROLL | 116 LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_VSCROLL |
117 WS_HSCROLL,WS_EX_DLGMODALFRAME 117 WS_HSCROLL,WS_EX_DLGMODALFRAME
118 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP 118 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP
119 CONTROL "&Server is running",IDC_LISTENING,"Button", 119 CONTROL "&Server is running",IDC_LISTENING,"Button",
120 BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT | WS_TABSTOP,286, 120 BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT | WS_TABSTOP,286,
121 181,69,11,WS_EX_TRANSPARENT | WS_EX_STATICEDGE 121 181,69,11,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
122END 122END
123 123
124IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 300, 201 124IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 300, 201
125STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 125STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
126CAPTION "Server" 126CAPTION "Server"
127FONT 8, "MS Sans Serif" 127FONT 8, "MS Sans Serif"
128BEGIN 128BEGIN
129 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7, 129 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7,
130 286,38 130 286,38
131 EDITTEXT IDC_TFTPROOT,13,16,256,13,ES_AUTOHSCROLL 131 EDITTEXT IDC_TFTPROOT,13,16,256,13,ES_AUTOHSCROLL
132 PUSHBUTTON "&B",IDC_BROWSE,274,16,13,13,BS_ICON 132 PUSHBUTTON "&B",IDC_BROWSE,274,16,13,13,BS_ICON
133 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS, 133 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS,
134 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10 134 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10
135 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,243,56 135 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,243,56
136 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button", 136 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button",
137 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,63,53,10 137 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,63,53,10
138 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM, 138 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM,
139 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,43,75,91,10 139 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,43,75,91,10
140 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button", 140 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button",
141 BS_AUTORADIOBUTTON | BS_NOTIFY,73,87,70,10 141 BS_AUTORADIOBUTTON | BS_NOTIFY,73,87,70,10
142 GROUPBOX "Write Request Behavior",IDC_STATIC,7,106,243,56, 142 GROUPBOX "Write Request Behavior",IDC_STATIC,7,106,243,56,
143 WS_GROUP 143 WS_GROUP
144 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button", 144 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button",
145 BS_AUTORADIOBUTTON | WS_GROUP,13,116,55,10 145 BS_AUTORADIOBUTTON | WS_GROUP,13,116,55,10
146 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button", 146 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button",
147 BS_AUTORADIOBUTTON,43,126,73,10 147 BS_AUTORADIOBUTTON,43,126,73,10
148 CONTROL "Always pro&mpt before accepting file", 148 CONTROL "Always pro&mpt before accepting file",
@@ -517,170 +517,171 @@ IDM_POPUPS MENU DISCARDABLE
517BEGIN 517BEGIN
518 POPUP "&Tray" 518 POPUP "&Tray"
519 BEGIN 519 BEGIN
520 MENUITEM "&Send File", ID_TRAY_SENDFILE 520 MENUITEM "&Send File", ID_TRAY_SENDFILE
521 MENUITEM "F&etch file", ID_TRAY_FETCHFILE 521 MENUITEM "F&etch file", ID_TRAY_FETCHFILE
522 MENUITEM "&Options", ID_TRAY_OPTIONS 522 MENUITEM "&Options", ID_TRAY_OPTIONS
523 MENUITEM "&Listen to requests", ID_TRAY_LISTEN 523 MENUITEM "&Listen to requests", ID_TRAY_LISTEN
524 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW 524 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW
525 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER 525 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER
526 MENUITEM SEPARATOR 526 MENUITEM SEPARATOR
527 MENUITEM "&Help Topics", ID_TRAY_HELP 527 MENUITEM "&Help Topics", ID_TRAY_HELP
528 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN 528 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN
529 MENUITEM SEPARATOR 529 MENUITEM SEPARATOR
530 MENUITEM "E&xit", ID_TRAY_EXIT 530 MENUITEM "E&xit", ID_TRAY_EXIT
531 END 531 END
532END 532END
533 533
534 534
535///////////////////////////////////////////////////////////////////////////// 535/////////////////////////////////////////////////////////////////////////////
536// 536//
537// String Table 537// String Table
538// 538//
539 539
540STRINGTABLE DISCARDABLE 540STRINGTABLE DISCARDABLE
541BEGIN 541BEGIN
542 IDS_ABOUTBOX "&About PumpKIN..." 542 IDS_ABOUTBOX "&About PumpKIN..."
543 IDS_FMT_BYTES "%lu" 543 IDS_FMT_BYTES "%lu"
544 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed." 544 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed."
545 IDS_TFTP_ERROR_ACCESS "Access violation" 545 IDS_TFTP_ERROR_ACCESS "Access violation"
546 IDS_TFTP_ERROR_NOTFOUND "File not found" 546 IDS_TFTP_ERROR_NOTFOUND "File not found"
547 IDS_TFTP_ERROR_DIRFULL "Directory is full" 547 IDS_TFTP_ERROR_DIRFULL "Directory is full"
548 IDS_TFTP_ERROR_SHARING "Sharing violation" 548 IDS_TFTP_ERROR_SHARING "Sharing violation"
549 IDS_TFTP_ERROR_DISKFULL "Disk full" 549 IDS_TFTP_ERROR_DISKFULL "Disk full"
550 IDS_TFTP_ERROR_UNDEFINED "Undefined error" 550 IDS_TFTP_ERROR_UNDEFINED "Undefined error"
551 IDS_LOG_START "PumpKIN started" 551 IDS_LOG_START "PumpKIN started"
552 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections" 552 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections"
553END 553END
554 554
555STRINGTABLE DISCARDABLE 555STRINGTABLE DISCARDABLE
556BEGIN 556BEGIN
557 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection" 557 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection"
558 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s" 558 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s"
559 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request" 559 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request"
560 IDS_LOG_XFERUDPSEND "UDP packet send failed" 560 IDS_LOG_XFERUDPSEND "UDP packet send failed"
561 IDS_LOG_XFERRECEIVE "Error on xfer socket" 561 IDS_LOG_XFERRECEIVE "Error on xfer socket"
562 IDS_LOG_XFERSEND "Error on xfer socket" 562 IDS_LOG_XFERSEND "Error on xfer socket"
563 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed" 563 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed"
564 IDS_LOG_XFERSOURCETID "Packet from unexpected source" 564 IDS_LOG_XFERSOURCETID "Packet from unexpected source"
565 IDS_LOG_SENTTFTPERROR ":%u: %s" 565 IDS_LOG_SENTTFTPERROR ">> %u: %s"
566 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s" 566 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s"
567 IDS_LOG_XFEROPCODE "Invalid opcode (%u) during transfer received" 567 IDS_LOG_XFEROPCODE "Invalid opcode (%u) during transfer received"
568 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed" 568 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed"
569 IDS_TITLE_OPTIONS "Options" 569 IDS_TITLE_OPTIONS "Options"
570 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s" 570 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s"
571 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file" 571 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file"
572 IDS_RENAME_TITLE "Save As" 572 IDS_RENAME_TITLE "Save As"
573END 573END
574 574
575STRINGTABLE DISCARDABLE 575STRINGTABLE DISCARDABLE
576BEGIN 576BEGIN
577 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out" 577 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out"
578 IDS_CONFIRMEXIT_TITLE "Exit" 578 IDS_CONFIRMEXIT_TITLE "Exit"
579 IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?" 579 IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?"
580 IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed" 580 IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed"
581 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted" 581 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted"
582 IDS_TITLE_PUTREQUEST "Send file" 582 IDS_TITLE_PUTREQUEST "Send file"
583 IDS_TITLE_GETREQUEST "Fetch file" 583 IDS_TITLE_GETREQUEST "Fetch file"
584 IDS_WTALKHEADING "Talk with " 584 IDS_WTALKHEADING "Talk with "
585 IDS_TITLE_BROWSEFILE "Browse" 585 IDS_TITLE_BROWSEFILE "Browse"
586 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'" 586 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'"
587 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'" 587 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'"
588 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'" 588 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'"
589 IDS_OTALXHEADING "Open Talks: talking to " 589 IDS_OTALXHEADING "Open Talks: talking to "
590 IDS_REGISTRYKEY "Klever Group" 590 IDS_REGISTRYKEY "Klever Group"
591 IDS_KLEVERNET_URL "http://www.klever.net/" 591 IDS_KLEVERNET_URL "http://www.klever.net/"
592 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d" 592 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d"
593END 593END
594 594
595STRINGTABLE DISCARDABLE 595STRINGTABLE DISCARDABLE
596BEGIN 596BEGIN
597 ID_TRAY_HELP "Read the help on PumpKIN" 597 ID_TRAY_HELP "Read the help on PumpKIN"
598 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator" 598 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator"
599 ID_TRAY_EXIT "Close PumpKIN" 599 ID_TRAY_EXIT "Close PumpKIN"
600 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete" 600 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete"
601 ID_TRAY_FETCHFILE "Fetch file from remote computer" 601 ID_TRAY_FETCHFILE "Fetch file from remote computer"
602 ID_TRAY_OPTIONS "Set PumpKIN options" 602 ID_TRAY_OPTIONS "Set PumpKIN options"
603 ID_TRAY_SHOWPUMPKINWINDOW "Show main window" 603 ID_TRAY_SHOWPUMPKINWINDOW "Show main window"
604 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder" 604 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder"
605 ID_TRAY_LISTEN "Listen for incoming requests" 605 ID_TRAY_LISTEN "Listen for incoming requests"
606END 606END
607 607
608STRINGTABLE DISCARDABLE 608STRINGTABLE DISCARDABLE
609BEGIN 609BEGIN
610 IDC_CONNECTIONS "Active transfers" 610 IDC_CONNECTIONS "Active transfers"
611 IDC_LOG "PumpKIN Activity Log" 611 IDC_LOG "PumpKIN Activity Log"
612 IDC_GET "Fetch file from remote server" 612 IDC_GET "Fetch file from remote server"
613 IDC_PUT "Send file over the net" 613 IDC_PUT "Send file over the net"
614 IDC_ABORT "Abort transfer currently in progress" 614 IDC_ABORT "Abort transfer currently in progress"
615 IDC_EXIT "Close PumpKIN" 615 IDC_EXIT "Close PumpKIN"
616END 616END
617 617
618STRINGTABLE DISCARDABLE 618STRINGTABLE DISCARDABLE
619BEGIN 619BEGIN
620 IDC_OPTIONS "Set PumpKIN options" 620 IDC_OPTIONS "Set PumpKIN options"
621 IDC_REFRESH "Refresh talks list" 621 IDC_REFRESH "Refresh talks list"
622 IDC_BROWSE "Browse" 622 IDC_BROWSE "Browse"
623END 623END
624 624
625STRINGTABLE DISCARDABLE 625STRINGTABLE DISCARDABLE
626BEGIN 626BEGIN
627 ID_HELP "Read help on PumpKIN" 627 ID_HELP "Read help on PumpKIN"
628END 628END
629 629
630STRINGTABLE DISCARDABLE 630STRINGTABLE DISCARDABLE
631BEGIN 631BEGIN
632 IDS_DROPFILES_TITLE "Drop Files" 632 IDS_DROPFILES_TITLE "Drop Files"
633 IDS_NOMULTIPLEDROP_TEXT "You can't drop more than one file here. Only the first one will be accepted" 633 IDS_NOMULTIPLEDROP_TEXT "You can't drop more than one file here. Only the first one will be accepted"
634 IDS_LOG_REQUESTING "Requesting '%s' from '%s'" 634 IDS_LOG_REQUESTING "Requesting '%s' from '%s'"
635 IDS_LOG_SENDING "Sending '%s' to '%s'" 635 IDS_LOG_SENDING "Sending '%s' to '%s'"
636 IDS_WTALKAT "@" 636 IDS_WTALKAT "@"
637 IDS_OTALXAT " at " 637 IDS_OTALXAT " at "
638 IDS_TFTP_ERROR_TSIZE "Invalid transfer size" 638 IDS_TFTP_ERROR_TSIZE "Invalid transfer size"
639 IDS_TFTP_ERROR_BSIZE "Invalid block size" 639 IDS_TFTP_ERROR_BSIZE "Invalid block size"
640 IDS_TFTP_ERROR_TOUT "Invalid timeout" 640 IDS_TFTP_ERROR_TOUT "Invalid timeout"
641 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.." 641 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.."
642 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||" 642 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||"
643 IDS_TITLE_WAV "Select sound.." 643 IDS_TITLE_WAV "Select sound.."
644 IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application." 644 IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application."
645 IDS_NO_XFER_OP "No request type specified." 645 IDS_NO_XFER_OP "No request type specified."
646 IDS_INVALID_IP "Invalid IP address." 646 IDS_INVALID_IP "Invalid IP address."
647 IDS_INVALID_NETMASK "Invalid netmask." 647 IDS_INVALID_NETMASK "Invalid netmask."
648END 648END
649 649
650STRINGTABLE DISCARDABLE 650STRINGTABLE DISCARDABLE
651BEGIN 651BEGIN
652 AFX_IDS_APP_TITLE "PUMPKIN" 652 AFX_IDS_APP_TITLE "PUMPKIN"
653END 653END
654 654
655STRINGTABLE DISCARDABLE 655STRINGTABLE DISCARDABLE
656BEGIN 656BEGIN
657 IDS_INVALID_RULE "Invalid access rule." 657 IDS_INVALID_RULE "Invalid access rule."
658 IDS_LOG_LOGERROR "Error logging to '%s'" 658 IDS_LOG_LOGERROR "Error logging to '%s'"
659 IDS_TFTP_ERROR_TOOBIG "File is too big, try increasing block size"
659END 660END
660 661
661#endif // English (U.S.) resources 662#endif // English (U.S.) resources
662///////////////////////////////////////////////////////////////////////////// 663/////////////////////////////////////////////////////////////////////////////
663 664
664 665
665 666
666#ifndef APSTUDIO_INVOKED 667#ifndef APSTUDIO_INVOKED
667///////////////////////////////////////////////////////////////////////////// 668/////////////////////////////////////////////////////////////////////////////
668// 669//
669// Generated from the TEXTINCLUDE 3 resource. 670// Generated from the TEXTINCLUDE 3 resource.
670// 671//
671#define _AFX_NO_SPLITTER_RESOURCES 672#define _AFX_NO_SPLITTER_RESOURCES
672#define _AFX_NO_OLE_RESOURCES 673#define _AFX_NO_OLE_RESOURCES
673#define _AFX_NO_TRACKER_RESOURCES 674#define _AFX_NO_TRACKER_RESOURCES
674#define _AFX_NO_PROPERTY_RESOURCES 675#define _AFX_NO_PROPERTY_RESOURCES
675 676
676#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 677#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
677#ifdef _WIN32 678#ifdef _WIN32
678LANGUAGE 9, 1 679LANGUAGE 9, 1
679#pragma code_page(1252) 680#pragma code_page(1252)
680#endif 681#endif
681#include "res\PumpKIN.rc2" // non-Microsoft Visual C++ edited resources 682#include "res\PumpKIN.rc2" // non-Microsoft Visual C++ edited resources
682#include "afxres.rc" // Standard components 683#include "afxres.rc" // Standard components
683#endif 684#endif
684///////////////////////////////////////////////////////////////////////////// 685/////////////////////////////////////////////////////////////////////////////
685#endif // not APSTUDIO_INVOKED 686#endif // not APSTUDIO_INVOKED
686 687
diff --git a/resource.h b/resource.h
index 1bdce59..7961e5e 100644
--- a/resource.h
+++ b/resource.h
@@ -43,96 +43,98 @@
43#define IDI_WRQ 130 43#define IDI_WRQ 130
44#define IDD_CONFIRM_RRQ 131 44#define IDD_CONFIRM_RRQ 131
45#define IDS_LOG_XFERWRQFINISHED 131 45#define IDS_LOG_XFERWRQFINISHED 131
46#define IDD_CONFIRM_WRQ 132 46#define IDD_CONFIRM_WRQ 132
47#define IDB_BACKGROUND 132 47#define IDB_BACKGROUND 132
48#define IDS_LOG_XFERABORTED 132 48#define IDS_LOG_XFERABORTED 132
49#define IDS_TITLE_PUTREQUEST 133 49#define IDS_TITLE_PUTREQUEST 133
50#define IDS_TITLE_GETREQUEST 134 50#define IDS_TITLE_GETREQUEST 134
51#define IDR_WAVE_RING 135 51#define IDR_WAVE_RING 135
52#define IDS_TALKHEADING 135 52#define IDS_TALKHEADING 135
53#define IDS_WTALKHEADING 135 53#define IDS_WTALKHEADING 135
54#define IDR_WAVE_FINISHED 136 54#define IDR_WAVE_FINISHED 136
55#define IDS_TITLE_BROWSEFILE 136 55#define IDS_TITLE_BROWSEFILE 136
56#define IDD_REQUEST 137 56#define IDD_REQUEST 137
57#define IDS_LOG_RESOLVEFAILED 137 57#define IDS_LOG_RESOLVEFAILED 137
58#define IDS_LOG_FAILEDLOCALFILE 138 58#define IDS_LOG_FAILEDLOCALFILE 138
59#define IDD_PROPS_SOUNDS 138 59#define IDD_PROPS_SOUNDS 138
60#define IDS_LOG_FAILEDTOOPEN 139 60#define IDS_LOG_FAILEDTOOPEN 139
61#define IDM_POPUPS 140 61#define IDM_POPUPS 140
62#define IDS_OTALXHEADING 140 62#define IDS_OTALXHEADING 140
63#define IDS_REGISTRYKEY 141 63#define IDS_REGISTRYKEY 141
64#define IDS_KLEVERNET_URL 142 64#define IDS_KLEVERNET_URL 142
65#define IDR_WAVE_ABORTED 142 65#define IDR_WAVE_ABORTED 142
66#define IDS_LOGTIMEFORMAT 143 66#define IDS_LOGTIMEFORMAT 143
67#define IDS_DROPFILES_TITLE 144 67#define IDS_DROPFILES_TITLE 144
68#define IDS_NOMULTIPLEDROP_TEXT 145 68#define IDS_NOMULTIPLEDROP_TEXT 145
69#define IDI_BROWSE 145 69#define IDI_BROWSE 145
70#define IDS_LOG_REQUESTING 146 70#define IDS_LOG_REQUESTING 146
71#define IDS_LOG_SENDING 147 71#define IDS_LOG_SENDING 147
72#define IDS_WTALKAT 148 72#define IDS_WTALKAT 148
73#define IDS_OTALXAT 149 73#define IDS_OTALXAT 149
74#define IDI_PLAY 149 74#define IDI_PLAY 149
75#define IDS_TFTP_ERROR_TSIZE 150 75#define IDS_TFTP_ERROR_TSIZE 150
76#define IDD_PROPS_ACL 150 76#define IDD_PROPS_ACL 150
77#define IDS_TFTP_ERROR_BSIZE 151 77#define IDS_TFTP_ERROR_BSIZE 151
78#define IDS_TFTP_ERROR_TOUT 152 78#define IDS_TFTP_ERROR_TOUT 152
79#define IDI_UP 152 79#define IDI_UP 152
80#define IDS_SELECT_TFTPROOT 153 80#define IDS_SELECT_TFTPROOT 153
81#define IDI_DOWN 153 81#define IDI_DOWN 153
82#define IDS_FILTER_WAV 154 82#define IDS_FILTER_WAV 154
83#define IDI_REMOVE 154 83#define IDI_REMOVE 154
84#define IDS_TITLE_WAV 155 84#define IDS_TITLE_WAV 155
85#define IDS_BOX_CANTBIND 156 85#define IDS_BOX_CANTBIND 156
86#define IDS_NO_XFER_OP 157 86#define IDS_NO_XFER_OP 157
87#define IDS_INVALID_IP 158 87#define IDS_INVALID_IP 158
88#define IDS_INVALID_NETMASK 159 88#define IDS_INVALID_NETMASK 159
89#define IDS_INVALID_RULE 160 89#define IDS_INVALID_RULE 160
90#define IDS_LOG_LOGERROR 161 90#define IDS_LOG_LOGERROR 161
91#define IDS_TFTP_ERROR_TOOBIG 162
92#define IDS_LOG_DENYING 163
91#define IDC_KLEVERNET 1000 93#define IDC_KLEVERNET 1000
92#define IDC_CONNECTIONS 1001 94#define IDC_CONNECTIONS 1001
93#define IDC_LOG 1003 95#define IDC_LOG 1003
94#define IDC_GET 1004 96#define IDC_GET 1004
95#define IDC_PUT 1005 97#define IDC_PUT 1005
96#define IDC_ABORT 1006 98#define IDC_ABORT 1006
97#define IDC_EXIT 1007 99#define IDC_EXIT 1007
98#define IDC_TFTPROOT 1008 100#define IDC_TFTPROOT 1008
99#define IDC_TFTPSUBDIRS 1009 101#define IDC_TFTPSUBDIRS 1009
100#define IDC_RRQ_GIVEALL 1010 102#define IDC_RRQ_GIVEALL 1010
101#define IDC_RRQ_ALWAYSCONFIRM 1011 103#define IDC_RRQ_ALWAYSCONFIRM 1011
102#define IDC_RRQ_DENYALL 1012 104#define IDC_RRQ_DENYALL 1012
103#define IDC_WRQ_TAKEALL 1013 105#define IDC_WRQ_TAKEALL 1013
104#define IDC_WRQ_PROMPTEXISTING 1014 106#define IDC_WRQ_PROMPTEXISTING 1014
105#define IDC_WRQ_ALWAYSCONFIRM 1015 107#define IDC_WRQ_ALWAYSCONFIRM 1015
106#define IDC_WRQ_DENYALL 1016 108#define IDC_WRQ_DENYALL 1016
107#define IDC_PROMPTTIMEOUT 1017 109#define IDC_PROMPTTIMEOUT 1017
108#define IDC_LISTENPORT 1018 110#define IDC_LISTENPORT 1018
109#define IDC_LISTENSPIN 1019 111#define IDC_LISTENSPIN 1019
110#define IDC_SPEAKPORT 1020 112#define IDC_SPEAKPORT 1020
111#define IDC_SPEAKSPIN 1021 113#define IDC_SPEAKSPIN 1021
112#define IDC_MAXUDPSIZE 1022 114#define IDC_MAXUDPSIZE 1022
113#define IDC_MAXUDPSPIN 1023 115#define IDC_MAXUDPSPIN 1023
114#define IDC_TIMEOUT 1024 116#define IDC_TIMEOUT 1024
115#define IDC_TIMESPIN 1025 117#define IDC_TIMESPIN 1025
116#define IDC_OPTIONS 1026 118#define IDC_OPTIONS 1026
117#define IDC_BLOCKSIZE 1026 119#define IDC_BLOCKSIZE 1026
118#define IDC_BSIZESPIN 1027 120#define IDC_BSIZESPIN 1027
119#define IDC_HOST 1028 121#define IDC_HOST 1028
120#define IDC_FILE 1029 122#define IDC_FILE 1029
121#define IDC_RENAME 1030 123#define IDC_RENAME 1030
122#define IDC_REMOTEFILE 1030 124#define IDC_REMOTEFILE 1030
123#define IDC_RESUME 1031 125#define IDC_RESUME 1031
124#define IDC_REFRESH 1032 126#define IDC_REFRESH 1032
125#define IDC_BROWSE 1034 127#define IDC_BROWSE 1034
126#define IDC_TALKS 1035 128#define IDC_TALKS 1035
127#define IDC_LOCALFILE 1036 129#define IDC_LOCALFILE 1036
128#define IDC_TYPE 1037 130#define IDC_TYPE 1037
129#define IDC_BSIZE 1039 131#define IDC_BSIZE 1039
130#define IDC_RING 1041 132#define IDC_RING 1041
131#define IDC_RING_BROWSE 1042 133#define IDC_RING_BROWSE 1042
132#define IDC_RING_PLAY 1043 134#define IDC_RING_PLAY 1043
133#define IDC_ACL_LIST 1043 135#define IDC_ACL_LIST 1043
134#define IDC_FINISHED 1044 136#define IDC_FINISHED 1044
135#define IDC_ACL_UP 1044 137#define IDC_ACL_UP 1044
136#define IDC_FINISHED_BROWSE 1045 138#define IDC_FINISHED_BROWSE 1045
137#define IDC_ACL_DOWN 1045 139#define IDC_ACL_DOWN 1045
138#define IDC_FINISHED_PLAY 1046 140#define IDC_FINISHED_PLAY 1046