Asterisk,Snom und unbeantwortete Anrufe

easy12377

Neuer User
Mitglied seit
1 Jul 2008
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Ok, ich werde das mal morgen ausprobieren, und einfach ein freies Flag nehmen (Das Flag 31 ist leider auch schon wieder anderweitig belegt in der Version 1.4.21.2) . Wenn das dann gut läuft, werde ich den Patch dafür online stellen.

@bstocker
Ja, umstellen auf 1.6 ist auch ne Möglichkeit, dass möchte ich aber nicht machen, da ich mir nicht sicher sein kann ob ich mir damit nicht andere (neue) Probleme einhandle.

@pwalker
Ja aber das ist ein anderes Flag, gibt unter 1.4 auch.

mfg easy
 

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
Habe mir die ganze Sache nochmals im Code angeschaut:
Ja aber das ist ein anderes Flag, gibt unter 1.4 auch.
In einem gepatchten 1.4er schon, in "Vanilla" 1.4.21.2 gibt's AST_FLAG_ANSWERED_ELSEWHERE in include/asterisk/channel.h meines Wissens nicht.
Was ich aber eigentlich sagen wollte:
- 1.6 (1.6.0-beta9) braucht kein zusätzliches Flag SIP_ANSWEREDELSEWHERE oder SIP_DIALOG_ANSWEREDELSEWHERE, da wird nur mit AST_FLAG_ANSWERED_ELSEWHERE und
Code:
char answered_elsewhere;		/*!< This call is cancelled due to answer on another
gearbeitet (ca. Zeilen 4668 und 9486). answered_elsewhere steht dort übrigens unter dem Kommentar
Code:
/* boolean or small integers that don't belong in flags */
(ca. Zeile 1217 bzw. 1222)
- Wäre doch schön, wenn der Patch möglichst ähnlich wäre wie der (aktuelle) 1.6er-Code (wo immer möglich)
 

easy12377

Neuer User
Mitglied seit
1 Jul 2008
Beiträge
11
Punkte für Reaktionen
0
Punkte
1
Ja stimmt, das SIP_ANSWEREDELSEWHERE ist nur ne Behelfslösung.
Leider muss die aber auch sein da unten in der Zeile ~7880 in der chan_sip.c die Variable AST_FLAG_ANSWERED_ELSEWHERE nicht verfügbar ist.
Oben in der Zeile ~3500 ist Sie aber noch verfügbar. (Warum hab ich mir nicht angesehen, habs nur ausprobiert)
Somit wird oben die Hilfsvariable gesetzt und unten wieder ausgewertet.

Wenn man es schafft die AST_FLAG_ANSWERED_ELSEWHERE auch unten mit zu übergeben dann könnte man sich das andere Hilfsflag sparen.

Ich hab jetzt trotzdem mal den Patch mit meiner alten Lösung erstellt.

Code:
--- asterisk-1.4.21.2/channels/chan_sip.c	2008-06-03 16:46:24.000000000 +0200
+++ asterisk-1.4.21.2_patched/channels/chan_sip.c	2008-07-29 12:17:26.000000000 +0200
@@ -796,6 +796,7 @@
 #define SIP_PAGE2_BUGGY_MWI		(1 << 26)	/*!< 26: Buggy CISCO MWI fix */
 #define SIP_PAGE2_OUTGOING_CALL         (1 << 27)       /*!< 27: Is this an outgoing call? */
 #define SIP_PAGE2_UDPTL_DESTINATION     (1 << 28)       /*!< 28: Use source IP of RTP as destination if NAT is enabled */
+#define SIP_ANSWEREDELSEWHERE           (1 << 30)	/*!< 30: Is set when the call is answered by another phone in a ringgroup */
 
 #define SIP_PAGE2_FLAGS_TO_COPY \
 	(SIP_PAGE2_ALLOWSUBSCRIBE | SIP_PAGE2_ALLOWOVERLAP | SIP_PAGE2_VIDEOSUPPORT | \
@@ -3497,6 +3498,14 @@
 		return 0;
 	}
 
