예제 #1
0
파일: usb_modem.c 프로젝트: PterX/rt-n56u
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);
}
예제 #2
0
파일: services.c 프로젝트: jing-git/rt-n56u
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;
}
예제 #3
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
	}
}
예제 #4
0
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);
}
예제 #5
0
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");
}
예제 #6
0
파일: watchdog.c 프로젝트: jing-git/rt-n56u
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);
}
예제 #7
0
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;
}
예제 #8
0
파일: watchdog.c 프로젝트: eckyecky/rt-n56u
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);
	}
}
예제 #9
0
파일: vpn_openvpn.c 프로젝트: PterX/rt-n56u
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");
}
예제 #10
0
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;
}
예제 #11
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);
}
예제 #12
0
파일: vpn_openvpn.c 프로젝트: PterX/rt-n56u
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]);
	}
}
예제 #13
0
파일: vpn_openvpn.c 프로젝트: PterX/rt-n56u
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;
}
예제 #14
0
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;
}
예제 #15
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]);
}
예제 #16
0
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;
}
예제 #17
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);
}
예제 #18
0
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);
}
예제 #19
0
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);
}
예제 #20
0
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;
}
예제 #21
0
파일: usb_modem.c 프로젝트: PterX/rt-n56u
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;
}
예제 #22
0
int is_torrent_support(void)
{
	return check_if_file_exist("/usr/bin/transmission-daemon");
}
예제 #23
0
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;
}
예제 #24
0
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);
		}
	}
}
예제 #25
0
int is_itunes_support(void)
{
	return check_if_file_exist("/usr/bin/mt-daapd");
}
예제 #26
0
int is_dms_support(void)
{
	return check_if_file_exist("/usr/bin/minidlnad");
}
예제 #27
0
int is_aria_support(void)
{
	return check_if_file_exist("/usr/bin/aria2c");
}