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); }
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; }