author | Stiletto <blasux@blasux.ru> |
Tue, 23 Oct 2012 18:33:49 +0400 | |
changeset 2 | 4e050075fab9 |
parent 1 | 76caf6a3f413 |
child 3 | dd7a02c6d476 |
permissions | -rw-r--r-- |
0 | 1 |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
2 |
class Connection : Object { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
3 |
public Lm.Connection cn; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
4 |
public string jid; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
5 |
public string password; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
6 |
public string resource; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
7 |
public string server; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
8 |
public int port; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
9 |
public bool ssl; |
0 | 10 |
|
11 |
public enum State { |
|
12 |
DISCONNECTED, |
|
13 |
CONNECTING, |
|
14 |
AUTHENTICATING, |
|
15 |
CONNECTED |
|
16 |
} |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
17 |
|
0 | 18 |
protected State _state; |
19 |
||
20 |
public State state { |
|
21 |
get { return _state; } |
|
22 |
} |
|
23 |
||
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
24 |
public Module[] modules; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
25 |
|
0 | 26 |
public signal void state_changed(State old_state, State new_state, string description); |
2
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
27 |
public signal void check_time(); |
0 | 28 |
protected void _change_state(State new_state, string description) { |
29 |
var old_state = this._state; |
|
30 |
if (old_state != new_state) { |
|
31 |
this._state = new_state; |
|
32 |
stderr.printf("State changed %s -> %s : %s\n",old_state.to_string(), new_state.to_string(), description); |
|
33 |
state_changed(old_state, new_state, description); |
|
34 |
} else |
|
35 |
stderr.printf("State not changed %s : %s\n",old_state.to_string(), description); |
|
36 |
} |
|
37 |
||
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
38 |
public Connection(Config cfg) { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
39 |
this.modules = new Module[10]; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
40 |
this.jid = cfg["server","jid"]; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
41 |
this.password = cfg["server","password"]; |
0 | 42 |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
43 |
this.server = cfg.get_default("server", "server", this.jid.split("@",2)[1]); |
0 | 44 |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
45 |
if (cfg.has_key("server", "port")) |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
46 |
this.port = cfg["server", "port"].to_int(); |
0 | 47 |
else |
48 |
this.port = Lm.Connection.DEFAULT_PORT; |
|
49 |
||
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
50 |
this.ssl = (cfg.get_default("server", "ssl", "yes")=="yes"); |
0 | 51 |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
52 |
this.resource = cfg.get_default("server", "resource", "iswydt"); |
0 | 53 |
|
54 |
cn = new Lm.Connection(this.server); |
|
55 |
cn.set_disconnect_function((connection, reason) => { |
|
56 |
stderr.printf("Disconnected: %s\n",reason.to_string()); |
|
57 |
_change_state(State.DISCONNECTED,reason.to_string()); |
|
58 |
}, null); |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
59 |
var msg_handler = new Lm.MessageHandler((handler, connection, message) => { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
60 |
stdout.printf("Got msg\n"); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
61 |
var node = message.get_node(); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
62 |
var body = node.find_child("body"); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
63 |
if (body!=null) { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
64 |
stdout.printf("MSG %s to %s: %s\n", node.get_attribute("from"), node.get_attribute("to"), body.get_value()); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
65 |
} |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
66 |
return Lm.HandlerResult.ALLOW_MORE_HANDLERS; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
67 |
}, null); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
68 |
cn.register_message_handler(msg_handler, Lm.MessageType.MESSAGE, Lm.HandlerPriority.NORMAL); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
69 |
/*var muc_handler = new Lm.MessageHandler((handler, connection, message) => { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
70 |
var node = message.node; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
71 |
var from = node.get_attribute("from"); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
72 |
if (from != null) { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
73 |
var froms = from.split("/",2); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
74 |
//stdout.printf("From: %s %s\n",node.to_string(),message.get_type().to_string()); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
75 |
if (rooms.has_key(froms[0])) { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
76 |
return rooms[froms[0]].muc_handler(handler, connection, message); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
77 |
} |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
78 |
} |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
79 |
return Lm.HandlerResult.ALLOW_MORE_HANDLERS; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
80 |
}, null); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
81 |
cn.register_message_handler(muc_handler, Lm.MessageType.MESSAGE, Lm.HandlerPriority.NORMAL); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
82 |
cn.register_message_handler(muc_handler, Lm.MessageType.PRESENCE, Lm.HandlerPriority.NORMAL); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
83 |
cn.register_message_handler(muc_handler, Lm.MessageType.IQ, Lm.HandlerPriority.NORMAL);*/ |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
84 |
var module = new ModuleMuc(cfg, this); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
85 |
modules = {module}; |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
86 |
state_changed.connect( (olds, news, desc) => { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
87 |
if (news == Connection.State.CONNECTED) { |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
88 |
cn.send_raw("<message to='stiletto@stiletto.name'><body>ТХБ</body></message>"); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
89 |
/*var room = new Conference(this, "говнохост@conference.blasux.ru", "Ζαλυπα"); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
90 |
room.join("Oh hai"); |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
91 |
this.rooms[room.jid] = room;*/ |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
92 |
} |
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
93 |
}); |
2
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
94 |
check_time.connect( () => { |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
95 |
if (_state == State.DISCONNECTED) |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
96 |
open(); |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
97 |
}); |
0 | 98 |
} |
99 |
public void open() { |
|
100 |
||
101 |
stderr.printf("Connecting to %s:%d as %s\n",server,port,jid); |
|
102 |
cn.set_port(port); |
|
103 |
cn.set_jid(jid); |
|
104 |
_change_state(State.CONNECTING,""); |
|
105 |
try { |
|
106 |
var result = cn.open((connection, consuc) => { |
|
107 |
stderr.printf("Connection success: %s\n",consuc.to_string()); |
|
108 |
if (consuc) { |
|
109 |
_change_state(State.AUTHENTICATING,""); |
|
110 |
stderr.printf("Authing\n"); |
|
111 |
cn.authenticate(jid.split("@",2)[0],password, resource, (connection, authsuc) => { |
|
112 |
stderr.printf("Auth success: %s\n",authsuc.to_string()); |
|
113 |
if (authsuc) { |
|
114 |
_change_state(State.CONNECTED,""); |
|
115 |
} else |
|
116 |
cn.close(); |
|
117 |
}, null); |
|
118 |
} else { |
|
119 |
_change_state(State.DISCONNECTED, "Connection not successful"); |
|
120 |
} |
|
121 |
}, null); |
|
122 |
if (!result) |
|
123 |
_change_state(State.DISCONNECTED, "Open failed"); |
|
124 |
} catch (Error e) { |
|
125 |
stderr.printf("Error: %s\n", e.message); |
|
126 |
_change_state(State.DISCONNECTED, e.message); |
|
127 |
} |
|
128 |
} |
|
129 |
||
130 |
} |
|
131 |
|
|
132 |
||
133 |
int main(string[] args) { |
|
134 |
if (args.length<2) { |
|
135 |
stderr.printf("Usage: %s <config file>\n",args[0]); |
|
136 |
return 1; |
|
137 |
} |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
138 |
Log.set_handler("Muc", (LogLevelFlags)65535, (domain, levels, message) => { |
0 | 139 |
stderr.printf("--- %s\n", message); |
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
140 |
}); |
0 | 141 |
log("LM", LogLevelFlags.LEVEL_DEBUG, "HATE HATE"); |
142 |
var cfg = new Config.from_file(args[1]); |
|
143 |
var loop = new MainLoop(); |
|
1
76caf6a3f413
Somehow compiles and even joins a conference
Stiletto <blasux@blasux.ru>
parents:
0
diff
changeset
|
144 |
var account = new Connection(cfg); |
2
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
145 |
//account.open(); |
0 | 146 |
stdout.printf("Fuck yeah\n"); |
2
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
147 |
var checktimer = new TimeoutSource(2000); |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
148 |
checktimer.set_callback(() => { |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
149 |
account.check_time(); |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
150 |
//stderr.printf("TimeoutSource OLOLO\n"); |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
151 |
return true; |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
152 |
}); |
4e050075fab9
Level of stubbornness skyrocketed
Stiletto <blasux@blasux.ru>
parents:
1
diff
changeset
|
153 |
checktimer.attach(loop.get_context()); |
0 | 154 |
loop.run(); |
155 |
return 0; |
|
156 |
} |