[Frage] "Leere" Rückgabewerte kompakt abfangen?

sunnyman

Mitglied
Mitglied seit
13 Jan 2006
Beiträge
248
Punkte für Reaktionen
0
Punkte
16
Hallo Forum,

in verschiedenen Konstellationen reagiere ich auf Rückgabewerte von Funktionen. Zum Beispiel:
Code:
ExecIf($[${SIP_HEADER(Privacy)}=id]?SIPAddHeader(Privacy:id))
Das Problem dabei ist: wenn (in diesem Beispiel) der Header Privacy nicht gesetzt ist, liefert die Funktion offenbar einen String der Länge 0 zurück, sodass Asterisk beim Auswerten zu einem
Code:
ExecIf($[=id]?SIPAddHeader(Privacy:id))
kommt, was zu einem Fehler führt:
Code:
ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '=', expecting $end; Input:
=id
Gibt es eine gescheite Methode, so etwas vernünftig zu behandeln?
Da ja offenbar was zurückkommt, funktioniert EXISTS hier auch nicht.
Ich habe mir an anderen Stellen schon regexes gebaut, aber das ist doch irgendwie Overkill und macht die Aufrufe mit den 1000 Klammern und $-Zeichen noch schwerer zu lesen.
 

koyaanisqatsi

IPPF-Urgestein
Mitglied seit
24 Jan 2013
Beiträge
12,510
Punkte für Reaktionen
323
Punkte
83
Moin

Schon mal auf einen leeren String getestet ?
Siehe: https://wiki.asterisk.org/wiki/display/AST/NULL+Strings

Übigens, da mit ExecIf() jede Dialplanapplikation ausgeführt werden kann, lässt es sich auch verschachteln....
Code:
ExecIf(condition?ExecIf(condition?appiftrue(args):appiffalse(args)):ExecIf(condition?appiftrue(args):appiffalse(args)))
:rolleyes:
 
Zuletzt bearbeitet:

koyaanisqatsi

IPPF-Urgestein
Mitglied seit
24 Jan 2013
Beiträge
12,510
Punkte für Reaktionen
323
Punkte
83
So kannste dann natürlich auch testen: !="id"
 

sunnyman

Mitglied
Mitglied seit
13 Jan 2006
Beiträge
248
Punkte für Reaktionen
0
Punkte
16
Übigens, da mit ExecIf() jede Dialplanapplikation ausgeführt werden kann, lässt es sich auch verschachteln....
Code:
ExecIf(condition?ExecIf(condition?appiftrue(args):appiffalse(args)):ExecIf(condition?appiftrue(args):appiffalse(args)))
:rolleyes:
Ja, das ist mir wohl bekannt, ich frage mich nur gerade, was genau das mit meiner Frage zu tun hat :)
Gelöst hab ich es jetzt so
Code:
same => n,ExecIF($["${SIP_HEADER(Privacy)}"="id"]?SIPAddHeader(Privacy:id))
An anderen Stellen hab ich tatsächlich auch richtige Verschachtelungen.

koyaanisqatsi schrieb:
So kannste dann natürlich auch testen: !="id"
Ja, in diesem speziellen Fall schon. In anderen Anwendungen kann es verschiedene Werte geben, die ich vorher nicht kenne, und mich interessiert an der Stelle nur, ob ein auswertbarer Wert vorhanden ist oder nicht.
Randnotiz: es handelt sich dabei um die Auswertung des supplementary Services "REDIRECTREASON", der mir u.a. sagt, ob der umleitende Teilnehmer belegt ist oder nicht geantwortet hat :)


Aber sag mal, wo ist denn jetzt der Button zum editieren seines Beitrags?
 

Zurzeit aktive Besucher

3CX

Statistik des Forums

Themen
235,566
Beiträge
2,062,630
Mitglieder
356,310
Neuestes Mitglied
dstny1337