<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://siprtc.azurewebsites.net/index.php?action=history&amp;feed=atom&amp;title=M7</id>
		<title>M7 - Versionsgeschichte</title>
		<link rel="self" type="application/atom+xml" href="https://siprtc.azurewebsites.net/index.php?action=history&amp;feed=atom&amp;title=M7"/>
		<link rel="alternate" type="text/html" href="https://siprtc.azurewebsites.net/index.php?title=M7&amp;action=history"/>
		<updated>2026-05-06T14:32:58Z</updated>
		<subtitle>Versionsgeschichte dieser Seite in sipRTC</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://siprtc.azurewebsites.net/index.php?title=M7&amp;diff=14&amp;oldid=prev</id>
		<title>Admin: Die Seite wurde neu angelegt: „Die bisherigen Implementation für einen WebSocket-Server setzten die Bibliothek ws für Node.JS ein. Die Konfiguration des Servers wurde so…“</title>
		<link rel="alternate" type="text/html" href="https://siprtc.azurewebsites.net/index.php?title=M7&amp;diff=14&amp;oldid=prev"/>
				<updated>2018-03-06T21:18:04Z</updated>
		
		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „Die bisherigen Implementation für einen WebSocket-Server setzten die Bibliothek &lt;a href=&quot;/index.php?title=Bibliothek:ws&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Bibliothek:ws (Seite nicht vorhanden)&quot;&gt;ws&lt;/a&gt; für Node.JS ein. Die Konfiguration des Servers wurde so…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Die bisherigen Implementation für einen WebSocket-Server setzten die Bibliothek [[Bibliothek:ws|ws]] für Node.JS ein. Die Konfiguration des Servers wurde so festgelegt, dass der Server alle eingehenden Nachrichten transparent an die anderen verbundenen WebSocket-Clients weiterleitet. Dies führt dazu, dass auch weitere Clients sämtliche Kommunikation ''mithören'' können. Der Server verfügt demnach über keine &amp;quot;Intelligenz&amp;quot; und weiss nicht, in welchem Zustand sich eine Session befindet.&lt;br /&gt;
&lt;br /&gt;
Im Falle des Szenarios ''Apotheke'' soll beispielsweise einem zweiten Website-Besucher mitgeteilt werden, dass sich die Apotheke bereits in einem Gespräch befindet. Es wird also eine Komponente benötigt, welche den Zustand der involvierten Clients überwacht und an die Website weitermelden kann.&lt;br /&gt;
&lt;br /&gt;
== Variante 1: zusätzlicher WebSocket für Präsenzanzeige ==&lt;br /&gt;
Ein zusätzlicher WebSocket-Server kann verwendet werden um den Zustand des Apotheken-Browsers zu überwachen. Über einen zweiten WebSocket-Kanal signalisiert der WebSocket-Server dem Client, ob eine Gesprächsverbindung möglich ist. Dabei werden keine SIP-Meldungen gesendet, sondern benutzerdefinierte Nachrichten.&lt;br /&gt;
&lt;br /&gt;
Auf dem Server wird die Variable ''calleeReady'' geführt. Sobald sich der Apothekenbrowser am Server anmeldet, wird die Variable auf '''true''' gesetzt. Sobald ein eingehender Anruf angenommen wird, wechselt sie während der Dauer des Gesprächs auf '''false'''.&lt;br /&gt;
&lt;br /&gt;
Der Status der Variable wird jeweils bei derer Veränderung an alle verbundenen Clients weitergeleitet. Auf Anfrage eines Clients (z.B. Anmelden eines weiteren Clients) kann der aktuelle Status ebenfalls mitgeteilt werden.&lt;br /&gt;
&lt;br /&gt;
Umsetzung in [[M9]]&lt;br /&gt;
&lt;br /&gt;
== Variante 2: SIP-Server ==&lt;br /&gt;
Bei dieser Variante würde die [[Session Initiation Protocol (SIP)|SIP]]-Client-Implementation mit '''Subscriptions''' und dem SIP-Request ''SUBSCRIBE'' erweitert werden. Dabei erfolgt eine Anmeldung für ein Ereignis wie z.B. eine Präsenzanzeige. Die Anmeldung wird von einem SIP-Server verarbeitet, welcher Ereignisse mittels dem SIP-Request ''NOTIFY'' an angemeldete Clients meldet.&lt;br /&gt;
&lt;br /&gt;
Durch die Benutzung eines SIP-Servers wäre auch eine Integration in ein öffentliches SIP-Netzwerk möglich.&lt;br /&gt;
&lt;br /&gt;
=== Serverseitig ===&lt;br /&gt;
&lt;br /&gt;
Das RFC 6665 beschreibt den Mechanismus von SUBSCRIBE/NOTIFY im Allgemeinen:&lt;br /&gt;
&lt;br /&gt;
 ''The SUBSCRIBE method is used to request current state and state updates from a remote node.''&lt;br /&gt;
