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;
}
Exemple #2
0
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;
}