Esempio n. 1
0
bool pm_init(struct pm_proxy *pm, const char *parg)
{
    if ((pm == NULL) || (pm->manu == NULL))
        return false;

    memcpy(&g_pm, pm, sizeof(struct pm_proxy));

    if (strcmp(pm->manu, FERRY_MANU_AMPLESKY) == 0)
    {
        if (__amplesky_init() < 0)
            return false;

        pm->do_recv = NULL;
        pm->do_request = __amplesky_request;
        pm->do_reply = NULL;
        pm->do_close = NULL;
        pm->pm_quit = __amplesky_quit;

        loginf_fmt("ferry %s init:  [OK]",  pm->manu);
    }
    else if (strcmp(pm->manu, FERRY_MANU_AMPLESKY28181) == 0)
    {
        if (__amplesky28181_init(parg) < 0)
            return false;

        pm->do_socket = __amplesky28181_socket;
        pm->do_recv = NULL;
        pm->do_request = __amplesky28181_request;
        pm->do_reply = __amplesky28181_reply;
        //pm->do_reply = NULL;
        pm->do_close = __amplesky28181_close;
        pm->pm_quit =  __amplesky28181_quit;   

        loginf_fmt("ferry %s init:  [OK]",  pm->manu);
    } 
    else if (strcmp(pm->manu, FERRY_MANU_HIK28181) == 0)
    {
        if (__hik28181_init(parg) < 0)
            return false;

        pm->do_socket = __hik28181_socket;
        pm->do_recv = NULL;
        pm->do_request = __hik28181_request;
        pm->do_reply = __hik28181_reply;
        //pm->do_reply = NULL;
        pm->do_close = __hik28181_close;
        pm->pm_quit =  __hik28181_quit;   

        loginf_fmt("ferry %s init:  [OK]",  pm->manu);
    }
	else if (strcmp(pm->manu, FERRY_MANU_KEDA2800) == 0)
	{
        // KDM2800 V1R4B3SP2Fix5, cu V0383
		if ( is_tms())
		{
			return true;
		}
		
		if (__keda2800_init(parg) < 0)
			return false;
		pm->do_socket = __keda2800_socket;
		pm->do_request = __keda2800_request;
		pm->do_reply = __keda2800_reply;
		pm->do_close = __keda2800_close;
		pm->pm_quit = __keda2800_quit;

        loginf_fmt("ferry %s init:  [OK]",  pm->manu);
	}
	else if (strcmp(pm->manu, FERRY_MANU_KEDA2801E) == 0)
    {
        if (__keda2801e_init(parg) < 0)
        {
            loginf_fmt("ferry %s init:  [FAILED]",  pm->manu);
            return false;
        }
		//pm->do_socket = __keda2801e_socket;
        pm->pm_quit = __keda2801e_quit;

        loginf_fmt("ferry %s init:  [OK]",  pm->manu);
    }
	else if (strcmp(pm->manu, FERRY_MANU_DATANG) == 0)
	{
		if (__datang_init() < 0)
			return false;
		pm->do_socket = __datang_socket;
		pm->do_request = __datang_request;
		pm->do_reply = __datang_reply;
		pm->do_close = __datang_close;
		pm->pm_quit = __datang_quit;
	}
    else if (strcmp(pm->manu, FERRY_MANU_SANDUN) == 0)
    {
        if (__sandun_init() < 0)
            return false;

        pm->do_recv = NULL;
        pm->do_request = __sandun_request;
        pm->do_reply = __sandun_reply;
        pm->do_close = __sandun_close;
        pm->pm_quit = __sandun_quit;

        loginf_out("ferry sandun init:  [OK]");
    }
    else if (strcmp(pm->manu, FERRY_MANU_HUASAN) == 0)
    {
        if (__huasan_init() < 0)
            return false;
        //pm->head_type = E_WCLIENT;

        pm->do_socket = __huasan_socket;
        pm->do_recv = NULL;
        pm->do_request = __huasan_request;
        pm->do_reply = __huasan_reply;
        pm->do_close = __huasan_close;
        pm->pm_quit = __huasan_quit;

        loginf_out("ferry huasan init: [OK]");
    } 
    else if (strcmp(pm->manu, FERRY_MANU_H3C_V8500) == 0)
    {
        if ( __h3c_v8500_init() < 0)
        {
            logwar_out("ferry h3c v8500 init failed!");
            return false;
        }

        pm->do_socket = __h3c_v8500_socket;
        pm->do_recv = __h3c_v8500_recv;
        pm->do_request = __h3c_v8500_request;
        pm->do_reply = __h3c_v8500_reply;
        pm->do_close = __h3c_v8500_close;
        pm->pm_quit = __h3c_v8500_quit;

        loginf_out("ferry h3c v8500 init: [OK]");
    }
	else if (strcmp(pm->manu, FERRY_MANU_JCH3C) == 0)
	{
		if (__h3c_v8500_init() < 0)
		{
			loginf_out("ferry jincheng h3c init: [FAILED!]");
			return false;
		}
		pm->do_socket = __h3c_v8500_socket;
		pm->do_recv = __h3c_v8500_recv;
		pm->do_request = __h3c_v8500_request;
		pm->do_reply = __h3c_v8500_reply;
		pm->do_close = __h3c_v8500_close;
		pm->pm_quit = __h3c_v8500_quit;

		loginf_out("ferry jincheng h3c init: [OK]");
	}
	else if (!strcmp(pm->manu, FERRY_MANU_H3C)) 
	{
        if (h3c_init() < 0)
            return false;

        pm->do_socket = h3c_socket;
        pm->do_recv = h3c_recv;
        pm->do_request = h3c_request;
        pm->do_close = h3c_close;
        pm->pm_quit = h3c_quit;
    }
    else if (!strcmp(pm->manu, FERRY_MANU_DAHUA)) 
    {
        if (__dahua_init() < 0)
            return false;

        pm->do_socket = __dahua_socket;
        pm->do_recv = __dahua_recv;
        pm->do_request = __dahua_request;
        pm->do_reply = __dahua_reply;
        pm->do_close = __dahua_close;
        pm->pm_quit = __dahua_quit;
    }
    else if (!strcmp(pm->manu, FERRY_MANU_ZSYH)) 
    {
        if (__zsyh_init() < 0)
            return false;

        pm->do_socket = __zsyh_socket;
        pm->do_recv = __zsyh_recv;
        pm->do_request = __zsyh_request;
        pm->do_reply = __zsyh_reply;
        pm->do_close = __zsyh_close;
        pm->pm_quit = __zsyh_quit;
    
    }
    else if (!strcmp(pm->manu, FERRY_MANU_H3C_FS)) 
	{
        if (h3c_init() < 0)
            return false;

        //pm->do_socket = h3c_fs_socket;
        pm->do_recv = h3c_fs_recv;
        pm->do_request = h3c_fs_request;
        pm->do_reply = h3c_fs_reply;
        pm->do_close = h3c_fs_close;
        //pm->pm_quit = h3c_quit;
    
    }
    else if (!strcmp(pm->manu, FERRY_MANU_H3C_HARBIN)) 
	{
        if (h3c_harbin_init() < 0)
            return false;

        //pm->do_socket = h3c_harbin_socket;
        pm->do_recv = h3c_harbin_recv;
        pm->do_request = h3c_harbin_request;
        pm->do_reply = h3c_harbin_reply;
        pm->do_close = h3c_harbin_close;
        //pm->pm_quit = h3c_harbin_quit;
    }
    else if (!strcmp(pm->manu, FERRY_MANU_TIANDIWEIYE)) 
    {
      //pm->lport = FERRY_PORT_TIANDIWEIYE;
      //__gg.ferry_port = pm->lport;
    }else if (!strcmp(pm->manu, FERRY_MENU_HIK)) 
	{
        if (hik_fcg_init() < 0)
            return false;

        pm->do_socket = NULL;
        pm->do_recv = NULL;
        pm->do_request = hik_fcg_request;
        pm->do_reply = hik_fcg_reply;
        pm->do_close = NULL;
        pm->pm_quit = hik_fcg_quit;
    }                          
    else if (!strcmp(pm->manu, FERRY_MANU_ZHONGXING))
    {
        if ( zhongxing_henan_init(NULL) < 0)
            return false;
        pm->pm_quit = zhongxing_henan_quit;
        if (is_tms())
            pm->do_socket = zhongxing_socket;
            //pm->do_request = zhongxing_henan_tms_request;
        else
            pm->do_request = zhongxing_henan_request;
    }
    else if (strcmp(pm->manu, FERRY_SHANGXI_JONET) == 0)
    {
        if (jonet_init(NULL) < 0)
            return false;

        pm->do_socket = jonet_socket;
        pm->do_recv = jonet_recv;
        pm->do_request = jonet_request;
        pm->do_reply = jonet_reply;
        pm->do_close = jonet_close;
        pm->pm_quit = jonet_quit;
    }
    else if (strcmp(pm->manu, FERRY_HENAN_ZHONGXING) == 0)
    {
        if (zhongxing_henan_init(NULL) < 0)
            return false;
        pm->pm_quit = zhongxing_henan_quit;
        pm->do_request = zhongxing_henan_request;
    }
	else if ( !strcmp(pm->manu, FERRY_MANU_FIBER))
	{
		if ( __fiber_init(NULL) < 0)
			return false;
		pm->do_socket = __fiber_socket;
		pm->do_request = __fiber_request;
		pm->do_reply = __fiber_reply;
		pm->do_close = __fiber_close;
	}

    /*
    else if (strcmp(pm->manu, FERRY_MANU_HARERBIN_KEDA_CHENGGUAN) == 0)
    {
        if (__keda_haerbin_chengguan_init() < 0)
            return false;

        pm->do_recv = __keda_haerbin_chengguan_recv;
        pm->do_socket = __keda_haerbin_chengguan_socket;
        pm->do_request = __keda_haerbin_chengguan_request;
        pm->do_reply = __keda_haerbin_chengguan_reply;
        pm->do_close = __keda_haerbin_chengguan_close;
        pm->pm_quit = __keda_haerbin_chengguan_quit;
    }
    else if (strcmp(pm->manu, FERRY_MANU_TIANDIWEIYE) == 0)
    {
        pm->lport = FERRY_PORT_TIANDIWEIYE;
	    __gg.ferry_port = pm->lport;

        if (__tiandiweiye_init(parg) < 0)
            return false;

        pm->pm_quit = __tiandiweiye_quit;
        pm->do_recv = __tiandiweiye_recv;
        pm->do_socket = __tiandiweiye_socket;
        pm->do_request = __tiandiweiye_request;
        pm->do_reply = __tiandiweiye_reply;
        pm->do_close = __tiandiweiye_close;
    }
    */
    else
    {
        pm_quit();
        loginf_fmt("ferry cannot find manufactery \"%s\" which is being supported.", pm->manu);
        return false;
    }
    // refill g_pm because of callback functions have been set.
    memcpy(&g_pm, pm, sizeof(struct pm_proxy));

    return true;
}
Esempio n. 2
0
File: main.c Progetto: renbaoke/h3c
int main(int argc, char **argv) {
	int ch;
	char *interface = NULL;
	char *username = NULL;
	char *password = NULL;
	int can_free_pw = 0;
	char md5_method = MD5_XOR;

	while ((ch = getopt(argc, argv, "i:u:p:m:h")) != -1) {
		switch (ch) {
		case 'i':
			interface = optarg;
			break;
		case 'u':
			username = optarg;
			break;
		case 'p':
			password = optarg;
			break;
		case 'm': {
				char *use_md5 = "md5";
				if(strcmp(optarg,use_md5) == 0) {
					md5_method = MD5_MD5;
				}
			}
			break;
		case 'h':
			usage(stdout);
			exit(0);
		default:
			usage(stderr);
			exit(-1);
		}
	}

	/* must run as root */
	if (geteuid() != 0) {
		fprintf(stderr, "Run as root, please.\n");
		exit(-1);
	}

	if (interface == NULL || username == NULL) {
		usage(stderr);
		exit(-1);
	}

	if (h3c_set_username(username) != SUCCESS) {
		fprintf(stderr, "Failed to set username.\n");
		exit(-1);
	}

	if (password == NULL) {
		if ((password = (char *) malloc(PWD_LEN)) == NULL) {
			fprintf(stderr, "Failed to malloc: %s\n", strerror(errno));
			exit(-1);
		}
		printf("Password for %s:", username);

		signal(SIGINT, exit_with_echo_on);
		signal(SIGTERM, exit_with_echo_on);

		echo_off();
		fgets(password, PWD_LEN - 1, stdin);
		can_free_pw = 1;
		echo_on();

		/* replace '\n' with '\0', as it is NOT part of password */
		password[strlen(password) - 1] = '\0';
		putchar('\n');
	}

	if (h3c_set_password(password) != SUCCESS) {
		fprintf(stderr, "Failed to set password.\n");
		if (can_free_pw) {
			free(password);
		}
		exit(-1);
	}
	if (can_free_pw) {
		free(password);
	}

	if (h3c_init(interface) != SUCCESS) {
		fprintf(stderr, "Failed to initialize: %s\n", strerror(errno));
		exit(-1);
	}

	if (h3c_start() != SUCCESS) {
		fprintf(stderr, "Failed to start: %s\n", strerror(errno));
		exit(-1);
	}

	signal(SIGINT, exit_handler);
	signal(SIGTERM, exit_handler);

	for (;;) {
		if (h3c_response(success_handler, failure_handler, unkown_eapol_handler,
				unkown_eap_handler, got_response_handler, md5_method) != SUCCESS) {
			fprintf(stderr, "Failed to response: %s\n", strerror(errno));
			exit(-1);
		}
	}

	return 0;
}