36 char sVersion[] =
"Open TFTP Server MultiThreaded Version 1.64 Windows Built 2001";
89 if (controlCode >= 128 && controlCode <= 255)
234 printf(
"Stopping Service.");
235 for (
int i = 0;
i < 100;
i++)
260 if (serviceControlManager)
262 SC_HANDLE service =
OpenService(serviceControlManager,
266 printf(
"Service Already Exists..\n");
282 printf(
"Successfully installed.. !\n");
287 printf(
"Installation Failed..\n");
300 if (serviceControlManager)
302 SC_HANDLE service =
OpenService(serviceControlManager,
309 printf(
"Successfully Removed !\n");
312 printf(
"Failed to Stop Service..\n");
361 bool serviceStopped =
true;
363 if (serviceControlManager)
365 SC_HANDLE service =
OpenService(serviceControlManager,
380 printf(
"Failed to Stop Service\n");
388 printf(
"This option is not available on Windows95/98/ME\n");
413 printf(
"\naccepting requests..\n");
541 bool allowed =
false;
597 bool fetchAck =
false;
683 inPtr +=
strlen(inPtr) + 1;
697 inPtr +=
strlen(inPtr) + 1;
761 for (
int i = 0;
i < 8;
i++)
928 outPtr +=
strlen(outPtr) + 1;
929 inPtr +=
strlen(inPtr) + 1;
939 outPtr +=
strlen(outPtr) + 1;
944 outPtr +=
strlen(outPtr) + 1;
945 inPtr +=
strlen(inPtr) + 1;
955 outPtr +=
strlen(outPtr) + 1;
983 outPtr +=
strlen(outPtr) + 1;
989 outPtr +=
strlen(outPtr) + 1;
990 inPtr +=
strlen(inPtr) + 1;
1001 outPtr +=
strlen(outPtr) + 1;
1004 inPtr +=
strlen(inPtr) + 1;
1063 else if (ftellLoc < 0)
1578 return (found ==
serial);
1657 else if (whiteSep && (*
source) <= 32)
1771 for (; *
string;
string++)
1773 if (*
string ==
'.' && *(
string + 1) !=
'.')
1787 char diff =
'a' -
'A';
1789 for (
int i = 0;
i <
len;
i++)
1790 if (
string[
i] >=
'a' &&
string[
i] <=
'z')
1797 char diff =
'a' -
'A';
1799 for (
int i = 0;
i <
len;
i++)
1800 if (
string[
i] >=
'A' &&
string[
i] <=
'Z')
1888 sprintf(
logBuff,
"Section [HOME], alias and bare path mixup, entry %s ignored", raw);
1901 for (
int i = 0;
i < 8;
i++)
1906 sprintf(
logBuff,
"Section [HOME], Duplicate Entry: %s ignored", raw);
1945 sprintf(
logBuff,
"Section [HOME], alias and bare path mixup, entry %s ignored", raw);
1950 sprintf(
logBuff,
"Section [HOME], Duplicate Path: %s ignored", raw);
1955 sprintf(
logBuff,
"Section [HOME], missing = sign, Invalid Entry: %s ignored", raw);
1965 *(++iniFileExt) = 0;
2093 sprintf(
logBuff,
"Section [ALLOWED-CLIENTS] Invalid entry %s in ini file, ignored", raw);
2102 printf(
"starting TFTP...\n");
2175 TEXT(
"AchalTFTServerLogEvent"));
2184 sprintf(
logBuff,
"CreateEvent opened an existing Event\nServer May already be Running");
2193 TEXT(
"AchalTFTServerThreadEvent"));
2202 sprintf(
logBuff,
"CreateEvent opened an existing Event\nServer May already be Running");
2211 TEXT(
"AchalTFTServerSocketEvent"));
2220 sprintf(
logBuff,
"CreateEvent opened an existing Event\nServer May already be Running");
2229 TEXT(
"AchalTFTServerCountEvent"));
2238 sprintf(
logBuff,
"CreateEvent opened an existing Event\nServer May already be Running");
2267 bool bindfailed =
false;
2305 sprintf(
logBuff,
"Warning: Section [LISTEN-ON], Invalid Interface Address %s, ignored", raw);
2529 unsigned long nBytesReturned;
2537 for (
int i = 0;
i < nNumInterfaces; ++
i)
INT WSAAPI recvfrom(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags, OUT LPSOCKADDR from, IN OUT INT FAR *fromlen)
char * myGetToken(char *buff, MYBYTE index)
#define SERVICE_ERROR_IGNORE
MYWORD listenPorts[MAX_SERVERS]
#define VER_PLATFORM_WIN32_NT
struct _INTERFACE_INFO INTERFACE_INFO
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
_CRTIMP void __cdecl _endthread(void)
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
char * readSection(char *buff, FILE *f)
#define SC_MANAGER_CONNECT
char * strcat(char *DstString, const char *SrcString)
SERVICE_STATUS_HANDLE serviceStatusHandle
ACPI_SIZE strlen(const char *String)
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
char * strstr(char *String1, char *String2)
_In_ PUSBD_INTERFACE_LIST_ENTRY InterfaceList
#define SERVICE_ACCEPT_STOP
MYDWORD staticServers[MAX_SERVERS]
INT WSAAPI WSACleanup(VOID)
void WINAPI ServiceMain(DWORD, TCHAR *[])
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
#define SERVICE_START_PENDING
DWORD dwServiceSpecificExitCode
INT WSAAPI WSAIoctl(IN SOCKET s, IN DWORD dwIoControlCode, IN LPVOID lpvInBuffer, IN DWORD cbInBuffer, OUT LPVOID lpvOutBuffer, IN DWORD cbOutBuffer, OUT LPDWORD lpcbBytesReturned, IN LPWSAOVERLAPPED lpOverlapped, IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
#define SERVICE_ALL_ACCESS
BOOL WINAPI DeleteService(SC_HANDLE hService)
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
const char * strerror(int err)
INT WSAAPI connect(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
int main(int argc, TCHAR *argv[])
bool addServer(MYDWORD *array, MYDWORD ip)
char * myUpper(char *string)
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
#define sprintf(buf, format,...)
char * myLower(char *string)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define RegisterServiceCtrlHandler
bool getSection(const char *sectionName, char *buffer, MYBYTE serial, char *fileName)
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
#define FD_ISSET(fd, set)
float pow(float __x, int __y)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
#define StartServiceCtrlDispatcher
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
REFIID LPVOID DWORD_PTR dw
BOOL WSAAPI WSACloseEvent(IN WSAEVENT hEvent)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
void WINAPI ServiceControlHandler(DWORD controlCode)
#define SERVICE_CONTROL_INTERROGATE
#define SERVICE_QUERY_STATUS
#define SC_MANAGER_CREATE_SERVICE
#define SERVICE_WIN32_OWN_PROCESS
#define FORMAT_MESSAGE_FROM_SYSTEM
ULONG dwOSVersionInfoSize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
size_t CDECL strftime(char *str, size_t max, const char *format, const struct tm *mstm)
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
void processRequest(void *lpParam)
#define SERVICE_ACCEPT_SHUTDOWN
INT WSAAPI WSAGetLastError(VOID)
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
bool cleanReq(request *req)
void getInterfaces(data1 *network)
BOOL WINAPI QueryServiceStatus(SC_HANDLE hService, LPSERVICE_STATUS lpServiceStatus)
#define GetModuleFileName
SERVICE_STATUS serviceStatus
MYDWORD listenServers[MAX_SERVERS]
_Check_return_ long __cdecl atol(_In_z_ const char *_Str)
#define SERVICE_CONTROL_PAUSE
GLenum const GLvoid * addr
MYDWORD allServers[MAX_SERVERS]
#define memcpy(s1, s2, n)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_CRTIMP struct tm *__cdecl localtime(const time_t *_Time)
MYDWORD * findServer(MYDWORD *array, MYDWORD ip)
DWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped)
#define FORMAT_MESSAGE_IGNORE_INSERTS
void mySplit(char *name, char *value, char *source, char splitChar)
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
_Check_return_ _CRTIMP int __cdecl getchar(void)
FILE * openSection(const char *sectionName, MYBYTE serial, char *fileName)
WSAEVENT WSAAPI WSACreateEvent(VOID)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
GLsizei GLsizei GLchar * source
#define SERVICE_CONTROL_CONTINUE
MYWORD myTokenize(char *target, char *source, char *sep, bool whiteSep)
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
INT WSAAPI sendto(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags, IN CONST struct sockaddr *to, IN INT tolen)
char * strchr(const char *String, int ch)
#define SERVICE_AUTO_START
_CRTIMP uintptr_t __cdecl _beginthread(_In_ void(__cdecl *_StartAddress)(void *), _In_ unsigned _StackSize, _In_opt_ void *_ArgList)
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
char * strcpy(char *DstString, const char *SrcString)
_Check_return_ _CRTIMP long __cdecl ftell(_Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP int __cdecl setvbuf(_Inout_ FILE *_File, _Inout_updates_opt_z_(_Size) char *_Buf, _In_ int _Mode, _In_ size_t _Size)
#define SERVICE_CONTROL_STOP
#define ERROR_ALREADY_EXISTS
char * IP2String(char *target, MYDWORD ip)
#define SIO_GET_INTERFACE_LIST
tftpConnType tftpConn[MAX_SERVERS]
char * myTrim(char *target, char *source)
#define SERVICE_STOP_PENDING
static unsigned char buff[32768]
bool stopService(SC_HANDLE service)
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
void logMess(char *logBuff, MYBYTE logLevel)
#define SERVICE_CONTROL_SHUTDOWN
#define WritePrivateProfileString