int main(int argc, char *argv[]) { pj_caching_pool cp; pjmedia_endpt *med_endpt; pj_status_t status; /* Init pjlib */ status = pj_init(); PJ_ASSERT_RETURN(status==PJ_SUCCESS, 1); /* Must create a pool factory before we can allocate any memory. */ pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0); /* * Initialize media endpoint. * This will implicitly initialize PJMEDIA too. */ status = pjmedia_endpt_create(&cp.factory, NULL, 1, &med_endpt); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); if (argc == 1) { enum_devices(); return 0; } else if (argc == 6) { int dev_id; pjmedia_dir dir = PJMEDIA_DIR_NONE; int nchannel; int bits; dev_id = atoi(argv[1]); if (strcmp(argv[2], "rec")==0) dir = PJMEDIA_DIR_CAPTURE; else if (strcmp(argv[2], "play")==0) dir = PJMEDIA_DIR_PLAYBACK; else if (strcmp(argv[2], "both")==0) dir = PJMEDIA_DIR_CAPTURE_PLAYBACK; clock_rate = atoi(argv[3]); nchannel = atoi(argv[4]); bits = atoi(argv[5]); return open_device(dev_id, dir, nchannel, bits); } else { puts("Error: invalid arguments"); puts(desc); return 1; } /* Shutdown PJLIB */ pj_shutdown(); return 0; }
int wmain(int argc, wchar_t* argv[]) { int result; if (argc == 3) { iPan = _wtoi(argv[1]); iTilt = _wtoi(argv[2]); } else { printf("Wrong arg count\n\n"); } CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); result = enum_devices(); CoUninitialize(); return result; }
//int wmain(int argc, wchar_t* argv[]) int main(int argc, char **argv) { int result; const char* argPan = argc >= 2 ? argv[1] : "180"; const char* argTilt = argc >= 3 ? argv[2] : "180"; const char* argTime = argc >= 4 ? argv[3] : "100"; const char* argWait = argc >= 5 ? argv[4] : "9"; printf("Trying Pan %s, Tilt %s, Wait %s, Time %s \n",argPan,argTilt,argTime,argWait); gPan = atoi(argPan); gTilt = atoi(argTilt); gTime = atoi(argTime); gWait = atoi(argWait); CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); result = enum_devices(); CoUninitialize(); return result; }
/* check for udev events for v4l2 devices*/ gboolean check_v4l2_udev_events(gpointer data) { struct ALL_DATA * all_data = (struct ALL_DATA *) data; struct vdIn *videoIn = all_data->videoIn; struct GLOBAL *global = all_data->global; struct GWIDGET *gwidget = all_data->gwidget; fd_set fds; struct timeval tv; int ret; FD_ZERO(&fds); FD_SET(videoIn->udev_fd, &fds); tv.tv_sec = 0; tv.tv_usec = 0; ret = select(videoIn->udev_fd+1, &fds, NULL, NULL, &tv); /* Check if our file descriptor has received data. */ if (ret > 0 && FD_ISSET(videoIn->udev_fd, &fds)) { /* Make the call to receive the device. select() ensured that this will not block. */ struct udev_device *dev = udev_monitor_receive_device(videoIn->udev_mon); if (dev) { if (global->debug) { g_print("Got Device event\n"); g_print(" Node: %s\n", udev_device_get_devnode(dev)); g_print(" Subsystem: %s\n", udev_device_get_subsystem(dev)); g_print(" Devtype: %s\n", udev_device_get_devtype(dev)); g_print(" Action: %s\n",udev_device_get_action(dev)); } /*update device list*/ g_signal_handlers_block_by_func(GTK_COMBO_BOX_TEXT(gwidget->Devices), G_CALLBACK (Devices_changed), all_data); /* clear out the old device list... */ if(videoIn->listDevices != NULL) freeDevices(videoIn->listDevices); GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model (GTK_COMBO_BOX(gwidget->Devices))); gtk_list_store_clear(store); /*create new device list*/ videoIn->listDevices = enum_devices( videoIn->videodevice, videoIn->udev, global->debug ); if (videoIn->listDevices->num_devices < 1) { //use current gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Devices), videoIn->videodevice); gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Devices),0); } else { int i=0; for(i=0;i<(videoIn->listDevices->num_devices);i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gwidget->Devices), videoIn->listDevices->listVidDevices[i].name); if(videoIn->listDevices->listVidDevices[i].current) gtk_combo_box_set_active(GTK_COMBO_BOX(gwidget->Devices),i); } } g_signal_handlers_unblock_by_func(GTK_COMBO_BOX_TEXT(gwidget->Devices), G_CALLBACK (Devices_changed), all_data); udev_device_unref(dev); } else g_printerr("No Device from receive_device(). An error occured.\n"); } return(TRUE); }
int main(int argc, char *argv[]) { pj_caching_pool cp; pjmedia_endpt *med_endpt; int id = -1, verbose = 0; int clock_rate = 8000; int frame = -1; int channel = 1; struct pj_getopt_option long_options[] = { { "id", 1, 0, 'i' }, { "rate", 1, 0, 'r' }, { "frame", 1, 0, 'f' }, { "channel", 1, 0, 'n' }, { "verbose", 0, 0, 'v' }, { "help", 0, 0, 'h' }, { NULL, 0, 0, 0 } }; int c, option_index; pj_status_t status; /* Init pjlib */ status = pj_init(); PJ_ASSERT_RETURN(status==PJ_SUCCESS, 1); /* Must create a pool factory before we can allocate any memory. */ pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0); /* * Initialize media endpoint. * This will implicitly initialize PJMEDIA too. */ status = pjmedia_endpt_create(&cp.factory, NULL, 1, &med_endpt); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); /* Print devices */ enum_devices(); /* Parse options */ pj_optind = 0; while((c=pj_getopt_long(argc,argv, "i:r:f:n:vh", long_options, &option_index))!=-1) { switch (c) { case 'i': id = atoi(pj_optarg); break; case 'r': clock_rate = atoi(pj_optarg); break; case 'f': frame = atoi(pj_optarg); break; case 'n': channel = atoi(pj_optarg); break; case 'v': verbose = 1; break; case 'h': puts(desc); return 0; break; default: printf("Error: invalid options %s\n", argv[pj_optind-1]); puts(desc); return 1; } } if (pj_optind != argc) { printf("Error: invalid options\n"); puts(desc); return 1; } if (!verbose) pj_log_set_level(3); if (frame == -1) frame = 10 * clock_rate / 1000; status = perform_test(get_dev_name(id), id, PJMEDIA_DIR_CAPTURE_PLAYBACK, clock_rate, frame, channel, verbose); if (status != 0) return 1; return 0; }
int main(int argc, char* argv[]) { #ifdef HAVE_EXECINFO_H signal(SIGSEGV, crash_sig); signal(SIGABRT, crash_sig); signal(SIGPIPE, SIG_IGN); #endif #ifdef WIN32 HANDLE localfd; WSADATA wsa; enum_device_t devs[MAX_DEVICE_COUNT]; #else int localfd; #endif char cmd[1024]; int remotefd; library_conf_t conf; int opt; struct in_addr a; struct option long_options[] = { { "conf", 1, NULL, 'c' }, { NULL, 0, NULL, 0 } }; char short_options[512] = {0}; longopt2shortopt(long_options, sizeof(long_options) / sizeof(struct option), short_options); #ifdef HAVE_SYSLOG_H openlog(argv[0], LOG_PERROR | LOG_CONS | LOG_PID, LOG_LOCAL0); #endif qtun = calloc(sizeof(*qtun), 1); #ifdef WIN32 remotefd = -1; localfd = INVALID_HANDLE_VALUE; #else localfd = remotefd = -1; #endif { char path[MAX_PATH] = {0}; #ifdef WIN32 strcpy(path, argv[0]); #elif defined(__APPLE__) char tmp_path[sizeof(path)] = {0}; uint32_t len = sizeof(path); if (_NSGetExecutablePath(tmp_path, &len) == -1) { perror("_NSGetExecutablePath"); return 1; } if (readlink(tmp_path, path, sizeof(path)) == -1) { if (errno == EINVAL) strcpy(path, tmp_path); else { perror("readlink"); return 1; } } #else if (readlink("/proc/self/exe", path, sizeof(path)) == -1) { perror("readlink"); return 1; } #endif init_path(path); } conf_init(&conf); while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) { switch (opt) { case 'c': { char* path = realpath(optarg, NULL); if (path == NULL) { perror("realpath"); return 1; } strcpy(conf.conf_file, path); free(path); } break; default: fprintf(stderr, "param error\n"); return 1; } } #ifdef WIN32 { size_t count = enum_devices(devs); if (count == 0) { fprintf(stderr, "have no QTun Virtual Adapter\n"); return 1; } else if (count == 1) { strcpy(conf.dev_symbol, devs[0].dev_path); strcpy(conf.dev_name, devs[0].dev_name); } else { size_t i; char str[20] = { 0 }; int n = -1; printf("Have Adapters:\n"); for (i = 0; i < count; ++i) { printf("%lu: %s\n", i + 1, devs[i].dev_name); } printf("Choose One[1]: "); while (n == -1) { if (str[0] == '\n' && str[1] == 0) n = 1; else { if (!is_int(str, sizeof(str))) continue; n = atoi(str); if (n < 1 || n > (int)count) { fprintf(stderr, "Invalid Number must >= 1 and <= %lu\n", count); n = -1; continue; } } } strcpy(conf.dev_symbol, devs[n].dev_path); strcpy(conf.dev_name, devs[n].dev_name); } } #endif init_lua(); show_logo(); script_load_config(qtun->lua, &conf, conf.conf_file); #ifdef WIN32 if (strlen(conf.dev_symbol) == 0) { fprintf(stderr, "Missing param [-e] or [--device]\n"); return 1; } #endif #ifdef WIN32 localfd = tun_open(conf.dev_symbol); if (localfd == INVALID_HANDLE_VALUE) return 1; fprintf(stdout, "%s opened\n", conf.dev_name); #else memset(qtun->dev_name, 0, IFNAMSIZ); localfd = tun_open(qtun->dev_name); if (localfd == -1) return 1; syslog(LOG_INFO, "%s opened\n", qtun->dev_name); #endif a.s_addr = conf.localip; #ifdef WIN32 WSAStartup(MAKEWORD(2, 2), &wsa); #endif if (strlen(conf.server) == 0) { if (conf.netmask == 0 || conf.netmask > 31) { #ifdef WIN32 WSACleanup(); #endif fprintf(stderr, "netmask must > 0 and <= 31\n"); return 1; } library_init(conf); if (conf.localip == 0) { fprintf(stderr, "localip is zero\n"); return 1; } if (strlen(conf.signature_file) == 0) { fprintf(stderr, "missing signature file\n"); return 1; } qtun->is_server = 1; remotefd = bind_and_listen(conf.server_port); if (remotefd == -1) { #ifdef WIN32 WSACleanup(); #endif return 1; } #ifdef WIN32 { a.s_addr = conf.localip; sprintf(cmd, "netsh interface ip set address name=\"%s\" static %s %s", conf.dev_name, inet_ntoa(a), STR_LEN2MASK(conf.netmask)); SYSTEM_EXIT(cmd); } #elif defined(__APPLE__) { sprintf(cmd, "ifconfig %s %s/%u up", qtun->dev_name, inet_ntoa(a), conf.netmask); SYSTEM_EXIT(cmd); a.s_addr = conf.localip & LEN2MASK(conf.netmask); sprintf(cmd, "route add -net %s/%u %s", inet_ntoa(a), conf.netmask, inet_ntoa(a)); SYSTEM_EXIT(cmd); } #else { sprintf(cmd, "ifconfig %s %s/%u up", qtun->dev_name, inet_ntoa(a), conf.netmask); SYSTEM_EXIT(cmd); a.s_addr = conf.localip & LEN2MASK(conf.netmask); sprintf(cmd, "route add -net %s/%u dev %s", inet_ntoa(a), conf.netmask, qtun->dev_name); SYSTEM_EXIT(cmd); } #endif server_loop(remotefd, localfd); } else { #ifdef unix unsigned char mask; #endif int inited = 0; library_init(conf); qtun->is_server = 0; while (1) { remotefd = connect_server(conf.server, conf.server_port); if (remotefd == -1) { SLEEP(5); continue; } a.s_addr = qtun->localip; if (qtun->localip == 0) { fprintf(stderr, "localip is zero\n"); return 1; } if (strlen(conf.signature_file) == 0) { fprintf(stderr, "missing signature file\n"); return 1; } if (!inited) { #ifdef WIN32 { sprintf(cmd, "netsh interface ip set address name=\"%s\" static %s %s", conf.dev_name, inet_ntoa(a), STR_LEN2MASK(conf.netmask)); SYSTEM_EXIT(cmd); } #elif defined(__APPLE__) { char ip1[16], ip2[16]; a.s_addr = qtun->localip; strcpy(ip1, inet_ntoa(a)); a.s_addr = qtun->client.local_ip; strcpy(ip2, inet_ntoa(a)); sprintf(cmd, "ifconfig %s inet %s %s up", qtun->dev_name, ip1, ip2); SYSTEM_EXIT(cmd); mask = netmask(); a.s_addr = qtun->localip & LEN2MASK(mask); sprintf(cmd, "route add -net %s/%u %s", inet_ntoa(a), mask, ip2); SYSTEM_EXIT(cmd); } #else { sprintf(cmd, "ifconfig %s %s up", qtun->dev_name, inet_ntoa(a)); SYSTEM_EXIT(cmd); mask = netmask(); a.s_addr = qtun->localip & LEN2MASK(mask); sprintf(cmd, "route add -net %s/%u dev %s", inet_ntoa(a), mask, qtun->dev_name); SYSTEM_EXIT(cmd); } #endif inited = 1; } client_loop(remotefd, localfd); close(remotefd); SYSLOG(LOG_WARNING, "retry"); } } #ifdef WIN32 WSACleanup(); #endif #ifdef HAVE_SYSLOG_H closelog(); #endif library_free(); return 0; }