package jpbx.core;
import java.io.*;
import java.net.*;
import javaforce.*;
/** Main
*
* @author pquiring
*
* Created : Jun 26, 2014
*/
public class Main {
//linux shutdown function (from command line)
private static String cfg[][];
public static void shutdownService() {
SQL sql = new SQL();
if (!sql.connect(Service.jdbc)) {
System.out.println("SQL init failed");
return;
}
cfg = sql.select("SELECT id,value FROM config");
sql.close();
//send "SHUTDOWN" command to SIP port (this command is only accepted from localhost)
try {
int port = Integer.valueOf(getCfg("port"));
DatagramSocket sock = new DatagramSocket(); //any port
byte data[] = "SHUTDOWN SIP/2.0\r\ni: null\r\nt: \"null\" <sip:0@127.0.0.1>\r\nf: \"null\" <sip:0@127.0.0.1>\r\n\r\n".getBytes();
sock.send(new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), port));
sock.close();
} catch (Exception e) {
System.out.println("Err:" + e);
}
}
private static String getCfg(String id) {
for(int a=0;a<cfg.length;a++) {
if (cfg[a][0].equalsIgnoreCase(id)) return cfg[a][1];
}
return null;
}
public static boolean createDB() {
if (new File(Service.dbPath + "/jpbxDB/service.properties").exists()) return true;
JFLog.log("Creating database...");
SQL sql = new SQL();
if (!sql.connect(Service.jdbc + ";create=true")) return false;
sql.execute("CREATE TABLE users (userid VARCHAR(16) PRIMARY KEY NOT NULL, passmd5 VARCHAR(32) NOT NULL)");
sql.execute("INSERT INTO users (userid, passmd5) VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3')");
sql.close();
return true;
}
private static Service service;
private static WebConfig config;
public static void main(String args[]) {
serviceStart(args);
}
public static void serviceStart(String args[]) {
Paths.init();
//load SQL database
if (!SQL.initClass(SQL.derbySQL)) {
JFLog.log("Failed to init database");
return;
}
//create SQL database (if needed)
if (!createDB()) {
JFLog.log("Failed to create database");
return;
}
//init log files
JFLog.append(Paths.logs + "jpbx.log", true);
JFLog.log("jPBXlite/" + Service.getVersion() + " starting...");
// Service.test();
service = new Service();
service.init();
config = new WebConfig();
config.start();
}
public static void serviceStop() {
service.uninit();
config.stop();
}
}