36char 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) !=
'.')
1775 else if (*
string <
'0' || *
string >
'9')
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)
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
char * strcat(char *DstString, const char *SrcString)
char * strstr(char *String1, char *String2)
ACPI_SIZE strlen(const char *String)
char * strcpy(char *DstString, const char *SrcString)
char * strchr(const char *String, int ch)
CHAR FAR *WSAAPI inet_ntoa(IN IN_ADDR in)
BOOL WSAAPI WSACloseEvent(IN WSAEVENT hEvent)
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)
INT WSAAPI recvfrom(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags, OUT LPSOCKADDR from, IN OUT INT FAR *fromlen)
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
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)
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)
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
static unsigned char buff[32768]
double pow(double x, double y)
GLenum const GLvoid * addr
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
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
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_ _CRTIMP int __cdecl getchar(void)
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
_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)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP long __cdecl ftell(_Inout_ FILE *_File)
_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)
_Check_return_opt_ _CRTIMP int __cdecl setvbuf(_Inout_ FILE *_File, _Inout_updates_opt_z_(_Size) char *_Buf, _In_ int _Mode, _In_ size_t _Size)
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
_Check_return_ long __cdecl atol(_In_z_ const char *_Str)
REFIID LPVOID DWORD_PTR dw
DWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped)
#define memcpy(s1, s2, n)
#define ERROR_ALREADY_EXISTS
#define sprintf(buf, format,...)
const char * strerror(int err)
#define VER_PLATFORM_WIN32_NT
BOOL WINAPI QueryServiceStatus(SC_HANDLE hService, LPSERVICE_STATUS lpServiceStatus)
BOOL WINAPI DeleteService(SC_HANDLE hService)
BOOL WINAPI ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
_CRTIMP uintptr_t __cdecl _beginthread(_In_ void(__cdecl *_StartAddress)(void *), _In_ unsigned _StackSize, _In_opt_ void *_ArgList)
_CRTIMP void __cdecl _endthread(void)
_CRT_RESTORE_GCC_WARNINGS _CRT_DISABLE_GCC_WARNINGS _Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
_CRTIMP struct tm *__cdecl localtime(const time_t *_Time)
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
size_t CDECL strftime(char *str, size_t max, const char *format, const struct tm *mstm)
ULONG dwOSVersionInfoSize
DWORD dwServiceSpecificExitCode
MYDWORD staticServers[MAX_SERVERS]
tftpConnType tftpConn[MAX_SERVERS]
MYDWORD allServers[MAX_SERVERS]
MYDWORD listenServers[MAX_SERVERS]
MYWORD listenPorts[MAX_SERVERS]
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
bool getSection(const char *sectionName, char *buffer, MYBYTE serial, char *fileName)
char * myGetToken(char *buff, MYBYTE index)
bool addServer(MYDWORD *array, MYDWORD ip)
FILE * openSection(const char *sectionName, MYBYTE serial, char *fileName)
char * myLower(char *string)
char * myTrim(char *target, char *source)
bool stopService(SC_HANDLE service)
SERVICE_STATUS_HANDLE serviceStatusHandle
void getInterfaces(data1 *network)
void logMess(char *logBuff, MYBYTE logLevel)
char * IP2String(char *target, MYDWORD ip)
SERVICE_STATUS serviceStatus
void processRequest(void *lpParam)
MYWORD myTokenize(char *target, char *source, char *sep, bool whiteSep)
MYDWORD * findServer(MYDWORD *array, MYDWORD ip)
void WINAPI ServiceControlHandler(DWORD controlCode)
char * readSection(char *buff, FILE *f)
void mySplit(char *name, char *value, char *source, char splitChar)
void WINAPI ServiceMain(DWORD, TCHAR *[])
bool cleanReq(request *req)
char * myUpper(char *string)
_In_ PUSBD_INTERFACE_LIST_ENTRY InterfaceList
DWORD WINAPI GetLastError(void)
#define FORMAT_MESSAGE_IGNORE_INSERTS
#define FORMAT_MESSAGE_FROM_SYSTEM
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
#define WritePrivateProfileString
#define GetModuleFileName
WINSOCK_API_LINKAGE WSAEVENT WSAAPI WSACreateEvent(void)
#define FD_ISSET(fd, set)
int PASCAL FAR WSAGetLastError(void)
int PASCAL FAR WSACleanup(void)
#define SERVICE_ACCEPT_STOP
#define SERVICE_QUERY_STATUS
#define SERVICE_ALL_ACCESS
#define SC_MANAGER_CREATE_SERVICE
#define SC_MANAGER_CONNECT
#define SERVICE_STOP_PENDING
#define SERVICE_CONTROL_SHUTDOWN
#define StartServiceCtrlDispatcher
#define SERVICE_START_PENDING
#define SERVICE_CONTROL_CONTINUE
#define SERVICE_CONTROL_STOP
#define RegisterServiceCtrlHandler
#define SERVICE_ACCEPT_SHUTDOWN
#define SERVICE_CONTROL_PAUSE
#define SERVICE_CONTROL_INTERROGATE
#define SIO_GET_INTERFACE_LIST
struct _INTERFACE_INFO INTERFACE_INFO
#define SERVICE_AUTO_START
#define SERVICE_WIN32_OWN_PROCESS
#define SERVICE_ERROR_IGNORE