static session_desc_t *find_sdp_for_program (const char *cm, const char *loc, char *errmsg, uint32_t errlen, uint64_t prog) { char buffer[1024]; http_client_t *http_client; http_resp_t *http_resp; sdp_decode_info_t *sdp_info; session_desc_t *sdp, *ptr, *sdp_ret; int translated; int ret, ix; snprintf(buffer, sizeof(buffer), "http://%s/%s", cm, loc); http_resp = NULL; http_client = http_init_connection(buffer); if (http_client == NULL) { snprintf(errmsg, errlen, "Cannot create http client with %s\n", cm); return NULL; } ret = http_get(http_client, NULL, &http_resp); sdp_ret = NULL; if (ret > 0) { sdp_info = set_sdp_decode_from_memory(http_resp->body); if ((sdp_decode(sdp_info, &sdp, &translated) == 0) && (translated > 0)) { for (ix = 0; ix < translated && sdp_ret == NULL; ix++) { if (sdp->session_id == prog) { sdp_ret = sdp; sdp = sdp->next; sdp_ret->next = NULL; } else { ptr = sdp->next; sdp->next = NULL; sdp_free_session_desc(sdp); sdp = ptr; } } sdp_decode_info_free(sdp_info); if (sdp != NULL) sdp_free_session_desc(sdp); } } http_resp_free(http_resp); http_free_connection(http_client); return sdp_ret; }
int main (int argc, char **argv) { http_client_t *http_client; http_resp_t *http_resp; argv++; http_set_loglevel(LOG_DEBUG); http_client = http_init_connection(*argv); if (http_client == NULL) { printf("no client\n"); return (1); } argv++; http_resp = NULL; printf("argv is %s\n", *argv); http_get(http_client, *argv, &http_resp); http_resp_free(http_resp); http_free_connection(http_client); return (0); }
static int create_media_for_http (CPlayerSession *psptr, const char *name, char *errmsg, uint32_t errlen, control_callback_vft_t *cc_vft) { http_client_t *http_client; int ret; http_resp_t *http_resp; http_resp = NULL; http_client = http_init_connection(name); if (http_client == NULL) { snprintf(errmsg, errlen, "Can't create http client"); return -1; } ret = http_get(http_client, NULL, &http_resp); if (ret > 0) { sdp_decode_info_t *sdp_info; int have_audio_driver = do_we_have_audio(); sdp_info = set_sdp_decode_from_memory(http_resp->body); ret = create_from_sdp(psptr, name, errmsg, errlen, sdp_info, have_audio_driver, cc_vft); } else { ret = -1; snprintf(errmsg, errlen, "HTTP error %d, %s", http_resp->ret_code, http_resp->resp_phrase); } http_resp_free(http_resp); http_free_connection(http_client); return (ret); }
int check_name_for_network (const char *name, int &isOnDemand, int &isRtpOverRtsp) { sdp_decode_info_t *sdp_info; session_desc_t *sdp; int translated; http_resp_t *http_resp; int do_sdp = 0; http_resp = NULL; isOnDemand = 0; isRtpOverRtsp = 0; sdp_info = NULL; if (strncmp(name, "mpeg2t://", strlen("mpeg2t://")) == 0) { return 1; } if (strncmp(name, "iptv://", strlen("iptv://")) == 0) { // more later to handle the on demand/streaming case return 1; } if (strncmp(name, "rtsp://", strlen("rtsp://")) == 0) { isOnDemand = 1; isRtpOverRtsp = config.get_config_value(CONFIG_USE_RTP_OVER_RTSP); return 1; } // handle http, .sdp case if (strncmp(name, "http://", strlen("http://")) == 0) { http_client_t *http_client; int ret; http_client = http_init_connection(name); if (http_client == NULL) { return -1; } ret = http_get(http_client, NULL, &http_resp); if (ret > 0) { sdp_decode_info_t *sdp_info; sdp_info = set_sdp_decode_from_memory(http_resp->body); do_sdp = 1; http_free_connection(http_client); } else return -1; do_sdp = 1; } else { const char *suffix = strrchr(name, '.'); if (suffix == NULL) { return -1; } if (strcasecmp(suffix, ".sdp") == 0) { sdp_info = set_sdp_decode_from_filename(name); do_sdp = 1; } else return 0; } if (do_sdp != 0) { if ((sdp_decode(sdp_info, &sdp, &translated) != 0) || translated != 1) { sdp_decode_info_free(sdp_info); return (-1); } if (sdp->control_string != NULL) { isOnDemand = 1; isRtpOverRtsp = config.get_config_value(CONFIG_USE_RTP_OVER_RTSP); } sdp_free_session_desc(sdp); if (http_resp != NULL) http_resp_free(http_resp); sdp_decode_info_free(sdp_info); return 1; } return 0; }