&lt;br /&gt;
 ''NOTIFY requests are sent to inform subscribers of changes in state to which the subscriber has a subscription.  Subscriptions are created using the SUBSCRIBE method.''&lt;br /&gt;
&lt;br /&gt;
In [https://tools.ietf.org/html/rfc3856 RFC 3856] wird erläutert, wie Präsenz-Ereignisse in SIP übertragen werden können:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;http&amp;quot; line&amp;gt;&lt;br /&gt;
SUBSCRIBE sip:resource@example.com SIP/2.0&lt;br /&gt;
Via: SIP/2.0/TCP watcherhost.example.com;branch=z9hG4bKnashds7&lt;br /&gt;
To: &amp;lt;sip:resource@example.com&amp;gt;&lt;br /&gt;
From: &amp;lt;sip:user@example.com&amp;gt;;tag=xfg9&lt;br /&gt;
Call-ID: 2010@watcherhost.example.com&lt;br /&gt;
CSeq: 17766 SUBSCRIBE&lt;br /&gt;
Max-Forwards: 70&lt;br /&gt;
Event: presence&lt;br /&gt;
Accept: application/pidf+xml&lt;br /&gt;
Contact: &amp;lt;sip:user@watcherhost.example.com&amp;gt;&lt;br /&gt;
Expires: 600&lt;br /&gt;
Content-Length: 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;http&amp;quot; line&amp;gt;&lt;br /&gt;
NOTIFY sip:user@watcherhost.example.com SIP/2.0&lt;br /&gt;
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sk&lt;br /&gt;
From: &amp;lt;sip:resource@example.com&amp;gt;;tag=ffd2&lt;br /&gt;
To: &amp;lt;sip:user@example.com&amp;gt;;tag=xfg9&lt;br /&gt;
Call-ID: 2010@watcherhost.example.com&lt;br /&gt;
Event: presence&lt;br /&gt;
Subscription-State: active;expires=599&lt;br /&gt;
Max-Forwards: 70&lt;br /&gt;
CSeq: 8775 NOTIFY&lt;br /&gt;
Contact: sip:server.example.com&lt;br /&gt;
Content-Type: application/pidf+xml&lt;br /&gt;
Content-Length: ...&lt;br /&gt;
&lt;br /&gt;
[PIDF Document]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Inhalt eines ''PIDF Document'' ist im [https://tools.ietf.org/html/rfc3863 RFC 3863] festgehalten. Es handelt sich dabei um XML-codierte Statusinformationen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Clientseitig ===&lt;br /&gt;
Die Implementierung soll anhand von Beispielcode der Bibliothek SIP.JS gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line&amp;gt;&lt;br /&gt;
// Subscribes the existing UA to the presence information of resource@example.com&lt;br /&gt;
var subscription = myUA.subscribe('resource@example.com', 'presence');&lt;br /&gt;
&lt;br /&gt;
// Once subscribed, receive notifications and print out the presence information to console&lt;br /&gt;
subscription.on('notify', function (notification) {&lt;br /&gt;
  console.log(notification.request.body);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://groups.google.com/forum/#!topic/sip_js/CkVQb9mR5jI SIP PUBLISH (presence)]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>