LOCAL void ICACHE_FLASH_ATTR start_resolve_dh_server() { static ip_addr_t ip; const char *server = dhrequest_current_server(); char host[os_strlen(server) + 1]; const char *fr = server; while(*fr != ':') { fr++; if(*fr == 0) { fr = 0; break; } } if(fr) { fr++; if(*fr != '/') fr = 0; } if (fr) { while (*fr == '/') fr++; int i = 0; while (*fr != '/' && *fr != ':' && *fr != 0) host[i++] = *fr++; // read port if present int port = 0; if(*fr == ':') { unsigned char d; fr++; while ( (d = *fr - 0x30) < 10) { fr++; port = port*10 + d; if(port > 0xFFFF) break; } } if(port && port < 0xFFFF) mDHConnector.proto.tcp->remote_port = port; else if (os_strncmp(dhrequest_current_server(), "https", 5) == 0) mDHConnector.proto.tcp->remote_port = 443; // HTTPS default port else mDHConnector.proto.tcp->remote_port = 80; //HTTP default port host[i] = 0; dhdebug("Resolving %s", host); err_t r = espconn_gethostbyname(&mDHConnector, host, &ip, resolve_cb); if(r == ESPCONN_OK) { resolve_cb(host, &ip, NULL); } else if(r != ESPCONN_INPROGRESS) { dhesperrors_espconn_result("Resolving failed:", r); arm_repeat_timer(RETRY_CONNECTION_INTERVAL_MS); } } else { dhdebug("Can not find scheme in server url"); } }
static GHashTable * get_properties_cb (MS2Server *server, const gchar *id, const gchar **properties, gpointer data, GError **error) { GHashTable *properties_table = NULL; GrlMedia *media; GriloMs2Data *grdata; grdata = g_slice_new0 (GriloMs2Data); grdata->server = g_object_ref (server); grdata->source = (GrlSource *) data; grdata->options = grl_operation_options_new (NULL); grdata->keys = get_grilo_keys (properties, &grdata->other_keys); grl_operation_options_set_resolution_flags (grdata->options, GRL_RESOLVE_FULL | GRL_RESOLVE_IDLE_RELAY); media = unserialize_media (grdata->source, id); if (grdata->keys) { grl_source_resolve (grdata->source, media, grdata->keys, grdata->options, resolve_cb, grdata); } else { resolve_cb (grdata->source, 0, media, grdata, NULL); } wait_for_result (grdata); if (grdata->error) { if (error) { *error = grdata->error; } } else { properties_table = grdata->properties; } g_object_unref (media); g_list_free (grdata->keys); g_list_free (grdata->other_keys); g_free (grdata->parent_id); g_object_unref (grdata->server); g_object_unref (grdata->options); g_slice_free (GriloMs2Data, grdata); return properties_table; }