예제 #1
0
/* client packet handler */
void cmd_packet_handler(struct conn_server *server, struct connection *conn,
		struct list_packet *packet)
{
	uint16_t command = get_command(packet);
	/* check login status */
	if (conn->type != LOGIN_OK_CONNECTION &&
			command != CMD_LOGIN) {
		/* the client not login, ignore this packet */
		allocator_free(&server->packet_allocator, packet);
		return;
	}

	switch (command) {
	case CMD_KEEP_ALIVE:
		cmd_keep_alive(server, conn, packet);
		break;
	case CMD_LOGIN:
		cmd_login(server, conn, packet);
		break;
	case CMD_LOGOUT:
		cmd_logout(server, conn, packet);
		break;
	case CMD_SET_NICK:
		cmd_user(server, conn, packet);
		break;
	case CMD_ADD_CONTACT:
	case CMD_ADD_CONTACT_REPLY:
	case CMD_CONTACT_LIST:
	case CMD_CONTACT_INFO_MULTI:
		cmd_contact(server, conn, packet);
		break;
	case CMD_MESSAGE:
	case CMD_OFFLINE_MSG:
		cmd_message(server, conn, packet);
		break;
	default:
		log_err("unkonwn command %#hx\n", command);
		break;
	}
}
예제 #2
0
int ShopSysCostomer::receive_command(string _cmd)
{
	vector<string> cmd_analysis = str_Split_not_add_zero(_cmd);

	/* add command */
	if (cmd_analysis[0] == "add")
	{
		return cmd_add(cmd_analysis);
	}
	else if (cmd_analysis[0] == "rmv")
	{
		return cmd_rmv(cmd_analysis);
	}
	else if (cmd_analysis[0] == "chk")
	{
		return cmd_chk(cmd_analysis);
	}
	else if (cmd_analysis[0] == "ls")
	{
		return cmd_productlist(cmd_analysis);
	}
	else if (cmd_analysis[0] == "login")
	{
		return cmd_login(cmd_analysis);
	}
	else if ((cmd_analysis[0] == "logout") && (cmd_analysis.size() == 1))
	{
		return logout_action();
	}
	else if ((cmd_analysis[0] == "pay") && (cmd_analysis.size() == 1))
	{
		return cmd_settle_account();
	}
	else if (cmd_analysis[0] == "")
	{
		return 0;
	}
	else if ((cmd_analysis[0] == "exit") && (cmd_analysis.size() == 1))
	{
		if (is_member)
		{
			fstream fmember;
			fmember.open(".\\members\\" + p_identity->get_id() + ".txt", ios::trunc | ios::out);
			fmember << p_identity->get_id() << ','
				<< p_identity->get_name() << ','
				<< p_identity->get_gender() << ','
				<< p_identity->get_phone() << ','
				<< p_identity->get_points() << ','
				<< password_mem;
			fmember.close();
			//Refresh file done
			delete p_identity;
			p_identity = NULL;
			is_member = false;
		}
		cout << endl << "Bye!";
		return 2;
	}
	else if ((cmd_analysis[0] == "help") && (cmd_analysis.size() == 1))
	{
		cout << "Command mannual : " << endl;
		cout << "ls [number each page] : List all the goods." << endl;
		cout << "add <Goods ID> [number] : add [number(default 1)] goods into your cart." << endl;
		cout << "rmv <Goods ID> [number] : remove [number(default all of this ID)] goods from your cart." << endl;
		cout << "login : Log in command." << endl;
		cout << "logout : Log out command." << endl;
		cout << "chk : Check your carts of goods." << endl;
		cout << "pay : Settle account." << endl;
		cout << "info : (Only used when logged in)Check member info." << endl;
		return 0;
	}
	else if ((cmd_analysis[0] == "info") && (cmd_analysis.size() == 1))
	{
		if (!is_member)
		{
			cout << "You have to login first." << endl;
			return 0;
		}

		cout << "Your info : " << endl;
		cout << "Member ID : " << p_identity->get_id() << endl;
		cout << "Name : " << p_identity->get_name() << endl;
		cout << "Gender : " << p_identity->get_gender() << endl;
		cout << "Phone : " << p_identity->get_phone() << endl;
		cout << "Member type : " << p_identity->get_member_type() << endl;
		cout << "Points : " << p_identity->get_points() << endl;
		return 0;
	}
	else
	{
		return 1;
	}
}
예제 #3
0
int
main (int argc, char *argv[])
{
    int result;

    char *config = NULL;

    int ch;
    progname = argv[0];

    while ((ch = getopt(argc, argv, "c:vVh")) != -1) {
        switch (ch) {
        case 'c':
            config = strdup(optarg);
            break;
        case 'v':
            verbose++;
            break;
        case 'V':
            version();
            exit(0);
            break;
        case 'h':
            usage();
            exit(0);
            break;
        default:
            usage();
            exit(1);
        }
    }
    argc -= optind;
    argv += optind;

    if (!argc) {
        usage();
        exit(1);
    }


    if (!strcasecmp(argv[0], "logout")) {
        if (config) free(config);
        exit(cmd_logout());
    }

    result = hsm_open(config, hsm_prompt_pin);
    if (result) {
        hsm_print_error(NULL);
        exit(-1);
    }

    openlog("hsmutil", LOG_PID, LOG_USER);

    if (!strcasecmp(argv[0], "login")) {
        argc --;
        argv ++;
        result = cmd_login();
    } else if (!strcasecmp(argv[0], "list")) {
        argc --;
        argv ++;
        result = cmd_list(argc, argv);
    } else if (!strcasecmp(argv[0], "generate")) {
        argc --;
        argv ++;
        result = cmd_generate(argc, argv);
    } else if (!strcasecmp(argv[0], "remove")) {
        argc --;
        argv ++;
        result = cmd_remove(argc, argv);
    } else if (!strcasecmp(argv[0], "purge")) {
        argc --;
        argv ++;
        result = cmd_purge(argc, argv);
    } else if (!strcasecmp(argv[0], "dnskey")) {
        argc --;
        argv ++;
        result = cmd_dnskey(argc, argv);
    } else if (!strcasecmp(argv[0], "test")) {
        argc --;
        argv ++;
        result = cmd_test(argc, argv);
    } else if (!strcasecmp(argv[0], "info")) {
        argc --;
        argv ++;
        result = cmd_info();
    } else if (!strcasecmp(argv[0], "debug")) {
        argc --;
        argv ++;
        result = cmd_debug();
    } else {
        usage();
        result = -1;
    }

    (void) hsm_close();
    if (config) free(config);

    closelog();

    exit(result);
}