* Update TFTPD Server. Initial patch by Kudratov Olimjon with some changes by me.
CORE-8620 #resolve #comment Committed in r64714 with some changes.

svn path=/trunk/; revision=64714
This commit is contained in:
Amine Khaldi 2014-10-13 11:03:35 +00:00
parent 3ed526868f
commit cc3b98c999
4 changed files with 780 additions and 360 deletions

View file

@ -1,7 +1,4 @@
add_executable(tftpd tftpd.cpp) add_executable(tftpd tftpd.cpp)
target_link_libraries(tftpd wine)
set_module_type(tftpd win32cui) set_module_type(tftpd win32cui)
add_importlibs(tftpd advapi32 ws2_32 msvcrt kernel32 ntdll) add_importlibs(tftpd advapi32 ws2_32 iphlpapi msvcrt kernel32)

View file

@ -1,3 +1,3 @@
This is a snapshot from the 1.6 release of tftp-server for win32 from sourceforge. This is a snapshot from the 1.64 release of tftp-server for win32 from sourceforge.
http://tftp-server.sourceforge.net http://tftp-server.sourceforge.net

File diff suppressed because it is too large Load diff

View file

@ -18,6 +18,9 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
// TFTPServer.cpp // TFTPServer.cpp
#define MYBYTE unsigned char
#define MYWORD unsigned short
#define MYDWORD unsigned int
#ifdef _MSC_VER #ifdef _MSC_VER
#define strcasecmp _stricmp #define strcasecmp _stricmp
@ -41,40 +44,42 @@ struct tftpConnType
{ {
SOCKET sock; SOCKET sock;
sockaddr_in addr; sockaddr_in addr;
DWORD server; MYDWORD server;
WORD port; MYWORD port;
bool loaded;
bool ready;
}; };
struct acknowledgement struct acknowledgement
{ {
WORD opcode; MYWORD opcode;
WORD block; MYWORD block;
}; };
struct message struct message
{ {
WORD opcode; MYWORD opcode;
char buffer[514]; char buffer[514];
}; };
struct tftperror struct tftperror
{ {
WORD opcode; MYWORD opcode;
WORD errorcode; MYWORD errorcode;
char errormessage[512]; char errormessage[512];
}; };
struct packet struct packet
{ {
WORD opcode; MYWORD opcode;
WORD block; MYWORD block;
char buffer; char buffer;
}; };
struct data12 struct data12
{ {
DWORD rangeStart; MYDWORD rangeStart;
DWORD rangeEnd; MYDWORD rangeEnd;
}; };
struct request struct request
@ -84,15 +89,15 @@ struct request
time_t expiry; time_t expiry;
SOCKET sock; SOCKET sock;
SOCKET knock; SOCKET knock;
BYTE sockInd; MYBYTE sockInd;
BYTE attempt; MYBYTE attempt;
char path[256]; char path[256];
FILE *file; FILE *file;
char *filename; char *filename;
char *mode; char *mode;
char *alias; char *alias;
DWORD tsize; MYDWORD tsize;
DWORD fblock; MYDWORD fblock;
int bytesReady; int bytesReady;
int bytesRecd; int bytesRecd;
int bytesRead[2]; int bytesRead[2];
@ -111,18 +116,27 @@ struct request
message mesin; message mesin;
acknowledgement acin; acknowledgement acin;
}; };
WORD blksize; MYWORD blksize;
WORD timeout; MYWORD timeout;
WORD block; MYWORD block;
WORD tblock; MYWORD tblock;
};
struct data1
{
tftpConnType tftpConn[MAX_SERVERS];
MYDWORD allServers[MAX_SERVERS];
MYDWORD staticServers[MAX_SERVERS];
MYDWORD listenServers[MAX_SERVERS];
MYWORD listenPorts[MAX_SERVERS];
SOCKET maxFD;
bool ready;
bool busy;
}; };
struct data2 struct data2
{ {
WSADATA wsaData; WSADATA wsaData;
tftpConnType tftpConn[MAX_SERVERS];
DWORD servers[MAX_SERVERS];
WORD ports[MAX_SERVERS];
home homes[8]; home homes[8];
FILE *logfile; FILE *logfile;
data12 hostRanges[32]; data12 hostRanges[32];
@ -131,31 +145,40 @@ struct data2
char fileOverwrite; char fileOverwrite;
int minport; int minport;
int maxport; int maxport;
SOCKET maxFD; MYDWORD failureCount;
BYTE logLevel; MYBYTE logLevel;
bool ifspecified;
}; };
struct data15 struct data15
{ {
union union
{ {
//DWORD ip; //MYDWORD ip;
unsigned ip:32; unsigned ip:32;
BYTE octate[4]; MYBYTE octate[4];
}; };
}; };
//Functions //Functions
void runProg(void); bool detectChange();
void closeConn();
void getInterfaces(data1*);
void runProg();
void processRequest(LPVOID lpParam); void processRequest(LPVOID lpParam);
char* myGetToken(char*, BYTE); char* myGetToken(char*, MYBYTE);
void init(void); char* myTrim(char*, char*);
void init(void*);
bool cleanReq(request*); bool cleanReq(request*);
bool getSection(const char*, char*, BYTE, char*); bool addServer(MYDWORD*, MYDWORD);
FILE* openSection(const char*, MYBYTE, char*);
char* readSection(char*, FILE*);
bool getSection(const char*, char*, MYBYTE, char*);
bool isIP(char*s); bool isIP(char*s);
char* myLower(char*); char* myLower(char*);
char* myUpper(char*); char* myUpper(char*);
char* IP2String(char*, DWORD); char* IP2String(char*, MYDWORD);
void printWindowsError(void); MYDWORD* findServer(MYDWORD*, MYDWORD);
void logMess(request*, BYTE); void printWindowsError();
void logMess(char*, BYTE); void logMess(request*, MYBYTE);
void logMess(char*, MYBYTE);