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

