int main(int argc, char *argv[]) { GThread *gexamplethread; // Parse arguments if (argc > 4 || argc < 2 || argv[1][1] != '\0') { fprintf(stderr, "Usage: %s 0|1 stun_addr [stun_port]\n", argv[0]); return EXIT_FAILURE; } controlling = argv[1][0] - '0'; if (controlling != 0 && controlling != 1) { fprintf(stderr, "Usage: %s 0|1 stun_addr [stun_port]\n", argv[0]); return EXIT_FAILURE; } if (argc > 2) { stun_addr = argv[2]; if (argc > 3) stun_port = atoi(argv[3]); else stun_port = 3478; g_debug("Using stun server '[%s]:%u'\n", stun_addr, stun_port); } #if GLIB_CHECK_VERSION(2, 36, 0) g_networking_init(); #else g_type_init(); #endif g_networking_init(); gloop = g_main_loop_new(NULL, FALSE); // Run the mainloop and the example thread exit_thread = FALSE; gexamplethread = g_thread_new("example thread", &example_thread, NULL); g_main_loop_run (gloop); exit_thread = TRUE; g_thread_join (gexamplethread); g_main_loop_unref(gloop); return EXIT_SUCCESS; }
JNIEXPORT jlong JNICALL CAST_JNI_NON(initNative) { GMainLoop *tmp_gloop; // Libnice init g_networking_init(); tmp_gloop = g_main_loop_new(NULL, FALSE); (*env)->GetJavaVM(env,&gJavaVM); return (long)tmp_gloop; }
int main(int argc, char *argv[]) { NiceAgent *agent; gchar *stun_addr = NULL; guint stun_port = 0; gboolean controlling; // Parse arguments if (argc > 4 || argc < 2 || argv[1][1] != '\0') { fprintf(stderr, "Usage: %s 0|1 stun_addr [stun_port]\n", argv[0]); return EXIT_FAILURE; } controlling = argv[1][0] - '0'; if (controlling != 0 && controlling != 1) { fprintf(stderr, "Usage: %s 0|1 stun_addr [stun_port]\n", argv[0]); return EXIT_FAILURE; } if (argc > 2) { stun_addr = argv[2]; if (argc > 3) stun_port = atoi(argv[3]); else stun_port = 3478; g_debug("Using stun server '[%s]:%u'\n", stun_addr, stun_port); } g_networking_init(); gloop = g_main_loop_new(NULL, FALSE); #ifdef G_OS_WIN32 io_stdin = g_io_channel_win32_new_fd(_fileno(stdin)); #else io_stdin = g_io_channel_unix_new(fileno(stdin)); #endif // Create the nice agent agent = nice_agent_new(g_main_loop_get_context (gloop), NICE_COMPATIBILITY_RFC5245); if (agent == NULL) g_error("Failed to create agent"); // Set the STUN settings and controlling mode if (stun_addr) { g_object_set(agent, "stun-server", stun_addr, NULL); g_object_set(agent, "stun-server-port", stun_port, NULL); } g_object_set(agent, "controlling-mode", controlling, NULL); // Connect to the signals g_signal_connect(agent, "candidate-gathering-done", G_CALLBACK(cb_candidate_gathering_done), NULL); g_signal_connect(agent, "new-selected-pair", G_CALLBACK(cb_new_selected_pair), NULL); g_signal_connect(agent, "component-state-changed", G_CALLBACK(cb_component_state_changed), NULL); // Create a new stream with one component stream_id = nice_agent_add_stream(agent, 1); if (stream_id == 0) g_error("Failed to add stream"); // Attach to the component to receive the data // Without this call, candidates cannot be gathered nice_agent_attach_recv(agent, stream_id, 1, g_main_loop_get_context (gloop), cb_nice_recv, NULL); // Start gathering local candidates if (!nice_agent_gather_candidates(agent, stream_id)) g_error("Failed to start candidate gathering"); g_debug("waiting for candidate-gathering-done signal..."); // Run the mainloop. Everything else will happen asynchronously // when the candidates are done gathering. g_main_loop_run (gloop); g_main_loop_unref(gloop); g_object_unref(agent); g_io_channel_unref (io_stdin); return EXIT_SUCCESS; }