singrdk/base/Windows/bootd/tftpd.h

81 lines
2.4 KiB
C++

//------------------------------------------------------------------------------
//
// Microsoft Research
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: tftpd.h
//
// Contents: TFTP Daemon
//
// Owner:
//
// History: 03/30/2000 Created.
//
//------------------------------------------------------------------------------
//
// Trivial File Transfer Protocol (TFTP) as per RFCs 1350, 1782, 1783 & 1784.
//
#define TFTP_PORT 69 // Internet standard
class ITftpSink
{
public:
virtual VOID OnTftpSocketError(INT nErr) = 0;
virtual VOID OnTftpMessage(UINT32 nAddr, PCSTR pszMessage, ...) = 0;
virtual VOID OnTftpAccessBegin(UINT32 nAddr, UINT16 nPort, BOOL bWrite, PCSTR pszFile) = 0;
virtual VOID OnTftpAccessEnd(UINT32 nAddr, UINT16 nPort, BOOL bSuccess) = 0;
};
class CTftp : public CSessionFactorySink
{
public:
friend class CTftpNode;
CTftp(CTftp *pNext);
~CTftp();
static VOID ConfigureFiles(ITftpSink *pSink, INT argc, PCHAR *argv);
static VOID OnFilesChange(ITftpSink *pSink);
VOID Configure(UINT32 nAddr, UINT16 nPort,
ITftpSink *pSink, INT argc, PCHAR *argv);
VOID OnNetworkChange(UINT32 nAddr, UINT32 nMask, UINT32 nGate);
VOID OnNetworkDelete(UINT32 nAddr, CTftp **ppNext);
// ISessionFactorySink
public:
virtual VOID OnFactoryRecv(UINT dwError,
UINT32 nAddr,
UINT16 nPort,
PBYTE pbData,
UINT cbRcvd);
virtual VOID OnFactoryClose(UINT dwError);
virtual VOID OnSessionCreate(UINT32 nPeerAddr,
UINT16 nPeerPort,
ISessionSource *pSource,
ISessionSink **ppSink,
PVOID pvContext);
protected:
VOID Log(ULONG nAddr, PCSTR pszMsg, ...);
inline UINT64 MakeId(UINT32 nAddr, UINT16 nPort) {
return (UINT64)nAddr | ((UINT64)nPort << 32);
}
protected:
ITftpSink * m_pSink;
UINT32 m_nAddr;
UINT16 m_nPort;
CTftp * m_pNext;
static UINT32 s_nSession;
};
//
///////////////////////////////////////////////////////////////// End of File.