예제 #1
0
int main(int argc, char **argv)
{
	struct esme esme;
	char *host = "localhost";
	int port = 0;
	int rc;

	memset(&esme, 0, sizeof(esme));

	osmo_init_logging(&log_info);

	snprintf((char *) esme.system_id, sizeof(esme.system_id), "mirror");
	snprintf((char *) esme.password, sizeof(esme.password), "mirror");
	esme.smpp_version = 0x34;

	if (argc >= 2)
		host = argv[1];
	if (argc >= 3)
		port = atoi(argv[2]);

	rc = smpp_esme_init(&esme, host, port);
	if (rc < 0)
		exit(1);

	while (1) {
		osmo_select_main(0);
	}

	exit(0);
}
예제 #2
0
int smpp_listener_start(SMPPServer *smpp_server) {
    struct sockaddr_in sin;
    /* Create new event base */
    smpp_server->event_base = event_base_new();
    if (!smpp_server->event_base) {
        error(0, "Couldn't open event base");
        return 1;
    }

    /* Clear the sockaddr before using it, in case there are extra
     * platform-specific fields that can mess us up. */
    memset(&sin, 0, sizeof (sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(smpp_server->smpp_port);
    sin.sin_addr.s_addr = htonl(INADDR_ANY);

    /* Create a new listener */
    info(0, "Starting SMPP server on port %ld", smpp_server->smpp_port);
    smpp_server->event_listener = evconnlistener_new_bind(smpp_server->event_base, smpp_listener_connection_callback, smpp_server,
            LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE, -1,
            (struct sockaddr *) &sin, sizeof (sin));
    if (!smpp_server->event_listener) {
        panic(0,"Couldn't create listener");
        return 1;
    }


    smpp_server->ip_blocklist = dict_create(512, (void(*)(void *))smpp_blocked_ip_destroy);

    smpp_bearerbox_init(smpp_server);
    smpp_esme_init(smpp_server);
    smpp_queues_init(smpp_server);
    
    
    
    evconnlistener_set_error_cb(smpp_server->event_listener, smpp_listener_accept_error_callback);
    
    event_base_dispatch(smpp_server->event_base);
    
    
    smpp_queues_shutdown(smpp_server);
    smpp_esme_shutdown(smpp_server);
    smpp_bearerbox_shutdown(smpp_server);

    dict_destroy(smpp_server->ip_blocklist);
    
    evconnlistener_free(smpp_server->event_listener);
    
    event_base_free(smpp_server->event_base);
    
    return 0;
}