Hi,Upendra

First thanks you for your advices.

I changed the URI  according to  your suggestion, however , it seemed no
helpful.


My server keep istening on  port:
5060   so the uri should be "sip:[email protected]:5060",

and the client port:5061

so the uri should be "sip:[email protected]:5061"

isn't right???



so  I first telnet localhost 5554(the server emulator)

do redirecting command: redir add udp:5060:5060   -->OK

then  telnet localhost 5556 (the client emulator)
do redirecting command: redir add udp:5061:5061  -->OK


Then  run  the application, the server could work smoothly ,keeping
listening on port 5060.


but the  client didn't seem going well.  it could init an invitition  ,
but   I got no answer from the server???



still puzzled .


thanks .



2010/1/28 Upendra Chintala <[email protected]>

> Hi Tony,
>
> The problem is that your emulator IP Address some thing that starts with
> 10.0.2.2, and your PC(Where the emulator's are running)'s IP Address is
> different(ex, 192.168.1.100 or 127.0.0.1 for loopback). So, if you are
> running both the emulators from the same PC, then you need to make a SIP
> call with the URL that looks below.
>
> sip:[email protected]:5070 (Where 5070 is the port on which an another
> emulator is listening to which we are making calls.)
>
> Similarly, if you want to make a call to an emulator instance, which is
> listening on port 5060, then the SIP URL should be
> sip:[email protected]:5060.
>
> Hope this helps.
>
> Thanks,
> Upendra
>
> On Thu, Jan 28, 2010 at 9:48 AM, Tony <[email protected]> wrote:
>
>> I  have set the IP address for the two emulator instance ,  On  ubuntu
>> terminal  I input "netstat -an|grep 5060/5061"
>> and it shows
>>  "tcp        0      0 127.0.0.1:5060/5061          0.0.0.0:*
>> LISTEN" ,  and input "" ;
>>  and I redirect the emulator's adress to  my localhost adress  by using
>> commands "redir add tcp:5061:5061  " and "redir add tcp:5060:5060  " .
>>
>> then  I run my sip application ,the UAS(server) could listening  on port
>> 5060  , and  the USC(client) could listening on port 5061 too. but  the
>> client can not send a INVITE successfully !
>>
>> I still doubt the  IP adress and port were not set correctly , because
>> "eXosip_init"  and "eXosip_listen_addr " were  successful, there was no
>> other mistakes.
>>
>>
>> here is  the Native codes ,it includes a  UAS and a UAC  ,providing two
>> interface  in JNI form just like:
>>
>> public native int startServer();
>> public native int startClent();
>>
>>
>>
>> Native codes for UAS/USC:
>>
>>
>> include <eXosip2/eXosip.h>
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <netinet/in.h>
>> #include <sys/socket.h>
>> #include <sys/types.h>
>> #include <osip2/osip_mt.h>
>> #include <android/log.h>
>> #include <jni.h>
>> #include <unistd.h>
>> #include <sys/mman.h>
>> #include <assert.h>
>> #include <limits.h>
>> #include <unistd.h>
>>
>>
>> #define UA_TAG    "Test eXosip ==============================TAG"
>>
>> jint Java_com_android_sip_JniCross_startServer()
>> {
>>     eXosip_event_t *je = NULL;
>>     osip_message_t *ack = NULL;
>>     osip_message_t *invite = NULL;
>>     osip_message_t *answer = NULL;
>>     sdp_message_t *remote_sdp = NULL;
>>
>>     int call_id, dialog_id;
>>     int i,j;
>>     int id;
>>     char command;
>>     char tmp[4096];
>>     char localip[128];
>>
>>     int pos = 0;
>>
>>
>>     i = eXosip_init ();
>>     if (i != 0)
>>     {
>>         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"Can't initialize
>> eXosip!\n");
>>         return -1;
>>     }
>>     else
>>     {
>>         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"eXosip_init
>> successfully!\n");
>>     }
>>
>>       i = eXosip_listen_addr (IPPROTO_TCP, NULL, 5061, AF_INET, 0);
>>     if (i != 0)
>>     {
>>         eXosip_quit ();
>>         __android_log_print(ANDROID_LOG_INFO, UA_TAG, "eXosip_listen_addr
>> error!\nCouldn't initialize transport layer\n");
>>     }
>>
>>     for(;;)
>>     {
>>
>>         je = eXosip_event_wait (0,50);
>>
>>
>>         eXosip_lock ();
>>         eXosip_default_action (je);
>>         eXosip_automatic_refresh ();
>>         eXosip_unlock ();
>>
>>         if (je == NULL)
>>             continue;
>>           // __android_log_print(ANDROID_LOG_INFO, UA_TAG,"the cid is %s,
>> did is %s\n", je->did, je->cid);
>>         switch (je->type)
>>         {
>>             case EXOSIP_MESSAGE_NEW:
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG, "UA_TAG,
>> EXOSIP_MESSAGE_NEW!\n");
>>                 if (MSG_IS_MESSAGE (je->request))
>>                 {
>>                     {
>>                         osip_body_t *body;
>>                         osip_message_get_body (je->request, 0, &body);
>>                         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"I
>> get the msg is: %s\n", body->body);
>>                         //__android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"the cid is %s, did is %s\n", je->did, je->cid);
>>                     }
>>
>>                     eXosip_message_build_answer (je->tid, 200,&answer);
>>                     eXosip_message_send_answer (je->tid, 200,answer);
>>                 }
>>             break;
>>             case EXOSIP_CALL_INVITE:
>>
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,
>>                             "Received a INVITE msg from %s:%s, UserName is
>> %s,password  is %s\n",
>>                             je->request->req_uri->host,
>>                             je->request->req_uri->port,
>>                             je->request->req_uri->username,
>>                             je->request->req_uri->password);
>>
>>                 remote_sdp = eXosip_get_remote_sdp (je->did);
>>                 call_id = je->cid;
>>                 dialog_id = je->did;
>>
>>                 eXosip_lock ();
>>                 eXosip_call_send_answer (je->tid, 180, NULL);
>>                 i = eXosip_call_build_answer (je->tid, 200, &answer);
>>                 if (i != 0)
>>                 {
>>                      __android_log_print(ANDROID_LOG_INFO, UA_TAG,"This
>> request msg is invalid!Cann't response!\n");
>>                       eXosip_call_send_answer (je->tid, 400, NULL);
>>                 }
>>                 else
>>                 {
>>                     snprintf (tmp, 4096,
>>                     "v=0\r\n"
>>                     "o=anonymous 0 0 IN IP4 0.0.0.0\r\n"
>>                     "t=1 10\r\n"
>>                     "a=username:xuanjt\r\n"
>>                     "a=password:uvwxyZ198358\r\n");
>>
>>
>>                     osip_message_set_body (answer, tmp, strlen(tmp));
>>                     osip_message_set_content_type (answer,
>> "application/sdp");
>>
>>                     eXosip_call_send_answer (je->tid, 200, answer);
>>                     __android_log_print(ANDROID_LOG_INFO, UA_TAG,"send 200
>> over!\n");
>>                 }
>>                      eXosip_unlock ();
>>
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"the INFO is
>> :\n");
>>                 while (!osip_list_eol (&remote_sdp->a_attributes, pos))
>>                 {
>>                     sdp_attribute_t *at;
>>
>>                     at = (sdp_attribute_t *) osip_list_get
>> (&remote_sdp->a_attributes, pos);
>>                     __android_log_print(ANDROID_LOG_INFO, UA_TAG,"%s :
>> %s\n", at->a_att_field, at->a_att_value);
>>
>>                     pos ++;
>>                 }
>>                 break;
>>             case EXOSIP_CALL_ACK:
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"ACK
>> recieved!\n");
>>                 // __android_log_print(ANDROID_LOG_INFO, UA_TAG,"the cid
>> is %s, did is %s\n", je->did, je->cid);
>>                 break;
>>             case EXOSIP_CALL_CLOSED:
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"the remote
>> hold the session!\n");
>>                 // eXosip_call_build_ack(dialog_id, &ack);
>>                 //eXosip_call_send_ack(dialog_id, ack);
>>                 i = eXosip_call_build_answer (je->tid, 200, &answer);
>>                 if (i != 0)
>>                 {
>>                     __android_log_print(ANDROID_LOG_INFO, UA_TAG,
>>                     "This request msg is invalid!Cann't response!\n");
>>                     eXosip_call_send_answer (je->tid, 400, NULL);
>>
>>                 }
>>                 else
>>                 {
>>                     eXosip_call_send_answer (je->tid, 200, answer);
>>                     __android_log_print(ANDROID_LOG_INFO, UA_TAG,"bye send
>> 200 over!\n");
>>                 }
>>                 break;
>>
>>             case EXOSIP_CALL_MESSAGE_NEW:
>>                 /*
>>                 /* request related events within calls (except INVITE) */
>>                 //  EXOSIP_CALL_MESSAGE_NEW,            /**< announce new
>> incoming request. */
>>
>>                     __android_log_print(ANDROID_LOG_INFO, UA_TAG,"
>> EXOSIP_CALL_MESSAGE_NEW\n");
>>                 if (MSG_IS_INFO(je->request))
>>                 {
>>                     eXosip_lock ();
>>                     i = eXosip_call_build_answer (je->tid, 200, &answer);
>>                     if (i == 0)
>>                     {
>>                         eXosip_call_send_answer (je->tid, 200, answer);
>>                     }
>>                     eXosip_unlock ();
>>                     {
>>                         osip_body_t *body;
>>                         osip_message_get_body (je->request, 0, &body);
>>                         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"the
>> body is %s\n", body->body);
>>                     }
>>                 }
>>                 break;
>>             default:
>>             __android_log_print(ANDROID_LOG_INFO, UA_TAG,"Could not parse
>> the msg!\n");
>>             break;
>>
>>             }//end switch
>>
>>        }//end for
>> }
>>
>>
>> //-----------------------------------------------------------------------------------------------------------------------------------------------
>> jint Java_com_android_sip_JniCross_startClent()
>> {
>>     eXosip_event_t *je;
>>     osip_message_t *reg = NULL;
>>     osip_message_t *invite = NULL;
>>     osip_message_t *ack = NULL;
>>     osip_message_t *info = NULL;
>>     osip_message_t *message = NULL;
>>
>>     int ire = 0;
>>     int call_id, dialog_id;
>>     int i,flag;
>>     int flag1 = 1;
>>     int id;
>>
>>
>>     char *source_call = "sip:[email protected] <sip%[email protected]>";
>>     char *dest_call = "sip:[email protected]:5061";
>>
>>     char command = 'i';
>>     char tmp[4096];
>>     char localip[128];
>>
>>     i = eXosip_init ();
>>     if (i != 0)
>>     {
>>         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"Couldn't initialize
>> eXosip!\n");
>>         return -1;
>>     }
>>     else
>>     {
>>         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"eXosip_init
>> successfully!\n");
>>     }
>>
>>     i = eXosip_listen_addr (IPPROTO_TCP, NULL, 5060, AF_INET, 0);
>>     if (i != 0)
>>     {
>>         eXosip_quit ();
>>         __android_log_print(ANDROID_LOG_INFO, UA_TAG, "Couldn't initialize
>> transport layer!\n");
>>         return -1;
>>     }
>>       flag = 1;
>>     while (flag)
>>     {
>>         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"please input the
>> comand:\n");
>>
>>         //scanf ("%c", &command);
>>         //getchar ();
>>
>>         switch (command)
>>         {
>>             case 'r':
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"This modal
>> isn't commpleted!\n");
>>             break;
>>             case 'i':/* INVITE */
>>                 i = eXosip_call_build_initial_invite (&invite, dest_call,
>> source_call, NULL, "This si a call for a conversation");
>>                 if (i != 0)
>>                 {
>>                     __android_log_print(ANDROID_LOG_INFO, UA_TAG,"Intial
>> INVITE failed!\n");
>>                     break;
>>                 }else
>>                 {
>>                     __android_log_print(ANDROID_LOG_INFO, UA_TAG,"Intial
>> INVITE sucessfully!\n");
>>                 }
>>
>>                 snprintf (tmp, 4096,
>>                 "v=0\r\n"
>>                 "o=anonymous 0 0 IN IP4 0.0.0.0\r\n"
>>                 "t=1 10\r\n"
>>                 "a=username:xuanjt\r\n"
>>                 "a=password:uvwxyZ198358\r\n");
>>                 osip_message_set_body (invite, tmp, strlen(tmp));
>>                 osip_message_set_content_type (invite, "application/sdp");
>>
>>                 eXosip_lock ();
>>                 i = eXosip_call_send_initial_invite (invite);
>>                 eXosip_unlock ();
>>                 flag1 = 1;
>>                 while (flag1)
>>                 {
>>                     je = eXosip_event_wait (0, 200);
>>
>>                     if (je == NULL)
>>                     {
>>                         ire = 10222;
>>                         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"No
>> response or the time is over!\n");
>>                         break;
>>                     }
>>
>>                     switch (je->type)
>>                     {
>>                         case EXOSIP_CALL_INVITE:
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"a new invite reveived!\n");
>>                             break;
>>                         case EXOSIP_CALL_PROCEEDING:
>>                         __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"proceeding!\n");
>>                         break;
>>                         case EXOSIP_CALL_RINGING:
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"ringing!\n");
>>                             // call_id = je->cid;
>>                             // dialog_id = je->did;
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"call_id is %d, dialog_id is %d \n", je->cid, je->did);
>>                             break;
>>                         case EXOSIP_CALL_ANSWERED:
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"ok! connected!\n");
>>                             call_id = je->cid;
>>                             dialog_id = je->did;
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"call_id is %d, dialog_id is %d \n", je->cid, je->did);
>>
>>                             eXosip_call_build_ack (je->did, &ack);
>>                             eXosip_call_send_ack (je->did, ack);
>>                             flag1 = 0;
>>
>>                             ire = 1001;
>>
>>                             break;
>>                         case EXOSIP_CALL_CLOSED:
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"the other sid closed!\n");
>>                             break;
>>                         case EXOSIP_CALL_ACK:
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"ACK received!\n");
>>                             break;
>>                         default:
>>                             ire = 1000;
>>                             __android_log_print(ANDROID_LOG_INFO,
>> UA_TAG,"other response!\n");
>>                             break;
>>                     }
>>                     eXosip_event_free (je);
>>
>>                 }//end while flag1
>>                 break;
>>
>>             case 'h':
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"Holded
>> !\n");
>>                 eXosip_lock ();
>>                 eXosip_call_terminate (call_id, dialog_id);
>>                 eXosip_unlock ();
>>                 break;
>>             case 'c':
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"This modal
>> isn't commpleted!\n");
>>                 break;
>>             case 's':
>>
>>                 eXosip_call_build_info (dialog_id, &info);
>>                 snprintf (tmp , 4096,"hello,rainfish");
>>                 osip_message_set_body (info, tmp, strlen(tmp));
>>
>>                 osip_message_set_content_type (info, "text/plain");
>>                 eXosip_call_send_request (dialog_id, info);
>>                 break;
>>             case 'm'
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"the mothed
>> :MESSAGE\n");
>>                 eXosip_message_build_request (&message, "MESSAGE",
>> dest_call, source_call, NULL);
>>                 snprintf (tmp, 4096,"hellor xuanjt");
>>                 osip_message_set_body (message, tmp, strlen(tmp));
>>
>>                 osip_message_set_content_type (message, "text/xml");
>>                 eXosip_message_send_request (message);
>>                 break;
>>             case 'q':
>>                 eXosip_quit();
>>                 __android_log_print(ANDROID_LOG_INFO, UA_TAG,"Exit the
>> setup!\n");
>>                 flag = 0;
>>                 break;
>>
>>         }//end switch (command)
>>
>>     }//end while flag
>>
>>     return ire;
>> }
>>
>>
>>
>> the above two interface which were built in "ua.so"  ,  can be called
>> successfully by java code.
>>
>> the client will keeping looping at :
>>
>>
>> while (flag1)
>>                 {
>>                     je = eXosip_event_wait (0, 200);
>>
>>                     if (je == NULL)
>>                     {
>>                         ire = 10222;
>>                         __android_log_print(ANDROID_LOG_INFO, UA_TAG,"No
>> response or the time is over!\n");
>>                         break;
>>                     }
>>
>>
>>
>>                       ...
>>                       ...
>>
>> }
>>
>>
>> the  je always NULL, and it keeped looping!
>> any one can  give any advices? thanks in advance!
>>
>>
>>
>> 2010/1/28 jotobjects <[email protected]>
>>
>> See this link about emulator IP address:
>>>
>>>
>>> http://developer.android.com/intl/fr/guide/developing/tools/emulator.html#networkaddresses
>>>
>>> And see this link about network redirecting:
>>>
>>>
>>> http://developer.android.com/intl/fr/guide/developing/tools/emulator.html#redirections
>>>
>>> Thanks for sharing this information and please keep us up to date.  I
>>> looked at the Jain SIP stack which looks very promising except that it
>>> is too large to be practical for an Android application.  The other
>>> practical issue about using SIP is that the IP address of the device
>>> can change which is a problem for push (like SIP Notify messages).
>>>
>>> On Jan 27, 12:12 am, Tony <[email protected]> wrote:
>>> >  Hello ,All!
>>> >
>>> > I'd like to share my sip development experience with you  as well
>>>  giving
>>> > you  my problems.I hope anyone can help me!
>>> >
>>> > I  compiled  osipperser2 ,osip2 and exosip2  on NDK platform,   Base on
>>> the
>>> > three  static libraries osipperser.a ,osip2.a ,exosip2.a , I wrote a
>>> sample
>>> > base on sip  and it was compiled to share library, it include  a
>>> > server(UAC) and a client (UAC), now I can load the   sample so
>>>  successfully
>>> > and made both of them running  on two emulator instances, but I didn't
>>> how
>>> > to set the SIP UIRs , I don't know the  two emulators' IP address, How
>>> can
>>> > the two emulator instances communicate with each other  by SIP.????
>>> >
>>> > is 10.0.02 or 10.0.0.15  the emulator's IP????
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Android Developers" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]<android-developers%[email protected]>
>>> For more options, visit this group at
>>> http://groups.google.com/group/android-developers?hl=en
>>
>>
>>
>>
>> --
>> I have a strong desire to become  to a android superior; let us work hard
>> together!
>>
>>  --
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]<android-developers%[email protected]>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>>
>
>
>
> --
> Regards,
> Upendra
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]<android-developers%[email protected]>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>



-- 
I have a strong desire to become  to a android superior; let us work hard
together!

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to