+	if (ast_test_flag(ast, AST_FLAG_ANSWERED_ELSEWHERE)) {
+		if(option_debug)
+			ast_log(LOG_DEBUG, "This call was answered elsewhere\n");
+		
+		append_history(p, "Cancel", "Call answered elsewhere");
+		ast_set_flag(&p->flags[1], SIP_ANSWEREDELSEWHERE);
+	}
+	
 	if (ast_test_flag(&p->flags[0], SIP_DEFER_BYE_ON_TRANSFER)) {
 		if (ast_test_flag(&p->flags[0], SIP_INC_COUNT) || ast_test_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD)) {
 			if (option_debug && sipdebug)
@@ -7858,6 +7867,10 @@
 		p->invitestate = INV_CONFIRMED;
 
 	reqprep(&resp, p, sipmethod, seqno, newbranch);
+
+	if (sipmethod == SIP_CANCEL && ast_test_flag(&p->flags[1], SIP_ANSWEREDELSEWHERE))
+	add_header(&resp, "Reason", "SIP;cause=200;text=\"Call completed elsewhere\"");
+	
 	add_header_contentLength(&resp, 0);
 	return send_request(p, &resp, reliable, seqno ? seqno : p->ocseq);
 }
Ich hoffe es klappt bei allen. In den anderen beiden Dateien habe ich nur das geändert was auch schon von bstocker angegeben wurde.
Meine Asterisk Version ist außerdem 1.4.21.2

mfg easy
 

xbdbx

Neuer User
Mitglied seit
4 Jun 2008
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Hi,

erstmal danke für den Patch.

Ich werde den Patch morgen bei mir ausprobieren, habe auch eine 1.4.21.2 Version am laufen. Sollte dann ja eigendlich funktionieren :)


gruß
 

xbdbx

Neuer User
Mitglied seit
4 Jun 2008
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe da jetzt noch eine Frage. Und zwar habe ich jetzt den channel.h von bstocker und den chan_sip.c von easy12377 Patch eingespielt. Beide ließen sich problemlos einspielen. Doch der app_dial.c und der app_queue.c Patch von bstrocker hatten nur Fehler.

Den queue Patch brauche ich dir nur, wenn ich aus einer Warteschlange mehrer Telefone klingen lasse, oder?

Brauche ich den app_dial Patch damit es überhaupt funktoniert?

gruß
 

bstocker

Neuer User
Mitglied seit
27 Aug 2007
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Den app_queue Patch brauchst Du nur, wenn Du mit das Queue() Kommando verwendest. app_dial.c musst Du patchen, wenn Du mit Dial() mehrere Ziele anrufst, wie etwa

Dial(SIP/1000&SIP/110&SIP/120,60, ...)

Nur in diesem Fall brauchst Du also den app_dial patch.
 

xbdbx

Neuer User
Mitglied seit
4 Jun 2008
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Danke für die schnelle Antwort.
Habe jetzt beide von Hand angepasst, die Zeilen waren bei mir teilweise um mehrere Hundert verschoben. Doch die Struktur der Blöcke war sehr ähnlich.

Habe es gerade ausprobiert und alles funktioniert :p

Ich danke euch

gruß
 
Zuletzt bearbeitet:

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
[Developing story]

...schaue mir gerade mal wieder die Patches bzw. die Original-Sourcen an...
Code:
AST_FLAG_ANSWERED_ELSEWHERE = (1 << 15),
in include/asterisk/channel.h
ist in Asterisk 1.4 (Stand: ungepatchter 1.4.21.1) eigentlich keine so gute Idee, da dort schon
Code:
AST_FLAG_MASQ_NOSTREAM = (1 << 15),
definiert ist...
Und da mir auch beim anderen Flag (SIP_ANSWEREDELSEWHERE) in den Patches in bisschen ein Chaos zu bestehen scheint: ...
- Kann ja schon sein, dass die Signalisierung auch funktioniert, wenn das Flag schon belegt ist, kann aber potentiell zu Inkompatibilitäten führen...
- Flag-"Nummer" "unklar" (ausser den bereits bekannten Problemen: BRIstuff verwendet die Flags um 30 für SIP_PAGE2_CID_UPDATE)
- Gehört das Flag nach flags oder flags[1]? SIP_PAGE2-Flags (da, wo in den Patches SIP_ANSWEREDELSEWHERE definiert wird; was zwar eigentlich irrelevant aber nicht gerade schön ist) "gehören" eigentlich nach flags[1]
In den Patches hier im Thread wird einmal
Code:
ast_set_flag(&p->flags[1], SIP_ANSWEREDELSEWHERE);
verwendet, ein andermal
Code:
ast_set_flag(p, SIP_ANSWEREDELSEWHERE);
Im "Original" von Olle Johansson war das Flag auch mal definiert für "page 3", also flags[2]... (Oder flags[3]...??? Siehe Patches, die auf Seite 1 dieses Threads verlinkt sind...)
(Kurz und gut: ein bisschen ein Chaos..)

