Esempio n. 1
0
//Hanlde "all" requests to/from server, pass off to child funcs in
// rcon-handlers.c for specific API hooking
int root_handler(struct mg_connection *conn, json_t* jreq, json_t* jrsp){
    //Get current "action" request
    json_t* action = json_object_get(jreq,"action");
    if (!action){
        //no action found, set error handling
        json_object_set_new(jrsp,"error",json_string("no 'action' key in request (please POST)"));
        return 400;
    }

    //test handler, echos back some basic data about the request
    if(cmpjstr(action,"version")){
        return handle_version(conn,jreq,jrsp);
    }
    else if(cmpjstr(action,"api/hotkey")){
        return handle_hotkey(jreq,jrsp);
    }
    else if(cmpjstr(action,"api/output")){
        return handle_output(jreq,jrsp);
    }
    else if(cmpjstr(action,"plugin")){
        for (size_t i=0; i < rcon_data.plugin_handlers.num; i++){
            struct rcon_handler hndl = rcon_data.plugin_handlers.array[i];
            if (cmpjstr(json_object_get(jreq,"plugin_action"),hndl.action)){
                return hndl.handle_func(conn,jreq,jrsp);
            }
        }
        json_object_set_new(jrsp,"error",json_string("no matching 'plugin_action' found for request."));
        return 400;
    }
    else {
        json_object_set_new(jrsp,"error",json_string("no matching 'action' found for request."));

        if (jreq){
            json_object_set(jrsp, "requestJSON", jreq);
        }
        else{
            json_object_set_new(jrsp,"requestJSON", json_null());
        }
        return 400;
    }
}
Esempio n. 2
0
int cr_service_work(int sk)
{
	int ret = -1;
	CriuReq *msg = 0;

more:
	if (recv_criu_msg(sk, &msg) == -1) {
		pr_perror("Can't recv request");
		goto err;
	}

	if (chk_keepopen_req(msg))
		goto err;

	switch (msg->type) {
	case CRIU_REQ_TYPE__DUMP:
		ret = dump_using_req(sk, msg->opts);
		break;
	case CRIU_REQ_TYPE__RESTORE:
		ret = restore_using_req(sk, msg->opts);
		break;
	case CRIU_REQ_TYPE__CHECK:
		ret = check(sk);
		break;
	case CRIU_REQ_TYPE__PRE_DUMP:
		ret = pre_dump_loop(sk, msg);
		break;
	case CRIU_REQ_TYPE__PAGE_SERVER:
		ret = start_page_server_req(sk, msg->opts, true);
		break;
	case CRIU_REQ_TYPE__PAGE_SERVER_CHLD:
		ret = start_page_server_req(sk, msg->opts, false);
		break;
	case CRIU_REQ_TYPE__WAIT_PID:
		ret =  handle_wait_pid(sk, msg->pid);
		break;
	case CRIU_REQ_TYPE__CPUINFO_DUMP:
	case CRIU_REQ_TYPE__CPUINFO_CHECK:
		ret = handle_cpuinfo(sk, msg);
		break;
	case CRIU_REQ_TYPE__FEATURE_CHECK:
		ret = handle_feature_check(sk, msg);
		break;
	case CRIU_REQ_TYPE__VERSION:
		ret = handle_version(sk, msg);
		break;

	default:
		send_criu_err(sk, "Invalid req");
		break;
	}

	if (!ret && msg->keep_open) {
		criu_req__free_unpacked(msg, NULL);
		ret = -1;
		goto more;
	}

err:
	return ret;
}
int command_handle(char *buf)
{
	int cmd = command_interpret(buf); /* get the command index */

	switch (cmd) {
	case 0:
		break;
	case 6:
		nand_query();
		break;
	case 7:	
		handle_nerase();
		break;
	case 8:	/* nread */
		nand_read(NAND_READ);
		break;
	case 9:	/* nreadraw */
		nand_read(NAND_READ_RAW);
		break;
	case 10: /* nreadoob */
		nand_read(NAND_READ_OOB);
		break;
	case 11:
		nand_prog();
		break;
	case 12:
		handle_help();
		break;
	case 13:
		handle_version();
		break;
	case 14:
		debug_go();
		break;
	case 16:		/* exit */
		printf(" exiting usbboot software\n");
		return -1;	/* return -1 to break the main.c while
				 * then run usb_ingenic_cleanup*/
		/*case 17:
		nand_read(NAND_READ_TO_RAM); */
		break;
	case 18:
		handle_gpio(2);
		break;
	case 19:
		handle_gpio(3);
		break;
	case 20:
		boot(STAGE1_FILE_PATH, STAGE2_FILE_PATH);
		break;
	case 26:
		handle_nmark();
		break;
	case 28:
		handle_load();
		break;
	case 29:
		handle_memtest();
		break;
	default:
		printf(" command not support or input error!\n");
		break;
	}

	return 1;
}