Differences

This shows you the differences between two versions of the page.

Link to this comparison view

eim:laboratoare:laborator08.sip [2016/04/08 14:27]
dragos.niculescu [Activitate de Laborator]
eim:laboratoare:laborator08.sip [2016/04/12 11:48] (current)
dragos.niculescu
Line 4: Line 4:
  
   * pentru acest laborator este nevoie de telefon personal, sau microfon pentru genymotion ​   * pentru acest laborator este nevoie de telefon personal, sau microfon pentru genymotion ​
-  * creați un cont gratuit pe getonsip.com +  * creați un cont gratuit pe http://getonsip.com 
-  * sunt necesare datele de la "View Profile",​ atenție la parola f. lungă+     ​* sunt necesare datele de la "View Profile",​ atenție la parola f. lungă 
 +     * username este diferit de auth_username  
 +  * sau un cont gratuit la http://​pbxes.org,​ de exemplu student 
 +     * este obligatorie crearea unei extensii, de exemplu 100 
 +     * username va fi student-100 ​  
 +     * parola este specifică extensiei/​username-ului,​ nu contului creat la pbxes.org
   * se instalează aplicația CSIPsimple din playstore   * se instalează aplicația CSIPsimple din playstore
 +     * introduceți contul creat la pasul anterior folosind Generic wizard/​Advanced cu setările:
 +     * getonsip.com:​ server=getonsip.com Username=student SIP authentication ID=getonsip_student Password=parola din View Profile Proxy=sip.onsip.com
 +     * pbxes.org: server=pbxes.org Username=student-100 Password=parola extensiei Proxy=pbxes.org,​ restul câmpurilor default.
   * se poate face paste din host  în Genymotion cu long press (left click) ​   * se poate face paste din host  în Genymotion cu long press (left click) ​
   * se creează un contact nou '​testcall',​ și în loc de număr de telefon se selectează 'Add another field'/​Internet Call și se adaugă adresa thetestcall@getonsip.com   * se creează un contact nou '​testcall',​ și în loc de număr de telefon se selectează 'Add another field'/​Internet Call și se adaugă adresa thetestcall@getonsip.com
