Skip to content

Commit c4a126e

Browse files
committed
Push message urgency
1 parent 5e702c5 commit c4a126e

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

Lib.Net.Http.WebPush/PushMessage.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ public int? TimeToLive
3939
_timeToLive = value;
4040
}
4141
}
42+
43+
/// <summary>
44+
/// Gets or sets the message urgency.
45+
/// </summary>
46+
public PushMessageUrgency Urgency { get; set; }
4247
#endregion
4348

4449
#region Constructors
@@ -49,6 +54,7 @@ public int? TimeToLive
4954
public PushMessage(string content)
5055
{
5156
Content = content;
57+
Urgency = PushMessageUrgency.Normal;
5258
}
5359
#endregion
5460
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace Lib.Net.Http.WebPush
2+
{
3+
/// <summary>
4+
/// The push message urgency.
5+
/// </summary>
6+
public enum PushMessageUrgency
7+
{
8+
/// <summary>
9+
/// Very low (e.g. advertisements).
10+
/// </summary>
11+
VeryLow,
12+
/// <summary>
13+
/// Low (e.g. topic updates).
14+
/// </summary>
15+
Low,
16+
/// <summary>
17+
/// Normal (e.g. chat message).
18+
/// </summary>
19+
Normal,
20+
/// <summary>
21+
/// High (e.g. time-sensitive alert).
22+
/// </summary>
23+
High
24+
}
25+
}

Lib.Net.Http.WebPush/PushServiceClient.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading;
77
using System.Globalization;
88
using System.Threading.Tasks;
9+
using System.Collections.Generic;
910
using System.Security.Cryptography;
1011
using Org.BouncyCastle.Crypto;
1112
using Org.BouncyCastle.Crypto.Parameters;
@@ -41,6 +42,12 @@ public class PushServiceClient
4142
private const int CONTENT_RECORD_SIZE = 4096;
4243

4344
private static readonly byte[] _keyingMaterialInfoParameterPrefix = Encoding.ASCII.GetBytes(KEYING_MATERIAL_INFO_PARAMETER_PREFIX);
45+
private static readonly Dictionary<PushMessageUrgency, string> _urgencyHeaderValues = new Dictionary<PushMessageUrgency, string>
46+
{
47+
{ PushMessageUrgency.VeryLow, "very-low" },
48+
{ PushMessageUrgency.Low, "low" },
49+
{ PushMessageUrgency.High, "high" }
50+
};
4451

4552
private int _defaultTimeToLive = DEFAULT_TIME_TO_LIVE;
4653

@@ -199,6 +206,24 @@ private static HttpRequestMessage SetAuthentication(HttpRequestMessage pushMessa
199206
return pushMessageDeliveryRequest;
200207
}
201208

209+
private static HttpRequestMessage SetUrgency(HttpRequestMessage pushMessageDeliveryRequest, PushMessage message)
210+
{
211+
switch (message.Urgency)
212+
{
213+
case PushMessageUrgency.Normal:
214+
break;
215+
case PushMessageUrgency.VeryLow:
216+
case PushMessageUrgency.Low:
217+
case PushMessageUrgency.High:
218+
pushMessageDeliveryRequest.Headers.Add(URGENCY_HEADER_NAME, _urgencyHeaderValues[message.Urgency]);
219+
break;
220+
default:
221+
throw new NotSupportedException($"Not supported value has been provided for {nameof(PushMessageUrgency)}.");
222+
}
223+
224+
return pushMessageDeliveryRequest;
225+
}
226+
202227
private static HttpRequestMessage SetTopic(HttpRequestMessage pushMessageDeliveryRequest, PushMessage message)
203228
{
204229
if (!String.IsNullOrWhiteSpace(message.Topic))

0 commit comments

Comments
 (0)