Asterisk und Actionscript2

robber437

Neuer User
Mitglied seit
12 Jun 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
hallo,

hat irgendjemand schon erfahrungen mit actionscript2 und asterisk gemacht? ich möchte mich in actionsscript2 auf dem asterisk manager interface (AMI) einloggen doch pustekuchen. mit jeder anderen sprache ist dies kein problem, doch nun muss es as2 sein. das erste problem war, dass jede socket-verbindung von as2 aus erstmal von einem policy-server autorisiert werden musste, das klappt inzwischen. die nächste hürde besteht darin, dass as2 eine null-byte terminierung beim empfangen benötigt, doch die schickt asterisk nicht, c tut dies aber eigentlich. nun wühle ich schon seit stunden im asterisk code herum und kriege es nicht zum laufen. ich kann mich zwar an dem astersk manager interface anmelden aber ich erhalte keine antwort. please help...

gruß
robber
 
Also ich benutze AS3, damit ist das kein Problem.
Leider ist dir diese Antwort nicht wirklich hilfreich oder?
 
leider nicht:)
ich muss das ganze in ein as2-programm einbauen, as3 lehnt ja schon sehr an java an und da ist es kein problem, in as3 gibts afaik schon richtige socket-funktionen, in as2 ja nur das xmlsocket...

gruß
robber
 
du könntest den astmanproxy nehmen (der kann xml in und out), und den source umbauen, sodass er ein null-terminiertes xml sendet, wie es der xmlsocket von actionscript verlangt. hab das mal probiert, geht ganz gut!

DOCH VORSICHT: bei neueren flash playern (ab 9.0r115) muss der rechner, zu dem die verbindung mittels xmlsocket aufgebaut wird, den zugriff über einen policy-file-request authorisieren, sonst wirft das applet eine security-sandbox violation. dafür kannst du den "fsd" (Flash Security Daemon) verwenden, zu finden hier:
http://www.astertools.com/products/opensource/fsd

grüße,
laureen
 
vielen dank für den tip mit dem astmanproxy, was es so alles gibt, ich komm aus dem staunen nicht mehr raus:)

hab den proxy mal in gang gesetzt und mich für die xml-variante entschieden aber so wirklich will es nicht funzen.

mein as2-code sieht folgendermaßen aus:

Code:
var socket:XMLSocket = new XMLSocket()
socket.connect("10.2.3.100", 1234);
socket.onConnect = function (success:Boolean) {
    if (success) {
    	trace ("Connection succeeded!")
    } else {
    	trace ("Connection failed!")
    }
}

var my_xml:XML = new XML();
var rootNode = my_xml.createElement("AsteriskManagerInput");

var Login:XMLNode = my_xml.createElement("Action");
Login.attributes.Value = "Login";
var Username:XMLNode = my_xml.createElement("Username");
Username.attributes.Value = "itsme";
var Secret:XMLNode = my_xml.createElement("Secret");
Secret.attributes.Value = "passwd";

my_xml.appendChild(rootNode);
rootNode.appendChild(Login);
rootNode.appendChild(Username);
rootNode.appendChild(Secret);
	
// zu sendende Daten
trace(rootNode);
socket.send(rootNode);

//zeigt die von der Socketverbindung zurückgegebenen Daten an
socket.onData = function(msg:String):Void {
	trace(msg);
}


socket.onClose = function () {
	trace("Connection to server lost.");
}

ich möchte ein login-request nach dem xml-beispiel im Ordner astmanproxy-1.21/doc/README.xml senden:

Code:
<AsteriskManagerInput>
   <Action Value="Login"/>
   <UserName Value="itsme"/>
   <Secret Value="passwd"/>
</AsteriskManagerInput>

der request wird vom proxy leider nicht erkannt, das format ist auf xml gestellt und die anmeldung beim policy-server ist auch erfolgreich. woran könnte es liegen, ich finde nicht so wirklich viel doku über den proxy. was hast du denn genau umgebaut, damit der proxy die null-terminierung schickt? das kann ja nur in der datei xml.c sein.


hier die ausgabe vom proxy:
Code:
Jul 22 19:09:45: Connection received from 10.2.3.200
Jul 22 19:09:45: Set 10.2.3.200 input format to xml
Jul 22 19:09:45: Set 10.2.3.200 output format to xml
Jul 22 19:09:45: calling xml_read...

gruß
robber
 
hast du den source code so umgebaut, dass der astmanproxy einen null-terminierten XML string schickt? ohne dem geht es nicht, der xmlsocket vom flash player verlangt das!!!

zum code: kenn mich leider mit as2 nicht aus, hab erst bei as3 im flex begonnen...du kannst aber mit dem linux programm "ngrep" nachsehen, was da so zwischen deinem pc und der asterisk-kiste hin- und herfliegt:
Code:
# ngrep port 5038
ngrep solltest du in der linux distribution der asterisk kiste installierbar haben.

grüße,
laureen
 
btw: ngrep gibt leider wie auch wireshark wie ich gerade feststellen muss für \n \r \0 immer nur einen PUNKT aus:( ich probier gleich mal tcpdump...

Code:
lter: (ip or ip6) and ( port 1234 )
####
T 10.2.3.200:1848 -> 10.2.3.100:1234 [AP]
  Action: Login..UserName: itsme..Secret: passwd.....
##
T 10.2.3.100:1234 -> 10.2.3.200:1848 [AP]
  Asterisk Call Manager Proxy/1.21..
#
T 10.2.3.100:1234 -> 10.2.3.200:1848 [AP]
  Response: Success
##
T 10.2.3.100:1234 -> 10.2.3.200:1848 [AP]
  ..Message: Authentication accepted....
#

ich wollte auch nur wissen ob mein xml login-request richtig ist, weil ich keine antwort vom proxy erhalte.

Code:
<AsteriskManagerInput>
   <Action Value="Login"/>
   <UserName Value="itsme"/>
   <Secret Value="passwd"/>
</AsteriskManagerInput>

als standard text funktioniert es jetzt übrigens, war nur ein kleines \0 hinter der ausgabe nötig:), das hat im asterisk-source nicht funktioniert... danke nochmal

gruß
robber
 
Code:
# man ngrep
"man", schon mal gehört?

hex-dump (-x) und interface (-d eth0) im ngrep:
Code:
# ngrep -x -d eth0 port 5038
der reihe nach durchtracen:
1. obiger befehl für kommunikation zw. client und proxy
2. kommunikation zw. proxy und asterisk:
Code:
# ngrep -x -d lo port 5038

dann siehst du, ob sich alle 3 komponenten (client, proxy, asterisk) richtig verständigen.

der request sollte richtig so sein, wenn du events auch auf den client gesendet haben willst, muss der request noch einen "Events" node haben, der die Value "on" hat.

grüße,
laureen
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.