...versuche ich gerade, das à la 1.6 mit char answered_elsewhere im struct sip_pvt zu lösen anstatt dem Behelfs-Flag.
Habe die Änderungen mal von Hand eingepflegt, kompilieren tut's immerhin schon mal. Dass das nun mal testen.
[...to be continued...]
 
Zuletzt bearbeitet:

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
Patch für Asterisk 1.4.21.1 mit Bristuff-0.4.0-RC3b

So, habe den Patch kurz angetestet und möchte Ihn Euch nicht vorenthalten.
Wie gesagt/geschrieben: Nur kurz angetestet mit snom 320 7.1.35 (sollte aber eigentlich bei allen snoms mit mehr oder weniger allen FW-Versionen funktionieren) und deshalb keine Garantie für korrekte Funktion!
Der Patch ist für Asterisk 1.4.21.1 mit Bristuff-0.4.0-RC3b, könnte aber auch für andere Asterisk-Versionen ohne Bristuff funktionieren, evtl. gibt's beim "Applyen" des Patches ein paar Offsets.
Kommentare oder Probleme bitte an mich, hier oder per PN.
 

Anhänge

NetRacer

Neuer User
Mitglied seit
10 Jul 2006
Beiträge
59
Punkte für Reaktionen
0
Punkte
0
Moin

ich teste gerade Asterisk 1.6 und dort scheint es mit den Snoms auf anhieb zu funktionieren. Wenn ich das Gespräch woanders annehme, dann steht bei den übrigen Snoms kein Anruf in Abwesendheit.

Bei dem Siemens S685IP allerdings funktioniert das so leider noch nicht. Dieses zeigt immer einen weiteren Anruf in Abwesendheit. Ab eine Mail an Siemens da was nützt ???? Mhh

Gruß
NetRacer
 

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
ich teste gerade Asterisk 1.6 und dort scheint es mit den Snoms auf anhieb zu funktionieren.
Das ist so, der Patch ist quasi ein Backport der Asterisk 1.6 Funktionalität.
Bei dem Siemens S685IP allerdings funktioniert das so leider noch nicht. Dieses zeigt immer einen weiteren Anruf in Abwesendheit.
Das ist sehr gut möglich bzw. wahrscheinlich. Der RFC 3326 scheint - ausser bei snom - nicht in vielen SIP-Phones implementiert zu sein, fehlt offensichtlich z.B. auch bei KIRK DECT.
Ab eine Mail an Siemens da was nützt ????
So einfach ist's wohl nicht...
 

NetRacer

Neuer User
Mitglied seit
10 Jul 2006
Beiträge
59
Punkte für Reaktionen
0
Punkte
0
Moin

bei Kirk soll das auch nicht gehen? Das wäre ja schade, denn gerade für die Lösung habe ich mich interessiert.

Wie siehts denn mit der Business DECT Lösung von Aastra aus? Kann die das?

Gruß
NetRacer
 

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
Asterisk 1.2

