Browse Source

Bug 1668: Optionally generate WebDAV URLs with http:// protocol prefix

https://winscp.net/tracker/1668

Source commit: eeeb62e1cd30025bb85363d6531acd74bcf3d90e
Martin Prikryl 7 years ago
parent
commit
d75817b1c3

+ 19 - 5
source/core/SessionData.cpp

@@ -2899,7 +2899,7 @@ bool __fastcall TSessionData::IsSecure()
   return Result;
 }
 //---------------------------------------------------------------------
-UnicodeString __fastcall TSessionData::GetProtocolUrl()
+UnicodeString __fastcall TSessionData::GetProtocolUrl(bool HttpForWebDAV)
 {
   UnicodeString Url;
   switch (FSProtocol)
@@ -2932,13 +2932,27 @@ UnicodeString __fastcall TSessionData::GetProtocolUrl()
       break;
 
     case fsWebDAV:
-      if (Ftps == ftpsImplicit)
+      if (HttpForWebDAV)
       {
-        Url = WebDAVSProtocol;
+        if (Ftps == ftpsImplicit)
+        {
+          Url = HttpsProtocol;
+        }
+        else
+        {
+          Url = HttpProtocol;
+        }
       }
       else
       {
-        Url = WebDAVProtocol;
+        if (Ftps == ftpsImplicit)
+        {
+          Url = WebDAVSProtocol;
+        }
+        else
+        {
+          Url = WebDAVProtocol;
+        }
       }
       break;
 
@@ -3001,7 +3015,7 @@ UnicodeString __fastcall TSessionData::GenerateSessionUrl(unsigned int Flags)
     Url += WinSCPProtocolPrefix;
   }
 
-  Url += GetProtocolUrl();
+  Url += GetProtocolUrl(FLAGSET(Flags, sufHttpForWebDAV));
 
   if (FLAGSET(Flags, sufUserName) && !UserNameExpanded.IsEmpty())
   {

+ 3 - 2
source/core/SessionData.h

@@ -47,6 +47,7 @@ enum TSessionUrlFlags
   sufPassword = 0x04,
   sufHostKey = 0x08,
   sufRawSettings = 0x10,
+  sufHttpForWebDAV = 0x20,
   sufSession = sufUserName | sufPassword | sufHostKey,
   sufComplete = sufSession | sufRawSettings,
   sufOpen = sufUserName | sufPassword
@@ -280,7 +281,7 @@ private:
   UnicodeString __fastcall GetSessionName();
   bool __fastcall HasSessionName();
   UnicodeString __fastcall GetDefaultSessionName();
-  UnicodeString __fastcall GetProtocolUrl();
+  UnicodeString __fastcall GetProtocolUrl(bool HttpForWebDAV);
   void __fastcall SetFSProtocol(TFSProtocol value);
   UnicodeString __fastcall GetFSProtocolStr();
   void __fastcall SetLocalDirectory(UnicodeString value);
@@ -486,7 +487,7 @@ public:
   bool __fastcall IsSameSite(const TSessionData * Default);
   bool __fastcall IsInFolderOrWorkspace(UnicodeString Name);
   UnicodeString __fastcall GenerateSessionUrl(unsigned int Flags);
-  bool __fastcall TSessionData::HasRawSettingsForUrl();
+  bool __fastcall HasRawSettingsForUrl();
 
   UnicodeString __fastcall GenerateOpenCommandArgs(bool Rtf);
   void __fastcall GenerateAssemblyCode(TAssemblyLanguage Language, UnicodeString & Head, UnicodeString & Tail, int & Indent);

+ 2 - 1
source/forms/GenerateUrl.cpp

@@ -192,7 +192,8 @@ UnicodeString __fastcall TGenerateUrlDialog::GenerateUrl(UnicodeString Path)
       FLAGMASK(UserNameCheck->Enabled && UserNameCheck->Checked, sufUserName) |
       FLAGMASK(PasswordCheck->Enabled && PasswordCheck->Checked, sufPassword) |
       FLAGMASK(HostKeyCheck->Enabled && HostKeyCheck->Checked, sufHostKey) |
-      FLAGMASK(RawSettingsCheck->Enabled && RawSettingsCheck->Checked, sufRawSettings));
+      FLAGMASK(RawSettingsCheck->Enabled && RawSettingsCheck->Checked, sufRawSettings) |
+      FLAGMASK(CustomWinConfiguration->HttpForWebDAV, sufHttpForWebDAV));
 
   if ((RemoteDirectoryCheck->Enabled && RemoteDirectoryCheck->Checked) ||
       IsFileUrl())

+ 2 - 0
source/windows/CustomWinConfiguration.cpp

@@ -121,6 +121,7 @@ void __fastcall TCustomWinConfiguration::Default()
   FOperationProgressOnTop = true;
   FSessionColors = L"";
   FCopyShortCutHintShown = false;
+  FHttpForWebDAV = false;
 
   DefaultHistory();
 }
@@ -149,6 +150,7 @@ void __fastcall TCustomWinConfiguration::Saved()
     KEY(Bool,     ConfirmExitOnCompletion); \
     KEY(String,   SessionColors); \
     KEY(Bool,     CopyShortCutHintShown); \
+    KEY(Bool,     HttpForWebDAV); \
   ) \
   BLOCK(L"Interface\\SynchronizeChecklist", CANCREATE, \
     KEY(String,   SynchronizeChecklist.WindowParams); \

+ 2 - 0
source/windows/CustomWinConfiguration.h

@@ -59,6 +59,7 @@ private:
   bool FOperationProgressOnTop;
   UnicodeString FSessionColors;
   bool FCopyShortCutHintShown;
+  bool FHttpForWebDAV;
   TNotifyEvent FOnMasterPasswordRecrypt;
 
   void __fastcall SetInterface(TInterface value);
@@ -105,6 +106,7 @@ public:
   __property UnicodeString SessionColors  = { read=FSessionColors, write=FSessionColors };
   __property bool CopyShortCutHintShown  = { read=FCopyShortCutHintShown, write=FCopyShortCutHintShown };
   __property bool UseMasterPassword = { read = GetUseMasterPassword };
+  __property bool HttpForWebDAV = { read = FHttpForWebDAV, write = FHttpForWebDAV };
   __property TNotifyEvent OnMasterPasswordRecrypt = { read = FOnMasterPasswordRecrypt, write = FOnMasterPasswordRecrypt };
   __property UnicodeString DefaultFixedWidthFontName = { read = GetDefaultFixedWidthFontName };
   __property int DefaultFixedWidthFontSize = { read = GetDefaultFixedWidthFontSize };