public void It_should_replace_tuples_with_same_id() { var doc = new PresenceDocument("*****@*****.**"); doc.Modify(0, GetPresenceBytes("<tuple id='1'></tuple>")); doc.Modify(1, GetPresenceBytes("<tuple id='1'><new/></tuple>")); AreEqual("<tuple id='1' xmlns='urn:ietf:params:xml:ns:pidf'><new /></tuple>", doc); }
public void It_should_remove_tuples_if_it_absent_in_new_request() { var doc = new PresenceDocument("*****@*****.**"); doc.Modify(0, GetPresenceBytes("<tuple id='1'></tuple>")); doc.Modify(0, GetPresenceBytes("<tuple id='2'></tuple>")); AreEqual("<tuple id='2' xmlns='urn:ietf:params:xml:ns:pidf'></tuple>", doc); }
public void It_should_remove_tuples_by_sipIfMatch() { var doc = new PresenceDocument("*****@*****.**"); doc.Modify(0, GetPresenceBytes("<tuple id='1'></tuple><tuple id='2'></tuple>")); doc.Modify(1, GetPresenceBytes("<tuple id='2'></tuple>")); doc.Remove(0); AreEqual("<tuple id='2' xmlns='urn:ietf:params:xml:ns:pidf'></tuple>", doc); }
private void AreEqual(string expected, PresenceDocument doc) { var writer = new SipMessageWriter(); expected = expected.Replace('\'', '"'); //byte[] actualBytes = null; //int copied = doc.CopyTo( // (length) => { return new ArraySegment<byte>(actualBytes = new byte[length], 0, length); }); doc.WriteContent(writer); //string actual = Encoding.UTF8.GetString(actualBytes); var actual = Encoding.UTF8.GetString(writer.Buffer, writer.Offset, writer.Count); Assert.AreEqual(openPresence + expected + closePresence, actual); }
private void SendNotify(Dialog dialog, int expires, PresenceDocument document) { int transactionId = GetTransactionId(Methods.Notifym); var writer = new SipMessageWriter(); writer.WriteRequestLine(Methods.Notifym, dialog.RemoteUri); writer.WriteVia(dialog.Transport, dialog.LocalEndPoint, transactionId); writer.WriteFrom(dialog.LocalUri, dialog.LocalTag); writer.WriteTo(dialog.RemoteUri, dialog.RemoteTag); writer.WriteCallId(dialog.CallId); writer.WriteEventPresence(); writer.WriteSubscriptionState(expires); writer.WriteMaxForwards(70); writer.WriteCseq(dialog.GetNextLocalCseq(), Methods.Notifym); writer.WriteContact(dialog.LocalEndPoint, dialog.Transport); if (document != null) { writer.WriteContentType(application, pidfXml); //writer.WriteContentLength(); //writer.WriteCRLF(); //writer.RewriteContentLength( // document.CopyTo((length) => writer.GetBytesForCustomWrite(length))); document.WriteLenghtAndContent(writer); } else { writer.WriteContentLength(0); writer.WriteCRLF(); } notifyProducer.SendRequest(dialog.Transport, dialog.LocalEndPoint, dialog.RemoteEndPoint, ServerAsyncEventArgs.AnyConnectionId, writer, transactionId); }
private void SimpleModule_NotifyEvent(string publisherId, string subscriptionId, int expires, PresenceDocument document) { var dialog = dialogManager.Get(new ByteArrayPart(subscriptionId)); if (dialog != null) SendNotify(dialog, expires, document); }
public Publication(string aor) { document = new PresenceDocument(aor); subscriptions = new ThreadSafe.List <Subscription>( new List <Subscription>()); }
public Publication(string aor) { document = new PresenceDocument(aor); subscriptions = new ThreadSafe.List<Subscription>( new List<Subscription>()); }