Beschäftige mich gerade mal wieder mit dieser Thematik, diesmal in Asterisk 1.2. Und auch hier scheint wieder "gefährliches Spiel" mit Flags betrieben zu werden:
Code:
+#define SIP_ANSWEREDELSEWHERE  (1 << 27)
in chan_sip.c ist inkorrekt wegen
Code:
#define SIP_OSPAUTH_PROXY      (2 << 26)
#define SIP_OSPAUTH_EXCLUSIVE  (3 << 26)
(in Patch von speedy1980, stammt vermutlich aus Patch von Gunnar Schaller)
Soll ich in 1.2 nun auch einfach eine Variable
Code:
char answered_elsewhere;
in sip_pvt reintun, wie in 1.6 (und dem "Backport" für 1.4)? Hat das schon mal jemand versucht?
 

HobbyStern

Aktives Mitglied
Mitglied seit
5 Dez 2005
Beiträge
1,837
Punkte für Reaktionen
0
Punkte
36
Alter Wein in Neuen Schläuchen..

Hat noch jemand einen kompletten Patch für 1.4.21+ - idealerweise für 1.4.25.1 ?

Ich habe mich durch die o.g. Beiträge gearbeitet, Patche angepasst und zusammengestellt, den Überblick verloren und nur noch failende Hunks produziert - ich schiebe die Lösung nun schon so eine Weile vor mir her .. :)

Wäre lieb wenn jemand das "aktuelle" einmal komplett hätte..

Liebe Grüsse,

Stefan
 

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
...spendiere an dieser Stelle mal den Patch für die 1.4.29.
Natürlich ohne Gewähr, müsste aber auf einen ungepatchten Asterisk fehlerfrei applyen und grundsätzlich funktionieren.

P.S.: Patch verwendet Flag 21:
Code:
AST_FLAG_ANSWERED_ELSEWHERE = (1 << 21)
Ist im .29 noch frei, bei allfälligen neueren Versionen überprüfen!
 

Anhänge

HobbyStern

Aktives Mitglied
Mitglied seit
5 Dez 2005
Beiträge
1,837
Punkte für Reaktionen
0
Punkte
36
Funktioniert auch unter 1.4.25.1 einwandfrei.
 

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
Uuups, falschen Thread erwischt.
Hier geht's weiter...
Ich gehöre wohl langsam ins Bett...
 

schogge

Mitglied
Mitglied seit
11 Aug 2005
Beiträge
211
Punkte für Reaktionen
0
Punkte
0
ich suche diesen Patch für Version 1.4.30. Würde ihn gerne in Kombination mit dem Pickup-Patch (http://www.ip-phone-forum.de/showthread.php?t=111596&page=19) verwenden. Da der jetzt für Version 1.4.30 verfügbar ist, könnte man beide Funktionalitäten mit Version 1.4.30 vereinen.

Edit: Hab überlesen, dass der Patch für 1.4.29 angepasst wurde. Werde jetzt testen, ob er auf 1.4.30 applyed.
 
Zuletzt bearbeitet:

pwalker

Mitglied
Mitglied seit
27 Jun 2007
Beiträge
421
Punkte für Reaktionen
0
Punkte
0
Edit: Hab überlesen, dass der Patch für 1.4.29 angepasst wurde. Werde jetzt testen, ob er auf 1.4.30 applyed.
Sollte er. Evtl. ein bisschen Offset. Aber trotzdem im Anhang der für .30
Und gratis dazu der "Kombinations-Patch", wo bei einem Pickup ebenfalls noch "completed/answered elsewhere" gesendet wird. Aber ohne Gewähr. Und: Die beiden anderen Patches (cae und pickup) müssen beide auch rein!
 

Anhänge

Zuletzt bearbeitet:

HobbyStern

Aktives Mitglied
Mitglied seit
5 Dez 2005
Beiträge
1,837
Punkte für Reaktionen
0
Punkte
36
Moin Gemeinde,

ich sattle gerade auf eine Neue Maschine um - die alte (erste) Asterisk Anlage ist im neunten Jahr schwanger.

Ich habe Asterisk 1.4.25.1 vorgefunden (s.o.) und aktuell ist ... was weiss ich ... wie verhält es sich mit den Patches aktuell? Hat jemand gelesen/bemerkt ob und wann die in den Code eingefügt wurden - ich kann keine aktuelleren als 1.4.30 finden - das legt die Vermutung nahe das es dieses Problem nicht mehr gibt.

Grüsse, Stefan