#if !defined(AFX_SERVERTHREAD_H__5A31BA28_18E3_4E9B_8F13_F7179C3E0A72__INCLUDED_)
#define AFX_SERVERTHREAD_H__5A31BA28_18E3_4E9B_8F13_F7179C3E0A72__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ServerThread.h : header file
//


char *stristr(const char *string, const char *strCharSet);
void ConvertEscapeCharacters(const char *src, char *dst, const unsigned int dstLen, bool replacePlusWithSpace);
bool IsHex(char c);
UINT HttpThread(SSL *ssl);
enum method getmethtype( char *buf );
void geturl(char *buf, char* url);
void SendHTTPHeader(SSL *ssl, 
					const char *httpResponse, 
					const char *additionalResponseHeader, 
					const char *contentType, 
					const unsigned int msgLen);
void SendOKHeader(SSL *ssl, const char *mimeType, const unsigned int msgLen);
void SendNotSupportedMessage(SSL *ssl);
void SendInternalServerErrorMessage(SSL *ssl);
void SendNotFoundMessage(SSL *ssl, const char *uri);
void GetMimeType(const char *fileExt, CString& mimeType);
bool SendFile(SSL *ssl, const char *filename, const char *uri, const char *forceMimeType);
bool ParsePost(SSL *ssl, char *buffer, struct FieldData *fd);
void HandlePostRequest(SSL *ssl, char *uri, struct FieldData fd);


/////////////////////////////////////////////////////////////////////////////
// CServerThread thread

class CServerThread : public CWinThread
{
	DECLARE_DYNCREATE(CServerThread)
protected:
	CServerThread();           // protected constructor used by dynamic creation
	SOCKET m_Socket;
// Attributes
public:
//	CCriticalSection m_crit;

// Operations
public:
    void Close();
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CServerThread)
	public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	//}}AFX_VIRTUAL

// Implementation
protected:
	virtual int Run();
	virtual ~CServerThread();
	bool m_Quit;
	// Generated message map functions
	//{{AFX_MSG(CServerThread)
		// NOTE - the ClassWizard will add and remove member functions here.
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SERVERTHREAD_H__5A31BA28_18E3_4E9B_8F13_F7179C3E0A72__INCLUDED_)
