PDA

Visualizza la versione completa : SIP e asterisk


MrX87
29-10-2010, 11:50
Ciao a tutti ragazzi, sto iniziando ad avvicinarmi al mondo del voip e ad asterisk e al protocollo sip. Devo implementare in java il protocollo sip, mandando dei pacchetti tipo REGISTER o INVITE (per adesso iniziamo con la register) ad un server sip con su asterisk.
Adesso per quanto riguarda la parte di programmazione ho gi implementato la REGISTER, per adesso mi serve un server dove poter testare se funziona e se l'utente viene registrato correttamente!
a casa ho 2 pc:
-- 1 portatile sul quale lavoro su winXP per programmare in java
-- 1 pc fisso dove mi hanno consigliato di installare un client SIP con asterisk in modo da testare i pacchetti che mando se vengono accettati.
ecco...mi servirebbe sapere cosa installare per creare un client SIP e per testare il mio codice java.
spero di essermi spiegato bene...altrimenti chiedetemi pure...
grazie mille

albgen
29-10-2010, 21:19
In realt ti servirebbe un server SIP o proxy.
Quindi Asterix un server SIP che devi installare in una distribuzione linux.
Puoi utilizzare un versione Live di linux e installarci Aterix per capisci che devi perdere un p di tempo. Una soluzione veloce quella di utilizzare una distribuzione asterix based ma di tipo live quindi con tutto gi installato. L'unica cosa che devi fare dopo ovviamente aver avviato il pc con il live cd dentro il lettore cd/dvd, solo quella di aggiungere almeno una extension(ovvero numero interno SIP) al centralino.
Per questo puoi utilizzare questo
http://www.fonality.com/trixbox/devblog/introducing-new-trixbox-ce-livecd

MrX87
30-10-2010, 01:21
ti ringrazio della risposta per nel frattempo ho risolto parzialmente il problema in quanto sul pc fisso ho installato asterisk ( su windows xp ) e l'ho configurato in questo modo aggiungendo in fondo al file sip.conf:

[test]
type=friend
username=test
secret=test
host=dynamic

una volta avviato asterisk sul pc fisso con queste impostazioni, mi sposto sul portatile dove ho scritto un pezzo di codice java che invia tramite socket una richiesta di register in questo modo:
--192.168.1.106 pc portatile dal quale parte il pacchetto
--192.168.1.104 pc fisso con asterisk


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;


public class Client_test {


private DatagramSocket s;


public Client_test(){
try {
s = new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args){
Client_test c = new Client_test();
c.register();
//c.invite();

}


public void register(){
String msg = "REGISTER sip:test SIP/2.0\r\n" +
"Via: SIP/2.0/UDP test:5060;branch=z9hG4bKcdb10d3435e84f30b9db93d3c5 86600a\r\n" +
"From: <sip:test:test@192.168.1.106>\r\n" +
"auth=test:test@192.168.1.104\r\n"+
"To: <sip:test@192.168.1.104>\r\n" +
"Call-ID: 2537450899\r\n"+
"CSeq: 1 REGISTER\r\n" +
"Max-Forwards: 360\r\n"+
"User-Agent: C450 My_pc\r\n"+
"Expires: 180\r\n"+
"Allow: INVITE, ACK, CANCEL, BYE, OPTIONS, INFO\r\n"+
"Content-Length: 0\r\n"+
"\r\n";


DatagramPacket p = new DatagramPacket(msg.getBytes(), msg.getBytes().length);
try {

p.setAddress(InetAddress.getByName("192.168.1.104")); //indirizzo pc fisso con asterisk
//p.setAddress(InetAddress.getLocalHost());
p.setPort(5060);

s.send(p);

s.receive(p);
System.out.println(new String (p.getData()));

System.out.println("");

s.receive(p);
System.out.println(new String (p.getData()));



} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
mandando il pacchetto ricevo 2 risposte visibili anche tramite wireshark:

SIP/2.0 100 Trying
Via: SIP/2.0/UDP test:5060;branch=z9hG4bKcdb10d3435e84f30b9db93d3c5 86600a;received=192.168.1.106
From: <sip:test:test@192.168.1.106>
To: <sip:test@192.168.1.104>
Call-ID: 2537450899
CSeq: 1 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Contact: <sip:test@192.168.1.104>
Content-Len

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP test:5060;branch=z9hG4bKcdb10d3435e84f30b9db93d3c5 86600a;received=192.168.1.106
From: <sip:test:test@192.168.1.106>
To: <sip:test@192.168.1.104>;tag=as5c1f2b09
Call-ID: 2537450899
CSeq: 1 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
WWW-Authenticate: Digest
a questo punto per non capisco come mai non mi da l'autenticazione per la registrazione....dove sto sbagliando??
vi ringrazio come sempre per il vostro interesse e la vostra collaborazione

albgen
30-10-2010, 09:34
Ma hai creato su asterix l'utente test con password test?

MrX87
30-10-2010, 12:01
Ma hai creato su asterix l'utente test con password test?

si certo...l'ho scritto anche...


ti ringrazio della risposta per nel frattempo ho risolto parzialmente il problema in quanto sul pc fisso ho installato asterisk ( su windows xp ) e l'ho configurato in questo modo aggiungendo in fondo al file sip.conf:

[test]
type=friend
username=test
secret=test
host=dynamic

albgen
30-10-2010, 12:20
Si hai ragione, sono stato un p distratto. Io non ho mai configurato un asterix tramite il sip.conf e quindi non saprei se quella config giusta o meno.
Potresti provare a utilizzare un client sip e vedere se questo si registra e poi testare il tuo codice...
Inoltre, mentre il client sip tenta di registrarsi, cattura con wireshark i pacchetti e vedi cosa invia...

MrX87
30-10-2010, 12:28
quindi tu dici di provare a installare un client sip ( tipo ekiga ) sul pc portatile e provare a creare un utente con le credenziali che sono impostate su asterisk nel file sip.conf sul pc fisso e vedere nel frattempo con wireshark cosa invia come register??

MrX87
30-10-2010, 12:50
oohhh yeaahh....provato come dicevi tu e funziona....ekiga dal portatile mi da la registrazione...quindi significa che asterisk per lo meno impostato in maniera corretta...adesso ho sniffato la register e tutto il resto e ho modificato il mio codice proprio come la register inviata da ekiga ad asterisk....vado a fare il test finale....speriamo bene....grazie mille comunque!!

albgen
30-10-2010, 12:59
prego... :ciauz:

MrX87
30-10-2010, 13:23
noooooooooo.....sembra che non funziona.......ma perch??

Loading