Line 18: Line 26:
     * SSID-uri cu probleme: change  ​     * SSID-uri cu probleme: change  ​
  
 +=== Android NGN stack === 
 +Android are o stivă SIP [[http://​developer.android.com/​guide/​topics/​connectivity/​sip.html|nativă]],​ dar nu are încă toate funcționalitățile implementate (instant messenging, video). Totuși, pentru voce, SIP este după Android 2.3 parte a sistemului, sub numele de "​internet calling"​ în Phone/​Settings.  ​
 +
 +Pentru acest laborator, se va folosi NGN (New Generation Networking) SIP stack, cu documantația pentru API de nivel înalt: https://​imsdroid.googlecode.com/​svn-history/​r381/​branches/​2.0/​android-ngn-stack-00.pdf
 +
 +Această stivă se utilizează în modul următor: se inițializează stiva //​NgnEngine//,​ și un serviciu SIP
 +//​INgnSipService//​. Se continuă cu operația de signin(SIP Registration),​ apoi se pot deschide sesiuni de audio/video //​NgnAVSession//,​ sau instant messenging //​NgnMessagingSession//​.
 +
 +Interacțiunile sunt fie imperative:
 +  * //​INgnSipService.register()//​
 +  * //​NgnAVSession.makeCall()//​
 +  * //​NgnMessagingSession.sendTextMessage()//​
 +fie reactive, prin intermediul unor receivere care filtrează următoarele evenimente:
 +  * //​NgnRegistrationEventArgs.ACTION_REGISTRATION_EVENT//​ primește răspunsurile de la signin (refuz, timeout, succes)
 +  * //​NgnInviteEventArgs.ACTION_INVITE_EVENT//​ primește evenimentele legate de apel (sună, apel stabilit, apel terminat) ​
 +  * //​NgnMessagingEventArgs.ACTION_MESSAGING_EVENT//​ - tratează sosirea unui mesaj IM 
  
 ===== Activitate de Laborator ===== ===== Activitate de Laborator =====
  
-Se dorește implementarea unei aplicații Android pe baza unui scheletului. ([[https://​github.com/​dragos-niculescu/​ngnsip|Aplicație ​finisată]])+Se dorește implementarea unei aplicații Android pe baza scheletului. 
 +  * scheletul va conține MainActivity și ChatActivity 
 +  * în activitatea principală se implementează signin ​(registration) și apelul vocal 
 +  * dacă este timp, se implementează instant messenging în activitatea secundară 
 +  * atenție, conturile de pe getonsip.com sunt limitate la numărul de signins pe oră :(, altfel conturile sunt avantajoase deoarece au și webrtc ​  
 +  * soluție: ​[[https://​github.com/​dragos-niculescu/​ngnsip|Aplicație]] ​care implementează punctele 1-8. Țintim în 2 ore pentru 1-6
  
-** 0. ** Se clonează stiva SIP [[https://​github.com/​dragos-niculescu/​android-ngn-stack|Android NGN stack]], și se importă în Eclipse+** 1. ** Se clonează stiva SIP [[https://​github.com/​dragos-niculescu/​android-ngn-stack|Android NGN stack]], și se importă în Eclipse. Se compilează și se obține bin/​android-ngn-stack.jar. Se adaugă acest jar la scheletul ngnsip la Project Properties/​Java Build Path/​Libraries/​Add JARs din proiectul deschis în eclipse (android-ngn-stack).  ​
  
        
-** 1. ** Într-un proiect nou, cu o singură activitate, se actualizează datele contului SIP din Constants.java. Se configurează butoanele register și unregister astfel: register va demara initializarea stivei SIP cu configure_stack() și sign-in cu initalizeManager(). Acestea inițializează și membrii mEngine și mSipService ai activitătii principale. ​+** 2. ** În proiectul schelet, se actualizează datele contului SIP din Constants.java. Se configurează butoanele register și unregister ​din activitatea principală ​astfel: register va demara initializarea stivei SIP cu configure_stack() și sign-in cu initalizeManager(). Acestea inițializează și membrii mEngine și mSipService ai activitătii principale. ​
  
-** 2. ** Se definește ​ RegistrationBroadcastReceiver cu filtrul NgnRegistrationEventArgs.ACTION_REGISTRATION_EVENT pentru a prinde evenimentele legate de înregistrare (signin). Acestea sunt monitorizate în Log, cu Toasts, și într-un câmp din GUI care indică starea curenta (Registered/​In Progress.../​Unregistered). ​+** 3. ** Se definește ​ RegistrationBroadcastReceiver cu filtrul NgnRegistrationEventArgs.ACTION_REGISTRATION_EVENT pentru a prinde evenimentele legate de înregistrare (signin). Acestea sunt monitorizate în Log, cu Toasts, și într-un câmp din GUI care indică starea curenta (Registered/​In Progress.../​Unregistered). ​
  
-** 3. ** Se adaugă un câmp EditText care va primi adresa SIP destinație,​ și două butoane care initiază/​opresc apelul. Se crează o sesiune către un număr de test folosind NgnAVSession.createOutgoingSession(+** 4. ** Se adaugă un câmp EditText care va primi adresa SIP destinație,​ și două butoane care initiază/​opresc apelul. Se crează o sesiune către un număr de test folosind NgnAVSession.createOutgoingSession(
 NgnEngine.getInstance().getSipService().getSipStack(),​ NgnMediaType.Audio);​ Se inițiază apelul cu makeCall, și se oprește cu  NgnEngine.getInstance().getSipService().getSipStack(),​ NgnMediaType.Audio);​ Se inițiază apelul cu makeCall, și se oprește cu 
 hangUpCall. Sesiunea este menținuta ca membru al activitătii,​ deoarece este necesară și pe butoanele de hangUp sau DTMF.  hangUpCall. Sesiunea este menținuta ca membru al activitătii,​ deoarece este necesară și pe butoanele de hangUp sau DTMF. 
  
-** 4. ** Se definește un CallStateReceiver,​ si filtrul asociat pentru a monitoriza evenimentele legate de apeluri audio NgnInviteEventArgs.ACTION_INVITE_EVENT. Acest receiver monitorizează stările sesiunii audio: ​ INCOMING, INCALL, TERMINATED. ​+** 5. ** Se definește un CallStateReceiver,​ si filtrul asociat pentru a monitoriza evenimentele legate de apeluri audio NgnInviteEventArgs.ACTION_INVITE_EVENT. Acest receiver monitorizează stările sesiunii audio: ​ INCOMING, INCALL, TERMINATED. ​
  
-** 5. ** Se testează un apel audio către o adresă de test (thetestcall@getonsip.com). Inspecție conversație SIP la nivel pachet:+** 6. ** Se testează un apel audio către o adresă de test (thetestcall@getonsip.com). Inspecție conversație SIP la nivel pachet:
   * adb -s 192.168.56.3:​5555   * adb -s 192.168.56.3:​5555
   * În Android: tcpdump -s0 -ni eth1 -w /​sdcard/​DCIM/​sip.pcap '​udp'​   * În Android: tcpdump -s0 -ni eth1 -w /​sdcard/​DCIM/​sip.pcap '​udp'​
Line 52: Line 81:
  
  
-** 6. (Opțional) ** Pentru a trimite coduri numerice DTMF se crează un buton și edittext-ul asociat pentru a apela funcția sendDTMF cu valorile întregi 0-9, sau 10 pentru * si 11 pentru #. Folosind o adresa de test (thetestcall@getonsip.com sau 904@mouselike.org) se pot testa codurile și navigarea prin menuiuri+** 7. (Opțional) ** Pentru a trimite coduri numerice DTMF se crează un buton și edittext-ul asociat pentru a apela funcția sendDTMF cu valorile întregi 0-9, sau 10 pentru * si 11 pentru #. Folosind o adresa de test (thetestcall@getonsip.com sau 904@mouselike.org) se pot testa codurile și navigarea prin menuiuri
  
-** 7. ** Se creează o nouă activitate ChatActivity care poate fi lansată din activitatea principală,​ doar după ce s-a făcut signin. ​  +** 8. ** Se creează o nouă activitate ChatActivity care poate fi lansată din activitatea principală,​ doar după ce s-a făcut signin. ​  
 Activitatea primește ca parametru în Intent adresa cu care se va desfașura sesiunea de chat. Funcționalitatea este împărțită între Activitate si un BroadcastReceiver care trebuie să primească evenimentele NgnMessagingEventArgs.ACTION_MESSAGING_EVENT. ​ Activitatea primește ca parametru în Intent adresa cu care se va desfașura sesiunea de chat. Funcționalitatea este împărțită între Activitate si un BroadcastReceiver care trebuie să primească evenimentele NgnMessagingEventArgs.ACTION_MESSAGING_EVENT. ​
  
Line 62: Line 91:
 În receiver, se tratează doar acțiunea NgnMessagingEventArgs.ACTION_MESSAGING_EVENT,​ tipul evenimentului INCOMING, pentru a extrage octeții mesajului folosind getPayload. Aceștia se convertesc la String și se appendează la fereastra de chat.  În receiver, se tratează doar acțiunea NgnMessagingEventArgs.ACTION_MESSAGING_EVENT,​ tipul evenimentului INCOMING, pentru a extrage octeții mesajului folosind getPayload. Aceștia se convertesc la String și se appendează la fereastra de chat. 
    
- 
eim/laboratoare/laborator08.sip.1460114857.txt.gz · Last modified: 2016/04/08 14:27 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0