Bool is_connected(){ GF_Err e; GF_Socket* sock; sock = gf_sk_new(GF_SOCK_TYPE_UDP); if (sock == NULL) { return 0; } e = gf_sk_connect(sock, "www.google.fr", 4096, NULL); gf_sk_del(sock); if(e){ return 0; }else{ return 1; } }
static void gf_dm_connect(GF_DownloadSession *sess) { GF_Err e; u16 proxy_port = 0; const char *proxy; if (!sess->sock) { //sess->num_retry = 40; sess->sock = gf_sk_new(GF_SOCK_TYPE_TCP); } /*connect*/ sess->status = GF_NETIO_SETUP; gf_dm_sess_notify_state(sess, sess->status, GF_OK); /*PROXY setup*/ proxy = gf_cfg_get_key(sess->dm->cfg, "HTTPProxy", "Enabled"); if (proxy && !strcmp(proxy, "yes")) { proxy = gf_cfg_get_key(sess->dm->cfg, "HTTPProxy", "Port"); proxy_port = proxy ? atoi(proxy) : 80; proxy = gf_cfg_get_key(sess->dm->cfg, "HTTPProxy", "Name"); } else { proxy = NULL; } if (proxy) { e = gf_sk_connect(sess->sock, (char *) proxy, proxy_port); } else { e = gf_sk_connect(sess->sock, sess->server_name, sess->port); } /*retry*/ if ((e == GF_IP_SOCK_WOULD_BLOCK) && sess->num_retry) { sess->status = GF_NETIO_SETUP; sess->num_retry--; return; } /*failed*/ if (e) { sess->status = GF_NETIO_STATE_ERROR; sess->last_error = e; gf_dm_sess_notify_state(sess, sess->status, e); return; } sess->status = GF_NETIO_CONNECTED; gf_dm_sess_notify_state(sess, GF_NETIO_CONNECTED, GF_OK); gf_sk_set_block_mode(sess->sock, 1); gf_dm_configure_cache(sess); #ifdef GPAC_HAS_SSL /*socket is connected, configure SSL layer*/ if (!sess->ssl && sess->dm->ssl_ctx && (sess->flags & GF_DOWNLOAD_SESSION_USE_SSL)) { int ret; long vresult; char common_name[256]; X509 *cert; Bool success = 1; sess->ssl = SSL_new(sess->dm->ssl_ctx); SSL_set_fd(sess->ssl, gf_sk_get_handle(sess->sock)); SSL_set_connect_state(sess->ssl); ret = SSL_connect(sess->ssl); assert(ret>0); cert = SSL_get_peer_certificate(sess->ssl); /*if we have a cert, check it*/ if (cert) { vresult = SSL_get_verify_result(sess->ssl); if (vresult != X509_V_OK) success = 0; else { common_name[0] = 0; X509_NAME_get_text_by_NID(X509_get_subject_name(cert), NID_commonName, common_name, sizeof (common_name)); if (!pattern_match(common_name, sess->server_name)) success = 0; } X509_free(cert); if (!success) { gf_dm_disconnect(sess); sess->status = GF_NETIO_STATE_ERROR; sess->last_error = GF_AUTHENTICATION_FAILURE; gf_dm_sess_notify_state(sess, sess->status, sess->last_error); } } } #endif }