From 126bfff3be71024cf8090f07335f04f297ee958c Mon Sep 17 00:00:00 2001
From: Patrick Simpson
Date: Wed, 7 Feb 2018 15:34:01 +0200
Subject: [PATCH] Fixes to URLs for SOAP and ActiveSync requests; additional
logging in case of error
---
.../ZPush/Connect/Soap/SoapRequestEncoder.cs | 16 ++++++++++++++--
.../ZPush/Connect/ZPushConnection.cs | 10 +++++++---
.../ZPush/Connect/ZPushRequestEncoder.cs | 2 +-
.../ZPush/Connect/ZPushWebService.cs | 2 +-
4 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/Soap/SoapRequestEncoder.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/Soap/SoapRequestEncoder.cs
index 233ed82..d9adbc0 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/Soap/SoapRequestEncoder.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/Soap/SoapRequestEncoder.cs
@@ -84,11 +84,23 @@ namespace Acacia.ZPush.Connect.Soap
#region Decoding
- public override object ParseResponse(Stream result)
+ public override object ParseResponse(string url, Stream result)
{
// Parse xml
XmlDocument xml = new XmlDocument();
- xml.Load(result);
+ using (StreamReader reader = new StreamReader(result))
+ {
+ string text = reader.ReadToEnd();
+ try
+ {
+ xml.LoadXml(text);
+ }
+ catch (Exception e)
+ {
+ Logger.Instance.Error(this, "Error in SOAP response:\nurl={0}\nresponse={1}", url, text);
+ throw e;
+ }
+ }
// Check if it's an error message
CheckFaultResponse(xml);
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushConnection.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushConnection.cs
index e18a406..f2e5171 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushConnection.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushConnection.cs
@@ -136,7 +136,7 @@ namespace Acacia.ZPush.Connect
using (HttpContent responseContent = response.Content)
{
Logger.Instance.Trace(this, "Response: {0}", responseContent.ReadAsStringAsync().Result);
- return request.ParseResponse(responseContent.ReadAsStreamAsync().Result);
+ return request.ParseResponse(url, responseContent.ReadAsStreamAsync().Result);
}
}
}
@@ -288,8 +288,12 @@ namespace Acacia.ZPush.Connect
public Response Execute(ActiveSync.RequestBase request)
{
- string url = string.Format(ACTIVESYNC_URL, _account.Account.ServerURL, _account.Account.DeviceId,
- request.Command, _account.Account.UserName, "WindowsOutlook");
+ string url = string.Format(ACTIVESYNC_URL,
+ _account.Account.ServerURL,
+ Uri.EscapeDataString(_account.Account.DeviceId),
+ request.Command,
+ Uri.EscapeDataString(_account.Account.UserName),
+ "WindowsOutlook");
// Construct the body
WBXMLDocument doc = new WBXMLDocument();
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushRequestEncoder.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushRequestEncoder.cs
index aa650e6..a223ce3 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushRequestEncoder.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushRequestEncoder.cs
@@ -28,6 +28,6 @@ namespace Acacia.ZPush.Connect
{
public abstract HttpContent GetContent();
- public abstract object ParseResponse(Stream result);
+ public abstract object ParseResponse(string url, Stream result);
}
}
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushWebService.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushWebService.cs
index bd48d71..9fe3ca4 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushWebService.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/Connect/ZPushWebService.cs
@@ -49,7 +49,7 @@ namespace Acacia.ZPush.Connect
string url = string.Format(ACTIVESYNC_URL, _connection.Account.Account.ServerURL, "webservice",
ServiceName,
// TODO: this username is a bit of a quick hack.
- request.UserName ?? _connection.Account.Account.UserName,
+ Uri.EscapeDataString(request.UserName ?? _connection.Account.Account.UserName),
"webservice");
// Set up the encoding