Browse Source

Support having the port after the ip/host name when sending to friends

sabrogden 5 years ago
parent
commit
279c03d414
11 changed files with 110 additions and 10 deletions
  1. 37 0
      AdvGeneral.cpp
  2. 28 2
      Client.cpp
  3. 3 1
      FileRecieve.cpp
  4. 2 1
      Misc.cpp
  5. 13 1
      OleClipSource.cpp
  6. 13 2
      Options.cpp
  7. 3 1
      Options.h
  8. 1 1
      QPasteWnd.cpp
  9. 4 0
      Server.cpp
  10. 1 0
      Server.h
  11. 5 1
      ServerDefines.h

+ 37 - 0
AdvGeneral.cpp

@@ -131,6 +131,10 @@ END_MESSAGE_MAP()
 #define SETTING_MOVE_SELECTION_ON_OPEN_HOTKEY 80
 #define SETTING_ALOW_BACK_TO_BACK_DUPLICATES 81
 #define SETTING_MAINTAIN_SEARCH_VIEW 82
+#define SETTING_SEND_RECV_PORT 83
+#define SETTING_DEBUG_TO_FILE 84
+#define SETTING_DEBUG_TO_OUTPUT_STRING 85
+
 
 BOOL CAdvGeneral::OnInitDialog()
 {
@@ -224,6 +228,8 @@ BOOL CAdvGeneral::OnInitDialog()
 
 	pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Send Keys Delay (ms)"), (long)CGetSetOptions::RealSendKeysDelay(), _T(""), SETTING_SEND_KEYS_DELAY));
 
+	pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Network Send Receive Port (default: 23443)"), (long)CGetSetOptions::GetPort(), _T(""), SETTING_SEND_RECV_PORT));
+
 	AddTrueFalse(pGroupTest, _T("Show Clips That are in Groups in Main List"), CGetSetOptions::GetShowAllClipsInMainList(), SETTING_SHOW_GROUP_CLIPS_IN_LIST);
 	AddTrueFalse(pGroupTest, _T("Show leading whitespace"), CGetSetOptions::GetDescShowLeadingWhiteSpace(), SETTING_SHOW_LEADING_WHITESPACE);
 	AddTrueFalse(pGroupTest, _T("Show In Taskbar"), CGetSetOptions::GetShowInTaskBar(), SETTTING_SHOW_IN_TASKBAR);
@@ -247,6 +253,9 @@ BOOL CAdvGeneral::OnInitDialog()
 	AddTrueFalse(pGroupTest, _T("Update Clip Order On Paste"), CGetSetOptions::GetUpdateTimeOnPaste(), SETTING_UPDATE_ORDER_ON_PASTE);
 	AddTrueFalse(pGroupTest, _T("Update Clip Order On Ctrl-C"), CGetSetOptions::GetUpdateClipOrderOnCtrlC(), SETTING_UPDATE_ORDER_ON_CTRL_C);
 
+	AddTrueFalse(pGroupTest, _T("Write debug to file"), CGetSetOptions::GetEnableDebugLogging(), SETTING_DEBUG_TO_FILE);
+	AddTrueFalse(pGroupTest, _T("Write debug to OutputDebugString"), CGetSetOptions::GetEnableDebugLogging(), SETTING_DEBUG_TO_OUTPUT_STRING);
+
 	CMFCPropertyGridProperty * regexFilterGroup = new CMFCPropertyGridProperty(_T("Exlude clips by Regular Expressions"));
 	m_propertyGrid.AddProperty(regexFilterGroup);	
 
@@ -837,6 +846,34 @@ void CAdvGeneral::OnBnClickedOk()
 					CGetSetOptions::SetMaintainSearchView(val);
 				}
 				break;
+			case SETTING_SEND_RECV_PORT:
+				if (pNewValue->lVal != pOrigValue->lVal)
+				{
+					CGetSetOptions::SetPort(pNewValue->lVal);
+				}
+				break;
+			case SETTING_DEBUG_TO_FILE:
+				if (pNewValue->lVal != pOrigValue->lVal)
+				{
+					BOOL val = false;
+					if (wcscmp(pNewValue->bstrVal, L"True") == 0)
+					{
+						val = true;
+					}
+					CGetSetOptions::SetEnableDebugLogging(val);
+				}
+				break;
+			case SETTING_DEBUG_TO_OUTPUT_STRING:
+				if (pNewValue->lVal != pOrigValue->lVal)
+				{
+					BOOL val = false;
+					if (wcscmp(pNewValue->bstrVal, L"True") == 0)
+					{
+						val = true;
+					}
+					CGetSetOptions::SetEnableOutputDebugStringLogging(val);
+				}
+				break;
 			}
 		}
 	}

+ 28 - 2
Client.cpp

@@ -9,6 +9,7 @@
 #include "RecieveSocket.h"
 #include "FileRecieve.h"
 #include "FileTransferProgressDlg.h"
