/* * Send application data to remote agent. */ void natclient_send_data(struct ice_trans_s* icetrans, unsigned comp_id, const char *data) { pj_status_t status; if (icetrans->icest == NULL) { PJ_LOG(1,(THIS_FILE, "Error: No ICE instance, create it first")); return; } if (!pj_ice_strans_has_sess(icetrans->icest)) { PJ_LOG(1,(THIS_FILE, "Error: No ICE session, initialize first")); return; } /* if (!pj_ice_strans_sess_is_complete(icetrans->icest)) { PJ_LOG(1,(THIS_FILE, "Error: ICE negotiation has not been started or is in progress")); return; } */ if (comp_id<1||comp_id>pj_ice_strans_get_running_comp_cnt(icetrans->icest)) { PJ_LOG(1,(THIS_FILE, "Error: invalid component ID")); return; } status = pj_ice_strans_sendto(icetrans->icest, comp_id, data, strlen(data), &icetrans->rem.def_addr[comp_id-1], pj_sockaddr_get_len(&icetrans->rem.def_addr[comp_id-1])); if (status != PJ_SUCCESS) natclient_perror("Error sending data", status); else PJ_LOG(3,(THIS_FILE, "Data sent")); }
void get_and_register_SDP_to_cloud(struct ice_trans_s* icetrans, ice_option_t opt, char *usrid) { static char buffer[2048]; int len; if (icetrans->icest == NULL) { PJ_LOG(1,(THIS_FILE, "Error: No ICE instance, create it first")); return; } PJ_LOG(4, (__FUNCTION__, "General info")); PJ_LOG(4, (__FUNCTION__,"---------------")); PJ_LOG(4, (__FUNCTION__,"Component count : %d\n", opt.comp_cnt)); PJ_LOG(4, (__FUNCTION__,"Status : ")); if (pj_ice_strans_sess_is_complete(icetrans->icest)) puts("negotiation complete"); else if (pj_ice_strans_sess_is_running(icetrans->icest)) puts("negotiation is in progress"); else if (pj_ice_strans_has_sess(icetrans->icest)) puts("session ready"); else puts("session not created"); if (!pj_ice_strans_has_sess(icetrans->icest)) { puts("Create the session first to see more info"); return; } printf("Negotiated comp_cnt: %d\n", pj_ice_strans_get_running_comp_cnt(icetrans->icest)); printf("Role : %s\n", pj_ice_strans_get_role(icetrans->icest)==PJ_ICE_SESS_ROLE_CONTROLLED ? "controlled" : "controlling"); len = extract_sdp_to_xml(icetrans, buffer, 2048, opt, usrid); if (len < 0) err_exit("not enough buffer to show ICE status", -len, icetrans); // Register this local SDP to cloud char full_url[256]; //printf("[DEBUG] %s, %d \n", __FUNCTION__, __LINE__ ); strcpy(full_url, gUrl); // plus URL strcpy(&full_url[strlen(full_url)], "/peer/registerPeer"); // plus API http_post_request(full_url, buffer); PJ_LOG(4, (__FUNCTION__,"Local SDP (paste this to remote host):\n" "--------------------------------------\n" "%s\n", buffer)); }
/* Create subsequent SDP offer */ static pj_status_t create_subsequent_offer(struct transport_ice *tp_ice, pj_pool_t *sdp_pool, pjmedia_sdp_session *loc_sdp, unsigned media_index) { unsigned comp_cnt; if (pj_ice_strans_has_sess(tp_ice->ice_st) == PJ_FALSE) { /* We don't have ICE */ return PJ_SUCCESS; } comp_cnt = pj_ice_strans_get_running_comp_cnt(tp_ice->ice_st); return encode_session_in_sdp(tp_ice, sdp_pool, loc_sdp, media_index, comp_cnt, PJ_FALSE); }
/* * Show information contained in the ICE stream transport. This is * invoked from the menu. */ static void icedemo_show_ice(void) { static char buffer[1000]; int len; if (icedemo.icest == NULL) { PJ_LOG(1,(THIS_FILE, "Error: No ICE instance, create it first")); return; } puts("General info"); puts("---------------"); printf("Component count : %d\n", icedemo.opt.comp_cnt); printf("Status : "); if (pj_ice_strans_sess_is_complete(icedemo.icest)) puts("negotiation complete"); else if (pj_ice_strans_sess_is_running(icedemo.icest)) puts("negotiation is in progress"); else if (pj_ice_strans_has_sess(icedemo.icest)) puts("session ready"); else puts("session not created"); if (!pj_ice_strans_has_sess(icedemo.icest)) { puts("Create the session first to see more info"); return; } printf("Negotiated comp_cnt: %d\n", pj_ice_strans_get_running_comp_cnt(icedemo.icest)); printf("Role : %s\n", pj_ice_strans_get_role(icedemo.icest)==PJ_ICE_SESS_ROLE_CONTROLLED ? "controlled" : "controlling"); len = encode_session(buffer, sizeof(buffer)); if (len < 0) err_exit("not enough buffer to show ICE status", -len); puts(""); printf("Local SDP (paste this to remote host):\n" "--------------------------------------\n" "%s\n", buffer); puts(""); puts("Remote info:\n" "----------------------"); if (icedemo.rem.cand_cnt==0) { puts("No remote info yet"); } else { unsigned i; printf("Remote ufrag : %s\n", icedemo.rem.ufrag); printf("Remote password : %s\n", icedemo.rem.pwd); printf("Remote cand. cnt. : %d\n", icedemo.rem.cand_cnt); for (i=0; i<icedemo.rem.cand_cnt; ++i) { len = print_cand(buffer, sizeof(buffer), &icedemo.rem.cand[i]); if (len < 0) err_exit("not enough buffer to show ICE status", -len); printf(" %s", buffer); } } }