author | hallski <hallski> |
Sun, 10 Sep 2006 22:09:45 +0000 | |
changeset 175 | 5e665ffe3e9c |
parent 84 | 7ae7b690aa89 |
permissions | -rw-r--r-- |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
1 |
using System; |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
2 |
using System.Runtime.InteropServices; |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
3 |
using System.Collections; |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
4 |
|
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
5 |
namespace Loudmouth { |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
6 |
public delegate void ElementHandler (Element element); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
7 |
public delegate void MessageHandler (Message message); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
8 |
public delegate void PresenceHandler (Presence presence); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
9 |
public delegate void IQHandler (IQ iq); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
10 |
public delegate void ResultFunction (bool success); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
11 |
public delegate void DisconnectionFunction (); |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
12 |
|
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
13 |
public class Connection { |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
14 |
private IntPtr _obj; |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
15 |
|
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
16 |
private Hashtable _asyncHandlers; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
17 |
private ResultFunction result_func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
18 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
19 |
public string Server { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
20 |
get { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
21 |
return lm_connection_get_server(this._obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
22 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
23 |
set { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
24 |
lm_connection_set_server(this._obj, value); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
25 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
26 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
27 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
28 |
public uint Port { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
29 |
get { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
30 |
return lm_connection_get_port(this._obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
31 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
32 |
set { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
33 |
lm_connection_set_port(this._obj, value); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
34 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
35 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
36 |
|
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
37 |
public bool IsOpen { |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
38 |
get { |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
39 |
return lm_connection_is_open (this._obj); |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
40 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
41 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
42 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
43 |
public bool IsAuthenticated { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
44 |
get { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
45 |
return lm_connection_is_authenticated(this._obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
46 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
47 |
} |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
48 |
|
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
49 |
private delegate int _ElementHandler (IntPtr h, IntPtr con, IntPtr elementObj, IntPtr ignored); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
50 |
private delegate void _ResultFunction (IntPtr con, bool success, IntPtr ptr); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
51 |
private delegate void _DisconnectFunction (IntPtr con, int reason, IntPtr ignored); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
52 |
|
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
53 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
54 |
private static extern int lm_message_get_type (IntPtr obj); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
55 |
|
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
56 |
private int HandleElement (IntPtr h, IntPtr con, IntPtr elementObj, IntPtr ignored) |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
57 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
58 |
switch (lm_message_get_type (elementObj)) { |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
59 |
case (int) Element.ElementType.MESSAGE: |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
60 |
EmitIncomingMessage (new Message (elementObj)); |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
61 |
break; |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
62 |
case (int) Element.ElementType.PRESENCE: |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
63 |
EmitIncomingPresence (new Presence (elementObj)); |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
64 |
break; |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
65 |
case (int) Element.ElementType.IQ: |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
66 |
EmitIncomingIQ (new IQ (elementObj)); |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
67 |
break; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
68 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
69 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
70 |
return 0; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
71 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
72 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
73 |
private int AsyncHandler (IntPtr h, IntPtr con, IntPtr elementObj, IntPtr id) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
74 |
ElementHandler handler = (ElementHandler) _asyncHandlers[id]; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
75 |
if (handler != null) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
76 |
handler(Element.CreateElement(elementObj)); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
77 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
78 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
79 |
return 0; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
80 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
81 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
82 |
private void _HandleResult (IntPtr con, bool success, IntPtr ptr) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
83 |
ResultFunction func = this.result_func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
84 |
this.result_func = null; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
85 |
func(success); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
86 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
87 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
88 |
public event MessageHandler IncomingMessage; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
89 |
public event PresenceHandler IncomingPresence; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
90 |
public event IQHandler IncomingIQ; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
91 |
public event DisconnectionFunction Disconnected; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
92 |
|
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
93 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
94 |
private static extern IntPtr lm_connection_new (string name); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
95 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
96 |
private static extern bool lm_connection_open (IntPtr obj, _ResultFunction func, IntPtr ptr, IntPtr ignored2, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
97 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
98 |
private static extern bool lm_connection_open_and_block (IntPtr obj, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
99 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
100 |
private static extern bool lm_connection_close (IntPtr obj, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
101 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
102 |
private static extern bool lm_connection_authenticate (IntPtr obj, string username, string password, string resource, _ResultFunction func, IntPtr ignored, IntPtr ignored2, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
103 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
104 |
private static extern bool lm_connection_authenticate_and_block (IntPtr obj, string username, string password, string resource, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
105 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
106 |
private static extern bool lm_connection_is_open (IntPtr obj); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
107 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
108 |
private static extern bool lm_connection_is_authenticated (IntPtr obj); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
109 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
110 |
private static extern void lm_connection_set_server (IntPtr obj, string server); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
111 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
112 |
private static extern string lm_connection_get_server (IntPtr obj); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
113 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
114 |
private static extern void lm_connection_set_port (IntPtr obj, uint port); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
115 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
116 |
private static extern uint lm_connection_get_port (IntPtr obj); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
117 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
118 |
private static extern void lm_connection_set_ssl (IntPtr obj, IntPtr ssl); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
119 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
120 |
private static extern IntPtr lm_connection_get_ssl (IntPtr obj); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
121 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
122 |
private static extern void lm_connection_set_proxy (IntPtr obj, IntPtr proxy); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
123 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
124 |
private static extern IntPtr lm_connection_get_proxy (IntPtr obj); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
125 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
126 |
private static extern bool lm_connection_send (IntPtr obj, IntPtr message, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
127 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
128 |
private static extern bool lm_connection_send_with_reply (IntPtr obj, IntPtr message, IntPtr handler, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
129 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
130 |
private static extern IntPtr lm_connection_send_with_reply_and_block (IntPtr obj, IntPtr message, IntPtr errPtr); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
131 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
132 |
private static extern void lm_connection_register_message_handler (IntPtr obj, IntPtr handler, int type, int priority); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
133 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
134 |
private static extern void lm_connection_set_disconnect_function (IntPtr obj, _DisconnectFunction func, IntPtr u, IntPtr n); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
135 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
136 |
private static extern bool lm_connection_send_raw (IntPtr obj, string msg, IntPtr errPtr); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
137 |
[DllImport ("libloudmouth-1.so")] |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
138 |
private static extern void lm_connection_unref (IntPtr obj); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
139 |
[DllImport ("libloudmouth-1.so")] |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
140 |
private static extern IntPtr lm_message_handler_new (_ElementHandler handler, IntPtr u, IntPtr n); |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
141 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
142 |
private void SetupConnection (string server, uint port) |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
143 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
144 |
this._obj = lm_connection_new (server); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
145 |
this.Port = port; |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
146 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
147 |
this._asyncHandlers = new Hashtable (); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
148 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
149 |
IntPtr h = lm_message_handler_new (new _ElementHandler (this.HandleElement), IntPtr.Zero, IntPtr.Zero); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
150 |
lm_connection_register_message_handler (this._obj, h, (int)Element.ElementType.MESSAGE, 1); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
151 |
h = lm_message_handler_new (new _ElementHandler(this.HandleElement), IntPtr.Zero, IntPtr.Zero); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
152 |
lm_connection_register_message_handler (this._obj, h, (int)Element.ElementType.PRESENCE, 1); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
153 |
h = lm_message_handler_new (new _ElementHandler (this.HandleElement), IntPtr.Zero, IntPtr.Zero); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
154 |
lm_connection_register_message_handler (this._obj, h, (int)Element.ElementType.IQ, 1); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
155 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
156 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
157 |
public Connection (string server) |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
158 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
159 |
SetupConnection (server, 5222); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
160 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
161 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
162 |
public Connection (string server, uint port) |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
163 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
164 |
SetupConnection (server, port); |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
165 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
166 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
167 |
public void Open (ResultFunction func) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
168 |
if (this.result_func != null) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
169 |
// Throw exception? |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
170 |
Console.WriteLine("Connection::Open: this.result_func != null"); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
171 |
return; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
172 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
173 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
174 |
this.result_func = func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
175 |
lm_connection_open(this._obj, new _ResultFunction(this._HandleResult), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
176 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
177 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
178 |
public bool OpenAndBlock () { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
179 |
return lm_connection_open_and_block(this._obj, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
180 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
181 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
182 |
public void Close () { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
183 |
lm_connection_close (this._obj, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
184 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
185 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
186 |
public void Authenticate (Account account, ResultFunction func) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
187 |
if (this.result_func != null) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
188 |
// Throw exception? |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
189 |
Console.WriteLine("Connection::Authenticate: this.result_func != null"); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
190 |
return; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
191 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
192 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
193 |
this.result_func = func; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
194 |
lm_connection_authenticate(this._obj, account.username, account.password, account.resource, new _ResultFunction(this._HandleResult), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
195 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
196 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
197 |
public bool AuthenticateAndBlock (Account account) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
198 |
return lm_connection_authenticate_and_block (this._obj, account.username, account.password, account.resource, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
199 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
200 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
201 |
public void Send (Element element) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
202 |
lm_connection_send (this._obj, element.GetObject (), IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
203 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
204 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
205 |
public void SendWithReply (Element element, ElementHandler handler) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
206 |
IntPtr ptr = new IntPtr(); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
207 |
IntPtr chandler; |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
208 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
209 |
chandler = lm_message_handler_new(new _ElementHandler(this.AsyncHandler), ptr, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
210 |
_asyncHandlers.Add(ptr, handler); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
211 |
lm_connection_send_with_reply(_obj, element.GetObject(), chandler, IntPtr.Zero); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
212 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
213 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
214 |
public Element SendWithReplyAndBlock (Element element) { |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
215 |
return Element.CreateElement(lm_connection_send_with_reply_and_block(this._obj, element.GetObject(), IntPtr.Zero)); |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
216 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
217 |
|
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
218 |
public void SendRaw (string raw) { |
84
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
219 |
lm_connection_send_raw (this._obj, raw, IntPtr.Zero); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
220 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
221 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
222 |
private void EmitIncomingMessage (Message m) |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
223 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
224 |
if (IncomingMessage != null) { |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
225 |
IncomingMessage (m); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
226 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
227 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
228 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
229 |
private void EmitIncomingPresence (Presence p) |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
230 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
231 |
if (IncomingPresence != null) { |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
232 |
IncomingPresence (p); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
233 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
234 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
235 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
236 |
private void EmitIncomingIQ (IQ iq) |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
237 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
238 |
if (IncomingIQ != null) { |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
239 |
IncomingIQ (iq); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
240 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
241 |
} |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
242 |
|
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
243 |
private void EmitDisconnected () |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
244 |
{ |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
245 |
if (Disconnected != null) { |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
246 |
Disconnected (); |
7ae7b690aa89
2004-05-28 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
48
diff
changeset
|
247 |
} |
48
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
248 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
249 |
} |
d913b0d5c7b6
2003-10-13 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff
changeset
|
250 |
} |