+#include "Shared/Tokenizer.h"
 
 
 #ifdef _DEBUG
@@ -134,7 +135,26 @@ BOOL CClient::OpenConnection(const TCHAR* servername)
 		return FALSE;
 	}
 
-	CStringA csServerNameA = CTextConvert::ConvertToChar(servername);
+	CString parsedServerName = servername;
+	auto port = g_Opt.m_lPort;
+
+	CTokenizer tokenizer(servername, ":");
+	CString token;
+	int pos = 0;
+	while (tokenizer.Next(token))
+	{
+		if (pos == 0)
+		{
+			parsedServerName = token;
+		}
+		else if (pos == 1)
+		{
+			port = ATOI(token);
+		}
+		pos++;
+	}
+
+	CStringA csServerNameA = CTextConvert::ConvertToChar(parsedServerName);
 
 	//11-5-06 Serge Baranov found that if we are passing in an ip then
 	//don't look the name up using gethostbyname/gethostbyaddr->
@@ -161,7 +181,7 @@ BOOL CClient::OpenConnection(const TCHAR* servername)
 
 	server.sin_addr.s_addr = addr;
 	server.sin_family = AF_INET;
-	server.sin_port = htons((u_short)g_Opt.m_lPort);
+	server.sin_port = htons((u_short)port);
 	if(connect(m_Connection, (struct sockaddr*)&server, sizeof(server)))
 	{
 		int nWhy = WSAGetLastError();
@@ -180,6 +200,12 @@ BOOL CClient::SendItem(CClip *pClip, bool manualSend)
 
 	Info.m_manualSend = manualSend;
 
+	////only send a response port if it's different than the default
+	if (g_Opt.m_lPort != 23443)
+	{
+		Info.m_respondPort = g_Opt.m_lPort;
+	}
+
 	//Send all text over as UTF-8
 	CStringA dest;
 	if(CTextConvert::ConvertToUTF8(GetComputerName(), dest))

+ 3 - 1
FileRecieve.cpp

@@ -167,7 +167,9 @@ long CFileRecieve::RecieveFileData(ULONG lFileSize, CString csFileName, CString
 {
 	CString csFile = CGetSetOptions::GetPath(PATH_REMOTE_FILES);
 	CreateDirectory(csFile, NULL);
-	csFile += m_csReceivingFromIP + "\\";
+
+	csFile += nsPath::ReplaceInvalid(m_csReceivingFromIP) + "\\";
+
 	CreateDirectory(csFile, NULL);
 	
 	nsPath::CPath path(csFileName);

+ 2 - 1
Misc.cpp

@@ -9,6 +9,7 @@
 #include <sys/types.h>  
 #include <sys/stat.h> 
 #include "Path.h"
+#include <regex>
 
 CString GetIPAddress()
 {
@@ -89,7 +90,7 @@ void log(const TCHAR* msg, bool bFromSendRecieve, CString csFile, long lLine)
 	csText += "\n";
 
 #ifndef _DEBUG
-	if(CGetSetOptions::m_bOutputDebugString)
+	if(CGetSetOptions::m_outputDebugStringLogging)
 #endif
 	{
 		OutputDebugString(csText);

+ 13 - 1
OleClipSource.cpp

@@ -1065,8 +1065,20 @@ BOOL COleClipSource::OnRenderGlobalData(LPFORMATETC lpFormatEtc, HGLOBAL* phGlob
 					
 					GlobalUnlock(pDittoDelayCF_HDROP->m_hgData);
 
+					CString ipPort = csIP;
+					if (pData->respondPort > 0)
+					{
+						ipPort.Format(_T("%s:%d"), csIP, pData->respondPort);
+					}
+
+					CString namePort = csComputerName;
+					if (pData->respondPort > 0)
+					{
+						namePort.Format(_T("%s:%d"), csComputerName, pData->respondPort);
+					}
+
 					CClient cl;
-					hData = cl.RequestCopiedFiles(*pCF_HDROP, csIP, csComputerName);
+					hData = cl.RequestCopiedFiles(*pCF_HDROP, ipPort, namePort);
 				}
 			}
 			else

+ 13 - 2
Options.cpp

@@ -55,7 +55,7 @@ DWORD CGetSetOptions::m_dwSaveClipDelay;
 long CGetSetOptions::m_lProcessDrawClipboardDelay;
 BOOL CGetSetOptions::m_bEnableDebugLogging;
 BOOL CGetSetOptions::m_bEnsureConnectToClipboard;
-bool CGetSetOptions::m_bOutputDebugString;
+BOOL CGetSetOptions::m_outputDebugStringLogging;
 bool CGetSetOptions::m_bInConversion = false;
 bool CGetSetOptions::m_bFromIni = false;
 bool CGetSetOptions::m_portable = false;
@@ -193,8 +193,8 @@ void CGetSetOptions::LoadSettings()
 	m_dwSaveClipDelay = GetSaveClipDelay();
 	m_lProcessDrawClipboardDelay = GetProcessDrawClipboardDelay();
 	m_bEnableDebugLogging = GetEnableDebugLogging();
+	m_outputDebugStringLogging = GetEnableOutputDebugStringLogging();
 	m_bEnsureConnectToClipboard = GetEnsureConnectToClipboard();
-	m_bOutputDebugString = false;
 	m_showScrollBar = GetShowScrollBar();
 	m_bShowAlwaysOnTopWarning = GetShowAlwaysOnTopWarning();
 	m_excludeCF_DIBInExcel = GetExcludeCF_DIBInExcel();
@@ -1694,6 +1694,17 @@ void CGetSetOptions::SetEnableDebugLogging(BOOL bEnable)
 	SetProfileLong("EnableDebugLogging", bEnable);
 }
 
+BOOL CGetSetOptions::GetEnableOutputDebugStringLogging()
+{
+	return GetProfileLong("EnableOutputDebugStringLogging", FALSE);
+}
+
+void CGetSetOptions::SetEnableOutputDebugStringLogging(BOOL bEnable)
+{
+	m_outputDebugStringLogging = bEnable;
+	SetProfileLong("EnableOutputDebugStringLogging", bEnable);
+}
+
 BOOL CGetSetOptions::GetEnsureConnectToClipboard()
 {
 	return GetProfileLong("EnsureConnected2", FALSE);

+ 3 - 1
Options.h

@@ -341,7 +341,9 @@ public:
 	static BOOL		GetUpdateDescWhenSavingClip();
 	static void		SetUpdateDescWhenSavingClip(BOOL bSet);
 
-	static bool		m_bOutputDebugString;
+	static BOOL		m_outputDebugStringLogging;
+	static BOOL		GetEnableOutputDebugStringLogging();
+	static void		SetEnableOutputDebugStringLogging(BOOL bSet);
 
 	static CStringArray m_csNetworkPasswordArray;
 

+ 1 - 1
QPasteWnd.cpp

@@ -3583,7 +3583,7 @@ bool CQPasteWnd::DoActionToggleOutputDebugString()
 		Log(_T("turning DebugString logging OFF"));
 	}
 
-	CGetSetOptions::m_bOutputDebugString = !CGetSetOptions::m_bOutputDebugString;
+	CGetSetOptions::m_outputDebugStringLogging = !CGetSetOptions::m_outputDebugStringLogging;
 
 	if (CGetSetOptions::m_bEnableDebugLogging)
 	{

+ 4 - 0
Server.cpp

@@ -111,6 +111,7 @@ CServer::CServer()
 	m_pClip = NULL;
 	m_bSetToClipBoard = FALSE;
 	m_manualSend = false;
+	m_respondPort = 0;
 }
 
 CServer::~CServer()
@@ -199,6 +200,7 @@ void CServer::OnStart(CSendInfo &info)
 	CTextConvert::ConvertFromUTF8(info.m_cDesc, m_csDesc);
 
 	m_manualSend = info.m_manualSend;
+	m_respondPort = info.m_respondPort;
 
 	if(m_pClip != NULL)
 	{
@@ -370,6 +372,8 @@ void CServer::AddRemoteCF_HDROPFormat()
 
 	CDittoCF_HDROP Drop;
 
+	Drop.respondPort = m_respondPort;
+
 	CTextConvert Convert;
 
 	CStringA dest;

+ 1 - 0
Server.h

@@ -40,6 +40,7 @@ protected:
 	BOOL m_bSetToClipBoard;
 	CString m_csIP;
 	bool m_manualSend;
+	short m_respondPort;
 	CString m_csComputerName;
 	CString m_csDesc;
 	CRecieveSocket m_Sock;

+ 5 - 1
ServerDefines.h

@@ -20,6 +20,7 @@ public:
 		m_lParameter1 = -1;
 		m_lParameter2 = -1;
 		m_manualSend = 0;
+		m_respondPort = 0;
 	}
 	int					m_nSize;
 	MyEnums::eSendType	m_Type;
@@ -31,7 +32,8 @@ public:
 	long				m_lParameter2;
 	CHAR				m_md5[32];
 	char				m_manualSend;
-	char				m_cExtra[17];
+	short				m_respondPort;
+	char				m_cExtra[15];
 };
 
 class CDittoCF_HDROP
@@ -41,7 +43,9 @@ public:
 	{
 		memset(m_cIP, 0, sizeof(m_cIP));
 		memset(m_cComputerName, 0, sizeof(m_cComputerName));
+		respondPort = 0;
 	}
 	char m_cIP[25];
 	char m_cComputerName[MAX_COMPUTERNAME_LENGTH + 1];
+	short respondPort;
 };