Exemplo n.º 1
0
int remove_user(dev_info_t *pdev, macadr_t *user)
{
    int i;
    i = find_user(pdev, user);
    clean_user(&pdev->users[i]);
    return 0;
}
Exemplo n.º 2
0
static NEINT32 user_leave_map(NEUINT16 sessionid, ne_usermsgbuf_t *msg , ne_handle listener)
{
	NEUINT32 id;
	ne_assert(NE_USERMSG_MAXID(msg) == MAXID_SERVER_SERVER);
	ne_assert(NE_USERMSG_MINID(msg) == MSG_USER_LEAVE_MAP);
	id = NE_USERMSG_PARAM(msg);
	clean_user(id);
	return (0);
}
Exemplo n.º 3
0
int cmd_handle(int UNUSED(sd), char *line)
{
    int argc, func;
    char *argv[10];
    dev_info_t *pdev;

    argc = make_argv(line, ARRAY_SIZE(argv), argv);
    if (argc <= 0)
        return ERROR;

    DBG_OUT("argc is %d", argc);
    
	func = get_cmdid(argv[0]);
	if (func < 0) {
		printf("unknown command: %s\r\n", argv[0]);
		return ERROR;
	}

	switch (func) {
	case SERV_REQ_KICKCLI:
	case SERV_REQ_REBOOT:
	case SERV_REQ_FACTORY:
    {
        PMIFI_PACKET p;
        int i, datalen, packetlen;
        u8 sum;

        i = 0;
        datalen = 0;
        packetlen =  sizeof(MIFI_PACKET ) + datalen;

		p = (PMIFI_PACKET)malloc(packetlen + 1);

        if (argc == 2) {
            devid_t devid;
            hex2bin((u8 *)argv[1], (u8 *)&devid, sizeof(devid_t));
            i = find_device_by_id(&devid);
            if (i < 0) {
                printf("cannot find device: %s\r\n", argv[1]);
                break;
            }
        }

		pdev = get_device(i);
		build_packet_header(p, pdev, func);
		p->datalen = htons(datalen);
		sum = get_checksum((u8 *)p, packetlen);
		*(((u8 *)p) + packetlen) = sum;

		push_data(pdev->sd, (u8 *)p, packetlen + 1);

        free(p);
    }
	break;

	case SERV_REQ_UPGRADE:
	{
		PMIFI_PACKET p;
		char *url = "http://url.cn/QyCLQu";
		int i, url_len, datalen, packetlen;
		u8 sum;

		i = 0;
		url_len = strlen(url);
		datalen = url_len + 2;
		packetlen =  sizeof(MIFI_PACKET ) + datalen;

		p = (PMIFI_PACKET)malloc(packetlen + 1);

		pdev = get_device(i);
		build_packet_header(p, pdev, func);
		p->datalen = htons(datalen);
		p->data[0] = ((u8*)&url_len)[1];
		p->data[1] = ((u8*)&url_len)[0];
		memcpy(p->data + 2, url, datalen);
		sum = get_checksum((u8 *)p, packetlen);
		*(((u8 *)p) + packetlen) = sum;

		push_data(pdev->sd, (u8 *)p, packetlen + 1);

		free(p);
	}
	break;

	case SERV_REQ_KICKUSR:
	{
		PMIFI_PACKET p;
		int i, datalen, packetlen;
		u8 sum;

		i = 0;
		datalen = sizeof(macadr_t);
		packetlen =  sizeof(MIFI_PACKET ) + datalen;

		p = (PMIFI_PACKET)malloc(packetlen + 1);

        if (argc == 3) {
            devid_t devid;
            hex2bin((u8 *)argv[2], (u8 *)&devid, sizeof(devid_t));
            i = find_device_by_id(&devid);
            if (i < 0) {
                printf("cannot find device: %s\r\n", argv[2]);
                break;
            }
        }

		pdev = get_device(i);
        build_packet_header(p, pdev, func);
		p->datalen = htons(datalen);
        if (argc == 1) {
            i = find_first_valid_user(pdev);
        } else {
            macadr_t user;
            hex2bin((u8 *)argv[1], (u8 *)&user, sizeof(macadr_t));
            i = find_user(pdev, &user);
            if (i < 0) {
                printf("cannot find user: %s\r\n", argv[1]);
                break;
            }
        }
		memcpy(p->data, pdev->users[i], datalen);
        clean_user(&pdev->users[i]);  // should be clean after got the response from client
		sum = get_checksum((u8 *)p, packetlen);
		*(((u8 *)p) + packetlen) = sum;

		push_data(pdev->sd, (u8 *)p, packetlen + 1);

		free(p);
	}
	break;
    
    case MIFI_CMD_LDEV:
	{
		int i = 0;
		devid_t freedev = {0};
		for (i = 0; i < ARRAY_SIZE(dev_map); i++)
		{
			if (dev_map[i].valid && (memcmp(&dev_map[i].devid, &freedev, sizeof(devid_t)) != 0))
			{
				printf("DevID: ");
				dump_data((u8 *)&dev_map[i].devid, sizeof(devid_t), 0);
				printf("IMSI:  ");
				dump_data((u8 *)&dev_map[i].imsi, sizeof(imsi_t), 0);
				printf("\r\n");
			}
		}
	}
	break;
	
    case MIFI_CMD_LUSER:
    {
        int i = 0;
        macadr_t freeuser = {0};
        
        if (argc == 2) {
            devid_t devid;
            hex2bin((u8 *)argv[1], (u8 *)&devid, sizeof(devid_t));
            i = find_device_by_id(&devid);
            if (i < 0) {
                printf("cannot find device: %s\r\n", argv[1]);
                break;
            }
        }
        
        pdev = get_device(i);
        for (i = 0; i < ARRAY_SIZE(pdev->users); i++)
        {
            if (memcmp(&pdev->users[i], &freeuser, sizeof(macadr_t)) != 0)
            {
                dump_data((u8 *)&pdev->users[i], sizeof(macadr_t), 0);
            }
        }
    }
    break;

	default:
		DBG_OUT("func isn't impletement: %d", func);
		return ERROR;
    }
    return 0;
}