Changeset 113:c30ff23c1383 in verona
- Timestamp:
- Apr 8, 2010 6:30:13 PM (3 years ago)
- Branch:
- default
- Children:
- 114:8ac29d37c839, 115:e450452bc74e
- Files:
-
- 4 edited
-
phapi/phapi.c (modified) (35 diffs)
-
phapi/sdphandler.c (modified) (3 diffs)
-
phapi/sdphandler.h (modified) (1 diff)
-
phcpp/testphcpp.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
phapi/phapi.c
r112 r113 129 129 130 130 131 static int ph_call_retrieve_payloads(phcall_t *ca, eXosip_event_t *je,int flags);131 static int ph_call_retrieve_payloads(phcall_t *ca, int flags); 132 132 static int ph_call_media_start(phcall_t *ca, eXosip_event_t *je, int flags, int resumeflag); 133 133 static char *ph_ipv4tostr(char *buf, const StunAddress4 addr); … … 220 220 static int 221 221 ph_req_set_body(osip_message_t *msg, const char *body, const char *mime); 222 static char * 223 ph_req_get_body(osip_message_t *msg); 222 224 223 225 … … 584 586 osip_list_init(&ca->audio_payloads); 585 587 osip_list_clone(&ph_audio_payloads, &ca->audio_payloads, sdp_payload_clone); 588 osip_list_init(&ca->video_payloads); 589 osip_list_clone(&ph_video_payloads, &ca->video_payloads, sdp_payload_clone); 586 590 return ca; 587 591 } … … 639 643 if (hdr && !strcmp(hdr->hvalue, "*;+g.oma.sip-im")) 640 644 ca->nego_mflags = PH_STREAM_DATA; 641 osip_list_init(&ca->audio_payloads); 642 osip_list_clone(&ph_audio_payloads, &ca->audio_payloads, sdp_payload_clone); 643 645 646 if (creatit) 647 { 648 osip_list_init(&ca->audio_payloads); 649 osip_list_clone(&ph_audio_payloads, &ca->audio_payloads, sdp_payload_clone); 650 osip_list_init(&ca->video_payloads); 651 osip_list_clone(&ph_video_payloads, &ca->video_payloads, sdp_payload_clone); 652 653 if (je->request && MSG_IS_INVITE(je->request)) 654 { 655 char *sdp = ph_req_get_body(je->request); 656 657 sdp_message_init(&ca->remote_sdp); 658 sdp_message_parse(ca->remote_sdp, sdp); 659 if (sdp_message_m_attr_has_type(ca->remote_sdp, "audio")) 660 ca->nego_mflags |= PH_STREAM_AUDIO; 661 if (sdp_message_m_attr_has_type(ca->remote_sdp, "video")) 662 ca->nego_mflags |= PH_STREAM_VIDEO; 663 osip_free(sdp); 664 } 665 666 if (je->response && MSG_IS_INVITE(je->response)) 667 { 668 char *sdp = ph_req_get_body(je->response); 669 if (sdp) 670 { 671 sdp_message_init(&ca->remote_sdp); 672 sdp_message_parse(ca->remote_sdp, sdp); 673 if (sdp_message_m_attr_has_type(ca->remote_sdp, "audio")) 674 ca->nego_mflags |= PH_STREAM_AUDIO; 675 if (sdp_message_m_attr_has_type(ca->remote_sdp, "video")) 676 ca->nego_mflags |= PH_STREAM_VIDEO; 677 osip_free(sdp); 678 } 679 } 680 } 644 681 return ca; 645 682 } … … 735 772 if (ca->sdpctx) 736 773 sdp_context_free(ca->sdpctx); 737 if (ca->remote_sdp)774 /*if (ca->remote_sdp) 738 775 sdp_message_free(ca->remote_sdp); 739 776 if (ca->local_sdp) 740 sdp_message_free(ca->local_sdp); 741 742 osip_list_special_free(&ca->audio_payloads, osip_free_func);743 744 osip_list_special_free(&ca->video_payloads, osip_free_func);777 sdp_message_free(ca->local_sdp);*/ 778 779 osip_list_special_free(&ca->audio_payloads, osip_free_func); 780 781 osip_list_special_free(&ca->video_payloads, osip_free_func); 745 782 746 783 memset(ca, 0, sizeof(phcall_t)); … … 848 885 ph_call_support_payload(const struct osip_list *codec_list, const sdp_payload_t *payload) 849 886 { 850 sdp_payload_t *cur_payload;887 const sdp_payload_t *cur_payload; 851 888 852 889 int pos = 0; … … 856 893 cur_payload = (sdp_payload_t *) osip_list_get (codec_list, pos); 857 894 858 if (sdp_equal_payload(cur_payload, payload) )859 { 860 return 0;895 if (sdp_equal_payload(cur_payload, payload) == 0) 896 { 897 return 1; 861 898 } 862 899 pos++; 863 900 } 864 return -1;901 return 0; 865 902 } 866 903 … … 898 935 } 899 936 } 900 901 937 902 938 payload->localport = si->streamport; … … 999 1035 phcall_t *ca =(phcall_t*)sdp_context_get_user_pointer(ctx); 1000 1036 1001 if (!ph_call_support_payload( ca, payload))1037 if (!ph_call_support_payload(&ca->audio_payloads, payload)) 1002 1038 return -1; 1003 1039 … … 1013 1049 phcall_t *ca =(phcall_t*)sdp_context_get_user_pointer(ctx); 1014 1050 1015 if (!ph_call_support_payload( ca, payload))1051 if (!ph_call_support_payload(&ca->video_payloads, payload)) 1016 1052 return -1; 1017 1053 … … 1205 1241 DBG_SIP_NEGO("phLinePlaceCall_withCa: a new call has been placed\n"); 1206 1242 1207 1208 sdp_payload_t *cur_payload;1209 1210 int pos = 0;1211 1212 1243 local_video_port[0] = 0; 1213 1244 local_voice_port[0] = 0; … … 1234 1265 ca0->cid = -2; 1235 1266 eXosip_unlock(); 1236 1237 while (!osip_list_eol(&ca0->audio_payloads, pos))1238 {1239 cur_payload = (sdp_payload_t *) osip_list_get (&ca0->audio_payloads, pos);1240 printf("ca0 audio codecs %s\n", cur_payload->a_rtpmap);1241 pos++;1242 }1243 1267 1244 1268 if (!ca0) … … 1318 1342 } 1319 1343 sdp_context_build_offer(ca0->sdpctx); 1344 ca0->local_sdp = ca0->sdpctx->offer; 1320 1345 ph_req_set_body(invite, ca0->sdpctx->offerstr, "application/sdp") 1321 1346 … … 1332 1357 } 1333 1358 sdp_context_build_offer(ca0->sdpctx); 1359 ca0->local_sdp = ca0->sdpctx->offer; 1334 1360 ph_req_set_body(invite, ca0->sdpctx->offerstr, "application/sdp"); 1335 1361 … … 1390 1416 return phLineSendMessage2(vlid, uri, uri, buff, mime, 0); 1391 1417 } 1392 1393 1394 1395 1418 1396 1419 … … 1416 1439 ph_build_from(from, sizeof(from), vl); 1417 1440 1418 1419 1420 1441 eXosip_lock(); 1421 1442 i = eXosip_message_build_request(&msg, "MESSAGE", (char *)uri, … … 1444 1465 if (!ca) 1445 1466 return -PH_BADCID; 1446 1447 1467 1448 1468 eXosip_lock(); … … 1727 1747 if (!i) { 1728 1748 if (!ca->sdpctx) { 1729 printf("build sdp ctx\n");1730 1749 ca->sdpctx = sdp_handler_create_context(&ph_sdp_handler, local_ip, ctct, vl->proxy); 1731 1750 ca->cfg = &phcfg; 1732 1751 sdp_context_set_user_pointer(ca->sdpctx, ca); 1752 ca->sdpctx->offer = ca->remote_sdp; 1733 1753 } 1734 1754 sdp_context_build_answer(ca->sdpctx, ca->remote_sdp); 1735 1736 ph_req_set_body(msg, ca->sdpctx-> offerstr, "application/sdp");1755 ca->local_sdp = ca->sdpctx->answer; 1756 ph_req_set_body(msg, ca->sdpctx->answerstr, "application/sdp"); 1737 1757 if (ctct) 1738 1758 osip_message_set_contact(msg, ctct); … … 1817 1837 if (i == 0 && streams != PH_STREAM_DATA) 1818 1838 { 1819 i = ph_call_retrieve_payloads(ca, NULL,streams | PH_STREAM_CNG );1839 i = ph_call_retrieve_payloads(ca, streams | PH_STREAM_CNG ); 1820 1840 1821 1841 ca->local_sdp_audio_port = atoi(local_voice_port); … … 1829 1849 eXosip_unlock(); 1830 1850 1831 if (!i && !(streams == PH_STREAM_DATA))1851 if (!i && streams != PH_STREAM_DATA) 1832 1852 i = ph_call_media_start(ca, NULL, streams, 0); 1833 1853 … … 1877 1897 char tmp[16]; 1878 1898 1879 i = ph_call_retrieve_payloads(ca, NULL,streams);1899 i = ph_call_retrieve_payloads(ca, streams); 1880 1900 1881 1901 _get_local_audio_sdp_port(tmp); … … 1929 1949 1930 1950 1931 i = ph_call_retrieve_payloads(ca, NULL,streams);1951 i = ph_call_retrieve_payloads(ca, streams); 1932 1952 1933 1953 ca->local_sdp_audio_port = mca->local_sdp_audio_port; … … 3017 3037 else 3018 3038 { 3019 #ifdef OLDOSIP3020 char contact[512];3021 3039 char from[512]; 3022 3040 3023 3041 ph_build_from(from, sizeof(from), vl); 3024 eXosip_guess_contact_uri(from, contact, sizeof(contact), 1); 3025 vl->contact = osip_strdup(contact); 3026 #endif 3042 vl->contact = osip_strdup(from); 3027 3043 3028 3044 } … … 3992 4008 ph_nat_init(); 3993 4009 3994 DBG_SIP_NEGO("NAT type: %s fw=%s \n", ph_nat_type_str, ph_nat_router_addr ,0);4010 DBG_SIP_NEGO("NAT type: %s fw=%s \n", ph_nat_type_str, ph_nat_router_addr); 3995 4011 3996 4012 #ifdef OLDOSIP … … 4196 4212 4197 4213 static int 4198 ph_call_retrieve_payloads(phcall_t *ca, eXosip_event_t *je, int flags) 4199 { 4200 #if 0 4214 ph_rebuild_codec_list(sdp_message_t *sdp, const char *mtype, int *ptnum, char *mime, int mime_len) 4215 { 4216 int i; 4217 char *pt; 4218 4219 for (i = 0; !sdp_message_endof_media (sdp, i); i++) 4220 { 4221 if (strcmp(mtype, sdp_message_m_media_get(sdp, i)) == 0 && (pt = sdp_message_m_payload_get(sdp, i, 0)) != NULL) 4222 { 4223 *ptnum = atoi(pt); 4224 mime[0] = 0; 4225 // strcpy(mime, ph_media_lookup_codec_mime(*ptnum)); 4226 } 4227 } 4228 return 0; 4229 } 4230 4231 static int 4232 ph_call_retrieve_payloads(phcall_t *ca, int flags) 4233 { 4201 4234 int i = 0; 4202 DBG4_SIP_NEGO("looking for payloads...\n", 0, 0, 0); 4203 DBG4_SIP_NEGO("audio...\n", 0, 0, 0); 4235 4236 DBG_SIP_NEGO("looking for payloads...\n"); 4237 DBG_SIP_NEGO("audio...\n"); 4204 4238 if (_is_audio_enabled(flags)) 4205 4239 { 4206 i = eXosip_retrieve_negotiated_audio_payload(ca->did, &ca->audio_payload, ca->audio_payload_name, sizeof(ca->audio_payload_name)); 4207 DBG4_SIP_NEGO("remote_audio=%s payload=%s(%d)\n", ca->remote_sdp_audio_ip, ca->audio_payload_name, ca->audio_payload); 4208 } 4209 4210 DBG4_SIP_NEGO("video...\n", 0, 0, 0); 4240 ph_rebuild_codec_list(ca->local_sdp, "audio", &ca->audio_payload, ca->audio_payload_name, sizeof(ca->audio_payload_name)); 4241 //i = eXosip_retrieve_negotiated_audio_payload(ca->did, &ca->audio_payload, ca->audio_payload_name, sizeof(ca->audio_payload_name)); 4242 // DBG4_SIP_NEGO("remote_audio=%s payload=%s(%d)\n", ca->remote_sdp_audio_ip, ca->audio_payload_name, ca->audio_payload); 4243 } 4244 4245 DBG_SIP_NEGO("video...\n"); 4211 4246 ca->video_payload = 0; 4212 4247 if (ca->remote_sdp_video_ip[0] && (_is_video_enabled(flags))) 4213 4248 { 4214 i = eXosip_retrieve_negotiated_video_payload(ca->did, &ca->video_payload, ca->video_payload_name, sizeof(ca->video_payload_name)); 4215 DBG4_SIP_NEGO("remote_video=%s payload=%s(%d)\n", ca->remote_sdp_video_ip, ca->video_payload_name, ca->video_payload); 4216 } 4217 4218 DBG4_SIP_NEGO("cng...\n", 0, 0, 0); 4249 ph_rebuild_codec_list(ca->local_sdp, "video", &ca->video_payload, ca->video_payload_name, sizeof(ca->video_payload_name)); 4250 //i = eXosip_retrieve_negotiated_video_payload(ca->did, &ca->video_payload, ca->video_payload_name, sizeof(ca->video_payload_name)); 4251 // DBG_SIP_NEGO("remote_video=%s payload=%s(%d)\n", ca->remote_sdp_video_ip, ca->video_payload_name, ca->video_payload); 4252 } 4253 4254 DBG_SIP_NEGO("cng...\n"); 4219 4255 if(!i && phcfg.cng && (flags & PH_STREAM_CNG)) { 4220 ca->cng = !eXosip_retrieve_negotiated_specific_payload(ca->did, PH_MEDIA_CN_PT_STR, strlen(PH_MEDIA_CN_PT_STR));4221 DBG4_SIP_NEGO("cng: %d", ca->cng, 0, 0);4256 // ca->cng = !eXosip_retrieve_negotiated_specific_payload(ca->did, PH_MEDIA_CN_PT_STR, strlen(PH_MEDIA_CN_PT_STR)); 4257 // DBG_SIP_NEGO("cng: %d", ca->cng); 4222 4258 } 4223 4259 return i; 4224 #endif4225 4260 } 4226 4261 … … 4625 4660 ph_call_new(eXosip_event_t *je) 4626 4661 { 4627 #ifdef OLDOSIP4628 4662 phCallStateInfo_t info; 4629 4663 phcall_t *ca; 4630 4664 struct vline *vl; 4665 char *localUri, *remoteUri; 4631 4666 4632 4667 clear(info); 4633 4668 if (ph_busyFlag) 4634 4669 { 4635 ph_answer_request(je-> tid, 486, 0);4670 ph_answer_request(je->cid, je->tid, 486, 0); 4636 4671 return; 4637 4672 } 4638 4673 4639 4640 4674 if (ph_follow_me_addr[0]) 4641 4675 { 4642 ph_answer_request(je-> tid, 302, ph_follow_me_addr);4676 ph_answer_request(je->cid, je->tid, 302, ph_follow_me_addr); 4643 4677 return; 4644 4678 } 4645 4646 info.vlid = ph_get_vline_id(je->local_uri, je->req_uri); 4679 osip_uri_to_str(je->response->req_uri, &localUri); 4680 osip_uri_to_str(je->request->req_uri, &remoteUri); 4681 info.vlid = ph_get_vline_id(localUri, remoteUri); 4647 4682 4648 4683 if (!info.vlid) 4649 4684 { 4650 ph_answer_request(je-> tid, 404, 0);4685 ph_answer_request(je->cid, je->tid, 404, 0); 4651 4686 return; 4652 4687 } … … 4658 4693 if (vl->busy) 4659 4694 { 4660 ph_answer_request(je-> tid, 486, vl->contact);4695 ph_answer_request(je->cid, je->tid, 486, vl->contact); 4661 4696 return; 4662 4697 } … … 4665 4700 if (vl->followme && vl->followme[0]) 4666 4701 { 4667 ph_answer_request(je-> tid, 302, vl->followme);4702 ph_answer_request(je->cid, je->tid, 302, vl->followme); 4668 4703 return; 4669 4704 } … … 4678 4713 info.userData = je->external_reference; 4679 4714 info.event = phINCALL; 4680 info.u.remoteUri = je->remote_uri;4681 info.localUri = je->local_uri;4715 info.u.remoteUri = osip_strdup(remoteUri); 4716 info.localUri = osip_strdup(localUri); 4682 4717 info.streams = ca->nego_mflags; 4683 info.callinfo = je->call_info; 4684 4685 ph_retrieve_remote_sdp_text(je->did, (char **)&info.remoteSdp); 4718 info.callinfo = 0; //je->call_info; 4719 4720 info.remoteSdp = ph_req_get_body(je->response); 4721 4722 // ph_retrieve_remote_sdp_text(je->did, (char **)&info.remoteSdp); 4686 4723 4687 4724 phcb->callProgress(ca->cid, &info); … … 4689 4726 else 4690 4727 { 4691 ph_answer_request(je->tid, 500, vl->contact); 4692 } 4693 #endif 4694 4728 ph_answer_request(je->cid, je->tid, 500, vl->contact); 4729 } 4695 4730 } 4696 4731 … … 4823 4858 clear(info); 4824 4859 4825 ca = ph_locate_call(je, 1);4860 ca = ph_locate_call(je, 0); 4826 4861 info.remoteSdp = sdp = ph_req_get_body(je->response); 4827 4862 if (ca) … … 4834 4869 const int mflags = -1 & ~(PH_STREAM_MCSEND|PH_STREAM_MCRECV); 4835 4870 4836 ph_call_retrieve_payloads(ca, je, -1);4837 4871 sdp_message_init(&ca->remote_sdp); 4838 4872 sdp_message_parse(ca->remote_sdp, sdp); 4873 ca->sdpctx->answer = ca->remote_sdp; 4839 4874 sdp_context_process_answer(ca->sdpctx, ca->remote_sdp); 4875 ph_call_retrieve_payloads(ca, -1); 4840 4876 ph_call_media_start(ca, je, mflags, ca->localresume); 4841 4877 } … … 4916 4952 if (!ca->localrefer) 4917 4953 { 4918 ph_call_retrieve_payloads(ca, je,PH_STREAM_CNG);4954 ph_call_retrieve_payloads(ca, PH_STREAM_CNG); 4919 4955 ph_call_media_start(ca, je, -1, 0); 4920 4956 … … 5036 5072 } 5037 5073 5038 ph_call_retrieve_payloads(ca, je,PH_STREAM_CNG);5074 ph_call_retrieve_payloads(ca, PH_STREAM_CNG); 5039 5075 5040 5076 ret = ph_call_media_start(ca, je, -1, 0); … … 5334 5370 ca->remotehold = 0; 5335 5371 5336 ph_call_retrieve_payloads(ca, je,-1);5372 ph_call_retrieve_payloads(ca, -1); 5337 5373 ph_call_media_start(ca, je, -1, remhold); 5338 5374 -
phapi/sdphandler.c
r112 r113 81 81 82 82 int 83 sdp_equal_payload( sdp_payload_t *cur_payload,sdp_payload_t *payload)83 sdp_equal_payload(const sdp_payload_t *cur_payload, const sdp_payload_t *payload) 84 84 { 85 85 return strcmp(cur_payload->a_rtpmap, payload->a_rtpmap); … … 119 119 } 120 120 return NULL; 121 } 122 123 int sdp_message_m_attr_has_type(sdp_message_t *sdp, const char *type) 124 { 125 int i; 126 for (i = 0; !sdp_message_endof_media (sdp, i); i++) 127 { 128 if (strcmp(sdp_message_m_media_get(sdp, i), type) == 0) 129 return 1; 130 } 131 return 0; 121 132 } 122 133 … … 408 419 { 409 420 /* refuse this line (leave port to 0) */ 410 refuse_mline(answer, mtype, payload.proto, mline);421 // refuse_mline(answer, mtype, payload.proto, mline); 411 422 } 412 423 -
phapi/sdphandler.h
r112 r113 95 95 void sdp_context_process_answer(sdp_context_t *ctx, sdp_message_t *remote_answer); 96 96 void sdp_context_free(sdp_context_t *ctx); 97 int sdp_message_m_attr_has_type(sdp_message_t *sdp, const char *type); 97 98 98 99 int sdp_payload_init (sdp_payload_t * payload); 99 100 int sdp_payload_clone(sdp_payload_t *src, sdp_payload_t **dst); 100 int sdp_equal_payload( sdp_payload_t *cur_payload,sdp_payload_t *payload);101 int sdp_equal_payload(const sdp_payload_t *cur_payload, const sdp_payload_t *payload); 101 102 int sdp_payload_list_add(struct osip_list* list, int pt, const char *rtpmap); 102 103 #endif -
phcpp/testphcpp.cpp
r112 r113 115 115 info->localUri, info->u.remoteUri, info->streams, nz(info->callinfo)); 116 116 117 if (info->streams == PH_STREAM_DATA)117 if (info->streams & PH_STREAM_AUDIO) 118 118 { 119 acceptCall(cid, 0, PH_STREAM_DATA); 119 printf("INCALL ACCEPT\n"); 120 acceptCall(cid, 0, PH_STREAM_AUDIO, "192.168.10.145"); 120 121 cid2 = cid; 121 122 } … … 338 339 cout << "Intializing and creating virtual lines " << endl; 339 340 ph_config_t* conf = api.getConfig(); 340 strcpy(conf->audio_codecs, "PCM U");341 strcpy(conf->audio_codecs, "PCMA,PCMU"); 341 342 strcpy(conf->local_rtp_port, "27000"); 342 343 strcpy(conf->audio_dev, "default"); … … 348 349 api.addAuthInfo(argv[1], argv[1], argv[2], NULL); 349 350 350 vl1 = api.addVline(argv[1], argv[1], "voip.mbdsys.com:6060", " ", 600);351 vl1 = api.addVline(argv[1], argv[1], "voip.mbdsys.com:6060", "voip.mbdsys.com:6060", 600); 351 352 352 353 string s;
Note: See TracChangeset
for help on using the changeset viewer.
