www.pudn.com > ntshell.rar > portproxy.h


// portproxy.h: interface for the CPortProxy class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_PORTPROXY_H__7C847D98_2DBE_42AA_93BB_26738FE3B283__INCLUDED_) 
#define AFX_PORTPROXY_H__7C847D98_2DBE_42AA_93BB_26738FE3B283__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#define PORT_MAX_CONNECT 20 
 
#define WM_ADDPROXY WM_USER + 1 
 
class CAddProxy : public CDialogImpl 
{ 
public: 
	enum { IDD = IDD_ADDPROXY }; 
 
	BEGIN_MSG_MAP(CAddProxy) 
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 
		MESSAGE_HANDLER(WM_CLOSE, OnClose) 
		COMMAND_ID_HANDLER(IDOK, OnAddProxyBtn) 
		COMMAND_ID_HANDLER(IDCLOSE, OnHideDlgBtn) 
	END_MSG_MAP() 
 
// Handler prototypes (uncomment arguments if needed): 
//	LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 
//	LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
//	LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) 
 
	LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) 
	{ 
		SetDlgItemText(IDC_PROXYADDR, "127.0.0.1"); 
		return TRUE; 
	} 
	LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) 
	{ 
		ShowWindow(SW_HIDE); 
		return TRUE; 
	} 
	LRESULT OnAddProxyBtn(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
	{ 
		::SendMessage(GetParent(), WM_ADDPROXY, 0, 0); 
		return TRUE; 
	} 
	LRESULT OnHideDlgBtn(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
	{ 
		ShowWindow(SW_HIDE); 
		return TRUE; 
	} 
}; 
 
class CPortProxy : public CDialogImpl 
{ 
public: 
	enum { IDD = IDD_PORTPROXY }; 
 
	CPortProxy(); 
	virtual ~CPortProxy(); 
 
	BEGIN_MSG_MAP(CPortProxy) 
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 
		MESSAGE_HANDLER(WM_SIZE, OnSize) 
		MESSAGE_HANDLER(WM_SOCKET, OnSocket) 
		NOTIFY_ID_HANDLER(IDC_PROXYLIST, OnProxyList) 
		COMMAND_ID_HANDLER(IDM_ADDPROXY, OnAddProxy) 
	ALT_MSG_MAP(1) 
		COMMAND_ID_HANDLER(IDOK, OnAddProxyBtn) 
	END_MSG_MAP() 
 
// Handler prototypes (uncomment arguments if needed): 
//	LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 
//	LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
//	LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) 
 
	LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/); 
	LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/); 
	LRESULT OnSocket(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); 
	LRESULT OnProxyList(int wParam, LPNMHDR pNMHDR, BOOL& /*bHandled*/); 
	LRESULT OnAddProxy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 
	LRESULT OnAddProxyBtn(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 
 
private: 
	typedef struct _PROXY_LIST 
	{ 
		USHORT nLocalPort; 
		DWORD dwTargetHost; 
		USHORT nTargetPort; 
		SOCKET sListen; 
		ULONG nTotal; 
		ULONG nSend; 
		ULONG nRecv; 
		ULONG nSendBytes; 
		ULONG nRecvBytes; 
		HANDLE hWorkThread; 
		HANDLE hCtrlEvent1; 
		HANDLE hCtrlEvent2; 
		SOCKET local_sock; 
		SOCKET remote_sock; 
		struct _PROXY_LIST *pNext; 
	} PROXY_LIST, *PPROXY_LIST; 
 
	typedef struct _OPEN_REMOTE_PORT 
	{ 
		HANDLE hEvent; 
		SOCKET s; 
	} OPEN_REMOTE_PORT, *POPEN_REMOTE_PORT; 
 
	REQUEST_CONNECT rc; 
	bool connwait; 
	PWND_INIT_PARAM pwip; 
	CListViewCtrl m_hProxyList; 
	PPROXY_LIST ppl; 
	CAddProxy m_hAddProxyDlg; 
 
	BOOL SockProxyStart(USHORT ListenPort, char *RemoteHost, USHORT RemotePort); 
	static DWORD WINAPI SockProxyThread(LPVOID lpParam); 
	SOCKET OpenLocalPort(USHORT nPort); 
	SOCKET OpenRemotePort(char *lpHost, USHORT nPort); 
	static void OpenPortSuccess(SOCKET s, LPVOID param = NULL); 
}; 
 
#endif // !defined(AFX_PORTPROXY_H__7C847D98_2DBE_42AA_93BB_26738FE3B283__INCLUDED_)