iswydt.vala
author Stiletto <blasux@blasux.ru>
Fri, 05 Oct 2012 15:41:19 +0400
changeset 0 e27ed261417d
child 1 76caf6a3f413
permissions -rw-r--r--
Initial commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     1
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     2
class Config : Gee.HashMap<string,string> {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     3
    public Config.from_file(string filename) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     4
        base();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     5
        IOChannel cfg;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     6
        /* try { */
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     7
            cfg = new IOChannel.file(filename,"r");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     8
        /*} catch (FileError e) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     9
            File.new_for_path(filename);*/
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    10
        do {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    11
            string str;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    12
            size_t length, termpos;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    13
            IOStatus stat = cfg.read_line(out str,out length,out termpos);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    14
            if (stat == IOStatus.NORMAL) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    15
                string[] parts = str[0:(long)termpos].split("=",2);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    16
                if (parts.length==2) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    17
                    this[parts[0]] = parts[1];
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    18
                    stdout.printf("LOL: key: %s value: %s\n",parts[0],parts[1]);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    19
                }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    20
            } else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    21
                break;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    22
        } while (true);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    23
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    24
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    25
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    26
}
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    27
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    28
class Account : Object {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    29
    protected Lm.Connection cn;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    30
    protected string jid;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    31
    protected string password;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    32
    protected string resource;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    33
    protected string server;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    34
	protected int port;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    35
    protected bool ssl;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    36
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    37
    public enum State {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    38
        DISCONNECTED,
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    39
        CONNECTING,
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    40
        AUTHENTICATING,
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    41
        CONNECTED
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    42
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    43
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    44
    protected State _state;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    45
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    46
    public State state {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    47
        get { return _state; }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    48
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    49
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    50
    public signal void state_changed(State old_state, State new_state, string description);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    51
    protected void _change_state(State new_state, string description) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    52
        var old_state = this._state;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    53
        if (old_state != new_state) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    54
            this._state = new_state;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    55
            stderr.printf("State changed %s -> %s : %s\n",old_state.to_string(), new_state.to_string(), description);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    56
            state_changed(old_state, new_state, description);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    57
        } else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    58
            stderr.printf("State not changed %s : %s\n",old_state.to_string(), description);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    59
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    60
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    61
    public Account(Config cfg) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    62
        this.jid = cfg["jid"];
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    63
        this.password = cfg["password"];
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    64
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    65
        if (cfg.has_key("server"))
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    66
            this.server = cfg["server"];
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    67
        else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    68
            this.server = cfg["jid"].split("@",2)[1];
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    69
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    70
        if (cfg.has_key("port"))
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    71
            this.port = cfg["port"].to_int();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    72
        else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    73
            this.port = Lm.Connection.DEFAULT_PORT;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    74
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    75
        if (cfg.has_key("ssl"))
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    76
            this.ssl = (cfg["ssl"]=="yes");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    77
        else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    78
            this.ssl = false;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    79
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    80
        if (cfg.has_key("resource"))
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    81
            this.resource = cfg["resource"];
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    82
        else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    83
            this.resource = "iwydt";
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    84
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    85
        cn = new Lm.Connection(this.server);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    86
        cn.set_disconnect_function((connection, reason) => {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    87
            stderr.printf("Disconnected: %s\n",reason.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    88
            _change_state(State.DISCONNECTED,reason.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    89
        }, null);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    90
        //cn.register_message_handler(
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    91
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    92
    public void open() {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    93
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    94
        stderr.printf("Connecting to %s:%d as %s\n",server,port,jid);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    95
        cn.set_port(port);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    96
        cn.set_jid(jid);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    97
        _change_state(State.CONNECTING,"");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    98
        try {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    99
            var result = cn.open((connection, consuc) => {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   100
                stderr.printf("Connection success: %s\n",consuc.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   101
                if (consuc) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   102
                    _change_state(State.AUTHENTICATING,"");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   103
                    stderr.printf("Authing\n");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   104
                    cn.authenticate(jid.split("@",2)[0],password, resource, (connection, authsuc) => {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   105
                        stderr.printf("Auth success: %s\n",authsuc.to_string());
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   106
                        if (authsuc) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   107
                            _change_state(State.CONNECTED,"");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   108
                        } else
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   109
                            cn.close();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   110
                    }, null);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   111
                } else {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   112
                    _change_state(State.DISCONNECTED, "Connection not successful");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   113
                }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   114
            }, null);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   115
            if (!result)
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   116
                _change_state(State.DISCONNECTED, "Open failed");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   117
        } catch (Error e) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   118
            stderr.printf("Error: %s\n", e.message);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   119
            _change_state(State.DISCONNECTED, e.message);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   120
        }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   121
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   122
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   123
}
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   124
    
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   125
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   126
int main(string[] args) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   127
    if (args.length<2) {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   128
        stderr.printf("Usage: %s <config file>\n",args[0]);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   129
        return 1;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   130
    }
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   131
    /*Log.set_handler("LM", (LogLevelFlags)65535, (domain, levels, message) => {
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   132
        stderr.printf("--- %s\n", message);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   133
    });*/
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   134
    log("LM", LogLevelFlags.LEVEL_DEBUG, "HATE HATE");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   135
    var cfg = new Config.from_file(args[1]);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   136
    var loop = new MainLoop();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   137
    var account = new Account(cfg);
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   138
    account.open();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   139
    stdout.printf("Fuck yeah\n");
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   140
    loop.run();
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   141
    return 0;
e27ed261417d Initial commit
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   142
}