int launch_usb_modeswitch(int vid, int pid, int inquire) { char eject_file[64], addon[32]; char *arg_inq = ""; addon[0] = 0; if ((vid == 0x0471 && pid == 0x1210) || (vid == 0x05c6 && pid == 0x1000)) { usb_info_t *usb_info, *follow_usb; const char *uMa[8] = {"AnyDATA", "CELOT", "DGT", "SAMSUNG", "SSE", "StrongRising", "Vertex", "Philips"}; usb_info = get_usb_info(); for (follow_usb = usb_info; follow_usb != NULL; follow_usb = follow_usb->next) { if (follow_usb->dev_vid == vid && follow_usb->dev_pid == pid) { if (vid == 0x05c6 && pid == 0x1000) { int i; for (i = 0; i < 7; i++) { if (strncmp(follow_usb->manuf, uMa[i], strlen(uMa[i])) == 0) { sprintf(addon, ":uMa=%s", uMa[i]); break; } } } else { /* 0471:1210:uMa=Philips */ if (strncmp(follow_usb->manuf, uMa[7], strlen(uMa[7])) == 0) sprintf(addon, ":uMa=%s", uMa[7]); } break; } } free_usb_info(usb_info); } /* first, check custom rule in /etc/storage */ sprintf(eject_file, "/etc/storage/%04x:%04x", vid, pid); if (!check_if_file_exist(eject_file)) { sprintf(eject_file, "%s/usb_modeswitch.d/%04x:%04x%s", MODEM_SCRIPTS_DIR, vid, pid, addon); if (!check_if_file_exist(eject_file)) { logmessage("usb_modeswitch", "no rule for device %04x:%04x", vid, pid); return 1; } } if (inquire) arg_inq = "-D -I "; return doSystem("/bin/usb_modeswitch %s-v 0x%04x -p 0x%04x -c %s", arg_inq, vid, pid, eject_file); }
int is_sshd_run(void) { if (check_if_file_exist("/usr/bin/dropbearmulti")) { if (pids("dropbear")) return 1; } else if (check_if_file_exist("/usr/sbin/sshd")) { if (pids("sshd")) return 1; } return 0; }
static void exec_printer_daemons(int call_fw) { int i, has_printer = 0; char *opt_printer_script = "/opt/bin/on_hotplug_printer.sh"; char dev_lp[16]; for (i = 0; i < 10; i++) { sprintf(dev_lp, "/dev/usb/lp%d", i); if (check_if_dev_exist(dev_lp)) { has_printer = 1; if (call_fw) { if (check_if_file_exist(opt_printer_script)) doSystem("%s %s", opt_printer_script, dev_lp); } start_p910nd(dev_lp); } } if (has_printer) { #if defined(SRV_U2EC) start_u2ec(); #endif #if defined(SRV_LPRD) start_lpd(); #endif } }
static void on_server_client_connect(int is_tun) { FILE *fp; char *common_name = safe_getenv("common_name"); char *peer_addr_r = safe_getenv("trusted_ip"); char *peer_addr_l = safe_getenv("ifconfig_pool_remote_ip"); char *dev_ifname = safe_getenv("dev"); const char *script_name = VPN_SERVER_UPDOWN_SCRIPT; #if defined (USE_IPV6) if (!is_valid_ipv4(peer_addr_r)) peer_addr_r = safe_getenv("trusted_ip6"); #endif if (strlen(dev_ifname) == 0) dev_ifname = (is_tun) ? IFNAME_SERVER_TUN : IFNAME_SERVER_TAP; logmessage(SERVER_LOG_NAME, "peer %s (%s) connected - local IP: %s", peer_addr_r, common_name, peer_addr_l); fp = fopen(VPN_SERVER_LEASE_FILE, "a+"); if (fp) { fprintf(fp, "%s %s %s %s\n", "-", peer_addr_l, peer_addr_r, common_name); fclose(fp); } if (check_if_file_exist(script_name)) doSystem("%s %s %s %s %s %s", script_name, "up", dev_ifname, peer_addr_l, peer_addr_r, common_name); }
void run_itunes(void) { char *apps_name = "iTunes Server"; char *link_path = "/mnt/firefly"; char *conf_path = "/etc/storage/firefly"; char *conf_file = "mt-daapd.conf"; char *dest_dir = ".itunes"; char conf_new[64], conf_old[64]; if (!nvram_match("apps_itunes", "1")) return; if (!is_itunes_support()) return; if (is_itunes_run()) return; unlink(link_path); if (!create_mp_link(dest_dir, link_path, 0)) { if (!create_mp_link(dest_dir, link_path, 1)) { logmessage(apps_name, "Cannot start: unable to create DB dir (/%s) on any volumes!", dest_dir); return; } } mkdir(conf_path, 0755); snprintf(conf_old, sizeof(conf_old), "%s/%s", "/etc/storage", conf_file); snprintf(conf_new, sizeof(conf_new), "%s/%s", conf_path, conf_file); if (!check_if_file_exist(conf_new) && check_if_file_exist(conf_old)) rename(conf_old, conf_new); update_firefly_conf(link_path, conf_path, conf_file); eval("/usr/bin/mt-daapd", "-c", conf_new); if (is_itunes_run()) logmessage(apps_name, "daemon is started"); }
static void ez_action_user_script(int script_param) { const char *ez_script = "/etc/storage/ez_buttons_script.sh"; if (!check_if_file_exist(ez_script)) return; logmessage("watchdog", "Execute %s %d", ez_script, script_param); doSystem("%s %d", ez_script, script_param); }
int ipdown_vpns_main(int argc, char **argv) { FILE *fp1, *fp2; int i_clients; char ifname[16], addr_l[64], addr_r[64], name_p[64]; char *peer_name; char *clients_l1 = VPN_SERVER_LEASE_FILE; char *clients_l2 = "/tmp/.vpns.leases"; char *script_name = VPN_SERVER_UPDOWN_SCRIPT; char *svcs[] = { "bcrelay", NULL }; if (argc < 7) return -1; peer_name = safe_getenv("PEERNAME"); logmessage(VPNS_LOG_NAME, "peer %s (%s) disconnected", argv[6], peer_name); umask(0000); vpns_firewall_permission(argv[1], 0); vpns_route_to_remote_lan(peer_name, argv[1], NULL, 0); i_clients = 0; fp1 = fopen(clients_l1, "r"); fp2 = fopen(clients_l2, "w"); if (fp1) { while(fscanf(fp1, "%15s %63s %63s %63[^\n]\n", ifname, addr_l, addr_r, name_p) == 4) { if (strcmp(ifname, argv[1])) { i_clients++; if (fp2) fprintf(fp2, "%s %s %s %s\n", ifname, addr_l, addr_r, name_p); } } fclose(fp1); } if (fp2) { fclose(fp2); rename(clients_l2, clients_l1); unlink(clients_l2); } if (check_if_file_exist(script_name)) doSystem("%s %s %s %s %s %s", script_name, "down", argv[1], argv[5], argv[6], peer_name); if (i_clients == 0 && pids(svcs[0])) kill_services(svcs, 3, 1); return 0; }
static void ez_action_user_script(int script_param) { char* opt_user_script = "/opt/bin/on_wps.sh"; if (check_if_file_exist(opt_user_script)) { logmessage("watchdog", "Perform ez-button script: %s %d", opt_user_script, script_param); doSystem("%s %d &", opt_user_script, script_param); } }
static void on_client_ifup(void) { int i, i_dns = 0; char buf[256]; char *script_name = VPN_CLIENT_UPDOWN_SCRIPT; nvram_set_int_temp("vpnc_state_t", 1); buf[0] = 0; if (nvram_get_int("vpnc_pdns") > 0) { int buf_len; char *value; char foption[32], fdns[128]; for (i = 0; i < 20 && i_dns < 3; i++) { sprintf(foption, "foreign_option_%d", i); value = getenv(foption); if (value) { fdns[0] = 0; if (sscanf(value, "dhcp-option DNS %s", fdns) == 1) { buf_len = strlen(buf); snprintf(buf + buf_len, sizeof(buf) - buf_len, "%s%s", (buf_len) ? " " : "", fdns); i_dns++; if (i_dns == 1) setenv("DNS1", fdns, 1); else if (i_dns == 2) setenv("DNS2", fdns, 1); } } } } nvram_set_temp("vpnc_dns_t", buf); if (strlen(buf) > 0) update_resolvconf(0, 0); if (check_if_file_exist(script_name)) { for (i = 0; i < ARRAY_SIZE(env_ovpn); i++) setenv(env_pppd[i], safe_getenv(env_ovpn[i]), 1); doSystem("%s %s", script_name, "up"); for (i = 0; i < ARRAY_SIZE(env_ovpn); i++) unsetenv(env_pppd[i]); } if (i_dns > 1) unsetenv("DNS2"); if (i_dns > 0) unsetenv("DNS1"); }
int ipup_vpns_main(int argc, char **argv) { FILE *fp; int i_cast, i_vuse; char *peer_name; char *script_name = VPN_SERVER_UPDOWN_SCRIPT; if (argc < 7) return -1; peer_name = safe_getenv("PEERNAME"); logmessage(VPNS_LOG_NAME, "peer %s (%s) connected - ifname: %s, local IP: %s", argv[6], peer_name, argv[1], argv[5]); umask(0000); /* add firewall permission for this client */ vpns_firewall_permission(argv[1], 1); i_vuse = nvram_get_int("vpns_vuse"); if (i_vuse) { /* disable multicast flag */ doSystem("ifconfig %s %s", argv[1], "-multicast"); } /* add route to client's LAN */ vpns_route_to_remote_lan(peer_name, argv[1], NULL, 1); fp = fopen(VPN_SERVER_LEASE_FILE, "a+"); if (fp) { fprintf(fp, "%s %s %s %s\n", argv[1], argv[5], argv[6], peer_name); fclose(fp); } if (i_vuse == 0 && !pids("bcrelay")) { i_cast = nvram_get_int("vpns_cast"); if (i_cast == 1 || i_cast == 3) eval("/usr/sbin/bcrelay", "-d", "-i", IFNAME_BR, "-o", "ppp[1-5][0-9]", "-n"); if (i_cast == 2 || i_cast == 3) eval("/usr/sbin/bcrelay", "-d", "-i", "ppp[1-5][0-9]", "-o", IFNAME_BR, "-n"); } if (check_if_file_exist(script_name)) doSystem("%s %s %s %s %s %s", script_name, "up", argv[1], argv[5], argv[6], peer_name); return 0; }
static void on_server_client_disconnect(int is_tun) { FILE *fp1, *fp2; char ifname[16], addr_l[64], addr_r[64], peer_name[64]; char *clients_l1 = VPN_SERVER_LEASE_FILE; char *clients_l2 = "/tmp/.vpns.leases"; char *common_name = safe_getenv("common_name"); char *peer_addr_r = safe_getenv("trusted_ip"); char *peer_addr_l = safe_getenv("ifconfig_pool_remote_ip"); char *dev_ifname = safe_getenv("dev"); const char *script_name = VPN_SERVER_UPDOWN_SCRIPT; uint64_t llsent = strtoll(safe_getenv("bytes_sent"), NULL, 10); uint64_t llrecv = strtoll(safe_getenv("bytes_received"), NULL, 10); #if defined (USE_IPV6) if (!is_valid_ipv4(peer_addr_r)) peer_addr_r = safe_getenv("trusted_ip6"); #endif if (strlen(dev_ifname) == 0) dev_ifname = (is_tun) ? IFNAME_SERVER_TUN : IFNAME_SERVER_TAP; logmessage(SERVER_LOG_NAME, "peer %s (%s) disconnected, sent: %llu KB, received: %llu KB", peer_addr_r, common_name, llsent / 1024, llrecv / 1024); fp1 = fopen(clients_l1, "r"); fp2 = fopen(clients_l2, "w"); if (fp1) { while(fscanf(fp1, "%15s %63s %63s %63[^\n]\n", ifname, addr_l, addr_r, peer_name) == 4) { if (strcmp(peer_addr_r, addr_r) != 0 || strcmp(peer_addr_l, addr_l) != 0) { if (fp2) fprintf(fp2, "%s %s %s %s\n", ifname, addr_l, addr_r, peer_name); } } fclose(fp1); } if (fp2) { fclose(fp2); rename(clients_l2, clients_l1); unlink(clients_l2); } if (check_if_file_exist(script_name)) doSystem("%s %s %s %s %s %s", script_name, "down", dev_ifname, peer_addr_l, peer_addr_r, common_name); }
static void on_client_ifdown(void) { int i; char *script_name = VPN_CLIENT_UPDOWN_SCRIPT; nvram_set_int_temp("vpnc_state_t", 0); restore_dns_from_vpnc(); if (check_if_file_exist(script_name)) { for (i = 0; i < ARRAY_SIZE(env_ovpn); i++) setenv(env_pppd[i], safe_getenv(env_ovpn[i]), 1); doSystem("%s %s", script_name, "down"); for (i = 0; i < ARRAY_SIZE(env_ovpn); i++) unsetenv(env_pppd[i]); } }
static int openvpn_check_key(const char *key_name, int is_server) { char key_file[64]; sprintf(key_file, "%s/%s", (is_server) ? SERVER_CERT_DIR : CLIENT_CERT_DIR, key_name); if (!check_if_file_exist(key_file)) { logmessage(LOGNAME, "Unable to start %s: key file \"%s\" not found!", (is_server) ? SERVER_LOG_NAME : CLIENT_LOG_NAME, key_file); if (is_server) logmessage(SERVER_LOG_NAME, "Please manual build the certificates via \"%s\" script.", "openvpn-cert.sh"); return 0; } return 1; }
int ipdown_vpnc_main(int argc, char **argv) { char *script_name = VPN_CLIENT_UPDOWN_SCRIPT; char *ifname = safe_getenv("IFNAME"); char *gw = getenv("IPREMOTE"); umask(0000); vpnc_route_dgw(ifname, gw, 0); vpnc_route_to_remote_lan(ifname, gw, 0); nvram_set_int_temp("vpnc_state_t", 0); restore_dns_from_vpnc(); if (check_if_file_exist(script_name)) doSystem("%s %s", script_name, "down"); return 0; }
static void call_client_script(const char *script_name, const char *arg) { int i; const char *env; if (!check_if_file_exist(script_name)) return; for (i = 0; i < ARRAY_SIZE(env_ovpn); i++) { env = env_ovpn[i]; if (strlen(safe_getenv(env)) < 1 && env_ovpn_alt[i]) env = env_ovpn_alt[i]; setenv(env_pppd[i], safe_getenv(env), 1); } doSystem("%s %s", script_name, arg); for (i = 0; i < ARRAY_SIZE(env_ovpn); i++) unsetenv(env_pppd[i]); }
int ipup_vpnc_main(int argc, char **argv) { char buf[256]; char *script_name = VPN_CLIENT_UPDOWN_SCRIPT; char *ifname = safe_getenv("IFNAME"); char *gw = getenv("IPREMOTE"); umask(0000); vpnc_route_to_remote_lan(ifname, gw, 1); vpnc_route_dgw(ifname, gw, 1); set_vpn_balancing(ifname); nvram_set_int_temp("vpnc_state_t", 1); buf[0] = 0; if (nvram_get_int("vpnc_pdns") > 0) { char *value; value = getenv("DNS1"); if (value) snprintf(buf, sizeof(buf), "%s", value); value = getenv("DNS2"); if (value && strcmp(value, buf) != 0) { int buf_len = strlen(buf); snprintf(buf + buf_len, sizeof(buf) - buf_len, "%s%s", (buf_len) ? " " : "", value); } } nvram_set_temp("vpnc_dns_t", buf); if (strlen(buf) > 0) update_resolvconf(0, 0); if (check_if_file_exist(script_name)) doSystem("%s %s", script_name, "up"); return 0; }
void find_tokenfile_partition() { char token_path[80]; FILE *procpt; char line[256], devname[48], mpname[48], system_type[10], mount_mode[128]; int dummy1, dummy2; if ((procpt = fopen("/proc/mounts", "r")) != NULL) while (fgets(line, sizeof(line), procpt)) { memset(mpname, 0x0, sizeof(mpname)); if (sscanf(line, "%s %s %s %s %d %d", devname, mpname, system_type, mount_mode, &dummy1, &dummy2) != 6) continue; sprintf(token_path, "%s/%s", mpname, TIMEMACHINE_TOKEN_FILE); if(check_if_file_exist(token_path)){ find_backup_mac_date(mpname); } } if (procpt) fclose(procpt); }
void write_nfsd_exports(void) { FILE *procpt, *fp; char line[256], devname[32], mpname[128], system_type[16], mount_mode[160], acl_mask[64]; const char* exports_link = "/etc/storage/exports"; const char* exports_file = "/etc/exports"; int dummy1, dummy2; char *nfsmm, *lan_ipaddr, *lan_netmask; unsigned int acl_addr; struct in_addr ina; unlink(exports_file); if (check_if_file_exist(exports_link)) { symlink(exports_link, exports_file); return; } fp = fopen(exports_file, "w"); if (!fp) return; lan_ipaddr = nvram_safe_get("lan_ipaddr_t"); lan_netmask = nvram_safe_get("lan_netmask_t"); if (!lan_ipaddr || !*lan_ipaddr) lan_ipaddr = nvram_safe_get("lan_ipaddr"); if (!lan_netmask || !*lan_netmask) lan_netmask = nvram_safe_get("lan_netmask"); if (!lan_ipaddr || !*lan_ipaddr) lan_ipaddr = "192.168.1.1"; if (!lan_netmask || !*lan_netmask) lan_netmask = "255.255.255.0"; acl_addr = ntohl(inet_addr(lan_ipaddr)); acl_addr = acl_addr & ntohl(inet_addr(lan_netmask)); ina.s_addr = htonl(acl_addr); sprintf(acl_mask, "%s/%s", inet_ntoa(ina), lan_netmask); fprintf(fp, "# %s\n\n", "auto-created file"); procpt = fopen("/proc/mounts", "r"); if (procpt) { while (fgets(line, sizeof(line), procpt)) { if (sscanf(line, "%s %s %s %s %d %d", devname, mpname, system_type, mount_mode, &dummy1, &dummy2) != 6) continue; if (!strcmp(system_type, "fuseblk")) continue; if (!strncmp(devname, "/dev/sd", 7) && !strncmp(mpname, "/media/", 7)) { nfsmm = "rw"; if (!strncmp(mount_mode, "ro", 2)) nfsmm = "ro"; fprintf(fp, "%s %s(%s,async,insecure,no_root_squash,no_subtree_check)\n", mpname, acl_mask, nfsmm); } } fclose(procpt); } fclose(fp); }
static void write_nfsd_exports(void) { FILE *procpt, *fp; char line[256], devname[32], mpname[128], system_type[16], mount_mode[164], acl_lan[32], acl_vpn[32]; const char *exports_link = "/etc/storage/exports"; const char *exports_file = "/etc/exports"; const char *exports_rule = "async,insecure,no_root_squash,no_subtree_check"; char *nfsmm, *acl_addr, *acl_mask; unlink(exports_file); if (check_if_file_exist(exports_link)) { symlink(exports_link, exports_file); return; } fp = fopen(exports_file, "w"); if (!fp) return; acl_addr = nvram_safe_get("lan_ipaddr_t"); acl_mask = nvram_safe_get("lan_netmask_t"); if (!is_valid_ipv4(acl_addr) || !is_valid_ipv4(acl_mask)) { acl_addr = nvram_safe_get("lan_ipaddr"); acl_mask = nvram_safe_get("lan_netmask"); } acl_lan[0] = 0; ip2class(acl_addr, acl_mask, acl_lan, sizeof(acl_lan)); acl_vpn[0] = 0; if (!get_ap_mode() && nvram_get_int("vpns_enable") && nvram_get_int("vpns_vuse")) { acl_addr = nvram_safe_get("vpns_vnet"); acl_mask = VPN_SERVER_SUBNET_MASK; #if defined (APP_OPENVPN) if (nvram_get_int("vpns_type") == 2) { if (nvram_get_int("vpns_ov_mode") == 1) ip2class(acl_addr, acl_mask, acl_vpn, sizeof(acl_vpn)); } else #endif ip2class(acl_addr, acl_mask, acl_vpn, sizeof(acl_vpn)); if (strcmp(acl_lan, acl_vpn) == 0) acl_vpn[0] = 0; } fprintf(fp, "# %s\n\n", "auto-created file"); procpt = fopen("/proc/mounts", "r"); if (procpt) { while (fgets(line, sizeof(line), procpt)) { if (sscanf(line, "%31s %127s %15s %163s %*s %*s", devname, mpname, system_type, mount_mode) != 4) continue; if (!strcmp(system_type, "fuseblk")) continue; if (!strncmp(devname, "/dev/sd", 7) && !strncmp(mpname, "/media/", 7)) { nfsmm = (strncmp(mount_mode, "ro", 2) == 0) ? "ro" : "rw"; fprintf(fp, "%s\t", mpname); fprintf(fp, " %s(%s,%s)", acl_lan, nfsmm, exports_rule); if (acl_vpn[0]) fprintf(fp, " %s(%s,%s)", acl_vpn, nfsmm, exports_rule); fprintf(fp, "\n"); } } fclose(procpt); } fclose(fp); }
int image_to_base64(char *file_path, char *client_mac) { FILE * pFile; long lSize; char *buffer; char *base64; size_t result; int i; //toUpperCase char client_mac_temp[15]; memset(client_mac_temp, 0, sizeof(client_mac_temp)); sprintf(client_mac_temp, client_mac); int idex = 0; while ( client_mac_temp[idex] != 0 ) { if ( ( client_mac_temp[idex] >= 'a' ) && ( client_mac_temp[idex] <= 'z' ) ) { client_mac_temp[idex] = client_mac_temp[idex] - 'a' + 'A'; } idex++; } pFile = fopen (file_path , "rb"); if (pFile == NULL) { printf("File error\n"); i = 0; return i; } // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile); // allocate memory to contain the whole file: buffer = (char*) malloc (sizeof(char)*lSize); base64 = (char*) malloc (sizeof(char)*lSize); if (buffer == NULL) { printf("Memory error\n"); i = 0; return i; } // copy the file into the buffer: result = fread (buffer,1,lSize,pFile); if (result != lSize) { printf("Reading error\n"); i = 0; return i; } //image binary to base64 if (openvpn_base64_encode (buffer, lSize, &base64) <= 0) { printf("binary encode error \n"); i = 0; return i; } //image header + image base64 char image_base64[(strlen(base64) + 25)]; memset(image_base64, 0, sizeof(image_base64)); sprintf(image_base64, "data:image/jpeg;base64,"); strcat(image_base64, base64); // terminate fclose (pFile); free (buffer); free (base64); //wirte image_base64 to file char write_file_path[35]; memset(write_file_path, 0, sizeof(write_file_path)); //file path: /jffs/usericon/mac.log //Check folder exist or not if(!check_if_dir_exist("/jffs/usericon")) system("mkdir /jffs/usericon"); sprintf(write_file_path, "/jffs/usericon/%s.log", client_mac_temp); //if have exist mac file , don't witre if(!check_if_file_exist(write_file_path)) { int str_len = strlen(image_base64); int i; FILE * pFile; pFile = fopen (write_file_path , "w"); if (pFile == NULL) { printf("File error\n"); i = 0; return i; } for(i = 0; i < str_len; i++) { fputc(image_base64[i], pFile); } fclose (pFile); } i = 1; return i; }
static int qmi_control_network(const char* control_node, int is_start) { int qmi_client_id = -1; if (is_start) { int i; char *qmi_nets, *pin_code, *usr_name, *usr_pass; char clid_cmd[32], auth_cmd[128]; /* enter PIN-code */ pin_code = nvram_safe_get("modem_pin"); if (strlen(pin_code) > 0) { doSystem("%s -d /dev/%s %s %s", "/bin/uqmi", control_node, "--verify-pin1", pin_code); } /* set interface format as 802.3 */ doSystem("%s -d /dev/%s %s %s", "/bin/uqmi", control_node, "--set-data-format", "802.3"); /* setup network modes */ qmi_nets = "all"; switch (nvram_get_int("modem_nets")) { case 9: qmi_nets = "td-scdma"; break; case 8: qmi_nets = "cdma"; break; case 7: qmi_nets = "gsm"; break; case 6: qmi_nets = "gsm,umts"; break; case 5: qmi_nets = "umts,gsm"; break; case 4: qmi_nets = "umts"; break; case 3: qmi_nets = "lte,umts,gsm"; break; case 2: qmi_nets = "lte,umts"; break; case 1: qmi_nets = "lte"; break; } doSystem("%s -d /dev/%s %s %s", "/bin/uqmi", control_node, "--set-network-modes", qmi_nets); /* obtain new client id */ doSystem("%s -d /dev/%s %s %s", "/bin/uqmi", control_node, "--get-client-id", "wds"); qmi_client_id = get_qmi_handle(QMI_CLIENT_ID); clid_cmd[0] = 0; if (qmi_client_id >= 0) snprintf(clid_cmd, sizeof(clid_cmd), " --set-client-id wds,%d", qmi_client_id); usr_name = nvram_safe_get("modem_user"); usr_pass = nvram_safe_get("modem_pass"); auth_cmd[0] = 0; if (strlen(usr_name) > 0 && strlen(usr_pass) > 0) snprintf(auth_cmd, sizeof(auth_cmd), " --auth-type both --username \"%s\" --password \"%s\"", usr_name, usr_pass); unlink(QMI_HANDLE_PDH); for (i = 0; i < MAX_QMI_TRIES; i++) { doSystem("%s -d /dev/%s%s --keep-client-id wds --start-network \"%s\"%s --autoconnect", "/bin/uqmi", control_node, clid_cmd, nvram_safe_get("modem_apn"), auth_cmd); if (check_if_file_exist(QMI_HANDLE_PDH)) return 0; sleep(1); } } else { // int qmi_pdh = get_qmi_handle(QMI_HANDLE_PDH); /* stop network and disable autoconnect (use global pdh with autoconnect) */ doSystem("%s -d /dev/%s --stop-network 0x%x --autoconnect", "/bin/uqmi", control_node, 0xffffffff); /* release client id */ qmi_client_id = get_qmi_handle(QMI_CLIENT_ID); if (qmi_client_id >= 0) { doSystem("%s -d /dev/%s --set-client-id wds,%d --release-client-id wds", "/bin/uqmi", control_node, qmi_client_id); } unlink(QMI_CLIENT_ID); unlink(QMI_HANDLE_PDH); return 0; } return 1; }
int is_torrent_support(void) { return check_if_file_exist("/usr/bin/transmission-daemon"); }
static int qmi_start_network(const char* control_node) { FILE *fp; int i, qmi_client_id = -1; char *qmi_nets, *pin_code, *usr_name, *usr_pass; char clid_cmd[64], auth_cmd[64]; /* enter PIN-code */ pin_code = nvram_safe_get("modem_pin"); if (*pin_code) doSystem("/bin/uqmi -d /dev/%s %s %s", control_node, "--verify-pin1", pin_code); /* setup network */ qmi_nets = "all"; switch (nvram_get_int("modem_nets")) { case 9: qmi_nets = "td-scdma"; break; case 8: qmi_nets = "cdma"; break; case 7: qmi_nets = "gsm"; break; case 6: qmi_nets = "gsm,umts"; break; case 5: qmi_nets = "umts,gsm"; break; case 4: qmi_nets = "umts"; break; case 3: qmi_nets = "lte,umts,gsm"; break; case 2: qmi_nets = "lte,umts"; break; case 1: qmi_nets = "lte"; break; } doSystem("/bin/uqmi -d /dev/%s %s %s", control_node, "--set-network-modes", qmi_nets); /* try to use previous client id */ fp = fopen(QMI_CLIENT_ID, "r"); if (fp) { fscanf(fp, "%d", &qmi_client_id); fclose(fp); } if (qmi_client_id < 0) { /* fail, obtain new client id */ doSystem("/bin/uqmi -d /dev/%s %s %s", control_node, "--get-client-id", "wds"); fp = fopen(QMI_CLIENT_ID, "r"); if (fp) { fscanf(fp, "%d", &qmi_client_id); fclose(fp); } } clid_cmd[0] = 0; if (qmi_client_id >= 0) snprintf(clid_cmd, sizeof(clid_cmd), " --set-client-id wds,%d", qmi_client_id); usr_name = nvram_safe_get("modem_user"); usr_pass = nvram_safe_get("modem_pass"); auth_cmd[0] = 0; if (*usr_name && *usr_pass) snprintf(auth_cmd, sizeof(auth_cmd), " --auth-type both --username \"%s\" --password \"%s\"", usr_name, usr_pass); unlink(QMI_HANDLE_OK); for (i = 0; i < 3; i++) { doSystem("/bin/uqmi -d /dev/%s%s --keep-client-id wds%s --start-network \"%s\"", control_node, clid_cmd, auth_cmd, nvram_safe_get("modem_apn")); if (check_if_file_exist(QMI_HANDLE_OK)) return 0; sleep(1); } return 1; }
static void update_firefly_conf(const char *link_path, const char *conf_path, const char *conf_file) { FILE *fp1, *fp2; char tmp1[64], tmp2[64], line[128]; snprintf(tmp1, sizeof(tmp1), "%s/%s", conf_path, conf_file); if (check_if_file_exist(tmp1)) { snprintf(tmp2, sizeof(tmp2), "%s/%s.tmp", conf_path, conf_file); fp1 = fopen(tmp1, "r"); if (fp1) { fp2 = fopen(tmp2, "w"); if (fp2) { while (fgets(line, sizeof(line), fp1)){ if (strncmp(line, "web_root", 8) == 0) snprintf(line, sizeof(line), "web_root = %s\n", "/usr/share/mt-daapd"); if (strncmp(line, "port", 4) == 0) snprintf(line, sizeof(line), "port = %d\n", 3689); else if (strncmp(line, "runas", 5) == 0) snprintf(line, sizeof(line), "runas = %s\n", nvram_safe_get("http_username")); else if (strncmp(line, "db_type", 7) == 0) snprintf(line, sizeof(line), "db_type = %s\n", "sqlite3"); else if (strncmp(line, "db_parms", 8) == 0) snprintf(line, sizeof(line), "db_parms = %s\n", link_path); else if (strncmp(line, "plugin_dir", 10) == 0) snprintf(line, sizeof(line), "plugin_dir = %s\n", "/usr/lib/mt-daapd"); fprintf(fp2, "%s", line); } fclose(fp2); fclose(fp1); rename(tmp2, tmp1); } else fclose(fp1); } } else { fp1 = fopen(tmp1, "w"); if (fp1) { fprintf(fp1, "[general]\n"); fprintf(fp1, "web_root = %s\n", "/usr/share/mt-daapd"); fprintf(fp1, "port = %d\n", 3689); fprintf(fp1, "runas = %s\n", nvram_safe_get("http_username")); fprintf(fp1, "admin_pw = %s\n", nvram_safe_get("http_passwd")); fprintf(fp1, "db_type = %s\n", "sqlite3"); fprintf(fp1, "db_parms = %s\n", link_path); fprintf(fp1, "logfile = %s/mt-daapd.log\n", link_path); fprintf(fp1, "servername = %s\n", "Firefly on %h"); fprintf(fp1, "mp3_dir = %s\n", "/media"); fprintf(fp1, "extensions = %s\n", ".mp3,.m4a,.m4p,.flac,.alac"); fprintf(fp1, "rescan_interval = %d\n", 300); fprintf(fp1, "always_scan = %d\n", 0); fprintf(fp1, "scan_type = %d\n", 0); fprintf(fp1, "debuglevel = %d\n\n", 0); fprintf(fp1, "[scanning]\n"); fprintf(fp1, "skip_first = %d\n", 1); fprintf(fp1, "process_playlists = %d\n", 1); fprintf(fp1, "process_itunes = %d\n", 1); fprintf(fp1, "process_m3u = %d\n", 1); fprintf(fp1, "mp3_tag_codepage = %s\n\n", "WINDOWS-1251"); fprintf(fp1, "[plugins]\n"); fprintf(fp1, "plugin_dir = %s\n\n", "/usr/lib/mt-daapd"); fclose(fp1); } } }
int is_itunes_support(void) { return check_if_file_exist("/usr/bin/mt-daapd"); }
int is_dms_support(void) { return check_if_file_exist("/usr/bin/minidlnad"); }
int is_aria_support(void) { return check_if_file_exist("/usr/bin/aria2c"); }