int main (int argc, char *argv[]) { ServerData app; GError *error = NULL; GOptionContext *context = NULL; GstBus *bus = NULL; int error_flag = 0; GOptionEntry entries [] = { { "interface", 'i', 0, G_OPTION_ARG_STRING, &net_if, "network interface", NULL}, { "port", 'p', 0, G_OPTION_ARG_INT, &port, "port number", NULL }, { "fileuri", 'f', 0, G_OPTION_ARG_STRING, &uri, "URI to stream", "URI (<protocol>://<location>)"}, { NULL } }; context = g_option_context_new ("- simple tcp streaming server"); g_option_context_add_main_entries (context, entries, NULL); if (!g_option_context_parse (context, &argc, &argv, &error)) { fprintf (stderr, "option parsing failed: %s\n", error->message); error_flag = 1; } error_flag = check_args (); if (error_flag) { fprintf (stderr, "Exiting...\n"); return EXIT_FAILURE; } addr = if_addr (net_if); if (addr == NULL) { fprintf (stderr, "There is no ip address bound to the interface %s\n", net_if); return EXIT_FAILURE; } error_flag = init (&app); if (!error_flag) error_flag = set_links (&app); if (error_flag) { fprintf (stderr, "Exiting...\n"); return EXIT_FAILURE; } g_object_set (GST_OBJECT (app.source), "uri", uri, NULL); g_object_set (GST_OBJECT (app.muxer), "streamable", TRUE, NULL); g_object_set (GST_OBJECT (app.sink), "host", addr, NULL); g_object_set (GST_OBJECT (app.sink), "port", port, NULL); g_signal_connect (app.source, "pad-added", G_CALLBACK (pad_added), &app); bus = gst_pipeline_get_bus (GST_PIPELINE (app.pipeline)); gst_bus_add_watch (bus, bus_call, &app); fprintf (stdout, "Preparing the streaming of: %s\n" "Network Interface: %s\n" "Server IP: %s\n" "Server port: %d\n", uri, net_if, addr, port); fprintf (stdout, "Press 'q' to stop streaming and quit\n"); free (addr); gst_element_set_state (GST_ELEMENT (app.pipeline), GST_STATE_PLAYING); g_main_loop_run (app.loop); gst_element_set_state (GST_ELEMENT (app.pipeline), GST_STATE_NULL); gst_object_unref (GST_OBJECT(bus)); gst_object_unref (GST_OBJECT (app.pipeline)); fprintf (stdout, "All done\n"); return EXIT_SUCCESS; }
void ACE_SOCK_Dgram_Mcast::dump (void) const { #if defined (ACE_HAS_DUMP) ACE_TRACE ("ACE_SOCK_Dgram_Mcast::dump"); ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); # if defined (ACE_SOCK_DGRAM_MCAST_DUMPABLE) ACE_TCHAR addr_string[MAXNAMELEN + 1]; ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nOptions: bindaddr=%s, nulliface=%s\n"), ACE_BIT_ENABLED (this->opts_, OPT_BINDADDR_YES) ? ACE_TEXT ("<Bound>") : ACE_TEXT ("<Not Bound>"), ACE_BIT_ENABLED (this->opts_, OPT_NULLIFACE_ALL) ? ACE_TEXT ("<All Ifaces>") : ACE_TEXT ("<Default Iface>"))); // Show default send addr, port#, and interface. ACE_SDM_helpers::addr_to_string (this->send_addr_, addr_string, sizeof addr_string, 0); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Send addr=%s iface=%s\n"), addr_string, this->send_net_if_ ? this->send_net_if_ : ACE_TEXT ("<default>"))); // Show list of subscribed addresses. ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Subscription list:\n"))); ACE_MT (ACE_GUARD (ACE_SDM_LOCK, guard, this->subscription_list_lock_)); subscription_list_iter_t iter (this->subscription_list_); for ( ; !iter.done (); iter.advance ()) { ACE_TCHAR iface_string[MAXNAMELEN + 1]; ip_mreq *pm = iter.next (); // Get subscribed address (w/out port# info - not relevant). ACE_INET_Addr ip_addr (static_cast<u_short> (0), ACE_NTOHL (pm->IMR_MULTIADDR.s_addr)); ACE_SDM_helpers::addr_to_string (ip_addr, addr_string, sizeof addr_string, 1); // Get interface address/specification. ACE_INET_Addr if_addr (static_cast<u_short> (0), ACE_NTOHL (pm->imr_interface.s_addr)); ACE_SDM_helpers::addr_to_string (if_addr, iface_string, sizeof iface_string, 1); if (ACE_OS::strcmp (iface_string, ACE_TEXT ("0.0.0.0")) == 0) // Receives on system default iface. (Note that null_iface_opt_ // option processing has already occurred.) ACE_OS::strcpy (iface_string, ACE_TEXT ("<default>")); // Dump info. ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\taddr=%s iface=%s\n"), addr_string, iface_string)); } # endif /* ACE_SOCK_DGRAM_MCAST_DUMPABLE */ ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); #endif /* ACE_HAS_DUMP */ }